自动驾驶机器人论坛

机器车技发网因自动驾驶而生.

您尚未登录。

#1 2020-12-09 16:07:00

xiaov
会员
注册时间: 2020-11-20
帖子: 4

关于增量式pi调节车速的几点理解

int Incremental_PI_B (int Encoder,int Target)
{    
     static int Bias,Pwm,Last_bias;
     Bias=Encoder-Target;                //计算偏差
     Pwm+=Velocity_KP*(Bias-Last_bias)+Velocity_KI*Bias;   //增量式PI控制器
     if(Pwm>7200)    Pwm=7200;
     if(Pwm<-7200)    Pwm=-7200;
     Last_bias=Bias;                       //保存上一次偏差
     return Pwm;                         //增量输出
}

看过很多代码  如上pi的增量式调节电机速度时候,会有些问题。
小车如果在一个有坡度的地方停车后。或者什么外力碰撞小车后,导致encoder 从编码读出来的脉冲计数。
假设 encoder =20 ,target =0;p=10 ,i =0.1;
通过代入计算可得到
Bias = 20;
pwm = 10*20 +0.1*20 = 202
当电机驱动器响应pwm值后。假设电机转的更快,那么这时车是停不了的。
所以车要有制动刹车功能,电机不转不管任何外力都不能迫使其转动。
也可以如下改动
int Incremental_PI_B (int Encoder,int Target)
{    
     static int Bias,Pwm,Last_bias;
         if(Target ==0)
             {
                  Bias= 0;Pwm=0;
                  Last_bias =0;
                  pwm =0;
                 return pwm;
             }
     Bias=Encoder-Target;                //计算偏差
     Pwm+=Velocity_KP*(Bias-Last_bias)+Velocity_KI*Bias;   //增量式PI控制器
     if(Pwm>7200)    Pwm=7200;
     if(Pwm<-7200)    Pwm=-7200;
     Last_bias=Bias;                       //保存上一次偏差
     return Pwm;                         //增量输出
}

离线

页脚