PID算法大总结(经整理)

以下内容是我在网上搜集后,找了三篇总结的比较好的博客,其中有以公式理论讲解的、伪算法实现与直流无刷电机原理(PID)。


[一]
PID控制算法  (公式理论讲解)

以下内容转载自: http://hi.baidu.com/ianything/blog/item/5c01ceb72a8df3f131add1dd.html/cmtid/aa400531ead31013eac4af71


1,PID是一个闭环控制算法。因此要实现PID算法,必须在硬件上具有闭环控制,就是得有反馈。比如控制一个电机的转速,就得有一个测量转速的传感器,并将结果反馈到控制路线上,下面也将以转速控制为例。
2,PID是比例(P)、积分(I)、微分(D)控制算法。但并不是必须同时具备这三种算法,也可以是PD,PI,甚至只有P算法控制。我以前对于闭环控制的一个最朴素的想法就只有P控制,将当前结果反馈回来,再与目标相减,为正的话,就减速,为负的话就加速。现在知道这只是最简单的闭环控制算法。
3,比例(P)、积分(I)、微分(D)控制算法各有作用:
     比例,反应系统的基本(当前)偏差e(t),系数大,可以加快调节,减小误差,但过大的比例使系统稳定性下降,甚至造成系统不稳定;
     积分,反应系统的累计偏差,使系统消除稳态误差,提高无差度,因为有误差,积分调节就进行,直至无误差;
     微分,反映系统偏差信号的变化率e(t)-e(t-1),具有预见性,能预见偏差变化的趋势,产生超前的控制作用,在偏差还没有形成之前,已被微分调节作用消除,因此可以改善系统的动态性能。但是微分对噪声干扰有放大作用,加强微分对系统抗干扰不利。
积分和微分都不能单独起作用,必须与比例控制配合。

4,控制器的P,I,D项选择。

下面将常用的各种控制规律的控制特点简单归纳一下:

    1、比例控制规律P:采用P控制规律能较快地克服扰动的影响,它的作用于输出值较快,但不能很好稳定在一个理想的数值,不良的结果是虽较能有效的克服扰动的影响,但有余差出现。它适用于控制通道滞后较小、负荷变化不大、控制要求不高、被控参数允许在一定范围内有余差的场合。如:金彪公用工程部下设的水泵房冷、热水池水位控制;油泵房中间油罐油位控制等。
    2、比例积分控制规律(PI):在工程中比例积分控制规律是应用最广泛的一种控制规律。积分能在比例的基础上消除余差,它适用于控制通道滞后较小、负荷变化不大、被控参数不允许有余差的场合。如:在主线窑头重油换向室中F1401到F1419号枪的重油流量控制系统;油泵房供油管流量控制系统;退火窑各区温度调节系统等。
    3、比例微分控制规律(PD):微分具有超前作用,对于具有容量滞后的控制通道,引入微分参与控制,在微分项设置得当的情况下,对于提高系统的动态性能指标,有着显著效果。因此,对于控制通道的时间常数或容量滞后较大的场合,为了提高系统的稳定性,减小动态偏差等可选用比例微分控制规律。如:加热型温度控制、成分控制。需要说明一点,对于那些纯滞后较大的区域里,微分项是无能为力,而在测量信号有噪声或周期性振动的系统,则也不宜采用微分控制。如:大窑玻璃液位的控制。
    4、例积分微分控制规律(PID):PID控制规律是一种较理想的控制规律,它在比例的基础上引入积分,可以消除余差,再加入微分作用,又能提高系统的稳定性。它适用于控制通道时间常数或容量滞后较大、控制要求较高的场合。如温度控制、成分控制等。

    鉴于D规律的作用,我们还必须了解时间滞后的概念,时间滞后包括容量滞后与纯滞后。其中容量滞后通常又包括:测量滞后和传送滞后。测量滞后是检测元件在检测时需要建立一种平衡,如热电偶、热电阻、压力等响应较慢产生的一种滞后。而传送滞后则是在传感器、变送器、执行机构等设备产生的一种控制滞后。纯滞后是相对与测量滞后的,在工业上,大多的纯滞后是由于物料传输所致,如:大窑玻璃液位,在投料机动作到核子液位仪检测需要很长的一段时间。

    总之,控制规律的选用要根据过程特性和工艺要求来选取,决不是说PID控制规律在任何情况下都具有较好的控制性能,不分场合都采用是不明智的。如果这样做,只会给其它工作增加复杂性,并给参数整定带来困难。当采用PID控制器还达不到工艺要求,则需要考虑其它的控制方案。如串级控制、前馈控制、大滞后控制等。
5,公式:


数值pid的计算:
6,问题。Kp,Ti,Td三个参数的设定是PID控制算法的关键问题。一般说来编程时只能设定他们的大概数值,并在系统运行时通过反复调试来确定最佳值。因此调试阶段程序须得能随时修改和记忆这三个参数。
7,参数的自整定。在某些应用场合,比如通用仪表行业,系统的工作对象是不确定的,不同的对象就得采用不同的参数值,没法为用户设定参数,就引入参数自整定的概念。实质就是在首次使用时,通过N次测量为新的工作对象寻找一套参数,并记忆下来作为以后工作的依据。
8,pid算法流程图:
PID算法大总结(经整理)_第1张图片














[二]

以下内容转载自:电机控制算法_追风星空_新浪博客

伪算法:

制作小车一些资料或许正在制作的朋友有所启发。记不得这是以前查资料制作时从哪里找到的了。在没有了解自控以前,对于寻迹小车只知道一种调节方法,就是比例调节,即向左偏就向右调节,向右偏就向左调节,最容易想到,也是最容易用软硬件实现的,但是结果也是最容易出问题的。当时的感觉就是小车太灵敏了,忽左忽右,不是很稳定。后来查了资料后知道了其他的调节方式。


控制算法
电机控制算法的作用是接受指令速度值,通过运算向电机提供适当的驱动电压,尽快地和尽快平稳地使电机转速达到指令速度值,并维持这个速度值。换言之,一旦电机转速达到了指令速度值,即使在各种不利因素(如斜坡、碰撞之类等使电机转速发生变化的因素)的干扰下也应该保持速度值不变。为了提高机器人小车控制系统的控制精度,选用合适的控制算法显得十分必要。控制算法是任何闭环系统控制方案的核心,然而并非越复杂、精度越高的算法越好,因为比赛要求非常高的实时性,机器人必须在非常短的时间内作出灵敏的反应,所以现代的一些先进控制算法,比如模糊控制、神经元网络控制等就不能应用到小车控制系统里。本系统选用了最常规、最经典的PID控制算法,通过实际应用取得了很好的效果。

1 比例项
控制回路中的第一个偏差转换环节就是比例项。这一环节简单地将偏差信号乘以常数K 得到新的CV值(值域为-100~100)。基本的比例控制算法如下:
loop:
          PV=ReadMotorSpeed()
          Error=SP-PV
          CV=Error*Kprop
          Setpwm(cv)
          Goto loop

上一段程序中的SetPWM()函数并非将CV值作为绝对的PWM占空比来对待。否则,不断降低的偏差值会使输出值接近零,而且由于电机工作时需要持续的PWM信号,控制系统将会使电机稳定在低速运转状态上,从而导致控制系统策略失败。
相反,CV值一般被取作当前PWM占空比的改变量,并被附加到当前的PWM占空比上。这也要求SetPWM()函数必须将相加后得到的PWM占空比限制在0%~100%。正的CV值将使电机两端电压增加。负的CV值将使电机两端电压降低。如果CV值等于0,则无需改变但前占空比。较低的K 值会使电机的速度响应缓慢,但是却很平稳。较高的K 值会使速度响应更快,但是却可能导致超调,即达到稳定输出前在期望值附近振荡。过高的K 值会导致系统的不稳定,即输出不断震荡且不会趋于期望值。

2 微分项
任何变量的微分项被用来描述该变量是如何相对于另一个变量(多位时间)变化的。换句话说,任何变量的微分项就是它随时间的变化率。如位移随时间的变化率是速度。速度相对于时间的微分是加速度。
在PID控制器中,值得关心的是偏差信号相对于时间的微分,或称变化率。绝大多数控制器将微分项定义为:
                          Rate=(E-E )/T
式中,E为当前偏差,E 为前次偏差值,T为两次测量的时间间隔。负的变化率表明偏差信号的改善。当微分项被具体应用于控制器中时,将一个常数乘以该微分项,并将它加到比例项上,就可以得到最终的CV值计算公式:
                        CV=( K  E)+( K  Rate)
当偏差信号接近零时,CV值将为负,所以当偏差信号开始改善时,微分项的作用将逐渐减弱校正输出量。在某些场合下,微分项还有利于超调量的消除,并可以允许使用较大的K 值,从而可以改善响应的快速性。微分环节还预示了偏差信号的变化趋势。当控制对象对控制器的输出响应迟缓时,微分环节的作用尤为明显。
    含有微分项的控制算法的伪代码实现如下:
  loop:
          PV=ReadMotorSpeed()
          LastError=Error
          Error=SP-PV
          Rate=Error-LastError
          CV=Error*Kprop+Krate*Rate
          SetPWM(CV)
          Goto loop

3 积分项
积分正好与微分相对。假如有一个描述变化率(微分)的表达式,那么对该表达式的积分就将得到随时间变化的原物理量。如加速度的积分是速度,速度的积分是位移。
在PID控制回路中,偏差的积分代表从控制开始时算起所有偏差积累的总和。该总和被常数K 所乘后再添加到回路输出中。在回路中,如果没有积分环节,尽管控制系统也会趋于稳定,但是由于某种原因输出值可能最终也无法达到SP值。
一个简单但完全的PID控制器地伪代码实现如下:
        loop:
          PV=ReadMotorSpeed()
          LastError=Error
          Isum=Isum+Error
          Error=SP-PV
          Rate=Error-LastError
          CV=Error*Kprop+Krate*Rate+Kint*Isum
          SetPWM(CV)
          Goto loop

由于积分项会越来越大,这就会使控制回路在SP值的改变时响应变慢,某些应用场合在CV值达到取值边界(如为:-100~100)时会停止累加Isum。在SP值改变时,也可以除去Isum项。





直流无刷电机:


鉴于有些同学对无刷电机的不了解,以及缺乏相关知识,现发一个电机工作原理的说明,希望有所帮助。

转载自:bbs.hi-robot.com

直流电机具有响应快速、较大的起动转矩、从零转速至额定转速具备可提供额定转矩的性能,但直流电机的优点也正是它的缺点,因为直流电机要产生额定 负载下恒定转矩的性能,则电枢磁场与转子磁场须恒维持90°,这就要藉由碳刷及整流子。碳刷及整流子在电机转动时会产生火花、碳粉因此除了会造成组件损坏 之外,使用场合也受到限制。交流电机没有碳刷及整流子,免维护、坚固、应用广,但特性上若要达到相当于直流电机的性能须用复杂控制技术才能达到。现今半导 体发展迅速功率组件切换频率加快许多,提升驱动电机的性能。微处理机速度亦越来越快,可实现将交流电机控制置于一旋转的两轴直交坐标系统中,适当控制交流 电机在两轴电流分量,达到类似直流电机控制并有与直流电机相当的性能。 

此外已有很多微处理机将控制电机必需的功能做在芯片中,而且体积越来越小;像模拟/数字转换器(Analog-to-digital converter,ADC)、脉冲宽度调制(pulse wide modulator,PWM)…等。直流无刷电机即是以电子方式控制交流电机换相,得到类似直流电机特性又没有直流电机机构上缺失的一种应用。 

2、直流无刷电机的控制结构 bbs.hi-robot.com

直流无刷电机是同步电机的一种,也就是说电机转子的转速受电机定子旋转磁场的速度及转子极数(P)影响: 

N=120.f / P。在转子极数固定情况下,改变定子旋转磁场的频率就可以改变转子的转速。直流无刷电机即是将同步电机加上电子式控制(驱动器),控制定子旋转磁场的频率 并将电机转子的转速回授至控制中心反复校正,以期达到接近直流电机特性的方式。也就是说直流无刷电机能够在额定负载范围内当负载变化时仍可以控制电机转子 维持一定的转速。 

直流无刷驱动器包括电源部及控制部如图 (1) :电源部提供三相电源给电机,控制部则依需求转换输入电源频率。 

电源部可以直接以直流电输入(一般为24V)或以交流电输入(110V/220 V),如果输入是交流电就得先经转换器(converter)转成直流。不论是直流电输入或交流电输入要转入电机线圈前须先将直流电压由换流器 (inverter)转成3相电压来驱动电机。换流器(inverter)一般由6个功率晶体管(Q1~Q6)分为上臂(Q1、Q3、Q5)/下臂 (Q2、Q4、Q6)连接电机作为控制流经电机线圈的开关。控制部则提供PWM(脉冲宽度调制)决定功率晶体管开关频度及换流器(inverter)换相 的时机。直流无刷电机一般希望使用在当负载变动时速度可以稳定于设定值而不会变动太大的速度控制,所以电机内部装有能感应磁场的霍尔传感器(hall- sensor),做为速度之闭回路控制,同时也做为相序控制的依据。但这只是用来做为速度控制并不能拿来做为定位控制。



bbs.hi-robot.com

要让电机转动起来,首先控制部就必须根据hall-sensor感应到的电机转子目前所在位置,然后依照定子绕线决定开启(或关闭)换流器 (inverter)中功率晶体管的顺序,如 下(图二) inverter中之AH、BH、CH(这些称为上臂功率晶体管)及AL、BL、CL(这些称为下臂功率晶体管),使电流依序流经电机线圈产生顺向(或逆 向)旋转磁场,并与转子的磁铁相互作用,如此就能使电机顺时/逆时转动。当电机转子转动到hall-sensor感应出另一组信号的位置时,控制部又再开 启下一组功率晶体管,如此循环电机就可以依同一方向继续转动直到控制部决定要电机转子停止则关闭功率晶体管(或只开下臂功率晶体管);要电机转子反向则功 率晶体管开启顺序相反。 

基本上功率晶体管的开法可举例如下: bbs.hi-robot.com

AH、BL一组→AH、CL一组→BH、CL一组→BH、AL一组→CH、AL一组→CH、BL一组 

但绝不能开成AH、AL或BH、BL或CH、CL。此外因为电子零件总有开关的响应时间,所以功率晶体管在关与开的交错时间要将零件的响应时间考虑进去,否则当上臂(或下臂)尚未完全关闭,下臂(或上臂)就已开启,结果就造成上、下臂短路而使功率晶体管烧毁。 



bbs.hi-robot.com

一般P.I.D控制如下 



(dutycycle)=(dutycycle)p + (dutycycle)i + (dutycycle)d 

P.控制(比例控制) :输出与输入误差讯号成正比关系,即将误差固定比例修正,但系统会有稳态误差。
I .控制(积分控制) :当系统进入稳态有稳态误差时,将误差取时间的积分,即便误差很小也能随时间增加而加大,使稳态误差减小直到为零。 
D.控制(微分控制):当系统在克服误差时,其变化总是落后于误差变化,表示系统存在较大惯性组件或(且)有滞后组件。微分即是预测误差变化的趋势以便提前作用避免被控量严重冲过头。 

4、电机驱动器的保护措施 

对于驱动器还要有保护措施,当负载过大或不当使用时会造成大电流而将功率晶体管烧毁。为了保护因电流超过规格而破坏驱动器,一般会以加大功率晶体 管耐电流或加电流sensor做为保护。其次当电机负载不小的时候,在停止转动时由电机端回送至驱动器的能量及过电压都将危及驱动器,这可配合过电压保护 电路加上回生能量消散电路来防治。其它尚有hall-sensor正常与否判定也会影响PWM控制的正确性,这可由控制部判断并适时警告即可。 

bbs.hi-robot.com

将电源线的其中一条拔起后,将电表(请先调至安培档)的一端接至驱动器的电源CONNECTOR其中一接脚,另一端则接至电源插座的另一接脚,如 此即可测量出在现阶段的负载下所必须耗费的电流值,之后再依此电流值来对照电机的电流/扭力对照表,如此即可得知目前的负载状况是正常或是 否有过载的情形发生。





你可能感兴趣的:(B-Human,资料)