tag 标签: pid函数

相关博文
  • 热度 16
    2014-6-22 14:41
    1200 次阅读|
    0 个评论
    详细用法请联系我 作者: 单片机老兵  QQ号: 123904022 /**********************  声明结构变量 ************************/ struct PID {  float SetSpeed;     float ActualSpeed;     float err;              float err_last;         float Kp , Ki , Kd;       float voltage;          float integral;           }; /*** 初始化 ***/ void PID_init(void) {  Ud.SetSpeed = 0.0;  Ud.ActualSpeed = 0.0;  Ud.err = 0.0;  Ud.err_last = 0.0;  Ud.voltage = 0.0;  Ud.integral = 0.0;  Ud.Ep = 0.25;  Ud.Ei = 0.15;   Ud.Ed = 0.0;   }   /******************************************************************************* * Function Name  : UD ¿ØÖƺ¯Êý * Description    : UD ÎÞ¹¦·ÖÁ¿ * Input          : Ud.ActualSpeed = id_Park; ÎÞ¹¦·ÖÁ¿±Õ»·¼ì²âÖµ * Output         : Êä³ö = 0 * Return         : None    *******************************************************************************/ float Set_Potential(float speed) { Ud.SetSpeed = speed; arm_sub_f32(Ud.SetSpeed , Ud.ActualSpeed , Ud.err , 1); // DSP ¼ÆËã Ud.integral += Ud.err; Ud.voltage = Calculation(Ud.Ep , Ud.Ei , Ud.Ed , Ud.integral , Ud.err , Ud.err_last); // DSP ¼ÆËã Ud.err_last = Ud.err; Ud.ActualSpeed = (float)Ud.voltage * (float)1.0; return Ud.ActualSpeed; } /***************************** DSP PID 函数********************************************************** * Function Name  : Calculation浮点通用STM32F4xx ARM-DSP-PID 计算函数 * Description    : 详细用法请联系我  拥有者: 单片机老兵  QQ号: 123904022 * Input          : Kp  比例   Ki  积分  Kd  微分 * Input          : Err 本次偏差 , Integral 积分偏差 , Err_last 上一次偏差  * Output         : Adjust_the 调整值 * Return         : μ÷???μ *****************************************************************************************************/ float Calculation(float Kp ,float Ki , float Kd , float Integral , float Err , float Err_last) {   float Temp1;    // 临时变量 float Temp2;     // Adjust_the 调整值    arm_mult_f32(Kp , Err , Temp1 , 1);  arm_mult_f32(Ki , Integral , Temp2 , 1);  arm_add_f32(Temp1 , Temp2 , Temp1 , 1);     arm_sub_f32(Err , Err_last , Temp2 , 1); arm_mult_f32(Kd , Temp2 , Temp2 , 1);    arm_add_f32(Temp1 , Temp2 , Temp2 , 1); return(Temp2); }