×

使用16位单片机C语言实现PID调速的一些心得体会

消耗积分:1 | 格式:pdf | 大小:0.06 MB | 2019-04-23

申根换

分享资料个

  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,导致调不到目标转速,总差一点。一开始我还认为是转速测的不准导致的,后来用平均转速却根本无法计算。这里再多提一句,平均转速对PID计算的精度貌似是没有用的,我这里用滚动计算的方式计算10个齿的平均转速。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !