pid算法通俗解释,平衡车,倒立摆,适合不理解PID算法的人来看!

pid算法通俗解释,平衡车,倒⽴摆,适合不理解PID算法的⼈
来看!
   先插句⼴告,本⼈QQ522414928,不熟悉PID算法的可以⼀起交流学习,随时在线
  在正式进⼊正⽂前,补充⼀下本⼈学习PID算法的背景,先⾃我介绍⼀下:本⼈⼀名⼤三电⼦专业的学⽣,到现在可以说我已经研究了快两年的PID,这期间做过帆板⾓度控制系统,做过平衡车,做过倒⽴摆,做过板球控制系统,做过openmv⼩球追踪系统,还做过四旋翼等……,可以说现在已经很熟悉PID算法,包括单级的PID算法和多级的PID算法。到现在感觉其实这个PID算法还是很经典,很有⽤的,那么简简单单的⼏⾏代码,就能实现⾃动追踪,⾃动跟随,平衡等操作,⽤途⼴泛。如果你不会PID算法,⼤多数控制其实你是实现不了的,如果这个经典⽽⼜简单的算法你不会,别的控制类的算法估计你也不会。可能让你做⼀件产品或是参加某些控制类⽐赛,显然,不会PID这些算法,你只能做简单的逻辑控制,⽽逻辑控制⼜太简单,⼏个if()语句判断显然是不满⾜控制类设计的需要的。另外,很多不需要PID 算法的设计其实也是可以加⼊PID算法的,这能让你的设计更有稳定性,有些必须需要PID算法的设计,没有PID不能形成闭环控制,是根本不能完成的。
  扯淡的不多说,本⼈就喜欢简单粗暴,喜欢把复杂的东西简单化,很多的电⼦教程虽然把PID算法介绍的很全⾯,但是写的复杂的不得了,今天本⼈就⽤通俗易懂的语⾔把复杂的问题简单化:
  先解释⼀下传统的位式算法,也就是简单的逻辑算法:位式算法的输出要么是0,要么是1,也就是在⼀定条件下是全速运⾏,不满⾜这个条件就完全停⽌或反向全速运⾏。
  ①先拿恒温烧⽔系统来说,假如说你要把⽔烧到80度,简单的逻辑做法是在⽔⾥加⼀个温度传感器和电热烧⽔器,然后⽤单⽚机测温,如果if(温度<80度),那你就给电热烧⽔器加热烧⽔,如果if(温度>80度),那我就停⽌加热。思考⼀下,最后你得到的⽔温⼀定会是80(可以上下有微⼩差别)度吗?答案肯定是否定的。(这⾥说明⼀下,不要教条,不要问你为什么会把⽔烧到80度)这是为什么?我来解释⼀下,当传感器测到温度达到80度时,单
⽚机控制加热器停⽌加热,虽然加热器断电了,但是加热器的余温还是⽐⽔的温度要⾼,所以加热器不会⽴即停⽌加热,⽽是继续给⽔加热⼀会⼉直到和⽔的温度⼀样,此时⽔的温度会⾼于80度,可能电热器的余温就把⽔加热到了90度,对吧!然后⽔和加热器⼜⼀起降温,⼀般情况下加热器降温的速度会更快,所以当⽔的温度下降到80度时,加热器的温度⼜低于80度,这时传感器检测到⽔温低于80度,单⽚机⼜控制加热器加热,⽽此时加热器温度不够低于80度,所以需要预热⼀下再给⽔加热,在预热的这段时间⾥⽔的温度可能⼜降到了75度才开始加热。所以,⽔的温度不能保持在80度上下轻微浮动的范围内,⽔温⼀直都是在75度到90度之间浮动的!
  ②再拿平衡车系统来说,你需要⼀个陀螺仪传感器,⽐如(mpu6050),先说下平衡车的原理,避
免有些⼈不懂,平衡车为什么两个轮⼦能站着不到,⼤家⼀定都军训过,站过军姿,站军姿的时候教官让你⾝体前倾,但是只能轻微的前倾,如果你能前倾45度,那你⼀定控制不住⾝体平衡,需要往前迈步才能达到平衡。平衡车跟这个原理是⼀样的,如果车要往前倒,那我让车轮前转来维持平衡,如果车往后倒,那我让车轮后传来维持平衡,原理都应该明⽩了吧!(如果这个原理还不明⽩建议不要学了,更不要搞控制⽅向了,避免学了半天还得转⾏浪费时间)继续,假设车上的陀螺仪⾓度0度时车是平衡的,如果⾓度⼤于0度我就让车轮前转,如果⾓度⼩于0度我就让车轮后转,显然这样做,车是平衡不了的,由于车的惯性作⽤,⼀下可能就过调了,直接倒了。原理跟烧⽔差不多,不多说了。
      再来解释下PID算法:
1.刚才介绍了半天位式算法,位式算法的输出就是简单的逻辑输出,不是0就是1,⽐如烧⽔,⼩于80度就接通烧⽔器的继电器,功率直接达到最⼤,当⽔温⼤于80度时,继电器就直接断开,功率直接降到最低。在平衡车上⽤位式算法解读就是,车的倾⾓<0度,电机控制器给-1,电机反向全速运转,车的倾⾓>0度时,电机控制器给+1,电机正向全速运转,位式算法的特点就是要不就全速运⾏,要不就直接停⽌。
2.PID算法就不⼀样了,PID算法通常输出的都是可以调节输出功率⼤⼩的,⽐如输出的PWM 或直接输出电压值⼤⼩DAC(PWM即脉宽调速占空⽐),假设PWM的周期是255,当⾼电平占空⽐为255(100%)时相当位式算法输出的1,即全速运⾏,当⾼电平占空⽐为
128(50%)时,输出的功率理论上为全速的⼀般。说到这⼤家就应该明⽩了,PID的输出是可以控制⽅向以及⼤⼩的。
  下⾯开始说PID算法:
  先说PID三个参数,P是⽐例,I是积分,D是微分;很多⼈都知道这三个参数,只是不了解其背后代表的含义,为啥⽤⽐例积分微分。不着急听我慢慢给你介绍,只要我介绍完,你⼀下就懂了。
  ⾸先介绍⼀下P,P代表⽐例,光⽤⼀个⽐例算法其结构是这样的:
    err(误差)=setpoint(设定值)-actual_value(传感器测量的实际值)    (误差这个概念⼤家应该都明⽩)
    output(输出值⽐如PWM)=p(⽐例系数)*err(误差)
    ⽐例反应的是现在的状态。
    这个⽐例系数P,需要你⼤概估测⼀下值是多少,⽐如平衡车,光⼀个⽐例控制就能让平衡车站半天了。⽐如设置平衡点为0度,此时实际的值为8度,此时误差就为-8度,输出的PWM值就等于(-8)*P。PWM=(-8)*P,这个P的具体值就需要你根据周期和占空⽐来估计决定,⽐如此时的PWM值应该
是64才能让平衡车具有恢复平衡的能⼒,那么P的值就应该为8.0。这下⼤家应该明⽩了P这个参数该如何来设定。
   (时隔这个长时间,今天继续,当时说明天继续着,忙着考研拖了⼀个⽉了)…………………………继续,以上是⼀个⽉之前写的,今天继续………………………………在介绍⼀下积分I,积分分为好⼏种,这⾥先介绍两种:
1.普通的
    ⼀般滴,没有单独⽤⼀个I控制的模型,所以这⾥⽤PI控制:
    err(当前误差)=setpoint(设定值)-actual_value(传感器测量的实际值)
    err_integral(误差的积分值)=err_integral(误差的积分值)+err(当前误差)
    output(输出值⽐如PWM)=p(⽐例系数)*err(误差)+I(积分系
数)*err_integral(误差的积分值)
    这⾥介绍⼀下积分的作⽤,
    积分反应的是过去的状态。
    积分的意义:积分的作⽤就在于对误差的累加,我就根据实际情况来解释,⽐如
说,我光⽤⼀个⽐例P来控制⼀个模型的运转,在误差较⼤的时候这个⽐例的作⽤起的很⼤,
还是说平衡车,当⾓度误差值为8时,假定预测P=8.0,PWM=⾓度误差*P,此时PWM值为64,这时候电机可以按⼀定的速度转动起来,当偏差为0.5时,PWM的值就为4,当PWM为4的时候,根据电机的特性,可能因为这个4太⼩,电机根本连转的⼒⽓都没有,这时候本来平
衡点应该是0,可到了0.5电机因为pwm值太⼩⽽不起作⽤,这样就始终达不到平衡点。那我
现在加上积分,积分的作⽤就是把⼀个个的误差加起来,因为误差有正也有负,所以积分不
会只朝着⼀个⽅向增⼤(正或负),⽐如误差在0.5时⽐例就失去了调节能⼒,那么此时积分
就起作⽤了,积分会把这个0.5累加直到PWM值能够给电机充⾜的能量去达到0这个平衡点。
⼀般积分I这个系数的值设为P*1/200.
2.积分分离算法
    普通的PI算法积分,积分会⼀直起作⽤,不管误差有多⼤,⽽当误差太⼤的时候,
积分的⼀直累加运⾏会让系统产⽣过冲,⼀个普通的PID算法做的平衡车⼀上电时因为⼿持摆
放的位置离平衡点太远会引起过冲,让平衡车⼀上电电机就猛地往⼀边冲,过⼀会⼉才能
好。
    为了解决这个问题可以⽤积分分离的⽅式,误差太⼤时,积分就不起作⽤,当误差
⼩的时候,积分再起作⽤。能有效避免过冲。
    err(当前误差)=setpoint(设定值)-actual_value(传感器测量的实际值)
    if(err(当前误差)<;某个值时)
    {err_integral(误差的积分值)=err_integral(误差的积分值)+err(误差)}
    else
    {err_integral(误差的积分值)=0}
    output(输出值⽐如PWM)=p(⽐例系数)*err(当前误差)+I(积分系
数)*err_integral(误差的积分值)
倒立摆最后咱们说微分D
微分反应的是误差的变化率
微分预测将来的状态。
    err(当前误差)=setpoint(设定值)-actual_value(传感器测量的实际值)
    if(err(当前误差)<;某个值时)
    {err_integral(误差的积分值)=err_integral(误差的积分值)+err(误差)}
    else
    {err_integral(误差的积分值)=0}
    differential(微分)=err(当前误差)-last_err(上⼀次误差)
    执⾏完这句后
    last_err(上⼀次误差)=err(当前误差)
    output(输出值⽐如PWM)=p(⽐例系数)*err(当前误差)+I(积分系
数)*err_integral(误差的积分值)+D(微分系数)*differential(微分)
总结,PID的算法基本含义就是,要观测当前的误差并进⾏调整,还要总结过去的误差来摆脱现状,还需预测未来的误差趋势加快调整。

本文发布于:2024-09-21 14:48:35,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/3/359238.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:算法   误差   控制
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议