完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
调了一天的横滚角内环P I和D还没开始调 给大了就一边电机转 给小点倒是能保证四个电机都转 但是总调不出等幅振荡 而且总是一边两个电机速度比另两边大 导致飞机一直绕着轴转
这是我的PID程序 电机1234的顺序是顺时针来的 float PID_Postion_Cal(float target,float measure,float p,float i,float d) { float out; error=target-measure; Integ+=error; if(Integ>300) Integ=300; if(Integ<-300) Integ=-300; Deriv=error-last_error; out=p*error+i*Integ+d*Deriv; last_error=error; return out; } void PID(struct _out_angle *angle,struct _gyro *gyro_filter) {//外环 Pitch_shell_out=PID_Postion_Cal(0,angle->pitch,Pitch_shell_kp,Pitch_shell_ki,Pitch_shell_kd); Roll_shell_out=PID_Postion_Cal(0,angle->roll,Roll_shell_kp,Roll_shell_ki,Pitch_shell_kd); Yaw_shell_out=PID_Postion_Cal(0,angle->yaw,Yaw_shell_kp,Roll_shell_ki,Roll_shell_kd); //内环 Pitch=PID_Postion_Cal(Pitch_shell_out,gyro_filter->y,Pitch_core_kp,Pitch_core_ki,Pitch_core_kd); Roll=PID_Postion_Cal(Roll_shell_out,gyro_filter->x,Roll_core_kp,Roll_core_ki,Roll_core_kd); Yaw=PID_Postion_Cal(Yaw_shell_out,gyro_filter->z,Yaw_core_kp,Yaw_core_ki,Yaw_core_kd); thro1=(u16)(temp+Pitch-Roll-Yaw); thro2=(u16)(temp+Pitch-Roll+Yaw); thro3=(u16)(temp-Pitch+Roll-Yaw); thro4=(u16)(temp-Pitch+Roll+Yaw); if(thro1>2000)thro1=2000; if(thro2>2000)thro2=2000; if(thro3>2000)thro3=2000; if(thro4>2000)thro4=2000; Motor_Out(thro1,thro2,thro3,thro4); Send_MotoPWM(thro1-1000,thro2-1000,thro3-1000,thro4-1000,Roll_shell_out+200,Roll+500,Yaw,0); } 网上的文章找了很多 都是找等幅震荡的点 但是这个点我一直找不到 P给小了PID控制效果反而没了 跪求高人指点迷津 |
|
相关推荐
1个回答
|
|
|
|
只有小组成员才能发言,加入小组>>
请问下图大疆lightbridge2遥控器主板电源芯片型号是什么?
4465 浏览 1 评论
使用常见的二极管、三极管和mos做MCU和模组的电平转换电路,但是模组和MCU无法正常通信,为什么?
341浏览 2评论
为了提高USIM卡电路的可靠性和稳定性,在电路设计中须注意的点有哪些?
341浏览 2评论
367浏览 2评论
360浏览 2评论
405浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-20 03:21 , Processed in 1.297553 second(s), Total 78, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号