直流电机PID控制例程程序注释

基本算法

本例采用了增量式PID算法,算式如下: 
PIDOUT = basicValue + Kp*d_error + Ki*error + Kd*dd_error

其中: 
PIDOUT:PID输出控制参数,为PWM宽度的调整量 
Kp:比例调节参数 
Ki:积分调节参数 
Kd:微分调节参数 
error:误差量(为期望速度-实际速度,可以为正数或负数) 
d_error:本次误差量与上次误差量之差(error-pre_error) 
dd_error:上次误差量与上上次误差量之差(pre_error-pre_pre_error

控制程序

void SpeedAdjust()
{
    long d_error,dd_error,error;        //声明变量
    error = (int)(speed_ept - now_speed);           //计算本次误差(期待速度-当前速度)
    d_error = error - pre_error;        //本次误差与上次误差之差
    dd_error = pre_error - pre_pre_error;       //上次误差与上上次误差之差
    pre_error = error;          //将本次误差赋值给上次误差(下次计算用)
    pre_pre_error = pre_error;      //将上次误差赋值给上上次误差(下次计算用)
    pwm_tmp = pwm_tmp + PID_P*d_error + PID_I*error + PID_D*dd_error;       //计算pwm宽度调整量
    if(now_speed>22)        //如果当前速度大于22
    {
        Set_DCMotor(0,0);       //不调整电机
    }
    else        //否则
    {
        if(pwm_tmp>=0)      //如果pwm宽度调整为正(增加宽度)
        {
            Set_DCMotor(pwm_tmp,0);     //增加直流电机转速
        }
        else        //否则
        {
            Set_DCMotor(pwm_tmp,1);     //降低直流电机转速
        }
    }
    before_speed = now_speed;       //讲本次速度赋值给上次速度(下次使用)
}

转自:http://blog.csdn.net/lczdk/article/details/54924825


你可能感兴趣的:(常用程序,算法)