1.简介
PID控制算法作为自动控制系统中广泛应用的一种控制算法,小到控制一个元件的温度,大到控制无人机的飞行姿态和飞行速度等等,都可以使用PID控制。控制器问世至今已有近 70 年历史,它以其结构简单、稳定性好、工作可靠、调整方便而成为工业控制的主要技术之一。
经过几十年的发展,PID 控制及其控制器或智能 PID 控制器(仪表)已经很多,产品已在工程实际中得到了广泛的应用,有各种各样的 PID 控制器产品,各大公司均开发了具有 PID 参数自整定功能的智能调节器(intelligent regulator),其中 PID 控制器参数的自动调整是通过智能化调整或自校正、自适应算法来实现。
2.PID控制原理及特点
PID,就是“比例(proportional)、积分(integral)、微分(derivative)”三个调节参数的缩写,而将偏差的比例(Proportion)、积分(Integral)和微分(Differential)通过线性组合构成控制量,用这一控制量对被控对象进行控制,这样的控制器便称 PID 控制器。
PID调节器是一种线性调节器,它将给定值r(t)与实际输出值c(t)的偏差的比例§、积分(I)、微分(D)通过线性组合构成控制量,对控制对象进行控制。
(1)PID控制器的微分方程
(2)PID调节器的传递函数
(3)PID调节器各校正环节的作用
1.比例环节:即时成比例地反应控制系统的偏差信号e(t),偏差一旦产生,调节器立即产生控制作用以减小偏差。
数学表达式:
2.积分环节:主要用于消除静差,提高系统的无差度。积分作用的强弱取决于积分时间常数TI,TI越大,积分作用越弱,反之则越强。
数学表达式:
3.微分环节:能反应偏差信号的变化趋势(变化速率),并能在偏差信号的值变得太大之前,在系统中引入一个有效的早期修正信号,从而加快系统的动作速度,减小调节时间。
数学表达式:
3.数字PID控制器
在计算机控制系统中,由于控制是使用采样控制,它只能根据采样时刻的偏差计算控制量,而不能像模拟控制那样连续输出控制量量,进行连续控制。所以数字PID控制也属于离散型控制系统。数字型PID控制算法可分为位置式PID和增量式PID控制算法。
- 位置式PID:位置式PID控制的输出与整个过去的状态有关,用到了误差的累加值;
- 增量式PID:而增量式PID的输出只与当前拍和前两拍的误差有关,
(1) 位置式PID
由于是离散型控制系统,积分项和微分项不能直接使用,必须进行离散化处理。离散化处理的方法为:以 T 作为采样周期,k 作为采样序号,则离散采样时间 kT 对应着连续时间t,用矩形法数值积分近似代替积分,用一阶后向差分近似代替微分,可作如下近似变换:
根据以上公式的转换,便可得到离散的PID表达式
位置式PID算法的特点:
由于全量输出,所以每次输出均与过去状态有关,计算时要对ek进行累加,工作量大;并且,因为计算机输出的uk 对应的是执行机构的实际位置,如果计算机出现故障,输出的 uk将大幅度变化,会引起执行机构的大幅度变化,有可能因此造成严重的生产事故,这在实生产际中是不允许的。
(2) 增量式PID
所谓增量式 PID 是指数字控制器的输出只是控制量的增量∆uk。当执行机构
需要的控制量是增量,而不是位置量的绝对数值时,可以使用增量式PID控制算法进行控制。
增量式 PID 控制算法可以通过位置式PID公式推导出。由位置式PID公式可以得到控制器的第 k-1 个采样时刻的输出值为:
增量式PID算法的特点:
增量式 PID 控制算法与位置式 PID 算法公式相比,如果计算机控制系统采用恒定的采样周期 T,一旦确定Kp、Ti、Td参数,只要使用前后三次测量的偏差值,就可以由增量式PID公式求出控制量。计算量小的多,因此在实际中得到广泛的应用。
4.实例讲解
下面列举一个温度控制实例来讲解增量式PID控制算法的应用。
要使用 PID 算法控制的系统某个参数,必须有该参数的相关反馈变量。比如,现在要控制水箱的温度,那我们就得通过温度传感器采集得到的反馈数据。通过设定水箱的目标温度,采用增量式 PID控制算法,控制水箱的加温元件,使得水箱在不同的外界温度下还是保持在目标速度附近波动。
(1)设置PID参数及变量
首先,我们定义温度的目标温度、PID是比例、积分、微分常数,及前后三次偏差值
int16 High_temp = 50; //预设温度上限
int16 Low_temp = 30; //预设温度下限
int16 Set_temp = 45; //设置目标温度
int16 Proportion = 64; // 比例常数 Proportional Const
int16 Integral = 0; // 积分常数 Integral Const
int16 Derivative = 54; // 微分常数 Derivative Const
float LastError; // Error[-1]
float PrevError; // Error[-2]
float SumError; // Sums of Errors
(2)PID运算函数
在实际运算时,由于水具有很大的热惯性,而且PID 运算中的I(积分项)具有非常明显的延迟效应,积分项常数不宜过大或者可直接省略积分环节,下面C 代码所示为PD 控制的实现过程:
float PID_Calc(float NextPoint ,float SetPoint)
{
//增量法计算公式:
//Pdt=Kp*[E(t)-E(t-1)]+Ki*E(t)+Kd*[E(t)-2*E(t-1)+E(t-2)]
float D_Error,Error;
float II;
Error = SetPoint-NextPoint; //偏差
SumError+=Error; // 积分
D_Error =LastError-PrevError; // 当前微分
PrevError = LastError;
LastError = Error;
II = Integral*SumError/10000.0; //积分缩小10000倍
if(II>30) //积分饱和限制
{
II=30;
}
return (Proportion*Error+II+Derivative*D_Error);
}
(3)水箱实际温度控制
水箱的水温加热棒控制采用PWM的控制,PWM占空比越大,加热速度越快。以下函数为当目标温度大于实际温度时,PID控制器工作,对加温进行控制;当目标温度小于实际温度时,PWM占空比为0,停止加热。
void Control_Temp(void)
{
Now_temp = Temp_numbe;
Target_temp = Set_temp;
if(Now_temp>High_temp)
{
PWM_duty = 0;
}
else
{
Temp_Out = PID_Calc(Now_temp,Target_temp);
if(Temp_Out >= 100) Temp_Out = 100;
else if(Temp_Out <=0) Temp_Out = 0;
//不同的温度设置不同的比例补偿热量损失
//Temp_Out = Temp_Out+Target_temp/80.0*20;
PWM_duty = (int)Temp_Out;
}
}
通过以上三个步骤,然后设定适当的采样时间,便完成了PID控制算法的实现。然后我们便可根据实际的控制环境,对比例、积分、微分参数逐一进行整定。
如果您喜欢,可关注个人公众号“电子应用学习馆”,获取更多的资料例程。