# Arduino小车PID调速——整定参数初试水

Arduino小车PID调速——整定参数初试水

在实现了小车较为可靠的测速基础上,便可以正式开展PID调速实验了。本文是基于使用Arduino平台上由Brett Beauregard大神写的PID库进行参数整定的,侧重于在对PID算法有基本了解下,通过实验自己动手整定参数,观察不同的参数值对小车调速效果的影响,从而对PID算法产生感性的认知。

PID基本知识

所谓PID算法,是一种在工程应用领域被使用最为广泛的负反馈调节方法,通过PID算法中比例、积分、微分三个部分的作用,达到使系统稳定的效果。有关PID的介绍在网络上已经非常多且详细,本文不再展开论述。

公式

Output=Kpe(t)+KIe(t)dt+KDddte(t)Output=Kpe(t)+KI∫e(t)dt+KDddte(t)

Where:e=SetpointInputWhere:e=Setpoint−Input

上面的公式是一种最为常见的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调速效果。
以上是本人的一点尝试和经验,难免有不足之处,还望各位多多指教!

参考

  1. 白志刚《自动调节系统解析与PID整定》化学工业出版社
### 回答1: Arduino PID循迹小车是基于Arduino控制器并使用PID控制算法的一种自动化小车。PID控制算法是一种传统的自控算法,通过对误差信号进行比例、积分、微分运算来实现自动控制系统的稳定性和精度。 该小车的主要工作原理是通过搭载的光电传感器实时检测小车相对于轨迹线的位置信息,并通过PID算法来调整小车的速度和方向,使其保持在轨迹线上行驶。 在实际应用中,可以通过编写Arduino程序来实现PID算法的计算和控制,同时还可以根据需要添加其他的功能模块,如避障、遥控等。 此外,Arduino PID循迹小车也具有较高的可扩展性,例如可以通过添加蓝牙模块来实现小车的无线控制,或者通过添加摄像头模块来实现视觉循迹等功能。 总的来说,Arduino PID循迹小车具有操作便捷、灵活性高、功能模块多样等优点,因此在教学、科研以及科技爱好者之间广泛应用和推广。 ### 回答2: Arduino PID 循迹小车是一种可以自主寻路的小车。循迹小车通常由小车底盘、电源、主控板和循迹模块等部分组成。其中的循迹模块能够检测路线上的黑线,并将其转化为电信号,再通过主控板进行处理和计算,使小车能够根据线路的变化调整航向方向,从而实现自主行驶。 PID控制是循迹小车中非常重要的一部分,它是一种基于误差反馈的控制器。小车通过检测黑线的偏离情况来计算出偏离的误差值,然后利用PID控制算法对机器人的速度和方向进行实时调整。控制器的输出值经过放大电路后,被传输给电机,使小车得以实现平稳的曲线运动,提高了车辆稳定性和精度。 Arduino平台是一种开源的控制平台,具有体积小、价格低等优点,使用简单,适合初学者使用。使用Arduino及相关传感器组装智能循迹小车,可以让学生们更加深入地理解物理学和电路原理,并培养具备独立思考能力和创造力的控制工程师。在此过程中,他们不仅能够加强对计算机语言、模拟电子、数字电子等理论的掌握,更能带来实践操作的乐趣。 ### 回答3: Arduino PID循迹小车是一种基于Arduino开发板的智能小车,利用PID控制算法实现对小车行进路径的自动控制。该小车可以通过设置目标路径并使用编码器和红外传感器来检测路线,实时计算并调整动作控制来实现精准循迹。 PID控制算法是一种广泛应用于自动控制领域的调节算法,它可以进行动态调整,不仅适用于小车循迹,还适用于电机控制、温度控制等多种场景。循迹小车使用PID算法加速响应速度,控制精度更高,并完成了对转向、角度和速度的控制。 Arduino不仅提供了很多强大的控制算法和开发工具,还有很多模块可以用来实现不同的自由组合,如编码器、红外传感器、汽车遥控器等。这让使用Arduino开发自己的智能小车变得轻松可行。 通过学习基于Arduino平台的PID循迹小车,可以掌握基本的控制变量、算法和开发工具,并了解PID算法在自动控制中的应用和实现过程,为进一步深入学习和应用提供坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值