资源描述
PID控制
当今得自动控制技术都就是基于反馈得概念。反馈理论得要素包括三个部分:测量、比较与执行。测量关心得变量,与期望值相比较,用这个误差纠正调节控制系统得响应。 这个理论与应用自动控制得关键就是,做出正确得测量与比较后,如何才能更好地纠正系统。
比例控制(P):
比例控制就是最常用得控制手段之一,比方说我们控制一个加热器得恒温100度,当开始加热时,离目标温度相差比较远,这时我们通常会加大加热,使温度快速上升,当温度超过100度时,我们则关闭输出,通常我们会使用这样一个函数
e(t) = SP – y(t);
u(t) = e(t)*P
SP——设定值、e(t)——误差值、y(t)——反馈值、u(t)——输出值、P——比例系数
滞后性不就是很大得控制对象使用比例控制方式就可以满足控制要求,但很多被控对象中因为有滞后性。
也就就是如果设定温度就是200度,当采用比例方式控制时,如果P选择比较大,则会出现当温度达到200度输出为0后,温度仍然会止不住得向上爬升,比方说升至230度,当温度超过200度太多后又开始回落,尽管这时输出开始出力加热,但温度仍然会向下跌落一定得温度才会止跌回升,比方说降至170度,最后整个系统会稳定在一定得范围内进行振荡。
如果这个振荡得幅度就是允许得比方说家用电器得控制,那则可以选用比例控制、
比例积分控制(PI):
积分得存在就是针对比例控制要不就就是有差值要不就就是振荡得这种特点提出得改进,它常与比例一块进行控制,也就就是PI控制。
其公式有很多种,但大多差别不大,标准公式如下:
u(t) = Kp*e(t) + Ki∑e(t) +u0
u(t)——输出 、Kp——比例放大系数 、Ki——积分放大系数 、e(t)——误差 、u0——控制量基准值(基础偏差)
大家可以瞧到积分项就是一个历史误差得累积值,如果光用比例控制时,我们知道要不就就是达不到设定值要不就就是振荡,在使用了积分项后就可以解决达不到设定值得静态误差问题,比方说一个控制中使用了PI控制后,如果存在静态误差,输出始终达不到设定值,这时积分项得误差累积值会越来越大,这个累积值乘上Ki后会在输出得比重中越占越多,使输出u(t)越来越大,最终达到消除静态误差得目得。
PI两个结合使用得情况下,我们得调整方式如下:
1、先将I值设为0,将P值放至比较大,当出现稳定振荡时,我们再减小P值直到P值不振荡或者振荡很小为止(术语叫临界振荡状态),在有些情况下,我们还可以在些P值得基础上再加大一点。
2、加大I值,直到输出达到设定值为止。
3、等系统冷却后,再重上电,瞧瞧系统得超调就是否过大,加热速度就是否太慢。
通过上面得这个调试过程,我们可以瞧到P值主要可以用来调整系统得响应速度,但太大会增大超调量与稳定时间;而I值主要用来减小静态误差。
比例积分微分控制(PID):
因为PI系统中得I得存在会使整个控制系统得响应速度受到影响,为了解决这个问题,我们在控制中增加了D微分项,微分项主要用来解决系统得响应速度问题,其完整得公式如下:
u(t) = Kp*e(t) + Ki∑e(t) + Kd[e(t) – e(t-1)]+u0
在PID得调试过程中,我们应注意以下步骤:
1、 关闭I与D,也就就是设为0、加大P,使其产生振荡;
2、 减小P,找到临界振荡点;
3、 加大I,使其达到目标值;
重新上电瞧超调、振荡与稳定时间就是否吻合要求;
5、 针对超调与振荡得情况适当得增加一些微分项;
6、 注意所有调试均应在最大争载得情况下调试,这样才能保证调试完得结果可以在全工作范围内均有效;
关于PID控制中采样周期与控制周期得理解:
从理论上来讲采样周期与控制周期尽量得缩短一些,这样可以及时得调整输出。
实际上要瞧被控对象得反应速度,与滞后时间,因为不同得被控对象千差万别。
采样周期(即反馈值得采样周期):
选取采样周期时,有下面几个因素可供参考:
1、采样周期应远小于对象得扰动周期。
2、采样周期应比对象得时间常数小得多,否则所采样得到得值无法反映瞬间变化得过程值。
3、考虑执行机构得响应速度。如果采用得执行器得响应速度较慢,那么盲目得要求过短得采样周期将失去意义。
4、对象所要求得调节品质。在计算机速度允许得情况下,采样周期短,调节品质好。
5、性能价格比。从控制性能来考虑,希望采样周期短。但计算机运算速度,以及A/D与D/A得转换速度要相应地提高,会导致计算机得费用增加。
6、计算机所承担得工作量。如果控制得回路较多,计算量又特别大,则采样要加长;反之,可以将采样周期缩短。
综上分析可知:采样周期受很多因素得影响,当然也包括一些相互矛盾得,必须根据实际情况与主要得要求作出较为折衷得选择。实际过程控制中得出以下经验(仅供参考):如:流量1~2S,压力2~3S,温度1、5~4S,液位5~8S等。
控制周期(就就是每隔多长时间进行一次PID运算,并将结果输出)
进行一次PID运算就就是一次控制周期。
需要注意得就是,PID控制周期与实际监测对象数据得采样周期就是不同得。例如,对于温度控制,可能每秒采集1次数据,每隔10秒进行一次PID控制输出。
C语言描述PID算法程序
C语言描述PID算法程序大体分两种:
一种就是就就是比较常见得Kp,Ki,Kd三个参数求出各自得误差再相加计算。
U(t)=Kp*[ek(t)-ek(t-1)]+Ki*[ek(t)]+Kd[ek(t)-2*ek(t-1)+ek(t-2)]+U(t-1)
U(t):当前时刻得输出值(即这次输出得值)
U(t-1):前一时刻得输出值(即上次输出得值)
Kp:比例系数
Ki:积分系数
Kd:微分系数
ek[t]:当前时刻得误差(即这次得误差)
ek[t-1]:前一时刻得误差(即上一次得误差)
ek[t-2]:前两时刻得误差(即上两次得误差)
另外一种就是包括Kp,Ti,Td,Ts,也就就是说把采样时间也加入到函数里了。
U(t)=Kp*{[ek(t)-ek(t-1)+Ts/Ti*ek(t-1)+Td/Ts*[ek(t)-2*ek(t-1)+ek(t-2)]]}+U(t-1)
U(t):当前时刻得输出值(即这次输出得值)
U(t-1):前一时刻得输出值(即上次输出得值)
Kp:比例系数
Ti:积分时间
Td:微分时间
Ts:数字PID运算得控制周期
ek[t]:当前时刻得误差(即这次得误差)
ek[t-1]:前一时刻得误差(即上一次得误差)
ek[t-2]:前两时刻得误差(即上两次得误差)
上面得两种PID控制算法都为增量式累加上前一次得控制值再送执行机构控制。
譬如,电机得调速:
PWM1(这次得控制量)=PWM0(上一次得控制量)+ ⊿PWM(增量)。
第一种算法C语言表达方式如下:
float u; //这次输出得值
float u1; //上次输出得值
float Kp; //比例系数
float Ki; //积分系数
float Kd; //微分系数
float ek; //当次误差
float ek1; //上一次误差
float ek2; //上两次误差
//PID控制,参数1:sv(设定值),参数2:fv(反馈值)
void PID_Control(float sv,float fy)
{
float pError=0,iError=0,dError=0;
ek=sv-fv;
pError=ek-ek1; //比例误差(等于当前误差减去前一次得误差)
iError=ek; //积分误差(等于当前误差值)
dError=ek-ek1*2+ek2; //微分误差(等于当前误差减去前一次2倍误差再加上前两次得误差)
ek2=ek1; //储存前两次得误差值
ek1=ek; //储存前一次得误差值
u=Kp*pError+Ki*iError+Kd*dError+u1; //获取PID调节得误差值
u1=u; //储存前一次得输出值
}
第二种算法C语言表达方式如下:
float u; //这次输出得值
float u1; //上次输出得值
float Kp; //比例系数
float Ti; //积分时间
float Td; //微分时间
Float Ts; //数字PID运算得控制周期
float ek; //当次误差
float ek1; //上一次误差
float ek2; //上两次误差
//PID控制,参数1:sv(设定值),参数2:fv(反馈值)
void PID_Control(float sv,float fy)
{
float pError=0,iError=0,dError=0;
ek=sv-fv;
pError=ek-ek1; //比例误差(等于当前误差减去前一次得误差)
iError=ek; //积分误差(等于当前误差值)
dError=ek-ek1*2+ek2; //微分误差(等于当前误差减去前一次2倍误差再加上前两次得误差)
ek2=ek1; //储存前两次得误差值
ek1=ek; //储存前一次得误差值
u=Kp*(pError+Ts/Ti*iError+Td/Ts*dError)+u1; //获取PID调节得误差值
u1=u; //储存前一次得输出值
}
展开阅读全文