版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
四轴飞行器PID调优测试代码(可直接嵌入主程序)一、测试模式定义(新增头文件pid_debug.h)c运行#ifndef__PID_DEBUG_H#define__PID_DEBUG_H#include"common.h"#include"pid.h"//调试模式枚举typedefenum{DEBUG_OFF,//正常飞行模式DEBUG_ROLL_RATE,//Roll速率PID调试DEBUG_PITCH_RATE,//Pitch速率PID调试DEBUG_YAW_RATE,//Yaw速率PID调试DEBUG_ROLL_ANGLE,//Roll姿态PID调试DEBUG_PITCH_ANGLE,//Pitch姿态PID调试DEBUG_YAW_ANGLE//Yaw姿态PID调试}Debug_Mode;externDebug_Modecurrent_mode;externfloattest_setpoint;//调试目标值//函数声明voidPID_Debug_Init(void);voidPID_Debug_Update(void);voidPID_Debug_Set_Mode(Debug_Modemode);voidPID_Debug_Set_Setpoint(floatsetpoint);#endif二、调试模块实现(pid_debug.c)c运行#include"pid_debug.h"#include"attitude.h"#include"motor.h"#include"remote.h"Debug_Modecurrent_mode=DEBUG_OFF;floattest_setpoint=0.0f;uint16_tfixed_throttle=1200;//固定油门值(调试时使用)voidPID_Debug_Init(void){//初始化串口用于调试输出USART_InitTypeDefUSART_InitStruct;GPIO_InitTypeDefGPIO_InitStruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);GPIO_InitStruct.GPIO_Pin=GPIO_Pin_9|GPIO_Pin_10;GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF;GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_UP;GPIO_Init(GPIOA,&GPIO_InitStruct);GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);USART_InitStruct.USART_BaudRate=115200;USART_InitStruct.USART_WordLength=USART_WordLength_8b;USART_InitStruct.USART_StopBits=USART_StopBits_1;USART_InitStruct.USART_Parity=USART_Parity_No;USART_InitStruct.USART_HardwareFlowControl=USART_HardwareFlowControl_None;USART_InitStruct.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;USART_Init(USART1,&USART_InitStruct);USART_Cmd(USART1,ENABLE);}voidPID_Debug_Update(void){staticuint32_tcnt=0;cnt++;if(cnt%200==0)//500ms输出一次调试信息{switch(current_mode){caseDEBUG_ROLL_RATE:USART_SendString("RollRate:Set=");USART_SendFloat(test_setpoint);USART_SendString("Actual=");USART_SendFloat(gyro_x_filt);USART_SendString("\r\n");break;caseDEBUG_PITCH_RATE:USART_SendString("PitchRate:Set=");USART_SendFloat(test_setpoint);USART_SendFloat(gyro_y_filt);USART_SendString("Actual=");USART_SendString("\r\n");break;caseDEBUG_YAW_RATE:USART_SendString("YawRate:Set=");USART_SendFloat(test_setpoint);USART_SendString("Actual=");USART_SendFloat(gyro_z_filt);USART_SendString("\r\n");break;caseDEBUG_ROLL_ANGLE:USART_SendString("RollAngle:Set=");USART_SendFloat(test_setpoint);USART_SendString("Actual=");USART_SendFloat(roll);USART_SendString("\r\n");break;caseDEBUG_PITCH_ANGLE:USART_SendString("PitchAngle:Set=");USART_SendFloat(test_setpoint);USART_SendString("Actual=");USART_SendFloat(pitch);USART_SendString("\r\n");break;caseDEBUG_YAW_ANGLE:USART_SendString("YawAngle:Set=");USART_SendFloat(test_setpoint);USART_SendString("Actual=");USART_SendFloat(yaw);USART_SendString("\r\n");break;default:break;}}//调试模式下的PID计算floatroll_out=0,pitch_out=0,yaw_out=0;switch(current_mode){caseDEBUG_ROLL_RATE:roll_out=PID_Calculate(&pid_roll_rate,test_setpoint,gyro_x_filt);break;caseDEBUG_PITCH_RATE:pitch_out=PID_Calculate(&pid_pitch_rate,test_setpoint,gyro_y_filt);break;caseDEBUG_YAW_RATE:yaw_out=PID_Calculate(&pid_yaw_rate,test_setpoint,gyro_z_filt);break;caseDEBUG_ROLL_ANGLE:roll_out=PID_Calculate(&pid_roll,test_setpoint,roll);break;caseDEBUG_PITCH_ANGLE:pitch_out=PID_Calculate(&pid_pitch,test_setpoint,pitch);break;caseDEBUG_YAW_ANGLE:yaw_out=PID_Calculate(&pid_yaw,test_setpoint,yaw);break;caseDEBUG_OFF://正常飞行模式,使用遥控器指令return;}//电机混合输出(固定油门)motor1=fixed_throttle+pitch_out-roll_out+yaw_out;motor2=fixed_throttle-pitch_out-roll_out-yaw_out;motor3=fixed_throttle-pitch_out+roll_out+yaw_out;motor4=fixed_throttle+pitch_out+roll_out-yaw_out;//电机输出限幅motor1=motor1<MIN_THROTTLE?MIN_THROTTLE:(motor1>MAX_THROTTLE?MAX_THROTTLE:motor1);motor2=motor2<MIN_THROTTLE?MIN_THROTTLE:(motor2>MAX_THROTTLE?MAX_THROTTLE:motor2);motor3=motor3<MIN_THROTTLE?MIN_THROTTLE:(motor3>MAX_THROTTLE?MAX_THROTTLE:motor3);motor4=motor4<MIN_THROTTLE?MIN_THROTTLE:(motor4>MAX_THROTTLE?MAX_THROTTLE:motor4);}voidPID_Debug_Set_Mode(Debug_Modemode){current_mode=mode;//切换模式时重置PID积分项pid_egral=0;pid_egral=0;pid_egral=0;pid_roll_egral=0;pid_pitch_egral=0;pid_yaw_egral=0;}voidPID_Debug_Set_Setpoint(floatsetpoint){test_setpoint=setpoint;}//串口发送字符串voidUSART_SendString(char*str){while(*str!='\0'){while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);USART_SendData(USART1,*str);str++;}}//串口发送浮点数voidUSART_SendFloat(floatnum){charbuf[20];sprintf(buf,"%.2f",num);USART_SendString(buf);}三、主程序集成(修改main.c)c运行#include"pid_debug.h"intmain(void){System_Init();Delay_ms(100);//初始化调试模块PID_Debug_Init();MPU6050_Init();NRF24L01_Init();PID_Init();Motor_
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 4.3 海-气相互作用(课中)-高中地理人教版(2019)选择性必修1课前课中课后同步试题
- 2026年焦作市山阳区政务服务中心(窗口人员)招聘笔试模拟试题及答案详解
- 2026年呼和浩特市新城区工会人员招聘笔试模拟试题及答案详解
- 2026年乌鲁木齐市水磨沟区医疗系统事业编人员招聘笔试备考试题及答案详解
- 个人述职报告转正述职报告(3篇)
- 备用煤矿职工思想调研报告第二季度(3篇)
- 电力消防自查报告(3篇)
- 2026年厦门市同安区工会人员招聘考试备考试题及答案详解
- 2026年甘肃省平凉市医疗系统事业编人员招聘笔试参考题库及答案详解
- 2026年平凉市崆峒区工会人员招聘考试参考试题及答案详解
- 2026年心理健康全科专任小学教师招聘考试笔试试题(含答案)
- 2026年新疆第三师图木舒克市高校毕业生“三支一扶”计划招募(347人)笔试参考试题及答案详解
- 2026年三支一扶考试综合基础知识考试卷及答案(六)
- 2026年秋新教材外研版九年级上册英语Unit 1-8课文+翻译
- 2026-2030中国减肥市场发展动向分析与未来营销创新策略研究报告
- 高标准农田建设项目监理服务方案投标文件(技术方案)
- 新生儿灌肠操作规范
- 2026年防疫员技师实操题库及评分细则
- 医院供氧中心工作制度
- 【低空经济】低空政务航空平台设计方案
- GB/T 46585-2025建筑用绝热制品试件线性尺寸的测量
评论
0/150
提交评论