求大佬帮我分析这段代码

2019-07-21 07:11发布

这个是直线倒立摆的卖家提供的源代码中Control部分里的位置PD控制部分。
Encoder应该是读电机的现在位置(转动角度)。
Position_Zero是10000,是电机的初始位置。
我不理解这段算法的过程。
麻烦详细地讲解一下。
谢谢!


函数功能:位置PD控制
入口参数:编码器
返回  值:位置控制PWM
作    者:平衡小车之家
**************************************************************************/
int Position(int Encoder)
{  
   static float Position_PWM,Last_Position,Position_Bias,Position_Differential;
         static float Position_Least;
          Position_Least =Encoder-Position_Zero;             //电机转动的量,Position_Zero:电机初始位置
    Position_Bias *=0.8;                  
    Position_Bias += Position_Least*0.2;                     //===一阶低通滤波器  
          Position_Differential=Position_Bias-Last_Position;
          Last_Position=Position_Bias;
                Position_PWM=Position_Bias*Position_KP+Position_Differential*Position_KD; //===速度控制       
          return Position_PWM;
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。