打印
[其他产品]

使用PID对电机的控制分享

[复制链接]
544|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
meiyaolei|  楼主 | 2025-5-26 14:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用MCU作实时控制时,用定时器结合PID算法来控制电机工作,要想稳住不抖,确实得下一番功夫,相对来说还是需要有一定经验的。下面我就结合自己的经验,详细说说我是怎么做的,也顺便吐槽吐槽那些让我调到忘记怎么写的时刻。

硬件层面,首先,硬件层面得打好基础,要把电路做的稳定才行。当然拉对MCU的选择很关键,得选那些性能稳定、定时器资源丰富的型号。定时器要配置可以很好的操作配合的很洽当,PWM输出的频率和占空比得根据电机的特性和需求来设定。如果电机需要快速响应,PWM频率就得设高些;如果电机功率大,占空比就得调整得精细些,避免电流过大烧坏电机,和PCB板MOS管。
电机的驱动电路也得设计好,通常会选择那些专门为电机驱动设计的芯片,当然这个要根据产品的需要来选择,国内现在电机驱动芯片非常多,而且像那些芯片的功能远超国外的芯片,它们内置了H桥电路,可以方便地控制电机的正反转和调速。还有电流设计环,电机堵转检测等等一些功能同时,为了保护电机和MCU,我还会在电路中加入过流保护、过压保护和欠压保护等电路。

定时器配置,精准触发定时器是实时控制的核心,我通常会用定时器的PWM输出功能来生成控制电机的信号。定时器的中断服务程序里,我会进行ADC采样,读取电机的反馈信号,电流、速度或者位置,根据PID算法计算出新的PWM占空比,更新到定时器的比较寄存器中,从而控制电机的转速,一般都是通过霍尔传感器来实现采集。
定时器的配置得非常精准,定时器的预分频系数、自动重装载值等,都得根据系统的时钟频率和PWM频率来计算,为了得到更精确的PWM波形,我还会使用定时器的互补输出和死区时间等功能,避免上下管同时导通造成短路。

PID算法,PID算法是实时控制的灵魂,P比例、I积分、D微分三个参数的调整,简直就是个技术活,也是个耐心活,这个要考虑到个人的耐心,也要看个人细心,如果处理的好,那电机工作起来就会很顺,我介绍一下这三个参数是什么作的。
P参数,主要负责系统的响应速度。P参数调大了,电机响应快,但容易超调,甚至振荡;P参数调小了,电机响应慢,但系统稳定。我通常会先调P参数,让电机能够快速响应指令,但又不会超调太多。
I参数,主要负责消除系统的稳态误差。如果电机在稳定运行时还有误差,那就得调I参数。但I参数调大了,系统容易积分饱和,导致超调甚至振荡;I参数调小了,稳态误差又消除不了。我通常会等P参数调得差不多了,再慢慢调I参数。
D参数,主要负责抑制系统的超调和振荡。D参数调大了,系统响应会变慢,但超调会减小;D参数调小了,系统超调会增大。我通常会最后调D参数,根据系统的实际情况来微调。
调参的过程简直就是个煎熬。有时候,为了找到一组合适的参数,我得反复修改代码,反复测试,反复观察电机的运行情况。有时候,调了一整天,电机还是抖得像帕金森一样,那时候的心情,简直比吃了苍蝇还难受。

中断优先级,在实时控制中,中断优先级的管理也很重要,把那些对实时性要求高的任务,ADC采样、PID计算等,放在高优先级的中断中处理。而那些对实时性要求不高的任务,通信、显示等,就放在主循环中处理。
有时候,为了优化系统的实时性,我还会玩一些中断优先级的多样性控制,会把PWM输出的更新中断设为最高优先级,确保PWM波形的稳定性;把ADC采样的中断设为次高优先级,确保能够及时获取电机的反馈信号;而把PID计算的中断设为中等优先级,既保证计算的速度,又避免占用太多的CPU资源。


当然,也不是每次都能调得那么顺利。有一次,我接了一个项目,要求用MCU控制一个电机,实现精确的速度和位置控制。我信心满满地开始调参,结果电机抖很厉害,完全没法用。
我反复检查了硬件电路,确认没有问题;又反复检查了代码,也没有发现明显的错误,后面我才发现,原来是定时器的配置有问题。我把定时器的预分频系数设错了,导致PWM的频率不对,电机自然就抖得厉害。所以还是要很细心任何一个细节都不能马虎。有时候,一个小小的错误,就可能导致整个系统无法正常工作。



使用特权

评论回复
沙发
dongnanxibei| | 2025-5-26 17:47 | 只看该作者
PID的参数如何确定是个难题。

使用特权

评论回复
板凳
zjsx8192| | 2025-5-27 08:16 | 只看该作者
有整定口诀吧,调的时候麻烦

使用特权

评论回复
地板
643757107| | 2025-5-28 12:43 | 只看该作者
需要调整参数。

使用特权

评论回复
5
xixi2017| | 2025-5-29 06:38 | 只看该作者
如果响应速度够快,其实不用PID就检测速度,全开或者断开,表现出来就是不规则的脉宽调制。

使用特权

评论回复
6
wanduzi| | 2025-5-29 22:12 | 只看该作者
定时器决定 PID是否再次计算

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:工程师
简介:超越自我,为设计激发灵感和想象。

233

主题

781

帖子

6

粉丝