实例详解PID控制算法的应用

1.简介
PID控制算法作为自动控制系统中广泛应用的一种控制算法,小到控制一个元件的温度,大到控制无人机的飞行姿态和飞行速度等等,都可以使用PID控制。控制器问世至今已有近 70 年历史,它以其结构简单、稳定性好、工作可靠、调整方便而成为工业控制的主要技术之一。
经过几十年的发展,PID 控制及其控制器或智能 PID 控制器(仪表)已经很多,产品已在工程实际中得到了广泛的应用,有各种各样的 PID 控制器产品,各大公司均开发了具有 PID 参数自整定功能的智能调节器(intelligent regulator),其中 PID 控制器参数的自动调整是通过智能化调整或自校正、自适应算法来实现。

2.PID控制原理及特点
PID,就是“比例(proportional)、积分(integral)、微分(derivative)”三个调节参数的缩写,而将偏差的比例(Proportion)、积分(Integral)和微分(Differential)通过线性组合构成控制量,用这一控制量对被控对象进行控制,这样的控制器便称 PID 控制器。
实例详解PID控制算法的应用_第1张图片
PID调节器是一种线性调节器,它将给定值r(t)与实际输出值c(t)的偏差的比例§、积分(I)、微分(D)通过线性组合构成控制量,对控制对象进行控制。
(1)PID控制器的微分方程
实例详解PID控制算法的应用_第2张图片
(2)PID调节器的传递函数
实例详解PID控制算法的应用_第3张图片
(3)PID调节器各校正环节的作用
1.比例环节:即时成比例地反应控制系统的偏差信号e(t),偏差一旦产生,调节器立即产生控制作用以减小偏差。
数学表达式: 在这里插入图片描述
2.积分环节:主要用于消除静差,提高系统的无差度。积分作用的强弱取决于积分时间常数TI,TI越大,积分作用越弱,反之则越强。
数学表达式: 在这里插入图片描述
3.微分环节:能反应偏差信号的变化趋势(变化速率),并能在偏差信号的值变得太大之前,在系统中引入一个有效的早期修正信号,从而加快系统的动作速度,减小调节时间。
数学表达式: 在这里插入图片描述

3.数字PID控制器
在计算机控制系统中,由于控制是使用采样控制,它只能根据采样时刻的偏差计算控制量,而不能像模拟控制那样连续输出控制量量,进行连续控制。所以数字PID控制也属于离散型控制系统。数字型PID控制算法可分为位置式PID和增量式PID控制算法。

  1. 位置式PID:位置式PID控制的输出与整个过去的状态有关,用到了误差的累加值;
  2. 增量式PID:而增量式PID的输出只与当前拍和前两拍的误差有关,

(1) 位置式PID
由于是离散型控制系统,积分项和微分项不能直接使用,必须进行离散化处理。离散化处理的方法为:以 T 作为采样周期,k 作为采样序号,则离散采样时间 kT 对应着连续时间t,用矩形法数值积分近似代替积分,用一阶后向差分近似代替微分,可作如下近似变换:
实例详解PID控制算法的应用_第4张图片
根据以上公式的转换,便可得到离散的PID表达式
实例详解PID控制算法的应用_第5张图片
位置式PID算法的特点:
由于全量输出,所以每次输出均与过去状态有关,计算时要对ek进行累加,工作量大;并且,因为计算机输出的uk 对应的是执行机构的实际位置,如果计算机出现故障,输出的 uk将大幅度变化,会引起执行机构的大幅度变化,有可能因此造成严重的生产事故,这在实生产际中是不允许的。

(2) 增量式PID
所谓增量式 PID 是指数字控制器的输出只是控制量的增量∆uk。当执行机构
需要的控制量是增量,而不是位置量的绝对数值时,可以使用增量式PID控制算法进行控制。
增量式 PID 控制算法可以通过位置式PID公式推导出。由位置式PID公式可以得到控制器的第 k-1 个采样时刻的输出值为:
实例详解PID控制算法的应用_第6张图片
增量式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控制算法的实现。然后我们便可根据实际的控制环境,对比例、积分、微分参数逐一进行整定。

如果您喜欢,可关注个人公众号“电子应用学习馆”,获取更多的资料例程。
在这里插入图片描述

你可能感兴趣的:(单片机应用,算法)