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

2021-06-29 11:14:08 字數 536 閱讀 1632

在控制系統中很多地方都用到了pid控制器,那麼pid控制器的c語言實現方式是什麼呢?

什麼是pid呢?假設我們要通過控制pwm波的占空比控制輸出電壓。

typedef struct pid _tag pid;

double pidcalc( pid *pp, double nextpoint )

double sensor (void) // dummy sensor function

void actuator(double rdelta) // dummy actuator function

void main(void)}

大家讀了程式以後或許有乙個疑問,計算出來的rout怎麼對應成pwm的占空比呢。假設register的值0-0xffff對應占空比0-100%,rout等於500,當前register的值為0x2000。那麼可以將register的值增加500。一定要對rout的輸出值進行限制。

一般PID的C語言實現

先看看pid的結構框圖 pid是自動控制演算法裡面最經典,同時也是最簡單的乙個演算法。其經典與簡單程度類似物理學中的牛頓力學三大定律。pid的中心思想是通過誤差來控制輸出,所以pid通常具有以下幾個關鍵的量。1 輸入量r in 2 輸出量r out 3 誤差 error 輸入量 輸出量 pid的控制...

PID演算法的C語言實現六 抗積分飽和的PID優化

積分飽和通俗講就是系統在乙個偏差方向上的飽和,比如乙個系統設定了輸出不會超過100,但因為出現乙個方向上的偏差積分使得輸出超過了100,此時達到了飽和狀態,如果繼續在這個方向上積分會導致pid控制超過100系統卻執行在100,相當於積分調節對系統輸出沒有作用,就出現失控的狀態,這是系統不能接受的,而...

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

時間久了 具體對比 三 的不同點,有點忘了,今天先蹭個徽章 include include struct pid pid void pid init float pid realize float speed else 偏差絕對值不大於200 差距不大時 因為實際速度大於設定最大值 設定最大值應該不...