PID控制器 | 1.PID控制原理和基本实现

1.1 前言

PID控制器(比例-积分-微分控制器),由比例单元(P)、积分单元(I)和微分单元(D)组成,具有算法简单、鲁棒性好、可靠性高等特点。PID控制器主要适用于基本上线性,且动态特性不随时间变化的系统。

PID控制器的比例单元(P)、积分单元(I)和微分单元(D)分别对应目前误差、过去累计误差及未来误差。当被控对象的结构和参数不能完全掌握,或得不到精确的数学模型时,控制理论的其它技术难以采用时,系统控制器的结构和参数必须依靠经验和现场调试来确定,这时应用PID控制技术最为方便。即当我们不完全了解一个系统和被控对象,或不能通过有效的测量手段来获得系统参数时,一般认为PID控制器是最适用的控制器。通过整定PID控制器的三个参数Kp,Ki和Kd,从而调整控制系统,设法满足设计需求。

控制器的响应可以用控制器对误差的反应快慢、控制器过冲的程度及系统震荡的程度来表示。不过使用PID控制器不一定保证可达到系统的最佳控制,也不保证系统稳定性。有些应用只需要PID控制器的部分单元,这时将不需要单元的参数设为零即可。因此,PID控制器实际应用中也有PI控制器、PD控制器和P控制器等等。

 

1.2 PID算法简单原理

PID算法的执行流程非常直观和简单,即利用反馈来检测偏差信号,并通过偏差信号来控制被控量。而控制器本身就是比例、积分、微分三个环节的加和。PID控制框图如下:

PID控制器 | 1.PID控制原理和基本实现_第1张图片

根据上图我们考虑在某个时刻 t,此时的输入量为input(t),输出量为output(t),这样偏差量就是error(t) = input(t) - output(t)。于是PID的基本控制规律就可以表示为如下公式:

PID控制器 | 1.PID控制原理和基本实现_第2张图片

Kp: 比例增益

Ki: 积分增益

Kd: 微分增益

u: 输出量

t: 当前时间

e: 误差(设定值(SV) - 回授值(PV))

τ: 积分变数,数值从0到当前时间t

 

1.3 PID算法基本实现

1.3.1 位置型PID算法实现

/* 定义PID结构体 */
typedef struct
{
    float Kp;        //比例系数
    float Ki;        //积分系数
    float Kd;        //微分系数
    float SetValue;  //设定值
    float Error;     //本次偏差
    float LastError; //上一次偏差
    float Integral;  //偏差积分
    float Output;    //输出值
} PID_TypeDef;

/* 实现PID控制器 */
void PID_Calculate(PID_TypeDef *vPID, float ProcessVar)
{
    vPID->Error = vPID->SetValue - ProcessVar;
    vPID->Integral += vPID->Error;
    vPID->Output = vPID->Kp * vPID->Error + vPID->Ki * vPID->Integral + vPID->Kd * (vPID->Error - vPID->LastError);
    vPID->LastError = vPID->Error;
}

1.3.2 增量型PID算法实现

/* 定义PID结构体 */
typedef struct
{
    float Kp;        //比例系数
    float Ki;        //积分系数
    float Kd;        //微分系数
    float SetValue;  //设定值
    float Error;     //本次偏差
    float LastError; //上一次偏差
    float PreError;  //上上次偏差
    float Increment; //增量
    float Output;    //输出值
} PID_TypeDef;

/* 实现PID控制器 */
void PID_Calculate(PID_TypeDef *vPID, float ProcessVar)
{
    vPID->Error = vPID->SetValue - ProcessVar;
    vPID->Increment = vPID->Kp * (vPID->Error - vPID->LastError) + vPID->Ki * vPID->Error + vPID->Kd * (vPID->Error - 2.0f * vPID->LastError + vPID->PreError);
    vPID->Output += vPID->Increment;
    vPID->PreError = vPID->LastError;
    vPID->LastError = vPID->Error;
}

1.4 基本特点

1.4.1 位置型PID基本特点

(1)位置型PID的输出与整个过去的状态有关,用到了偏差的累加值,容易产生累积偏差;

(2)位置型PID适用于执行机构不带积分部件的对象;

(3)位置型PID的输出直接对应对象的输出,对系统的影响较大。

 

1.4.2 增量型PID基本特点

(1)增量型PID不需要做累加,控制量增量的确定仅与最近几次偏差有关,计算偏差的影响较小;

(2)增量型PID计算的是控制量的增量,对系统的影响相对较小;

(3)增量型PID易于实现手动到自动的无扰动切换。

 

欢迎关注微信公众号『OpenSSR』

你可能感兴趣的:(PID控制器,PID,PID控制器,自动控制)