【研发日记】Matlab/Simulink技能解锁(十)——PID调参技巧

文章目录

 

前言

项目背景

参数P调节

参数I调节

参数D调节

整体优化

分析和应用

总结

参考资料


前言

        见《【研发日记】Matlab/Simulink技能解锁(五)——七个Simulink布线技巧

        见《【研发日记】Matlab/Simulink技能解锁(六)——六种Simulink模型架构

        见《【研发日记】Matlab/Simulink技能解锁(七)——两种复数移相算法

        见《【研发日记】Matlab/Simulink技能解锁(八)——分布式仿真

        见《【研发日记】Matlab/Simulink技能解锁(九)——基于嵌入式处理器仿真

项目背景

        近期在一个嵌入式项目中用到了PID控制,利用周末时间对PID调参的一些基本规律和技巧总结一下。该项目的整体框架如下示例:

参数P调节

        为了更好地说明参数P,先把参数I和参数D设置为0,即不引入积分项和微分项,示例如下:

        参数P为1的初始状态,控制效果如下所示:

        从上图中可以看出,DCDC的输出电压U在目标值100V的上下剧烈的震荡,而且PID的控制输出也变化幅度非常大(理论值应该在30左右才是合理的),判断原因是参数P为1太大了,所以下面开始调整参数P值。

        第一次直接把参数P调小到1/10,即0.1,控制效果如下所示:

        从上图中可以看出,DCDC的输出电压U和PID的控制输出,震荡幅度相比初始状态已经减小了很多,而且能逐渐收敛到恒定值,说明前面参数P的调整是有效的。但是目前的震荡幅度还是不合格,所以要继续调整参数P。

        第二次再把参数P调小到1/10,即0.01,控制效果如下所示:

        从上图中可以看出,DCDC的输出电压U和PID的控制输出,震荡幅度相比前一次又大幅减小了,目前的震荡幅度暂时可以接受了,待后续微调优化。

参数I调节

        前面参数P暂定下来之后,就可以调整参数I了。下面基于P=0.01、D=0继续调试,参数I也从初始值1开始调试,初始控制效果如下所示:

        从上图中可以看出,DCDC的输出电压U,长时间与目标值100V之间保持较大的差距,差值的积分面积已经很大了,但是PID的控制输出仍然停留在较小值,判断原因是参数I为1太小了,所以下面开始调整参数I。

        第一次直接把参数I调大到10,即10,控制效果如下所示:

        从上图中可以看出,DCDC的输出电压U,与目标值100V之间的差距缩小的时间大幅减少了,说明前面对参数I的调整是有效的。但是目前的差距缩小速度还是不合格,所以要继续调整参数I。

        第二次再把参数P调大到10,即100,控制效果如下所示:

        从上图中可以看出,DCDC的输出电压U,与目标值100V之间的差距缩小的时间,相比前一次又大幅减小了,目前的逼近速度暂时可以接受了,待后续微调优化。

参数D调节

        前面参数P和参数I暂定下来之后,就可以调整参数D了。下面基于P=0.01、I=100继续调试,参数D也从初始值1开始调试,初始控制效果如下所示:

        从上图中可以看出,第一个周期的目标值100V刚建立起来时,产生的差值微分量就让PID的控制输出达到了饱和值100。后面的DCDC的输出电压U不管变化幅度大或小都会让PID的控制输出为0和100的饱和值。判断原因是参数D为1太大了,所以下面开始调整参数D。

        第一次直接把参数I调小到1/10,即0.1,控制效果如下所示:

        从上图中可以看出,第一次调整参数D的效果与初始效果基本一样,判断原因是PID的控制输出仍未进入饱和范围0和100之间,所以继续调整参数D。

        第二次再把参数I调小1/10,即0.01,控制效果如下所示:

        从上图中可以看出,PID的控制输出已经开始进入饱和范围0和100之间,而且DCDC的输出电压U的振幅已经有所收窄,说明前面对参数D的调整是有效的。但是目前的振幅还是不合格的,所以继续调整参数D。

        第三次和第四次分别再把参数I调小1/10,即0.0010.0001,控制效果如下所示:

        从上图中可以看出,第三次的参数D已经相较之前明显优化,第四次的参数D则进一步逼近可以接受的范围,所以参数D暂时不再继续调整,待后续微调优化。

整体优化

        至此参数P、参数I和参数D的基本值已经确定,下面基于P=0.01、I=100、D=0.0001进一步微调优化。

        第一步,对比参数D在PID控制器中发挥的作用,示例如下:

        从上图中可以看出,目标值100V刚建立起来后的早期阶段,微分项(参数D)能使PID的控制输出有较大的振幅,但是同时也是这种更激进的作用导致了同一时间段的DCDC的输出电压U的振幅扩大,两方面对比后决定把微分项拿到,即参数D=0

        下面基于P=0.01、I=100、D=0,进一步微调优化DCDC的输出电压U向目标值100V逼近的速度,示例如下:

        从上图中可以看出,当积分项I=100时DCDC的输出电压U逼近目标值的速度较慢,需要将近20ms。当积分项I=500时,电压U逼近目标值的速度大幅提高,只需大约4ms,但是带来了电压U的震荡。当积分项I=300,电压U逼近目标值的速度也提高挺多,只需大约6ms,同时电压U也不震荡了。速度和震荡两方面对比后,决定把积分项I设定为300。

        下面基于P=0.01、I=300、D=0,进一步微调优化DCDC的输出电压U达到目标值100V后的震荡问题,示例如下:

        从上图中可以看出,P=0.002和P=0.01相比,电压U的振幅并没有明显变化,而且PID的控制输出也没有明显变化(可能这个参数最小只能是0.01),说明该震荡不是由参数P引起的。分析推测可能的原因是,差值在上图的由正转负过程中会过零点,由于Controller是离散系统,对DCDC的连续系统识别不足,并且Duty转换为PWM时也会有连续和离散的转换过程,再加之DCDC电路中固有的电容电感特性,最终导致了上述震荡现象。因为目前的震荡幅值只有0.04V,相比100V的基准是非常小的,所以暂时不再继续优化,比例项参数P仍保留为0.01。

分析和应用

        1、参数P是对当前时刻的差值进行放大或衰减,降低系统的惰性,加快响应速度。与他的优点相对的是,参数P过大时可能会引起系统振荡使稳定性变差。单独使用参数P时,调整的是系统的比例系数,即目标值与最终稳定输出结果之间的比例关系,无法逼近目标值,除非设定一个精确计算的参数P,并且系统的特性从始至终不变。

        2、参数I是对累积差值进行放大或者衰减,并通过系统的负反馈作用减小偏差。只要参数I不是0,那么经过足够的时间后,积分项都能消除稳态偏差。参数I越大就能越加速这个过程。缺点是当有临时的外界扰动进入系统时,不能及时地克服扰动的影响。

        3、参数D是差值变化率进行放大和衰减,当被控对象快速接逼近目标值时,微分项会对抗这个趋势使得逼近速度减缓。差值变化越快,控制量就越大,负反馈校正量就越大。当差值变化很慢或者不变时,微分项的作用就为0。所以具有超前控制作用,有助于减小超调,克服振荡。

总结

        以上就是本人在研发中使用PID控制时,一些个人理解和分析的总结,主要介绍了PID参数调整的基本规律和技巧,展示了仿真运行的效果,并分析了三个PID的特点和适用场景。

        后续还会分享另外几个最近解锁的Matlab/Simulink新技能,欢迎评论区留言、点赞、收藏和关注,这些鼓励和支持都将成文本人持续分享的动力。

        另外,上述例程使用的Demo工程,可以到笔者的主页查找和下载。

参考资料

    Mathworks Help -> PID Controller

        版权声明,原创文章,转载和引用请注明出处和链接,侵权必究!

  • 44
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 27
    评论
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.Cssust

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值