增量式PID指数字控制器的输出只是控制量的增量∆uk。当执行机构需要的控制量是增量,而不是位置量的绝对数值时,可以使用增量式PID控制算法进行控制。

1、公式推导:

增量式PID控制算法可以通过位置式PID公式推导出。

①:当前误差采样后的输出值

②:上一次误差采样后的输出值

①-② 得出增量式PID的公式为:

简化后得:


2.代码实现:

 

float Kp=40,Ki=0.08,Kd=0.01;            //PID3个参数    
float Error=0,Error_1=0,Error_2=0;  //本次偏差  上次偏差  上上次偏差
float Uk=0,Uk1=0;										//输出值    偏差值


/***********************************************************************/
//*******函数名:void Temp_PID()
//*******用  途:对温度进行PID调节
//*******说  明:
//*******参  数:
//*******返回值:
/***********************************************************************/
void Temp_PID(uint16_t set_temp, uint16_t now_temp, uint8_t ctr)
{
	if(ctr == 1)//开启控制
	{
		Error=(float)(set_temp-now_temp);//当前温度减去上次问温度    
		Uk1=Kp*(Error-Error_1)+Ki*Error+Kd*(Error-2*Error_1+Error_2);   //增量式PID公式
		Uk+=Uk1;							//计算输出量

		if(Uk>99)							//限幅
		Uk=99;
		if(Uk<-99)							//限幅
		Uk=-99;

		if(Uk >= 0)
		{
			TIM_SetCompare3(TIM4,Uk);
			TIM_SetCompare4(TIM4,0);
		}
		else
		{
			TIM_SetCompare3(TIM4,0);
			TIM_SetCompare4(TIM4,0-Uk);
		}

		Error_2=Error_1;
		Error_1=Error;
	}
	else//关闭控制
	{
		Uk = 0;
		Uk1 = 0;
		Error = 0;
		Error_1 = 0;
		Error_2 = 0;
		TIM_SetCompare3(TIM4,0);
		TIM_SetCompare4(TIM4,0);
	}
}

 

发表回复

后才能评论