位置式和增量式PID控制器的详细解析

PID控制:一种调节器控制规律为比例、积分、微分的控制。其中:P:比例(proportion)I:积分(integral)D:微分(derivative)

u(t)=K_p[e(t) + \frac{1}{T_i}\int ^t_0e(t)dt + T_d\frac{de(t)}{d(t)}]

式子中Kp为比例系数,Ti为积分时间参数,Td为微分时间常数。

各参数的意义:

Kp:比例系数。一般增大比例系数,将加快系数的响应。

Ti:积分时间常数。一般地,积分控制通常与比例控制或比例和微分控制联合使用,构成PI或PID控制。增大积分时间常数有利于减小超调,减小振荡,使系统更稳定,缺点是要延长系统消除静差的时间。积分时间常数太小会降低系统的稳定性,增大系统的震荡次数。

Td:微分时间常数。一般微分控制和比例控制或比例积分控制联合使用,组成PD或PID控制。微分控制可以改善系统的动态特性。

PID常用的两种控制方式:

1.增量式PID

所谓增量,就是本次控制量和上次控制量的差值,常用于对电机的转速控制。

增量式PID是一种对控制量的增量进行PID控制的一种控制算法。

其公式为:

\Delta u = K_p\left\{​{e[n] - e[n-1]} \right\} + K_ie[n] + K_d\left\{ e[n] - 2e[n-1] + e[n-2] \right\}

根据公式,编写程序:

/*
增量式PID
P = Kp * (err - err_pre);
I = Ki * err;
D = Kd * (err - 2 * err_pre + err_pre_pre);
pwm = P + I + D;
*/
void PID
{
    err = speed_want - speed_now; // speed_now是反馈量,可以通过编码器采值等方式得到
    
    P = Kp * (err - err_pre);
    I = Ki * err;
    D = Kd * (err - 2 * err_pre + err_pre_pre);
    
    pwm_duty += (int)(P + I + D); //这里的加号就是增量式PID的体现

    err_pre_pre = err_pre;
    err_pre = err;
}

2. 位置式PID

与增量式不同,位置式PID不需要对控制量进行记忆,直接对误差进行计算得出期望的pwm。

位置式PID可以应用在舵机上。因为舵机本次的pwm输出值与上次pwm输出值关系不太,舵机需要的是快速转到某个角度。在实际使用中我们也常采用PD控制,即I值为0。

其公式:

u_k = K_pe[n] + K_ie[n\sum ^k_{j=0}e_j + K_d(e_k-e_{k-1})

根据公式,编写程序:

/*
位置式PID
P = Kp * err;
I = Ki * err_sum;
D = Kd * (err - err_pre_pre);
pwm = P + I + D;
*/
void PID
{
    err = posi_want - posi_now;
    
    P = Kp * err;
    I = Ki * err_sum;
    D = Kd * (err - err_pre_pre);
    
    pwm_duty = (int)(P + I + D);

    err_sum += err;
    err_pre = err;
}

//只使用PD控制
void PID
{
    err = posi_want - posi_now;
    
    P = Kp * err;
    D = Kd * (err - err_pre_pre);
    
    pwm_duty = (int)(P + D);

    err_pre = err;
}

物联沃分享整理
物联沃-IOTWORD物联网 » 位置式和增量式PID控制器的详细解析

发表评论