PID算法知识

    xiaoxiao2021-12-14  16

    基本思想:PID算法不但考虑控制对象当前状态(现在状态),而且还考虑控制对象过去一段时间的状态值(历史状态),和最近一段时间的状态值变化(预期),由这3方面共同决定当前的输出控制信号。

    一.计算:PIDout = Pout + Iout + Dout 

    Pout = Kp * Ek +OUT0.其中Kp为比例系数,Ek =Sv - Pv。OUT0为一个常数。

    Iout = Kp * Sk + OUT0.其中Kp为比例系数,Sk = (1/Ti) * (历史偏差之和)*T。其中T为采样周期(计算周期),Ti积分时间(相当于计算历史偏差时间的总时间)。

    Dout = Kp * Dk+ OUT0.其中Kp为比例系数,Dk = Td  * ((Ek-Ek-1)/T)。其中Ek-Ek-1为当前两次偏差之差,T为计算周期,Td微分常数。((Ek-Ek-1)/ T 反应了偏差的变化率)。

    合并后:

    PIDout = (Kp * EK) + ( Kp *(T/Ti) * (历史偏差Ek之和) ) + (Kp *(Td / T) * (Ek - Ek-1) ) + OUT0

    需要设定的值:Kp比例系数,T采样周期(计算周期),Ti积分时间,Td微分常数。算出的值可直接作为输出结果,因此称为位置式PID。

    增量式PID :

    DetPIDout = PIDoutK - PIDoutK-1 。带入到PIDout 公式后 DetPIDout = Kp *(Ek- Ek-1) + Kp *(T/Ti) * Ek + Kp *(Td/T) * (Ek -2Ek-1 +Ek-2)。从公式可知增量式PID算法简单一些,增量式PID一般用在有记忆功能的控制系统中。

    示例:下面是实际温控项目的参数设定

    void PID_Init(void){

    pid.Sv = 120;// 设定温度120度

    pid.Kp = 30;// 比例系数

    pid.T = 500;// PID计算周期 500ms,每隔500ms我们计算一次当前的温度偏差值Ek。

    pid.Ti = 5000000;//积分时间(可理解为历史偏差的时间是5000s)

    pid.Td = 1000;// 微分时间(作用调节因计算周期过长或过短对输出结果的影响:Td*((Ek - Ek-1) / T))

    pid.pwmcycle = 1000;// 单片机PWM输出的周期时间1000ms

    pid.OUT0 = 1;// 调节常数(避免设定值与当前值相等时,输出为0,此时需要保持输出一个维持结果的微信号)

    }

    由以上参数带入位置式PID计算公式可以得到的结果可直接作为pwm的控制信号。

    得到输出结果后,要做一下归并:

    out = Pout + Iout +Dout + pid.OUT0;

    if(out > pid.pwmcycle) // 输出结果大于pwm的周期

    {

        pid.OUT = pid.pwmcycle;// 把pwm的周期值作为输出结果

    }

    else if(out < 0)

    {

    pid.OUT = 0;// 控制信号归0

    }

    else // 计算结果是我们需要的值

    {

    pid.OUT = out;

    }

    pid.Ek-1 = pid.Ek ; // 把本次的偏差作为下次的偏差

    最后pid.OUT 要和pwm控制结合,在1ms中断中改变控制信号

    void PID_OUT(void) // 输出PID运算结果到负载,每1ms进中断调用此函数

    {

        u6 static pw;

        pw ++;

        if(pw >= pid.pwmcycle)

        {

            pw =0;

        }

        if(pw < pid.OUT)

        {

            pwm_ctr =1;// 开始加热

        }

        else

        {

            pwm_ctr = 0;// 关加热

        }

    }

    2017.09.06   PID算法实现制冷片恒温控制

    2018.0407 莫恩率雾化器加热丝使用的PID算法:

    转载请注明原文地址: https://ju.6miu.com/read-971733.html

    最新回复(0)