nannan

注册会员
  • 主题:12
  • 回复:16
  • 金钱:91
  • 积分:107
    前面两篇帖子具体介绍了 PID 和 PID 参数的具体调节,这节具体向大家展示 PID 的具体应用实例。
    我们一般需要电机以一定的转速运转,但电机具体的转速往往并不是我们设定的那个转速,也就是说一般会有一般的误差。在有些地方我们必须需要电机快速而且精确的达到我们需要的转速,这种情况下我们就需要 PID 去控制电机。
    我们知道 PID 控制,需要反馈值,


   
    在这里我们一般使用编码器去测电机的实际转速。
    PID 控制具体代码如下:
   
        void speed_ctrl(float SPEED)       //SPEED 就是你具体想要电机达到的转速
    {
       Speed_error=SPEED-zhuanshu;      // zhuansu 就是编码器测回来的电机的具体转速,这一块是偏差,作用是瞬间做出反应,偏差一旦产生控制器立即产生控                                                                     制作用,使控制量向减少偏差的方向变化。
       Speed_error_I+=Speed_error;         //这块是将存在的偏差不在的自加,相当于数学表达式的积分部分,作用是消除系统的误差,
       Speed_Now_error=Speed_error;
       Speed_Last_error=Speed_Now_error;
       Speed_deviation=Speed_Now_error-Speed_Last_error;     // 这一块是控制的微分部分,实际控制系统除了希望消除静态误差外,还要对偏差做出立即响应,                                                                                                     而且还要根据偏差的变化趋势预先给出适当的纠正,为了达到这个目的我们引入 微分。
       Speed_PID=SPEED+Speed_error*Speed_P+Speed_error_I*Speed_I+Speed_deviation*Speed_D;
              
       Speed_PID/=30;  
       if(Speed_PID>=100) // 为了让调节后的值不会超过 PWM 波的百分之百。
       Speed_PID=100;
       if(Speed_PID<=0)  //为了让调节后的值不会低于 PWM 波的最低值。
       Speed_PID=0;
        Motor_forward((int) Speed_PID) ; //将调节后的值赋予电机转速的函数。

      }


    P、I、D 参数的具体调节在前面的帖子有介绍,不会的可以去翻阅。
    参数调好后,通过编码器就可以看到电机会以我们设定的转速在旋转了。如果还和你想要的有些出入或者出入比较大,那就是参数还没有调好,再好好调节参数。
   

QQ截图20150706173307.png (11.54 KB, 下载次数: 171)

QQ截图20150706173307.png