PID调节的理解

2019-10-15 17:21发布

准备要调平衡了,在yfrobot.com 上参考了他们的代码;
float PWM, PWM_L, PWM_R;
float err, speed_need = 0,turn_need = 0;  
float position_dot, position_dot_filter, position;
void PID_balance(float vertical)
{
    position_dot = (TIM2_Encoder_Read_1() + TIM4_Encoder_Read_2())*0.5;//编码器值读出
position_dot_filter *= 0.85;
position_dot_filter += position_dot*0.15;
position += position_dot_filter;  //电机行驶距离由position_dot_filter累加而来
position += speed_need; //给小车一定速度
if(position > 100000)            
{
     position = 100000;
}
else if(position < -100000)
{
     position = -100000;
}
err = Roll - vertical;  //得到实际偏差角度
if(err<-40 || err>40)               //角度过大,关闭电机
{  
     M1_1 = 1;
  M1_2 = 1; //电机1刹车
  M2_1 = 1;
  M2_2 = 1; //电机2刹车
     return;
}
PWM = err*PID_value.p
       + (gyro[0]-11)*0.0153*PID_value.d*0.1 //静止初始化时 gyrox=11       *0.0153将单位换算为(°/s)
       - position_dot_filter*PID_value.kp*0.1   
    - position*PID_value.kd*0.001;  
PWM_L = PWM + turn_need ;
PWM_R = PWM - turn_need ;
Motor_Speed_Control(PWM_L, PWM_R);   //电机输出
}

先说我的理解;这里PID引入一个角度环,一个速度环;如果只是站立,应该只有角度换就行了(没有突然施加的外力来打破平衡;)
那么,这里就可以理解为:PWM = P*角度+D*角速度;
那么,我想问,这跟增量式有什么关系?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。