admin管理员组

文章数量:814300

位置式 PID 算法、恩智浦杯智能车电机PID

        由于计算机控制是一种采样控制, 它只能根据采样时刻的偏差计算控制量,而不能像模拟控制那样连续输出控制量量, 进行连续控制。 由于这一特点,积分项和微分项不能直接使用,必须进行离散化处理。如果采样周期足够小,则可以获得足够精确的结果,离散控制过程与连续过程十分接近。 

        表示的控制算法式直接给出的 PID 控制规律定义进行计算的,所以它给出了全部控制量的大小,因此被称为全量式或位置式 PID 控制算法。

        这种算法的缺点是: 由于全量输出, 所以每次输出均与过去状态有关, 计算时要对 ek 进行累加,工作量大; 并且,因为计算机输出的 对应的是执行机构的实际位置, 如果计算机出现故障,输出将大幅度变化,会引起执行机构的大幅度变化,有可能因此造成严重的生产事故,这在实生产际中是不允许的。增量式 PID 控制算法可以避免着重现象发生。
 

话不多说,直接上代码:

int SpeedPID(s32 GoalSpeed)                    //目标速度  速度PID调节,增量式
{s32 ActualSpeed;                           //实际参数double IncrementSpeed;                     //增加的速度Count=FTM_QUAD_get(FTM1);                  //获取脉冲数Speed = Count*144586/10000;                //获取速度//【Counter/512*0.419*6.283*0.02812*1000=(毫米/单位采样时间)】//【脉冲数÷一圈脉冲数×齿轮比×2π×轮胎半径(m)×1000倍放大】ActualSpeed = Speed;                       //获取实际速度err = GoalSpeed-ActualSpeed;               //目标值和实际数值的差IncrementSpeed = SpeedKP*(err-err_last)+SpeedKI*err+SpeedKD*(err-2*err_last+err_lastbefore);                    //需要增加的速度SpeedPWM += IncrementSpeed;                //目前给的速度=现在的速度+增加的速度err_lastbefore = err_last;                 //前前偏差值=前偏差值err_last = err;                            //前偏差值=偏差值if(SpeedPWM>240)                           //设置最大值{SpeedPWM = 240;}else if(SpeedPWM<-240)                     //设置最小值{SpeedPWM = -240;}PWM = (int)SpeedPWM;                       //更改pwmreturn PWM;
}

 

本文标签: 位置式 PID 算法恩智浦杯智能车电机PID