增量式PID算法小结

第一篇:增量式PID算法小结

       增量式PID算法小结

       一、PID 算法简介

       顾名思义,P 指是比例(Proportion),I 指是积分(Integral),D 指微分(Differential)。比例P:比例控制是一种最简单的控制方式。其控制器的输出与输入误差信号成比例关系。偏差一旦产生,控制器立即就发生作用即调节控制输出,使被控量朝着减小偏差的方向变化,偏差减小的速度取决于比例系数Kp,Kp越大偏差减小的越快,但是很容易引起振荡,尤其是在迟滞环节比较大的情况下,Kp减小,发生振荡的可能性减小但是调节速度变慢。但单纯的比例控制存在稳态误差不能消除的缺点。这里就需要积分控制。

       积分 I:在积分控制中,控制器的输出与输入误差信号的积分成正比关系。对一个自动控制系统,如果在进入稳态后存在稳态误差,则称这个控制系统是有稳态误差的或简称有差系统。为了消除稳态误差,在控制器中必须引入“积分项”。积分项对误差取决于时间的积分,随着时间的增加,积分项会增大。这样,即便误差很小,积分项也会随着时间的增加而加大,它推动控制器的输出增大使稳态误差进一步减小,直到等于零。因此,比例 积分(PI)控制器,可以使系统在进入稳态后无稳态误差。实质就是对偏差累积进行控制,直至偏差为零。积分控制作用始终施加指向给定值的作用力,有利于消除静差,其效果不仅与偏差大小有关,而且还与偏差持续的时间有关。简单来说就是把偏差积累起来,一起算总帐。

       微分 D:在微分控制中,控制器的输出与输入误差信号的微分(即误差的变化率)成正比关系。自动控制系统在克服误差的调节过程中可能会出现振荡甚至失稳。其原因是由于存在有较大惯性组件(环节)或有滞后组件,具有抑制误差的作用,其变化总是落后于误差的变化。解决的办法是使抑制误差的作用的变化“超前”,即在误差接近零时,抑制误差的作用就应该是零。这就是说,在控制器中仅引入“比例”项往往是不够的,比例项的作用仅是放大误差的幅值,而目前需要增加的是“微分项”,它能预测误差变化的趋势,这样,具有比例 微分的控制器,就能够提前使抑制误差的控制作用等于零,甚至为负值,从而避免了被控量的严重超调。所以对有较大惯性或滞后的被控对象,比例 微分(PD)控制器能改善系统在调节过程中的动态特性。

       它能敏感出误差的变化趋势,可在误差信号出现之前就起到修正误差的作用,有利于提高输出响应的快速性,减小被控量的超调和增加系统的稳定性。但微分作用很容易放大高频噪声,降低系统的信噪比,从而使系统抑制干扰的能力下降。

       增量式PID算法: Ki=Kp*Ts/Ti;Kd=Kp*Td/Ts;Kp为比例项系数 ;Ki为积分项系数 ;Kd为微分项系数;Ti为积分时间常数;Td为微分时间常数 ;Ts 为采样周期常数 上述公式进一步推倒:

       Δu(k)= Ka * e(k) Kb * e(k-1) Kc * e(k-2);Ka=Kp*(1 Ts/Ti Td/Ts)Kb=(-1)*(Kp)*(1 2Td/TS)Kc=Kp*(Td/TS)代码如下:

       float PID_Dispose(flaot D_value){ static flaot Ek = 0;static flaot Ek_1 = 0;static flaot Ek_2 = 0;Ek_2 = Ek_1;Ek_1 = Ek;Ek = D_value;return((float)(Ka*Ek Kb*Ek_1 Kc*Ek_2));} D_value定义为float 类型(据情况而定),此变量是设定值与系统输出量的差值。PID 调试一般原则

       a.在输出不振荡时,增大比例增益 P。b.在输出不振荡时,减小积分时间常数 Ti。c.输出不振荡时,增大微分时间常数 Td。

第二篇:模糊PID控制算法

       模糊PDI控制算法

       学院:

       班级: 学号: 姓名: 完成日期:

       一、模糊PID控制算法综述

       模糊控制器是一种近年来发展起来的新型控制器,其优点是不要求掌握受控对象的精确数学模型,而根据人工控制规则组织控制决策表,然后由该表决定控制量的大小。

       二、模糊PID控制的原理

       CPU根据系统偏差(偏差=给定-反馈),和偏差变化率(偏差变化率=当前周期偏差-上周期偏差)查询相应的模糊控制表,得到Kp,Ki,Kd三个参数的整定值,然后进行PID 运算,真正的运用到实际中也就是一张模糊控制查询表,然后就是查表了,也很简单,关键是表的建立还有专家经验的问题等。

       三、模糊控制规则

       模糊控制规则的形成是把有经验的操或专家的控制知识和经验制定成若干控制决策表,这些规则可以用自然语言来表达,但一般要进行形式化处理。例如:

       ①“If An Then Bn”;

       ②“If An Then Bn Else Cn”; ③“If An And Bn Then Cn”;

       其中An是论域U上的一个模糊子集,Bn是论域V上的一个模糊子集。根据人工试验,可离线组织其控制决策表R,R是笛卡尔乘积U×V上的一个模糊子集。则某一时刻,以上控制规则的控制量分别为: ①Bn=An.R ②Bn=An.R Cn=An.R ③Cn=(An×Bn).R 式中 ×——模糊直积运算

       .——模糊合成运算

       控制规则③是实际模糊控制器最常用的规则形式。在这类规则中,A一般用来表示被控制量的测量值与期望值的偏差E=x-x0的隶属函数。B一般表示偏差变化率C=d E/dt的隶属函数。目前设计的模糊控制器基本上都是采用这种方式。即在模糊控制过程中,同时要把系统与设定值的偏差和偏差的变化率作为模糊输入量。这种方法不仅能保证系统的稳定性,而且还可减少超调量和振荡现象。

       四、模糊PID控制算法

       PID调节对于线性定常系统的控制是非常有效的,但对于非线性、时变的复杂系统和模型不清楚的系统就不能很好地控制。而模糊控制器对复杂的和模型不清楚的系统却能进行简单而有效的控制,但由于模糊控制器不具有积分环节,因而在模糊控制系统中又很难完全消除静差,而且在变量分级不足够多的情况下,常常在平衡点附近会有小的振荡现象。如果把两种控制方法结合起来,就可以构成兼有这两者优点的模糊PID控制器。

       有几种方法可把模糊技术与PID控制算法结合起来构成模糊PID控制器:一种是利用模糊控制器来给PID控制器在线自整定PID参数,组成模糊自整定参数PID控制器;另一种是在大偏差范围内采用比例控制,而在小偏差时采用模糊控制,两种控制方式可根据预先确定的偏差阈值进行切换,这就构成FUZZY-P双模分段控制器;与此类似,可以设计多模分段控制的算法,根据不同条件和要求分段,用不同模态进行控制。

       模糊控制与传统的PID控制之间的区别可以理解为:PID控制是一种基于时间的控制,而模糊控制则是一种基于过程的控制。两者在结构上的区别如图3所示。

       图3 模糊控制与传统PID控制的区别

       (a)传统PID控制系统框图

       (b)模糊PID控制系统框图

       模糊控制器的智能性就体现在它比传统的PID控制器多加一个设定值调节器和设定值选择器。设定值调节器模拟有经验的操的控制过程和功能。它着眼于控制的过程(在PID控制的范围内)、系统的动态特性及非线性(包括负载的改变),通过向PID运算器内输入假定目标设定值而使系统运行起来。其典型的控制结果如图4所示。可见模糊控制减小了系统的超调量,并且对系统失调响应速度更快。

       图4模糊控制典型的控制结果

       由于模糊控制明显减小了超调量,有效地提高了系统的反应速度和控温精度,并且更易于实现计算机控制,因此,模糊控制技术被很多控制系统所采用。在热处理设备控制技术中,模糊控制技术也是最近十年最显著的进步,已越来越多地受到热处理界的关注。

       五、数学模型

       下面我们按输出相结合的模糊集,三角共同规范和推理方法将模糊PID控制器分类。

       I类(a)三角共同准则:有界结合,推理方法:任何方法见表1,输出模糊集:一个,(b)三角共同准则:有界结合,推理方法:拉森乘积或严格乘积,输出模糊集:三角。

       增量控制输出给出的

       II类(a)三角共同准则:严格总之,推理方法:任何方法见表1,输出模糊集:单个,(b)三角共同准则:严格总之,推理的方法: 拉森乘积,输出模糊集:三角。

       III类三角共同准则:严格总之,推理的方法:严格乘积,输出模糊集:三角。

       六、模糊PID控制算法的应用范围及领域

       模糊PID控制在电阻炉炉温系统、曲料混合系统、啤酒发酵监控系统、风网节流控制系统、磁悬浮系统、电机控制系统、水泥冷却过程控制、空调恒压供水系统、雷达导引头伺服系统等等一系列控制中都有应用,其应用之广泛,足以说明模糊PID控制算法的优良。

第三篇:PID控制小结

       PID控制小结

       在PID参数进行整定时如果能够有理论的方法确定PID参数当然是最理想的方法,但是在实际的应用中,更多的是通过凑试法来确定PID的参数。

       增大比例系数P一般将加快系统的响应,在有静差的情况下有利于减小静差,但是过大的比例系数会使系统有比较大的超调,并产生振荡,使稳定性变坏。增大积分时间I有利于减小超调,减小振荡,使系统的稳定性增加,但是系统静差消除时间变长。

       增大微分时间D有利于加快系统的响应速度,使系统超调量减小,稳定性增加,但系统对扰动的抑制能力减弱。在凑试时,可参考以上参数对系统控制过程的影响趋势,对参数调整实行先比例、后积分,再微分的整定步骤。

       PID控制原理:

       1、比例(P)控制 :比例控制是一种最简单的控制方式。其控制器的输出与输入误差信号成比例关系。当仅有比例控制时系统输出存在稳态误差。

       2、积分(I)控制 :在积分控制中,控制器的输出与输入误差信号的积分成正比关系。对一个自动控制系统,如果在进入稳态后存在稳态误差,则称这个控制系统是有稳态误差的或简称有差系统。为了消除稳态误差,在控制器中必须引入“积分项”。积分项对误差取决于时间的积分,随着时间的增加,积分项会增大。这样,即便误差很小,积分项也会随着时间的增加而加大,它推动控制器的输出增大使稳态误差进一步减小,直到等于零。因此,比例 积分(PI)控制器,可以使系统在进入稳态后无稳态误差。

       3、微分(D)控制 :在微分控制中,控制器的输出与输入误差信号的微分(即误差的变化率)成正比关系。自动控制系统在克服误差的调节过程中可能会出现振荡甚至失稳。其原因是由于存在有较大惯性组件(环节)或有滞后组件,具有抑制误差的作用,其变化总是落后于误差的变化。解决的办法是使抑制误差的作用的变化“超前”,即在误差接近零时,抑制误差的作用就应该是零。这就是说,在控制器中仅引入“比例”项往往是不够的,比例项的作用仅是放大误差的幅值,而目前需要增加的是“微分项”,它能预测误差变化的趋势,这样,具有比例 微分的控制器,就能够提前使抑制误差的控制作用等于零,甚至为负值,从而避免了被控量的严重超调。所以对有较大惯性或滞后的被控对象,比例 微分(PD)控制器能改善系统在调节过程中的动态特性。PID控制器参数整定的一般方法:

       PID控制器的参数整定是控制系统设计的核心内容。它是根据被控过程的特性确定PID控制器的比例系数、积分时间和微分时间的大小。PID控制器参数整定的方法很多,概括起来有两大类:

       一是理论计算整定法。它主要是依据系统的数学模型,经过理论计算确定控制器参数。这种方法所得到的计算数据未必可以直接用,还必须通过工程实际进行调整和修改; 二是工程整定方法,它主要依赖工程经验,直接在控制系统的试验中进行,且方法简单、易于掌握,在工程实际中被广泛采用。PID控制器参数的工程整定方法,主要有临界比例法、反应曲线法和衰减法。三种方法各有其特点,其共同点都是通过试验,然后按照工程经验公式对控制器参数进行整定。但无论采用哪一种方法所得到的控制器参数,都需要在实际运行中进行最后调整与完善。

       现在一般采用的是临界比例法。利用该方法进行 PID控制器参数的整定步骤如下:(1)首先预选择一个足够短的采样周期让系统工作;(2)仅加入比例控制环节,直到系统对输入的阶跃响应出现临界振荡,记下这时的比例放大系数和临界振荡周期;(3)在一定的控制度下通过公式计算得到PID控制器的参数。

       PID参数的设定:是靠经验及工艺的熟悉,参考测量值跟踪与设定值曲线,从而调整P、I、D的大小。书上的常用口诀:

       参数整定找最佳,从小到大顺序查; 先是比例后积分,最后再把微分加; 曲线振荡很频繁,比例度盘要放大; 曲线漂浮绕大湾,比例度盘往小扳; 曲线偏离回复慢,积分时间往下降; 曲线波动周期长,积分时间再加长; 曲线振荡频率快,先把微分降下来; 动差大来波动慢。微分时间应加长; 理想曲线两个波,前高后低4比1; 一看二调多分析,调节质量不会低。

       个人认为PID参数的设置的大小,一方面是要根据控制对象的具体情况而定;另一方面是经验。P是解决幅值震荡,P大了会出现幅值震荡的幅度大,但震荡频率小,系统达到稳定时间长;I是解决动作响应的速度快慢的,I大了响应速度慢,反之则快;D是消除静态误差的,一般D设置都比较小,而且对系统影响比较小。PID参数怎样调整最佳(1)整定比例控制

       将比例控制作用由小变到大,观察各次响应,直至得到反应快、超调小的响应曲线。(2)整定积分环节

       若在比例控制下稳态误差不能满足要求,需加入积分控制。

       先将步骤(1)中选择的比例系数减小为原来的50~80%,再将积分时间置一个较大值,观测响应曲线。然后减小积分时间,加大积分作用,并相应调整比例系数,反复试凑至得到较满意的响应,确定比例和积分的参数。(3)整定微分环节

       若经过步骤(2),PI控制只能消除稳态误差,而动态过程不能令人满意,则应加入微分控制,构成PID控制。先置微分时间TD=0,逐渐加大TD,同时相应地改变比例系数和积分时间,反复试凑至获得满意的控制效果和PID控制参数。

第四篇:简易旋转倒立摆PID算法

       C语言PID算法

       简易旋转倒立摆控制参考程序 #include #include

       typedef struct PID { /*K1=实际放大倍数,T1=实际积分时间,T2=实际微分时

       间,T=采样周期*/

       double

       SetPoint;

       /*定义PID结构体*/

       double

       K1;

       double

       T1;

       double

       T2;

       double

       T;

       double

       Err1;

       /*前一时刻误差,E(K-1)*/

       } PID;

       double PIDCalc(PID *pp, double NextPoint,double Ud1,double Ui1)

       /*PID计算 */

       {

       double Ti,Td,Kp,Ki,Kd,Ud,Up,Ui,Err;

       Ti =pp-> T1 pp-> T2;

       /*积分时间*/

       Td =(pp-> T1 * pp-> T2)/(pp-> T1 pp-> T2);

       /*微分时间*/

       Kp =pp-> K1 *((pp-> T1 pp-> T2)/ pp-> T1);

       /*比例系数*/

       Ki=pp-> T / Ti * Kp;

       /*积分系数*/

       Kd = Td / pp-> T * Kp;

       /*微分系数*/

       Err = pp-> SetPoint-NextPoint;

       /*当前误差*/

       Ud = pp->T2/((Kd * pp-> T) pp-> T2)* Ud1 Kd *(pp-> T2 pp-> T)/(Kd * pp-> T pp-> T2)* Err-Kd * pp-> T2 /(Kd * pp-> T pp-> T2)*pp-> Err1;

       /*微分 作用*/

       Ui = Ui1 pp-> K1 *(pp-> T / pp-> T1)* Ud;/*积分作用*/

       Up = pp-> K1 * Ud;

       /*比例作用*/

       Ud1=Ud;

       /*UD1=ud(k-1),ui1=ui(k-1)*/

       Ui1=Ui;

       return(Ud Up Ui);

       /*y(k)*/ }

       void PIDInit(PID *pp){

       memset(pp,0,sizeof(PID));

       }

       /*double sensor(void)

       {

       return 1.0;}*/

       /*输入口*/

       void actuator(double rDelta,double LastrDelta)

       /*输出口*/

       {

       double n;

       n=rDelta-LastrDelta;

       /*y(k)-y(k-1)*/

       LastrDelta=rDelta;

       printf(“%fn ”,n);

       }

       void main(void)

       {

       int j,a[]=

       {15,14,12.5,10.5,5.5,6.7,9.5,11.3,9.6,10.2,10.035,9.2356,10.2356,9.3654,10.01101 };

       PID

       sPID;

       double

       rOut;

       double

       LastrOut=0;

       /*y(k-1)*/

       double

       rIn;

       double

       Ud1 = 1;

       double

       Ui1 = 1;

       PIDInit(&sPID);

       /*PID初始化*/

       sPID.K1 = 1;

       sPID.T1 = 1;

       sPID.T2 = 1;

       sPID.T

       = 1;

       sPID.SetPoint = 10.0;

       /*设定值*/

       sPID.Err1 = 1;

       for(j=0;j <15;j )

       {

       rIn = a[j];

       /*sensor();*/

       /*输入*/

       rOut= PIDCalc(&sPID,rIn,Ud1,Ui1);

       actuator(rOut, LastrOut);

       } }

第五篇:LM算法小结

       Matlab代码部分:

       在matlab2022等以上版本中使用LM算法,请进行修改:  homography2d1.m中,修改:options = optimset('LargeScale','off','LevenbergMarquardt','on');改为:options=optimset('LargeScale','off','Algorithm','levenberg-marquardt'); zhang.m中,修改:options = optimset('Display','iter','LargeScale','off','LevenbergMarquardt','on');改为:

       Options=optimset('Display','iter','LargeScale','off','Algorithm','levenberg-marquardt');