PID作为一种线性控制器在各领域得到广泛使用,具体原理就不细说了,本人其实也是一知半解就不班门弄斧了。
以下仅就这两天对于PID实现电机调速的一些心得跟大家分享一下。
PID主要的实现方式有两种 ,位置式和增量式,公式就不列了,其实核心思想个人认为就是时刻检测误差,再乘一定系数,再用此值修正。
位置式PID计算出的就是控制量u(k),电机控制中此值就是PWM的占空比。
增量式PID计算出的值是△u(k),还需要加上u(k-1)才是控制量 即 u(k)=△u(k)+u(k-1)。
用C语言实现单片机对电机的PID调速,需要注意采样周期,我定为10.25ms测试可用,不知这个时间有没有什么讲究。
使用位置式PID时,我创建的是float工程,最终无论如何也没有调试成功,难道是16为单片机(MC9S12EP100)对浮点运算有要求?后来换了增量式PID,采用整形的工程,先左移8位的计算完右移动的方式,避免系数太小除成 0,最终实现PID调速。
增量式整形工程的PID也有很多细节需要注意。最重要的就是注意最后计算完成右移语句的位置,必须是在完成所有计算之后再右移,否则当偏差不够大时还是会除成0,导致调不