C語言實現PID控制基本(四) 梯形演算法

2021-09-28 23:28:03 字數 1062 閱讀 6128

時間久了 ,具體對比(三)的不同點,有點忘了,今天先蹭個徽章

#include

#include

struct _pid

pid;

void

pid_init()

float

pid_realize

(float speed)

else

//偏差絕對值不大於200 差距不大時}}

// 因為實際速度大於設定最大值 設定最大值應該不比設定速度小 所以偏差err一定不大於0 存在等於0 當存在等於0時 不累加

else

if(pid.actualspeed//實際速度小於設定最小值 未達到波動範圍最小值 需要加速

else

// 偏差絕對值不大於200 err 小於0 偏差不大}}

else

//實際速度不大於設定值最大值也不小於設定最小值 在某一近似範圍

else

// 偏差絕對值不大於200 實際速度跟設定速度偏差不大

} pid.voltage=pid.kp*pid.err+index*pid.ki*pid.integral/

2+pid.kd*

(pid.err-pid.err_last)

;//梯形積分

//電壓值(預計是給電機電壓轉換值)= 比例係數 * 偏差 + 係數0(1)*積分係數*積分值/2 + 微分*(偏差-上一次偏差)

pid.err_last=pid.err;

pid.actualspeed=pid.voltage*

1.0;

//預計是電壓換算速度公式 1.0為某因式

return pid.actualspeed;

}void

baocun

(float speed)

//儲存資料

intmain()

system

("pause");

return0;

}

C語言實現PID控制基本(三) 設定偏差範圍

增加了穩定調節範圍,在範圍內與範圍外變化率不同 include include struct pid pid void pid init float pid realize float speed else 偏差絕對值不大於200 差距不大時 因為實際速度大於設定最大值 設定最大值應該不比設定速度小...

PID演算法的C語言實現方式

在控制系統中很多地方都用到了pid控制器,那麼pid控制器的c語言實現方式是什麼呢?什麼是pid呢?假設我們要通過控制pwm波的占空比控制輸出電壓。typedef struct pid tag pid double pidcalc pid pp,double nextpoint double sen...

C語言實現動畫控制

如果說萬事俱備了,我們就可以開始了。easyx的壓縮包裡面有乙個幫助文件很有用,但屬於字典式說明,不太好查閱,希望正在用easyx的同行們也多分享一些資源。在此提供乙個沿著指定的半徑依次畫12個不同色彩的圓並依次擦除的小動畫程式,由於需要學習的地方很多,我把不太容易理解的地方都加了注釋,根據函式名非...