单级PID算法总结及代码程序应用

从6月份开始因为电赛开始接触PID算法,到现在也算是有了一些经验和收获,马上要电赛了,对单级PID做一个总结。再就是总结一下PID的调节的经验。
我就不说高大上的定义,谈谈我对PID算法的理解吧。PID顾名思义,由P算法,I算法,D算法构成,即比例算法,积分算法,微分算法。
我先谈P算法即比例算法,如果我们不知道PID,我们实现一个系统通过执行部件使控制对象达到一个目标值,我们会想如果没有到达目标值的时候,执行部件应该正作用,到达目标值应该不作用,超过目标值时执行部件应该反作用。其实我们最初的想法就是PID算法的中的P算法(是不是很神奇),因此引出P算法的公式:
Ek=Sv-X
Pout=Kp*Ek

Sv是目标值,X是当前值(需传感器采集),Ek是当前偏差值,Kp是P算法的系数,Pout是P算法的输出。
但是一个系统只有P算法就足够了吗,现实中大部分系统是不够的,因为系统存在惯性,简单说就是你想让它停的时候,它因为惯性并不会停下来,就会出现控制对象在目标值附近震荡,始终无法稳定。
这个时候就要请出我们的D算法了,它的作用就是来消除这种震荡的,直接公式
DEk=Ek-Ek_1
Dout=Kd
DEk
*
Ek_1是上次采样的偏差值,DEk两次偏差之差,Kd是D算法的系数,Dout是D算法的输出。它的作用就是当历代Ek有增大的趋势,就增大输出,反之则减小输出。
还有就是我们有采样周期(计算周期),PWM周期。简单说采样周期就是我们多久传感器采集一次数据,PID算法计算一次,并改变一次PWM占空比的时间。PWM周期不用讲,我们大部分的执行部件的作用大部分是通过改变PWM占空比来实现。
采样周期越小越好,越小我们的作用曲线尽可能平滑,但是绝对不能小于PWM周期,最好是PWM周期的两倍,但同时不要小于我们传感器的最小采样时间,如果小于可能会两次采样数据相同,白白的增加计算负担。
PWM周期则不能小到执行部件(各种电机,舵机等等)识别不了。那就无法起作用,比如说舵机限制死了你的PWM周期只能是20ms。
确定了采样周期,pwm周期,因为 一些系统通过P和D的配合就可以达到平衡,所以我们只需要改变Kp和Kd的大小就可以调节系统达到平衡。贴一下口诀(虽然我也不大懂)
参数整定找最佳,从小到大顺序查, 先是比例后积分,最后再把微分加, 曲线振荡很频繁,比例度盘要放大, 曲线漂浮绕大湾,比例度盘往小扳, 曲线偏离回复慢,积分时间往下降, 曲线波动周期长,积分时间再加长, 曲线振荡频率快,先把微分降下来, 动差大来波动慢,微分时间应加长, 理想曲线两个波,前高后低4比1。
我理解了好久也没理解,不过经过我不断的尝试,有了一些经验跟大家分享一下(_)
首先Kd为0,只调节Kp,让控制对象在目标值附近震荡,且上下震荡负担基本差不多,加入Kd,直接取Kp的20倍左右( 完全是经验没有根据),看是否还是在目标值上下震荡,如果达不到目标值的震荡,就减小Kd,如果和原来一样只是振幅变小了,那就适当增加Kd。同时适当调节KP大小。直到达到稳态
不过只是参考,PID的调节我觉得还是看经验,多调多思考多总结,看缘分。哈哈哈哈哈
最后来说I算法,当你PD调节到稳态,但你发现并不是稳在目标值上,我们就需要I算法了,它的作用就是来消除静态误差滴,上公式
SEk+=Ek
Iout=Ki*SEk

你们应该知道各项都代表什么意思,直接说它的原理,它考虑的是它的历史上所有偏差。这个算法很猛,要慎用,不要一开始就让它起作用,原则就是让系统通过PD稳定之后在让其起作用(也就是要有一个作用范围),否则会出现过冲。还有就是因为它很猛,所以Ki要小,我基本上就让Ki在1左右浮动。
最后就是总公式
OUT=Pout+Iout+Dout
OUT最小0,最大不要超过PWM满值。PID算法调节还是多看多想多调,慢慢来总会有收获滴,加油!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章