一般PID的C語言實現

2021-07-09 08:30:46 字數 607 閱讀 9846

先看看pid的結構框圖:

pid是自動控制演算法裡面最經典,同時也是最簡單的乙個演算法。其經典與簡單程度類似物理學中的牛頓力學三大定律。

pid的中心思想是通過誤差來控制輸出,所以pid通常具有以下幾個關鍵的量。

1、輸入量r(in)

2、輸出量r(out)

3、誤差(error)=輸入量-輸出量

pid的控制率可以用以下公式描述:

由於我要用c語言對其進行描述,並在微控制器上執行,所以,必須將其變成離散的形式。

由上式,設取樣間隔為t,則在第k個t時刻。

偏差 err(k)=rin(k)-rout(k)

積分環節為 err(k)+err(k-1)+err(k-2).....

微分環節用斜率可以表示為err(k)-err(k-1)/t

從而可以得到pid的離散形式:

再設t/ti=ki td/t=kd 就有下式。

這是位置式的離散pid公式。

由位置式的pid公式 可以得到增量式的pid公式

△u(k)=

u(k)-u(k-1)得到下式:

注意 上式的kp ki kd已經發生變化。

上式就可以很方便的用c語言程式設計實現了。

C語言實現一般線性表的鏈式儲存

c語言實現一般線性表的順序儲存,以下是在vs2013編譯通過的,歡迎討論。有關資料結構的概念可看我的另一篇文章 ifndef linklist h define linklist h typedef void linklist typedef struct tag linklistnode link...

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

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

C語言 串匹配的一般方法

串的一般的模式匹配 思想 從主串s的第pos個位置起,和子串的第乙個字元比較,若相等,則逐個比較後面的字元 若不相等,則從主串的第pos 1個位置起,再重新和子串比較 include include includeint index char s,char t,int pos 求從第pos位置起,子...