lzh电子论坛

欢迎来到lzh电子论坛:
如果您对电子技术感兴趣就加入我们吧!在这里互相交流互相学习!主要讨论的方向有:单片机,ARM,PCB板设计,FPGA,汇编,C/C++等方面。
-----lzh电子论坛
lzhbbs.forumotion.com
lzh电子论坛

电子的道路是孤独的,要懂得左手温暖右手,要懂得把debug当作快乐去欣赏,去享受,那样你才会成功...

欢迎访问lzh电子论坛。可通过【谷歌,SOSO,搜狗】搜索“lzh电子论坛”直接进入论坛。点击了解论坛详细制度


    PID最通俗的解读

    分享
    avatar
    Admin
    管理员
    管理员

    帖子数 : 869
    威望 : 15
    注册日期 : 12-11-23
    年龄 : 26

    PID最通俗的解读

    帖子 由 Admin 于 2014-03-16, 10:18 am

    学过自控的同学恐怕都知道PID调节的口诀:
    参数整定找最佳,从小到大顺序查,先是比例后积分,最后再把微分加,曲线振荡很频繁,比例度盘要放大,
    曲线漂浮绕大湾,比例度盘往小扳,曲线偏离回复慢,积分时间往下降,曲线波动周期长,积分时间再加长,
    曲线振荡频率快,先把微分降下来,动差大来波动慢,微分时间应加长,理想曲线两个波,前高后低4比1 ,  
     一看二调多分析,调节质量不会低。
        关于PID的算法网上不少,但大都是基于数学模型,在实际中导致使用难的问题,而数学模型属于理想的,没有深入本质讲解,我认为最好的老师是拿身边的例子来讲解的老师,举例说明,形象简洁,易于接受。
    以下为摘自某老师的高见:

       我们看一个生活例子,冬天洗热水澡,需要先放掉一段时间的冷水,因为水管里有一段冷水,热水器也需要一个加热过程,等过了这段时间之后水温有些接近目标值后,开始调节水龙头来调节冷、热水之间的比例及出水量,之后再慢慢的微调,在洗浴过程中感觉温度不合适,再一点点的调节。这个过程,其实就是PID算法过程。我们之所以微调,是因为水温的变化速度与我调节的速度不相匹配,存在一个滞后效应,我们需要调节一点点,等一下再感觉一下温度,不够再条件一点点,再感觉,这个过程就叫PID算法,也可以说,滞后效应是引入PID的原因。
       失去的能否找回来?能、只是我找回了纽扣,却发现衣服已经不再了。这个就是滞后效应。
       负反馈系统,都有滞后效应,但为什么运放、电源这类的却从来不提PID算法呢?这是因为这类系统的滞后延时时间非常短,若考虑这个延时,负反馈引入180度相位,延时恰好引入180度相位,则完全可能引起振荡。问题在于这个延时时间足够短,它的谐振频率点比较高,以运放为例,加入延时加上负反馈引起的谐振点为10MHz,但这颗运放的频率响应是1MHz,则在10MHz下完全不可能导致振荡,因为这个芯片的频响特性只有1MHz。我们常用的线性电源IC,比如SOT23封装的LDO,假如输出不加电容,就会输出一个振荡的波形,相对来说电源IC的滞后效应比运放要大,但是,因为电源一般后面都要接大电容的,它的频响特性很低,接近直流0Hz,所以当有电容时候,就无法振荡了。
       而工业控制领域,比如温度等,都是滞后效应很严重的,往往都是mS,甚至是10mS级别的,若直接用负反馈,因为激励与反馈的不同步,必然导致强烈的振荡,所以为了解决这个问题,我们需要引入PID算法,来实现这类滞后效应严重系统的负反馈控制,我们以高频感应加热设备加热工件,从常温25度加热到700度为例做说明:
    1、25~600度,100%的全功率加热工件,这是因为温差太大,前期要全功率,先加热到靠近目标温度。之所以考虑在600度,是因为滞后效应,若设定太高,当发现接近700度再停下来,但实际上,温度会冲过700度。当然,600度是一个经验值,以下几个温度点都是经验值,根据实际情况而来。
    2、600以上,开启P算法,P就是根据测量值与目标值的误差来决定负反馈的大小。P算法公式:反馈 = P * (当前温度-目标温度)。但因为负反馈是基于存在误差为前提的,所以P算法导致一个问题,永远到不了想要的值:700度。因为到了700度,反馈值就没有了。P算法的开启,进一步逼近了目标温度,假设稳态下可以达到650度,这样就算因为滞后效应导致的延时,也不会超过700度太多。
    3、当达到P算法的稳态极限650度附近的时候,比如640度,就应该开启另外一个算法解决P算法引起的极限误差,那就是I算法。I算法就是为了消除这个P算法导致的误差值,毕竟我们想要的是700度,而不是650度。I算法,本质上讲就是获取一个700度下对应的一个驱动值,之后用这个驱动值来取代P算法,那么我们怎么得到这个驱动值呢,唯一的手段就是把之前的误差都累加起来,最后得到一个期望值,这个期望值就是我们想要的驱动值。因为只要与目标值存在误差,那么把这些误差值积累起来再去反馈控制,就能一步步的逼近目标值,这如同水温不够高,再加一点点热水,不够高再加,这样总能达到想要的水温。值得注意的是,I算法不能接入太高,必须要在P算法的后期介入,不然很容易积累过大。这个时候可以引入一个误差门限,比如误差为60,当作6来处理,误差为50,当作5来处理,消除大的误差值,具体根据项目情况决定。
    4、当I算法把工件温度加热到很接近目标温度后,那么可以调节的范围就很小了,最后一点点的微动,让调节的每一次的变化,不要太大,这就是D算法。D算法本质上讲就是反对剧烈的变化,所以适用于达到目标温度的时候。
       PID算法其实不复杂,但从目前看,很多人都是因为对这三者的使用条件不了解导致的问题,都是从加热一开始,三个要素都上,结果可想而知。P算法是温度接近目标值的时候用,I算法是在P算法到稳态极限的时候用,D算法是达到目标值附近的时候用。实际项目中,D算法一般不用,效果不大。假如非要找一个现实中对应的实物,那么以开关电源为例,TL431基准电源比较器可以认为是P,输出滤波电容C是I,输出滤波电感是D,两者完全等价。它们各自的应用工作点可以认为:假设目标温度700度,600~800度:P算法;640~760度:I算法;690~710度:D算法。具体值,以实验为准,数据仅供参考。
       最后给出一个PID最通俗的解读:我们设计一样东西,一般都是先打个样,这个样跟我们想要的接近,但细节没到位,这就是P,样有差异,所以就要修改,拟合逼近,这就是I,到了定稿,就不允许随便修改了,就算要修改,也是有限制的修改,这就是D。

      目前的日期/时间是2018-11-20, 1:28 am