0%

PID

Main Takeaway

FollowingPID控制算法原理(抛弃公式,从本质上真正理解PID控制) - 知乎 (zhihu.com)来学习PID,并且在simulink上搭建第一个PID工程(太酷啦!)

虽然拉式变换、系统稳态等都还不了解,以后填坑

拉普拉斯变换

了解拉式变换和傅里叶变换的联系:

  • Youtube视频地址:https://youtu.be/n2y7n6jw5d0

  • 有中文翻译:【【Zach数学系列】拉普拉斯和傅里叶变换告诉了我们什么?(合集于视频列表)】https://www.bilibili.com/video/BV1Jv411G7B1?vd_source=93bb338120537438ee9180881deab9c1

Tips:虽然我还是不知道为什么下面系统要用这些。。。以后填坑

PID

理解

proportion——integral——derivative

p是控制现在,i是纠正曾经,d是管控未来!只有不忘过往,把握当前,规划未来才能让人生的轨迹按照既定的目标前进。

image-20230908142239626

PID中三个参数,大体对应于控制系统的三个最重要的方面:

P对应“快”,对误差进行预判、做出快速反应;I对应“准”,消除稳态误差;D对应“稳”,即稳定性,放大控制作用。

Tips:也许理x解了弹性阻尼系统(还不理解),对pid的内涵会更加深刻

很多情况下,仅仅需要在离散的时候使用,则控制可以化为: 每一项前面都有系数,这些系数都是需要实验中去尝试然后确定的,为了方便起见,将这些系数进行统一一下:

Notes:在真正的工程实践中,各个分量的各个参数基本上都需要通过实验试出来的。某些情况下仅仅只有P或者只有PD,效果就达到要求了,所以也就不需要再考虑其他的了。PID三种分量的结合使用,加上大量的实验来确定合适的参数,基本上就能满足我们的需求了。偶觉得PD很好用。

比例控制算法

,但是有稳态误差的存在

Tips:稳态误差就是水缸漏水产生的(通过Kp的调节与漏水速度一致达到稳态但并未达到我们想要的目标),比如控制汽车运动,摩擦阻力就相当于是“漏水”,控制机械臂、无人机的飞行,各类阻力和消耗都可以理解为本例中的“漏水

image-20230908144827896

稳态误差的体现:

P
image-20230908150111881

积分控制算法

,积分项可以很好地消除稳态误差

image-20230908151548756

Tips:加了I之后,系统升阶了

加入I后消除了稳态误差

PI

使用PID自动调参后的效果展示

image-20230908160106933

啥叫积分时间常数呢?一般PID控制里,表示积分环节敏感度的那个系数ki=kpTik_{i}= k_{i}= , 这个TiT_{i}T_{i}就是积分时间常数。从这个式子我们可以看出,积分时间常数越大,积分环节系数就越小,积分环节就越不敏感老师告诉我们增大积分时间I有利于减小超调,减小振荡,使系统的稳定性增加,但是系统静差消除时间变长

微分控制算法

,为分享可以减少控制过程中的震荡

这个微分项的作用,就可以理解为刹车,当车离停车线很近并且车速还很快时,这个微分项的绝对值(实际上是一个负数)就会很大,从而表示应该用力踩刹车才能让车停下来。

二阶系统

image-20230908160804615

Tips:simulink中的PID中D的系数不一样:image-20230909102812741simulink自带的那个PID模块我打开看了怎么和标准的公式不一样呢?_百度知道 (baidu.com)

这时因为纯微分项物理是不可实现的,所有的传函分母的阶次必须要大于等于分子的阶次才行。

而从原表达式可以看出,当N比较大时,分母中的1可以忽略,这时系统就会变成常规的PID了。

matlab是考虑到了PID单独各个环节的物理实现,所以才对原有的公式进行了改进

其余相关控制知识

  • 积分限幅

避免Ki的误差积累过大

  • 积分分离

一次误差过大(给个限制),则舍去不要,避免超调严重

  • 输出限幅

对系统安全进行保护,避免pid输出过大or过小

  • 微分先行

微分先行是只对输出量进行微分,而对给定指令不起微分作用,因此它适合于给定指令频繁升降的场合,可以避免指令的改变导致超调过大

20180609152629114

系统稳定

  • 过阻尼系统
  • 临界阻尼系统
  • 欠阻尼系统
image-20230908154928075

劳斯判据

判断系统稳定,系统稳定的充分必要条件是劳斯表中第一列系数都大于0

image-20230908154157451

Tips: 也不太懂,以后填坑!

串级PID

串级 PID 是通过两个控制器串级控制,串级控制往往是对同一自由度的不同物理量进行控制,例如机器人的云台控制是使用角速度环和角度环串级控制, 角速度和角度均是属于旋转自由度, 角速度是角度的微分。两个控制环节分为外环控制环节和内环控制, 一般角度属于外环控制环节,角速度属于内环控制环节。

串联是将外环的输出与内环的输入相连, 外环角度环的输入是控制目标, 外环角度环的输出是设定的角速度, 为内环角速度环的输入。

会用就行

image-20230912104439363

Tips:电机输出的反馈值看你需要在DATA[]数组中自取

上述发送和接收遵循CAN协议。

而计算 PID 使用的 PID_calc 函数则首先区分 PID 的模式是位置式还是增量式

位置式:

image-20230912163541566

增量式:

image-20230912163547806

References