发 帖  
原厂入驻New
[经验]

PID算法详解

2020-11-12 16:17:31  1049 pid算法
分享
6
平衡小车(参数整定,积分时间,什么时候用到微分)PID记录(在文章开始补充上一篇文章的一个解决方法:如项目对成本不敏感,保护mcu的I/O,增加隔离芯片是最可靠的)
1. 经典PID的理解(抛弃公式,以常识认识PID) 源文献
  读了很多PID文献,还是上面那个链接那篇看得通透一点,易懂比例、积分和微分的作用。致敬作者,我在文章中也会按照文献的所写的写出来。
  PID指的就是比例、积分、微分三项的结合,其中比例项输入的是误差值、积分项输入是误差值的累加、微分项输入的是误差的变化。例如水缸的目标水位是1米,现在的水位是0.2米,那现在的水位跟目标水位相差1-0.2=0.8;也就是误差 E为0.8。
  第一次加水后水位上升到0.6米,那么加水后的误差值E为:1-0.6=0.4;加水后的误差累加值Ec为:0.8+0.4=1.2;加水后的误差变化值Ed为:0.4-0.8=-0.4;
  以上就列举了PID各项的输入值来源。接下来就以简单的例子开始讲解各项的调节作用:
  下面三个链接其实是一样的:点击任意一个即可,对PID完全陌生的建议了解一下PID各项的作用再回来接着往下看:
比例控制的作用:在此就不多赘述,移步到这看吧:比例调节作用
积分控制的作用:在此就不多赘述,移步到这看吧:积分调节作用
微分控制的作用:在此就不多赘述,移步到这看吧:微分调节作用
  看到了这里对PID三项的作用有所了解了吧!个人觉得他文章里面对微分作用的解析不太好理解。我再解析一下。
  微分项具有超前调节的作用,那么他是怎么实现超前调节的呢?回到本文开头,谈到的微分项输入值Ed是加水后水位与目标水位的差值0.4减去未加水水位与目标水位的差值0.8等于-0.4,其物理意义就是测量到了误差的变化率,负号表示以目前的水位上升趋势来说过快了,需要将水位上升速度减缓(过快可能存在某一个时刻水位超过1米,那么微分就显得有作用了),那么微分项就会将本次加水量在比例和积分基础上减小一点,让本次加水少一点,减缓水位上涨的速度。(暂且这么理解吧!微分就是抑制瞬态变化过程)
  至此,PID数学表达式和其物理意义的作用大概也烂熟于心了。
总结来说:
  比例的作用是根据偏差量成比例的调节系统控制量,减少偏差,比例越大,系统调节越快,过大会造成过调(产生震荡),比例小,系统调节慢,过小达不到目标值(静态误差)。若想系统响应尽量快的情况下,尽量让系统不会震荡。整定比例很重要。
  积分的作用,仅仅是消除比例作用下的误差。积分只是辅助作用,若积分项参数太大会给系统引入震荡,过小消除不了静态误差。
  微分作用是根据偏差的变化趋势调节系统控制量,在偏差发生较大变化前引入一个早期的校正。一般来说大多数系统用到比例和积分就足够了,引入微分作用过强会引入震荡。
2. 再说PID
  我是看完这篇文献才下决心写这篇文章记录自己学习的成果,如果你跟我一样有耐心,花一天时间仔细看看这个文献:由入门到精通吃透PID
  PID的一个最重要的核心就是系统输出量与系统偏差的关系,我们希望通过控制系统的输出量减小系统的误差。
比例环的输出特性  老生常谈,比例调节就是将系统的误差乘以一个比例增益作为系统的输出,偏差就是系统测得的值减去我们设定的目标值;比如我们小车现在车速是10米/秒,我们设定的目标是3米/秒,那么他的动态偏差就是7米/秒。
用一个数学表达式即为:系统输出量 = 比例增益 * 动态偏差
  根据这个概念性的公式我们可以知道,系统的输出形成的波形与动态偏差的波形100%相似,所有的波峰、零点以及波谷都发生在同一时刻。单纯的比例调节具有很好的跟随性。
积分环的输出特性  只要系统存在误差,那么积分项都会按照一定的频率将误差累加起来。跟比例项一样我们列出一个概念性的公式:系统输出量 = 积分增益 * 偏差的积分,那么:偏差的积分 = 偏差的积分 + 动态偏差。动态偏差即是实时的偏差的意思。
  分析上面两个公式,积分增益为一常数,系统的输出量只与偏差的积分有关,那么积分项的输出波形是否跟比例项一样都是与动态偏差的波形100%相似呢?答案是否定的。系统输出的波形至于偏差的积分有关,偏差的积分什么时候达到最大值,系统输出就达到最大即系统输出波形达到波峰。从第二个公式可以看出,偏差的积分是动态偏差的累加,假设现在有一个震荡的系统,观察下图:
  t1时刻之后系统开始存在偏差,此时偏差开始积分;t2时刻,系统测量值达到最大值,即系统偏差达到最大值。观察上图,在t1到t3时间内,测量值曲线很明显都高于目标值,那么在这段时间内偏差为正值,积分项会在这段时间内越加值越大,直至t3时刻积分项达到最大值,即偏差的积分到达波峰,但此时动态偏差处于零点位置,按照理想的系统,当系统偏差为0时,我们希望系统的输出量也为0,但是在这时候,积分项达到最大值,系统输出也会达到积分最大值作用于系统,那就是说积分项的输出量滞后于系统的偏差。滞后的时间为t3-t2。反观t2时刻,系统偏差达到最大值,而积分项到t3时刻才达到最大值,这也说明积分项的滞后性。从数学图形的立场上看,积分即使对图形求面积,t3时刻积分项的值就是在t1到t3时间内系统误差与目标值围起来的面积。
微分环的输出特性  微分项的作用就如前面所说,具有超前调节的作用,抑制瞬态变化,但微分项需要掌控它的微分时间以及微分项系数的大小,过大会引起系统震荡,过小系统收敛不够快。
  本文主要阐述pid三项的作用,以及三项的特性,最难懂得就是积分项导致系统的滞后性。下一期准备以最近在做的双轮平衡小车为例子,阐述三项系数的整定,包括系统震荡的现象,系统合理性的现象。积分时间整定以及微分时间的整定。之后会有串级pid用在平衡小车的效果(在姿态环分成角度环+角速度环)。等我学会ADRC以及模糊pid和LQR到时也会以文章形式分享出来,待更…
先上下一篇文章的一点彩蛋(其实本来要在这篇文章中列出来的,但最近忙于做项目,就打消了这个念头,也懒得删了,哈哈哈!!!就想着分成两篇文章记录吧!)。
  整定PID参数的方法是先将系统设置为纯比例控制系统,即令Pi=Pd=0;比例系数由小到大逐渐增加,增加到系统刚好出现震荡(大幅低频震荡)记录此时比例系数为Km;下面列出三个参数的数学公式:
Kp = 0.6Km (也可以是Kp=0.8Km,主要看哪个让系统更稳定)
Ki = Kp*π ππ / ω
Kd = Kp*π ππ / ( 4*ω )
  其中Km是系统刚好震荡是的比例系数,ω为系统震荡时极坐标下的震荡频率。
  以上是本人的一点小见解,如有纰漏,不正确的地方,您看看笑笑就蒜了,也可以指出来,但一定不要喷我!

评分

参与人数 1积分 +10 收起 理由
elecfans短短 + 10 您的帖子很精彩,期待您分享的下一个帖子!

查看全部评分

张静静 2020-11-18 09:44:45
感谢楼主的分享
回复

举报

鉴于此文是本人CSDN复制发过来的,很多超链接点击不了,如有需要看原文请点击下面的链接https://blog.csdn.net/suitcalaw/article/details/108771009
回复

举报

王栋春 2020-11-12 21:57:35
学习理解一下
回复

举报

bbbbc 2020-11-16 10:03:00













举报

bbbbc 2020-11-16 10:04:35
2020年11月16日 10:02:54
回复

举报

大白 7 天前
可点超链接源文章https://blog.csdn.net/suitcalaw/article/details/108771009
回复

举报

大白 7 天前
https://blog.csdn.net/suitcalaw/article/details/105975697
回复

举报

评论

高级模式
您需要登录后才可以回帖 登录 | 注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
发经验
关闭

站长推荐 上一条 /9 下一条

快速回复 返回顶部 返回列表