# Arduino小车PID调速——整定参数初试水
Arduino小车PID调速——整定参数初试水
在实现了小车较为可靠的测速基础上,便可以正式开展PID调速实验了。本文是基于使用Arduino平台上由Brett Beauregard大神写的PID库进行参数整定的,侧重于在对PID算法有基本了解下,通过实验自己动手整定参数,观察不同的参数值对小车调速效果的影响,从而对PID算法产生感性的认知。
PID基本知识
所谓PID算法,是一种在工程应用领域被使用最为广泛的负反馈调节方法,通过PID算法中比例、积分、微分三个部分的作用,达到使系统稳定的效果。有关PID的介绍在网络上已经非常多且详细,本文不再展开论述。
公式
上面的公式是一种最为常见的PID算法形式,由比例、积分、微分三个部分组成,在实际工作中三者相互配合作用于控制系统
P就是比例作用,是把调节器的输入偏差乘以一个系数,作为调节器的输出,它能够使系统趋于稳定,但却不能有效地使系统达到设定值
I就是积分作用,它的作用使如果系统存在输入偏差,那么积分作用将使系统按照一定的速度向一个方向累加下去,它的作用在于可以消除系统静态偏差,让系统达到设定值
D就是微分作用,能够起到超前调节的作用,即如果被调量没有变化,则微分作用不产生变化,一旦发生变化,则微分作用可以很快的做出响应。
以上是PID的公式和各个参数的意义的简单陈述,目的在于产生一个基本的认识,而对于真正进行PID参数整定的实际工作来说,还是远远不够的,需要不断地深入理解各个参数对系统的影响以及多个参数之间的关系。
参数整定口诀
这里笔者比较推崇由白志刚编著的《自动调节系统解析与PID整定》一书中的趋势读定法整定口诀
自动调节并不难,复杂系统化简单
整定要练硬功夫,图形特征看熟练
趋势读定三要素,设定被调和输出
三个曲线放一起,然后曲线能判读
积分微分先去掉,死区暂时也不要
比例曲线最简单,被调输出一般般
顶点谷底同时刻,升降同时同拐点
波动周期都一样,静态偏差没办法
比例从弱渐调强,阶跃响应记时间
时间放大十来倍,调节周期约在内
然后比例再加强,没有周期才算对
静差消除靠积分,能消静差就算稳
不管被调升或降,输出直观偏差存
输入偏差等于零,输出才会不积分
积分不可加太强,干扰调节成扰因
被调拐点零点间,输出拐点仔细辨
积分拐点再靠前,既消静差又不乱
微分分辨最容易,输入偏差多注意
偏差不动微分死,偏差一动就积极
跳动之后自动回,微分时间管回归
系统若有大延迟,微分超前最合适
风压水位易波动,微分作用要丢弃
比例积分和微分,曲线判读特征真
如果不会看曲线,多看杖策行吟文
综合比较灵活用,盛极衰来扼杀因
参数整定
首先需要将PID库运用到自己已能实现测速功能的程序中,接下来只需调节Kp、Ki、Kd三个参数即可。
第一步:纯比例作用整定
由于是第一次进行PID参数整定,笔者先以把小车速度整定到250mm/s为目标,在程序中输入设定值。根据上面的口诀,先把系统设定为纯比例作用,即只有比例增益Kp不为0,积分增益Ki和微分增益Kd都暂时设定为0.因为是这个小车第一次整定参数,笔者也不知道什么比例增益比较好。根据口诀所说比例作用从弱到强调节,因此笔者就随便写了个自认为不大的值2,然后观察小车运行情况。实际的运行结果令我大吃一惊,小车电机以一定的周期在转和不转之间震荡。根据口诀中“然后比例再加强,没有周期才算对”得知,肯定是比例作用已经非常大了,因此赶紧将比例增益调整为0.2,小车的电机不再出现剧烈的“抽搐”,开始以一种比较缓慢的姿态转动,但通过观察输出波形,还是存在较小的波动,而根据网上查阅资料得,比例作用过分小也会导致系统震荡,但与之前较大比例作用下的震荡相比,显然“温柔”多了。于是笔者继续增加比例作用,直至Kp = 0.7时,输出波形已经相较其他参数下稳定很多了。
第二步:比例积分作用
由上图可看出,一个适合的比例作用可以使系统趋于稳定,但却无法消除静态偏差,因此需要引入积分作用,其最大的好处就是可以消除静态偏差。笔者继续采用由小逐渐加大积分增益的方式。当设定Ki = 0.3时,由图可见
静态偏差逐渐减小,输出的速度越来越接近设定的250mm/s的目标,不过调节速度太慢,还是不能满足需求。
于是继续加积分作用,当Ki = 5时,可以看出,系统反应速度已经很快,可以在0.1秒内
由波形可以看出,此时速度已基本能够快速准确地达到设定值,但仍然存在着些许波动。在比例积分作用下产生波动,可能是由于比例作用过大,也有可能是积分作用过强产生了积分干扰,因此可以适当降低比例或积分作用,来尝试减弱波动。由于比例作用和积分作用是相对的,因此为了使系统稳定,降低其中一种作用时,另外一种作用也要随之降低。故把参数设定为Kp = 0.65,Ki = 4.5,此时效果如图
可明显看出,速度得到进一步的稳定,且系统反应迅速,在不到0.1秒的时间内便使速度达到稳定。考虑到测速中存在的干扰以及电机机械转动的问题,剩余的些许波动可以被忽略。
第三步:测试在其他速度下的效果
以上的实验是建立在设定速度恒定为250mm/s的条件下进行的,能保证在250mm/s的速率下良好的调节效果,而这个参数是否适合在其他速率下工作,还需要进一步测试。
一、低速运行情况下
当笔者尝试将速度设定为200mm/s时,再观察波形,结果出现了非常频繁的波动,极端情况下,达到设定速度附近一段时间后,系统居然开始出现越来越大的波动,越来越发散
由此可得出,在参数不变的情况下,适合一个特定速度的调节方式不一定适合低速条件,在低速条件下会出现不稳定。
是什么导致这样波动的发生?比例作用可以使系统稳定,虽然积分可以消除静态偏差,但如果比例设定的不合理,静态偏差也难以被消除。而之前设定的参数是在250mm/s的情况下合适的,此时设定速度降低到200mm/s。比例作用是把调节器的输入偏差乘以一个系数,作为调节器的输出,因此可以设想此时比例作用相对于积分作用实际上偏向于减弱了。这就可能造成了积分作用过强,导致积分干扰。因此笔者尝试降低积分作用, 并相应略微降低比例作用。将参数设定为Kp = 0.5,Ki = 2
可以看出,波动已得到一定的抑制,同时在运行一段时间后,不再出现波动范围越来越大,波动周期越来越明显的“抽搐”发生,证明了高速条件下的参数运用到低速条件下会出现积分干扰的猜想。
二、高速运行情况下
笔者再次尝试将适合250mm/s的参数运用到300mm/s,看看会有什么情况发生。
对比250mm/s下的波形可以观察得,在300mm/s下工作,系统的快速性变弱,系统的稳定时间比250mm/s下要长了一点,同时波形出现了小幅度的有周期震荡。
系统稳定时间变长有两方面的原因,第一可能是比例作用偏弱,会导致难以消除静态偏差,第二是积分作用偏弱也会导致消除静态偏差的过程变慢。比例作用偏强和偏弱都会导致一定的震荡,偏强时的曲线是周期性很强,基本呈正弦波形式的,而偏弱时候波动也会有一定的周期,但在一个波动周期内,往往掺杂着几个小的波峰。由本图可看出,此时的波动属于比例作用偏小的情况。
当把参数调节到Kp = 0.75,Ki = 5.5时,得到的曲线如图
很明显,波动得到了抑制,稳定时间也缩短了。
总结
通过以上实验证明了pid调速过程中,一个特定的参数仅对一定的速度区间有比较好的调节效果。若比这个速度低,则会出现比例积分作用过强,从而出现震荡;若比这个速度高,则会出现比例作用不强,系统的稳定时间变长,且出现小幅度周期性波动的情况。
不足与改进
小车在实际工作中,不会一直只工作在一个恒定的速度下,因此在进行PID调速时不能在一个速度下调成功了就觉得万事大吉了。为了能达到PID调速对更大的速度区间内有效,一个简单的办法就是在电机低速转动的情况下进行调速,这样基本可以实现从慢速到高速都能速度稳定的效果,但这样的一个缺点在于高速情况下稳定时间变长,且会出现小幅度周期性波动。在这个基础上的一个改进办法是通过分别调节低速、中速、高速三种不同情况下适合的PID,可以设定速度区间,当速度设定值落在某个区间内,则启用适合那个速度下的PID参数进行调速。进一步深挖,可以尝试自动整定参数,达到最好的PID调速效果。
以上是本人的一点尝试和经验,难免有不足之处,还望各位多多指教!
参考
- 白志刚《自动调节系统解析与PID整定》化学工业出版社