欢迎来到天天文库
浏览记录
ID:48321697
大小:3.03 MB
页数:9页
时间:2020-01-10
《四轴PID调试心得》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、本人曾在大二,大三参加过第六,第七届飞思卡尔智能车比赛,之后在考研过后在飞思卡尔智能车为我打下的良好基础下开始制作四轴飞行器。在年中到现在陆续调试了两架四轴,一架十字,一架X。其中四轴的平衡是很重要的一环,其中涉及到的PID整定,因为听闻今年摄像头也要站起来了,个人认为PID整定过程都有可以互相借鉴之处,顾在此一贴,也顺便为我的ARM-ST校园比赛求支持。PID调试心得本人不是自动化出身,也没有受过专业训练,都是自己摸索,在这里浅述一下自己的PID参数整定心得。所言之物皆由实践及自己的理解得出,如有不当之处还
2、请指正。首先例举第一个例子,我调的第一台四轴飞行器,十字型四轴飞行器,讲下配置:网上一百多的650机架,好赢20A电调,新西达22121000kV,1045的桨,2200mah电池。采用位置式PID控制,位置式PID公式如下PID的基本意义我在次就不作阐述了,我只讲我的设计,我以姿态角作为被控制对象,所以e(k)=期望-测量=给定值-测量姿态角对于微分项D,我做了一点改变,标准PID的微分项D=kd*(e(k)-e(k-1)),我在实践过程中因为角度的微分就是角速度,而陀螺仪可以直接测出角速度,所以我没有将微
3、分项作为偏差的差而是直接用D=kd*Gyro实现代码如下floatpidUpdate(pidsuite*pid,constfloatmeasured,floatexpect,floatgyro){floatoutput;staticfloatlastoutput=0;pid->desired=expect;//获取期望角度pid->error=pid->desired-measured;//偏差:期望-测量值pid->integ+=pid->error*IMU_UPDATE_DT;//偏差积分if(pid->
4、integ>pid->iLimit)//作积分限制{pid->integ=pid->iLimit;}elseif(pid->integ<-pid->iLimit){pid->integ=-pid->iLimit;}//pid->deriv=(pid->error-pid->prevError)/IMU_UPDATE_DT;//微分应该可用陀螺仪角速度代替pid->deriv=-gyro;if(fabs(pid->error)>Piddeadband)//pid死区{pid->outP=pid->kp*pid-
5、>error;//方便独立观察pid->outI=pid->ki*pid->integ;pid->outD=pid->kd*pid->deriv;output=(pid->kp*pid->error)+(pid->ki*pid->integ)+(pid->kd*pid->deriv);}else{output=lastoutput;}pid->prevError=pid->error;//更新前一次偏差lastoutput=output;returnoutput;}我这么做的原因是因为,如果使用传统的D的形式
6、,在我快速打舵时会产生输入的设定值变化频繁且幅度较大,四轴飞行器会迅速回到新的期望点,说白了就是非常灵活,四轴回复很猛,也许造成系统的振荡,对PID参数要求较高。如果用角速度代替的话,那怕你打舵非常快,四轴会较平稳的回到新位置,运动较柔和。对于我这种操作菜鸟来说无疑后面一种会更合适,所以我选择了D=kd*Gyro的方式。PID控制器我大概就是这么实现的,下面讲讲我在调试过程中具体遇到的问题。首先我将四轴固定在单轴平衡平台上,让飞行器完成单轴平衡,主要观察姿态角的(1)稳定性,能否平衡在期望角度;(2)响应性,
7、当操纵命令改变时,四轴能否即时的响应期望的变化;(3)操纵性,由操纵员感受四轴的姿态是否已与操纵,会不会产生响应过冲。我先调一个轴的平衡再调另外一个轴,最后调YAW轴。A:开始只调P,将I,D置0。由于不知道PID的大致范围我就随便给了一组值:P=1,I=0,D=0观察现象。一开电机四轴就开始剧烈左右摇摆,很明显P给大了。然后P从小了往上加。从P=0.1开始试。调试的时候我就发现了一个现象就是我的四轴往一边歪,离平衡的0度差了那么一个角度A,P=0.1时A较大,除非油门推到很大否则四周根本起不来,这是P说明给
8、小了,我再将P=0.2这时四轴状况无明显改善。于是我直接将P加大一点P=0.8,P=0.8时已经可以看出在等幅震荡了,但是不是在0度的平衡位置,也是偏离的一个角度B,此时B较小了。之后我再加大P到1四轴震荡又变大了,但是到震荡中心到零度的静差还是存在。由于此时I=0,所以我决定不管这个静差,先把P的临界震荡点找到。P=0.8时可以观察到比较明显的等幅震荡了,P=0.2时四轴又嫌的无力,所以P应该在0
此文档下载收益归作者所有