首页 > 产品 > 知识 > pid控制算法,PID控制算法

pid控制算法,PID控制算法

来源:整理 时间:2023-08-16 18:24:44 编辑:智能门户 手机版

本文目录一览

1,PID控制算法

PID控制是将偏差的比例(p)、积分(I)和微分(D)通过线性组合构成控制量,对被控对象进行控制。说到PID控制算法有很多种,好比位置式PID控制算法、增量式PID控制算法、积分分离PID控制算法......根据系统的连续性和离散性,PID控制算法也不同,所以不知LZ是在问什么
首先看自动控制原理的pid表达式,然后看懂离散表达式,不要看网上的pid程序,然后根据离散表达式自己就可以写出程序。网上的pid控制大部分都是用结构函数写的,看不太懂。

PID控制算法

2,单片机中的PID算法是什么意思啊有什么用途呢谢谢

pid就是比例积分微分算法
PID算法是一种经典的控制算法.由比例/积分/微分组成.建议看看控制理论.PID就是比例积分微分控制,在工业里面应用非常广泛,据统计,现在有一半以上以上的工业系统直接应用PID控制.PID分模拟和数字,既然用到了单片机当然就得用数字了,另外PID还分理想,实际,微分先行,抗积分饱和等等,但都是在理想或者实际PID式子上面进行一些修改得来的.关于这方面的知识,建议你还是找一本控制理论书刊以下,很简单,但却是非常有用的,搞工业设计,不懂PID,说出来都没人信
就是一算法 用于控制

单片机中的PID算法是什么意思啊有什么用途呢谢谢

3,什么是PID 算法

PID是工业控制上的一种控制算法,其中P表示比例,I表示积分,D表示微分。以温度控制的PID程序为例:P(比例)表示在温度设定值上下多少度的范围内做比例动作,当温度越高,功率越小,温度越低,功率就越大,功率到底为多大,就看温度偏差值和比例区间的大小按反比关系计算。I(积分)也是一种比例,是温度偏差值的累积值与设定的一个值之间的反比关系,但要注意何时将温度偏差值的累积值清零。积分就好像当温度比设定值低很多而你有觉得温度升的慢的时候就使劲的加大功率一样。D(微分)是温度变化快慢跟功率的比值,即当你觉得温度上升的太快时,就降低功率,一阻止温度上升过快,反之当温度下降太快时,就加大功率以阻止温度下降太快一样。给我邮箱我可以给你发一份PID温度控制程序。

什么是PID 算法

4,pid控制的算法

给你个PID控制算法的程序段,该程序是西门子PLC的SCL程序。带"_IN"与带"_OUT"的变量,如果前缀是一样的,要求连接同一个变量。这段程序已经在温度控制上运行通过了。FUNCTION FC1 : VOID VAR_INPUT Run:BOOL; //True-运行,False-停止 Auto:BOOL; //True-自动,False-手动 ISW:BOOL; //True-积分有效,False-积分无效 DSW:BOOL; //True-微分有效,False-微分无效 SetMV:REAL; //手动时的开度设定值 SVSW:REAL; //当设定值低于SVSW时,开度为零 PV:REAL; //测量值 SV:REAL; //设定值 DeadBand:REAL; //死区大小 PBW:REAL; //比例带大小 IW:REAL; //积分带大小 DW:REAL; //微分带大小 dErr_IN:REAL; //误差累积 LastPV_IN:REAL; //上一控制周期的测量值 END_VAR VAR_OUTPUT MV:REAL; //输出开度 dErr_OUT:REAL; //误差累积 LastPV_OUT:REAL;//上一控制周期的测量值 END_VAR VAR Err:REAL; //误差 dErr:REAL; //误差累积 PBH:REAL; //比例带上限 PBL:REAL; //比例带下限 PVC:REAL; //测量值在一个控制周期内的变化率,即测量值变化速率 P:REAL; //比例项 I:REAL; //积分项 D:REAL; //微分项 END_VAR IF Run=1 THEN IF Auto=1 THEN IF SV>=SVSW THEN Err:=SV-PV; PBH:=SV+PBW; PBL:=SV-PW; IF PV MV:=1; ELSIF PV>PBH THEN MV:=0; ELSE P=(PBH-PV)/(PBH-PBL); //计算比例项//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////以下为积分项的计算////////////////////////////////////////////////////////////// IF ISW=1 THEN dErr:=dErr_IN; IF (PV(SV+DeadBand)) THEN IF (dErr+Err) dErr:=0-IW; ELSIF (dErr+Err)>IW THEN dErr:=IW; ELSE dErr:=dErr+Err; END_IF; END_IF; I:=dErr/IW; dErr_OUT:=dErr; ELSE I:=0; END_IF;/////////////////////////////////////////////以上为积分项的计算////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////以下为微分项的计算////////////////////////////////////////////////////////////// IF DSW=1 THEN PVC:=LastPV_IN-PV; D:=PVC/DW; LastPV_OUT:=PV; ELSE D:=0; END_IF;/////////////////////////////////////////////以上为微分项的计算/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// IF (P+I+D)>1 THEN MV:=1; ELSIF (P+I+D)<0 THEN MV:=0; ELSE MV:=P+I+D; END_IF; END_IF; ELSE MV:=0; END_IF; ELSE MV:=SetMV; END_IF; ELSE MV:=0; END_IF;END_FUNCTION

5,单片机中的PID算法

PID算法 下面对控制点所采用的PID控制算法进行说明。 控制点目前包含三种比较简单的PID控制算法,分别是:增量式算法,位置式算法,微分先行。 这三种PID算法虽然简单,但各有特点,基本上能满足一般控制的大多数要求。1) PID增量式算法离散化公式: 注:各符号含义如下 u(t) 控制器的输出值。 e(t);;控制器输入与设定值之间的误差。 Kp;; 比例系数。 Ti;;积分时间常数。 Td;微分时间常数。 T;;调节周期。 对于增量式算法,可以选择的功能有: (1) 滤波的选择可以对输入加一个前置滤波器,使得进入控制算法的给定值不突变,而是有一定惯性延迟的缓变量。 (2) 系统的动态过程加速在增量式算法中,比例项与积分项的符号有以下关系:如果被控量继续偏离给定值,则这两项...PID算法 下面对控制点所采用的PID控制算法进行说明。 控制点目前包含三种比较简单的PID控制算法,分别是:增量式算法,位置式算法,微分先行。 这三种PID算法虽然简单,但各有特点,基本上能满足一般控制的大多数要求。1) PID增量式算法离散化公式: 注:各符号含义如下 u(t) 控制器的输出值。 e(t);;控制器输入与设定值之间的误差。 Kp;; 比例系数。 Ti;;积分时间常数。 Td;微分时间常数。 T;;调节周期。 对于增量式算法,可以选择的功能有: (1) 滤波的选择可以对输入加一个前置滤波器,使得进入控制算法的给定值不突变,而是有一定惯性延迟的缓变量。 (2) 系统的动态过程加速在增量式算法中,比例项与积分项的符号有以下关系:如果被控量继续偏离给定值,则这两项符号相同,而当被控量向给定值方向变化时,则这两项的符号相反。 由于这一性质,当被控量接近给定值的时候,反号的比例作用阻碍了积分作用,因而避免了积分超调以及随之带来的振荡,这显然是有利于控制的。但如果被控量远未接近给定值,仅刚开始向给定值变化时,由于比例和积分反向,将会减慢控制过程。 为了加快开始的动态过程,我们可以设定一个偏差范围v,当偏差|e(t)|= β时,则不管比例作用为正或为负,都使它向有利于接近给定值的方向调整,即取其值为|e(t)-e(t-1)|,其符号与积分项一致。利用这样的算法,可以加快控制的动态过程。 (3) PID增量算法的饱和作用及其抑制 在PID增量算法中,由于执行元件本身是机械或物理的积分储存单元,如果给定值发生突变时,由算法的比例部分和微分部分计算出的控制增量可能比较大,如果该值超过了执行元件所允许的最大限度,那么实际上执行的控制增量将时受到限制时的值,多余的部分将丢失,将使系统的动态过程变长,因此,需要采取一定的措施改善这种情况。 纠正这种缺陷的方法是采用积累补偿法,当超出执行机构的执行能力时,将其多余部分积累起来,而一旦可能时,再补充执行。2) PID位置算法 离散公式: ;= 对于位置式算法,可以选择的功能有: a、滤波:同上为一阶惯性滤波 b、饱和作用抑制: (1) 遇限削弱积分法一旦控制变量进入饱和区,将只执行削弱积分项的运算而停止进行增大积分项的运算。具体地说,在计算Ui时,将判断上一个时刻的控制量Ui-1是否已经超出限制范围,如果已经超出,那么将根据偏差的符号,判断系统是否在超调区域,由此决定是否将相应偏差计入积分项。(2) 积分分离法在基本PID控制中,当有较大幅度的扰动或大幅度改变给定值时, 由于此时有较大的偏差,以及系统有惯性和滞后,故在积分项的作用下,往往会产生较大的超调量和长时间的波动。特别是对于温度、成份等变化缓慢的过程,这一现象将更严重。为此可以采用积分分离措施,即偏差较大的时,取消积分作用;当偏差较小时才将积分作用投入。 另外积分分离的阈值应视具体对象和要求而定。若阈值太大,达不到积分分离的目的,若太小又有可能因被控量无法跳出积分分离区,只进行PD控制,将会出现残差。 离散化公式:Δu(t) = q0e(t) + q1e(t-1) + q2e(t-2) 当|e(t)|≤β时 q0 = Kp(1+T/Ti+Td/T) q1 = -Kp(1+2Td/T) q2 = Kp Td /T 当|e(t)|>β时 q0 = Kp(1+Td/T) q1 = -Kp(1+2Td/T) q2 = Kp Td /T u(t) = u(t-1) + Δu(t) 注:各符号含义如下 u(t);;控制器的输出值。 e(t);控制器输入与设定值之间的误差。 Kp;;比例系数。 Ti;;;积分时间常数。 Td;;微分时间常数。 T;;;调节周期。 β;;; 积分分离阈值 (3) 有效偏差法当根据PID位置算法算出的控制量超出限制范围时,控制量实际上只能取边际值U=Umax,或U=Umin,有效偏差法是将相应的这一控制量的偏差值作为有效偏差值计入积分累计而不是将实际的偏差计入积分累计。因为按实际偏差计算出的控制量并没有执行。 如果实际实现的控制量为U=U(上限值或下限值),则有效偏差可以逆推出,即:= 然后,由该值计算积分项 3) 微分先行PID算法 当控制系统的给定值发生阶跃时,微分作用将导致输出值大幅度变化,这样不利于生产的稳定操作。因此在微分项中不考虑给定值,只对被控量(控制器输入值)进行微分。微分先行PID算法又叫测量值微分PID算法。公式如下: 离散化公式: 参数说明同上对于纯滞后对象的补偿 控制点采用了Smith预测器,使控制对象与补偿环节一起构成一个简单的惯性环节。PID参数整定(1) 比例系数Kc对系统性能的影响: 比例系数加大,使系统的动作灵敏,速度加快,稳态误差减小。Kc偏大,振荡次数加多,调节时间加长。Kc太大时,系统会趋于不稳定。Kc太小,又会使系统的动作缓慢。Kc可以选负数,这主要是由执行机构、传感器以控制对象的特性决定的。如果Kc的符号选择不当对象状态(pv值)就会离控制目标的状态(sv值)越来越远,如果出现这样的情况Kc的符号就一定要取反。 (2) 积分控制Ti对系统性能的影响: 积分作用使系统的稳定性下降,Ti小(积分作用强)会使系统不稳定,但能消除稳态误差,提高系统的控制精度。 (3) 微分控制Td对系统性能的影响: 微分作用可以改善动态特性,Td偏大时,超调量较大,调节时间较短。Td偏小时,超调量也较大,调节时间也较长。只有Td合适,才能使超调量较小,减短调节时间。

6,关于PID算法

所谓比例 ,就是调节量与调节系数成正比,加大比例系数的话肯定就加快调节了;但是为了不至于调节过量,引如了微分了积分调节,就是对应其中I D ,具体情况可以查查资料, 引入这些参数主要是为了保证控制系统的快速性以及稳定性 可以看看自动控制原理
http://www.ee.zsu.edu.cn/irp/uploadfile/netclass/CONTROL/lesson/ccs2/ccs2-2/ccs2-2-2/ccs2-2-2.htm
#include struct _pid { int pv; /*integer that contains the process value*/ int sp; /*integer that contains the set point*/ float integral; float pgain; float igain; float dgain; int deadband; int last_error; }; struct _pid warm,*pid; int process_point, set_point,dead_band; float p_gain, i_gain, d_gain, integral_val,new_integ;; void pid_init(struct _pid *warm, int process_point, int set_point) { struct _pid *pid; pid = warm; pid->pv = process_point; pid->sp = set_point; } void pid_tune(struct _pid *pid, float p_gain, float i_gain, float d_gain, int dead_band) { pid->pgain = p_gain; pid->igain = i_gain; pid->dgain = d_gain; pid->deadband = dead_band; pid->integral= integral_val; pid->last_error=0; } void pid_setinteg(struct _pid *pid,float new_integ) { pid->integral = new_integ; pid->last_error = 0; } void pid_bumpless(struct _pid *pid) { pid->last_error = (pid->sp)-(pid->pv); } float pid_calc(struct _pid *pid) { int err; float pterm, dterm, result, ferror; err = (pid->sp) - (pid->pv); if (abs(err) > pid->deadband) { ferror = (float) err; /*do integer to float conversion only once*/ pterm = pid->pgain * ferror; if (pterm > 100 || pterm < -100) { pid->integral = 0.0; } else { pid->integral += pid->igain * ferror; if (pid->integral > 100.0) { pid->integral = 100.0; } else if (pid->integral < 0.0) pid->integral = 0.0; } dterm = ((float)(err - pid->last_error)) * pid->dgain; result = pterm + pid->integral + dterm; } else result = pid->integral; pid->last_error = err; return (result); } void main(void) { float display_value; int count=0; pid = &warm; // printf("Enter the values of Process point, Set point, P gain, I gain, D gain \n"); // scanf("%d%d%f%f%f", &process_point, &set_point, &p_gain, &i_gain, &d_gain); process_point = 30; set_point = 40; p_gain = (float)(5.2); i_gain = (float)(0.77); d_gain = (float)(0.18); dead_band = 2; integral_val =(float)(0.01); printf("The values of Process point, Set point, P gain, I gain, D gain \n"); printf(" %6d %6d %4f %4f %4f\n", process_point, set_point, p_gain, i_gain, d_gain); printf("Enter the values of Process point\n"); while(count<=20) { scanf("%d",&process_point); pid_init(&warm, process_point, set_point); pid_tune(&warm, p_gain,i_gain,d_gain,dead_band); pid_setinteg(&warm,0.0); //pid_setinteg(&warm,30.0); //Get input value for process point pid_bumpless(&warm); // how to display output display_value = pid_calc(&warm); printf("%f\n", display_value); //printf("\n%f%f%f%f",warm.pv,warm.sp,warm.igain,warm.dgain); count++; } }
文章TAG:控制控制算法算法pid控制算法

最近更新

  • 数字化仪,数字化仪有什么用数字化仪,数字化仪有什么用

    数字化仪有什么用2,数字化仪是输入设备吗为什么3,什么是数字化仪4,数字化仪属于计算机的什么设备5,数字化仪的种类6,数字化仪的主要性能是什么1,数字化仪有什么用描点抄图薄板零件直接测绘自.....

    知识 日期:2023-08-16

  • app需要本地数据库吗,安卓app本地数据库app需要本地数据库吗,安卓app本地数据库

    开发app所需数据及数据来源和格式。※.需要本地数据库支持吗?※.app我一定要有服务器吗?关于app的数据是在开发过程中保存的,我们需要保存一些数据,比如一些设置信息和一些用户主动保存的.....

    知识 日期:2023-08-16

  • usb2.0四根数据线是,数据线usb2.0是什么意思usb2.0四根数据线是,数据线usb2.0是什么意思

    usb数据线中,哪两条usb四根线是电源线?2.颜色识别4102如下:红线:电1653源正极usb_vcc5v白线:负数据lineusb_data绿线:正版数据线usb_data黑线:接地usb_GND漆包铜右线:音频音频漆包线:音.....

    知识 日期:2023-08-16

  • 清理手机数据在哪里设置方法,手机清理了数据之后怎么恢复清理手机数据在哪里设置方法,手机清理了数据之后怎么恢复

    改手机如何彻底删除手机-3/Ba手机-3/彻底删除的方法是恢复手机并出厂。1.Android手机Ba手机-3/彻底清洁手机恢复出厂设置的步骤在-2,-1/恢复出厂设置Reset手机此时点击清除所有内容按钮.....

    知识 日期:2023-08-16

  • 数据库基础知识,关于数据库的知识数据库基础知识,关于数据库的知识

    关于数据库的知识2,什么是数据库3,数据库的基础知识都有那些4,数据库的基本知识5,数据库基础知识6,数据库基础知识1,关于数据库的知识DataBase有许多SqlServerORACLEMySqlAccess2,什么是数据.....

    知识 日期:2023-08-16

  • 苹果5关数据流量用不用关3g,苹果手机的数据流量在哪里打开苹果5关数据流量用不用关3g,苹果手机的数据流量在哪里打开

    苹果5如何使用3G流量Open流量?如果有3G信号,会自动使用3G。是否要关闭蜂窝移动电话数据?IPhone会默认使用3G蜂窝数据流量transmission数据,会导致耗电,因此,建议您在不需要使用手机上网功能.....

    知识 日期:2023-08-16

  • 数据安全品牌日,网络数据安全管理条例数据安全品牌日,网络数据安全管理条例

    数据安全的重要性数据安全是指保护数据免受损坏、丢失、泄漏、篡改和未授权访问的能力。数据安全对于企业的重要性?今年3月,特斯拉因为数据安全问题被推上舆论的风口浪尖,智能汽车数据安.....

    知识 日期:2023-08-16

  • 单片机c语言编程,单片机c程序设计单片机c语言编程,单片机c程序设计

    单片机c程序设计2,什么是c语言单片机编程3,c语言编程c51单片机4,单片机C语言编程5,单片机C语言程序6,单片机C程序1,单片机c程序设计没问题,正确!a和b都是10相等,执行a、b自加,所以a=11,b=112,什么.....

    知识 日期:2023-08-16