PID控制参数如何设定调节.docx
《PID控制参数如何设定调节.docx》由会员分享,可在线阅读,更多相关《PID控制参数如何设定调节.docx(14页珍藏版)》请在冰点文库上搜索。
PID控制参数如何设定调节
PID控制参数如何设定调节
PID控制简介
目前工业自动化水平已成为衡量各行各业现代化水平的一个重要标志。
同时,控制理论的发展也经历了古典控制理论、现代控制理论和智能控制理论三个阶段。
智能控制的典型实例是模糊全自动洗衣机等。
自动控制系统可分为开环控制系统和闭环控制系统。
一个控控制系统包括控制器﹑传感器﹑变送器﹑执行机构﹑输入输出接口。
控制器的输出经过输出接口﹑执行机构﹐加到被控系统上﹔控制系统的被控量﹐经过传感器﹐变送器﹐通过输入接口送到控制器。
不同的控制系统﹐其传感器﹑变送器﹑执行机构是不一样的。
比如压力控制系统要采用压力传感器。
电加热控制系统的传感器是温度传感器。
目前,PID控制及其控制器或智能PID控制器(仪表)已经很多,产品已在工程实际中得到了广泛的应用,有各种各样的PID控制器产品,各大公司均开发了具有PID参数自整定功能的智能调节器(intelligentregulator),其中PID控制器参数的自动调整是通过智能化调整或自校正、自适应算法来实现。
有利用PID控制实现的压力、温度、流量、液位控制器,能实现PID控制功能的可编程控制器(PLC),还有可实现PID控制的PC系统等等。
可编程控制器(PLC)是利用其闭环控制模块来实现PID控制,而可编程控制器(PLC)可以直接与ControlNet相连。
还有可以实现PID控制功能的控制器,如Rockwell的Logix产品系列,可以直接与ControlNet相连,利用网络实现其远程控制功能。
1、开环控制系统
开环控制系统(open-loopcontrolsystem)指被控对象的输出(被控制量)对控制器(controller)的输出没有影响。
在这种控制系统中,不依赖将被控量反送回来以形成任何闭环回路。
2、闭环控制系统
闭环控制系统(closed-loopcontrolsystem)的特点是系统被控对象的输出(被控制量)会反送回来影响控制器的输出,形成一个或多个闭环。
闭环控制系统有正反馈和负反馈,若反馈信号与系统给定值信号相反,则称为负反馈(NegativeFeedback),若极性相同,则称为正反馈,一般闭环控制系统均采用负反馈,又称负反馈控制系统。
闭环控制系统的例子很多。
比如人就是一个具有负反馈的闭环控制系统,眼睛便是传感器,充当反馈,人体系统能通过不断的修正最后作出各种正确的动作。
如果没有眼睛,就没有了反馈回路,也就成了一个开环控制系统。
另例,当一台真正的全自动洗衣机具有能连续检查衣物是否洗净,并在洗净之后能自动切断电源,它就是一个闭环控制系统。
3、阶跃响应
阶跃响应是指将一个阶跃输入(stepfunction)加到系统上时,系统的输出。
稳态误差是指系统的响应进入稳态后﹐系统的期望输出与实际输出之差。
控制系统的性能可以用稳、准、快三个字来描述。
稳是指系统的稳定性(stability),一个系统要能正常工作,首先必须是稳定的,从阶跃响应上看应该是收敛的﹔准是指控制系统的准确性、控制精度,通常用稳态误差来(Steady-stateerror)描述,它表示系统输出稳态值与期望值之差﹔快是指控制系统响应的快速性,通常用上升时间来定量描述。
4、PID控制的原理和特点
在工程实际中,应用最为广泛的调节器控制规律为比例、积分、微分控制,简称PID控制,又称PID调节。
PID控制器问世至今已有近70年历史,它以其结构简单、稳定性好、工作可靠、调整方便而成为工业控制的主要技术之一。
当被控对象的结构和参数不能完全掌握,或得不到精确的数学模型时,控制理论的其它技术难以采用时,系统控制器的结构和参数必须依靠经验和现场调试来确定,这时应用PID控制技术最为方便。
即当我们不完全了解一个系统和被控对象﹐或不能通过有效的测量手段来获得系统参数时,最适合用PID控制技术。
PID控制,实际中也有PI和PD控制。
PID控制器就是根据系统的误差,利用比例、积分、微分计算出控制量进行控制的。
比例(P)控制
比例控制是一种最简单的控制方式。
其控制器的输出与输入误差信号成比例关系。
当仅有比例控制时系统输出存在稳态误差(Steady-stateerror)。
积分(I)控制
在积分控制中,控制器的输出与输入误差信号的积分成正比关系。
对一个自动控制系统,如果在进入稳态后存在稳态误差,则称这个控制系统是有稳态误差的或简称有差系统(SystemwithSteady-stateError)。
为了消除稳态误差,在控制器中必须引入“积分项”。
积分项对误差取决于时间的积分,随着时间的增加,积分项会增大。
这样,即便误差很小,积分项也会随着时间的增加而加大,它推动控制器的输出增大使稳态误差进一步减小,直到等于零。
因此,比例+积分(PI)控制器,可以使系统在进入稳态后无稳态误差。
微分(D)控制
在微分控制中,控制器的输出与输入误差信号的微分(即误差的变化率)成正比关系。
自动控制系统在克服误差的调节过程中可能会出现振荡甚至失稳。
其原因是由于存在有较大惯性组件(环节)或有滞后(delay)组件,具有抑制误差的作用,其变化总是落后于误差的变化。
解决的办法是使抑制误差的作用的变化“超前”,即在误差接近零时,抑制误差的作用就应该是零。
这就是说,在控制器中仅引入“比例”项往往是不够的,比例项的作用仅是放大误差的幅值,而目前需要增加的是“微分项”,它能预测误差变化的趋势,这样,具有比例+微分的控制器,就能够提前使抑制误差的控制作用等于零,甚至为负值,从而避免了被控量的严重超调。
所以对有较大惯性或滞后的被控对象,比例+微分(PD)控制器能改善系统在调节过程中的动态特性。
5、PID控制器的参数整定
PID控制器的参数整定是控制系统设计的核心内容。
它是根据被控过程的特性确定PID控制器的比例系数、积分时间和微分时间的大小。
PID控制器参数整定的方法很多,概括起来有两大类:
一是理论计算整定法。
它主要是依据系统的数学模型,经过理论计算确定控制器参数。
这种方法所得到的计算数据未必可以直接用,还必须通过工程实际进行调整和修改。
二是工程整定方法,它主要依赖工程经验,直接在控制系统的试验中进行,且方法简单、易于掌握,在工程实际中被广泛采用。
PID控制器参数的工程整定方法,主要有临界比例法、反应曲线法和衰减法。
三种方法各有其特点,其共同点都是通过试验,然后按照工程经验公式对控制器参数进行整定。
但无论采用哪一种方法所得到的控制器参数,都需要在实际运行中进行最后调整与完善。
现在一般采用的是临界比例法。
利用该方法进行PID控制器参数的整定步骤如下:
(1)首先预选择一个足够短的采样周期让系统工作﹔
(2)仅加入比例控制环节,直到系统对输入的阶跃响应出现临界振荡,记下这时的比例放大系数和临界振荡周期﹔
(3)在一定的控制度下通过公式计算得到PID控制器的参数。
PID参数的设定:
是靠经验及工艺的熟悉,参考测量值跟踪与设定值曲线,从而调整P\I\D的大小。
PID控制器参数的工程整定,各种调节系统中P.I.D参数经验数据以下可参照:
温度T:
P=20~60%,T=180~600s,D=3-180s
压力P:
P=30~70%,T=24~180s,
液位L:
P=20~80%,T=60~300s,
流量L:
P=40~100%,T=6~60s。
书上的常用口诀:
参数整定找最佳,从小到大顺序查
先是比例后积分,最后再把微分加
曲线振荡很频繁,比例度盘要放大
曲线漂浮绕大湾,比例度盘往小扳
曲线偏离回复慢,积分时间往下降
曲线波动周期长,积分时间再加长
曲线振荡频率快,先把微分降下来
动差大来波动慢。
微分时间应加长
理想曲线两个波,前高后低4比1
一看二调多分析,调节质量不会低
这里介绍一种经验法。
这种方法实质上是一种试凑法,它是在生产实践中总结出来的行之有效的方法,并在现场中得到了广泛的应用。
这种方法的基本程序是先根据运行经验,确定一组调节器参数,并将系统投入闭环运行,然后人为地加入阶跃扰动(如改变调节器的给定值),观察被调量或调节器输出的阶跃响应曲线。
若认为控制质量不满意,则根据各整定参数对控制过程的影响改变调节器参数。
这样反复试验,直到满意为止。
经验法简单可靠,但需要有一定现场运行经验,整定时易带有主观片面性。
当采用PID调节器时,有多个整定参数,反复试凑的次数增多,不易得到最佳整定参数。
下面以PID调节器为例,具体说明经验法的整定步骤:
⑴让调节器参数积分系数S0=0,实际微分系数k=0,控制系统投入闭环运行,由小到大改变比例系数S1,让扰动信号作阶跃变化,观察控制过程,直到获得满意的控制过程为止。
⑵取比例系数S1为当前的值乘以0.83,由小到大增加积分系数S0,同样让扰动信号作阶跃变化,直至求得满意的控制过程。
(3)积分系数S0保持不变,改变比例系数S1,观察控制过程有无改善,如有改善则继续调整,直到满意为止。
否则,将原比例系数S1增大一些,再调整积分系数S0,力求改善控制过程。
如此反复试凑,直到找到满意的比例系数S1和积分系数S0为止。
⑷引入适当的实际微分系数k和实际微分时间TD,此时可适当增大比例系数S1和积分系数S0。
和前述步骤相同,微分时间的整定也需反复调整,直到控制过程满意为止。
注意:
仿真系统所采用的PID调节器与传统的工业PID调节器有所不同,各个参数之间相互隔离,互不影响,因而用其观察调节规律十分方便。
PID参数是根据控制对象的惯量来确定的。
大惯量如:
大烘房的温度控制,一般P可在10以上,I=3-10,D=1左右。
小惯量如:
一个小电机带
一水泵进行压力闭环控制,一般只用PI控制。
P=1-10,I=0.1-1,D=0,这些要在现场调试时进行修正的。
提供一种增量式PID供参考
△U(k)=Ae(k)-Be(k-1)+Ce(k-2)
A=Kp(1+T/Ti+Td/T)
B=Kp(1+2Td/T)
C=KpTd/T
T采样周期Td微分时间Ti积分时间
用上面的算法可以构造自己的PID算法。
U(K)=U(K-1)+△U(K)
file:
///F|/共享之家/PID处理程序.txt
/*====================================================================================================
这是从网上找来的一个比较典型的PID处理程序,在使用单片机作为控制cpu时,请稍作简化,具体的PID
参数必须由具体对象通过实验确定。
由于单片机的处理速度和ram资源的限制,一般不采用浮点数运算,
而将所有参数全部用整数,运算到最后再除以一个2的N次方数据(相当于移位),作类似定点数运算,可
大大提高运算速度,根据控制精度的不同要求,当精度要求很高时,注意保留移位引起的“余数”,做好余
数补偿。
这个程序只是一般常用pid算法的基本架构,没有包含输入输出处理部分。
=====================================================================================================*/
#include
#include
/*====================================================================================================
PIDFunction
ThePID(比例、积分、微分)functionisusedinmainly
controlapplications.PIDCalcperformsoneiterationofthePID
algorithm.
WhilethePIDfunctionworks,mainisjustadummyprogramshowing
atypicalusage.
=====================================================================================================*/
typedefstructPID{
doubleSetPoint;//设定目标DesiredValue
doubleProportion;//比例常数ProportionalConst
doubleIntegral;//积分常数IntegralConst
doubleDerivative;//微分常数DerivativeConst
doubleLastError;//Error[-1]
doublePrevError;//Error[-2]
doubleSumError;//SumsofErrors
}PID;
/*====================================================================================================
PID计算部分
=====================================================================================================*/
doublePIDCalc(PID*pp,doubleNextPoint)
file:
///F|/共享之家/PID处理程序.txt
{
doubledError,
Error;
Error=pp->SetPoint-NextPoint;//偏差
pp->SumError+=Error;//积分
dError=pp->LastError-pp->PrevError;//当前微分
pp->PrevError=pp->LastError;
pp->LastError=Error;
return(pp->Proportion*Error//比例项
+pp->Integral*pp->SumError//积分项
+pp->Derivative*dError//微分项
);
}
/*====================================================================================================
InitializePIDStructure
=====================================================================================================*/
voidPIDInit(PID*pp)
{
memset(pp,0,sizeof(PID));
}
/*====================================================================================================
MainProgram
=====================================================================================================*/
doublesensor(void)//DummySensorFunction
{
return100.0;
}
voidactuator(doublerDelta)//DummyActuatorFunction
{}
voidmain(void)
{
PIDsPID;//PIDControlStructure
doublerOut;//PIDResponse(Output)
doublerIn;//PIDFeedback(Input)
PIDInit(&sPID);//InitializeStructure
sPID.Proportion=0.5;//SetPIDCoefficients
sPID.Integral=0.5;
sPID.Derivative=0.0;
sPID.SetPoint=100.0;//SetPIDSetpoint
for(;;){//MockUpofPIDProcessing
rIn=sensor();//ReadInput
rOut=PIDCalc(&sPID,rIn);//PerformPIDInteration
actuator(rOut);//EffectNeededChanges
}
}
#include /*commondefinesandmacros*/
#include"derivative.h" /*derivative-specificdefinitions*/
#include
//定义PID参数
#defineVV_KPVALUE3 //比例
#defineVV_KIVALUE40 //积分
#defineVV_KDVALUE3 //微分
#defineVV_MAX10000 //返回的最大值,是pwm的周期值
#defineVV_MIN0
#defineVV_DEADLINE0X08 //速度PID,设置死区范围
typedefstructPID //定义数法核心数据
{
signedintvi_Ref; //速度PID,速度设定值
signedintvi_FeedBack; //速度PID,速度反馈值
signedlongvi_PreError; //速度PID,前一次,速度误差,,vi_Ref-vi_FeedBack
signedlongvi_PreDerror;//速度PID,前一次,速度误差之差,d_error-PreDerror;
unsignedintv_Kp; //速度PID,Ka=Kp
unsignedintv_Ki; //速度PID,Kb=Kp*(T/Ti)
unsignedintv_Kd; //速度PID,
signedlongvl_PreU; //电机控制输出值
}PID;
PID sPID; // PIDControlStructure
voidPIDInit(void)
{
sPID.vi_Ref=0; //速度设定值
sPID.vi_FeedBack=0; //速度反馈值
sPID.vi_PreError=0; //前一次,速度误差,,vi_Ref-vi_FeedBack
sPID.vi_PreDerror=0; //前一次,速度误差之差,d_error-PreDerror;
sPID.v_Kp=VV_KPVALUE;
sPID.v_Ki=VV_KIVALUE;
sPID.v_Kd=VV_KDVALUE;
sPID.vl_PreU=0; //电机控制输出值
}
unsignedintv_PIDCalc(PID*pp)
{
signedlong error,d_error,dd_error;
error=(signedlong)(pp->vi_Ref-pp->vi_FeedBack);//偏差计算
d_error=error-pp->vi_PreError;
dd_error=d_error-pp->vi_PreDerror;
pp->vi_PreError=error;//存储当前偏差
pp->vi_PreDerror=d_error;
if((error-VV_DEADLINE));//设置调节死区
//速度PID计算
pp->vl_PreU+=(signedlong)( pp->v_Kp*d_error+pp->v_Ki*error +pp->v_Kd*dd_error);
elseif(pp->vl_PreU>=VV_MAX) //速度PID,防止调节最高溢出
pp->vl_PreU=VV_MAX;
elseif(pp->vl_PreU<=VV_MIN)//速度PID,防止调节最低溢出
pp->vl_PreU=VV_MIN;
else;
return(pp->vl_PreU ); //返回预调节占空比
voidmain(void){
/*putyourowncodehere*/
InitMCu();
IncPIDInit();
intg_CurrentVelocity=0; //全局变量也初始化
intg_Flag=0; //全局变量也初始化
EnableInterrupts;
While
(1)
{
if(g_Flag&&vi_FeedBack)
{
PWMOUT+= v_PIDCalc(PID*pp);
g_Flag&=~vi_FeedBack;
}
}
}
for(;;){
_FEED_COP();/*feedsthedog*/
}/*loopforever*/
/*pleasemakesurethatyouneverleavemain*/
}
PID控制器参数选择的方法很多,例如试凑法、临界比例度法、扩充临界比例度法等。
但是,对于PID控制而言,参数的选择始终是一件非常烦杂的工作,需要经过不断的调整才能得到较为满意的控制效果。
依据经验,一般PID参数确定的步骤如下:
(1)确定比例系数Kp
确定比例系数Kp时,首先去掉PID的积分项和微分项,可以令Ti=0、Td=0,使之成为
纯比例调节。
输入设定为系统允许输出最大值的60%~70%,比例系数Kp由0开始逐渐增大,直至系统出现振荡;再反过来,从此时的比例系数Kp逐渐减小,直至系统振荡消失。
记录此时的比例系数Kp,设定PID的比例系数Kp为当前值的60%~70%。
(2)