首先,就增量式PID的函數進行編寫:
頭文件,全局變量與宏定義如下:
#include "stdio.h"
#include "math.h"
void pid_init();//PID參數初始化
float pid_realise(float speed);//實現PID算法
#define value 1400.0
首先定義結構體pid的相關內容,后面將根據PID里面的相關參數進行修改調整,觀察波形情況。
struct {
float set_speed;//設定速度
float actual_speed;//實際速度
float error;//偏差
float error_next;//上一個偏差
float error_last;//上上一個偏差
float kp,ki,kd;//定義比例,積分,微分參數
}pid;
將PID結構體中的參數進行初始化設置,其中的參數是我經過調整后的參數
void pid_init()
{
pid.set_speed = 0;
pid.actual_speed = 10000.0;//原始值0.0
pid.error = 0.0;
pid.error_next = 0.0;
pid.error_last = 0.0;
//可調節PID 參數。使跟蹤曲線慢慢接近階躍函數200.0 //
pid.kp = 0.33333;//原始值0.2
pid.ki = 0.2111;//原始值0.1
pid.kd = 0.1;//原始值0.3
}
接下來實現PID實現的過程函數:
float pid_realise(float speed)//實現pid
{ float increment_speed;//增量
pid.set_speed = speed;//設置目標速度
pid.error = pid.set_speed - pid.actual_speed;
increment_speed = pid.kp*(pid.error-pid.error_next)+pid.ki*pid.error+\
pid.kd*(pid.error-2*pid.error_next+pid.error_last);//增量計算公式
pid.actual_speed+= increment_speed;
pid.error_last = pid.error_next;//下一次迭代
pid.error_next = pid.error;
return pid.actual_speed;
}
接著就是主函數,主函數這里將進行設置,邏輯如下:初始化參數,進行運算,運算次數設置為400次,可以提高,因為調整后的參數,后面又有break可以跳出while循環因此不需要在意這里,接下來就是不斷判斷期望值與實際值誤差書否在5以內
int main()
{ int count = 1;
int num = 0;
int type;
pid_init();
while(count<400)//進行400次 PID 運算可以提高,使初始值從0開始接近200.0
{
float speed = pid_realise(value);//設定值設定為200.0
type=abs(speed-value);
printf("%f\n",speed);//
if( type <= 5) ///判斷每次的誤差是否在5以內
{
num++;
if(num==6)
{
printf("run number is %d\r\n",count);
break;
}
else count++;
}
else count++;
}
}
運行函數之后得到如下圖所示的曲線,可以看到,假設單位階躍相應的過程中期望值發生改變,假設初始值為7000,要調整到理想值按照當前參數大約需要47次變換。
審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
PID
+關注
關注
35文章
1472瀏覽量
85524 -
函數
+關注
關注
3文章
4331瀏覽量
62622 -
編寫
+關注
關注
0文章
29瀏覽量
8450
發布評論請先 登錄
相關推薦
教你用C語言實現位置式PID和增量式PID
,對那些噪聲較大的系統一般不用微分, 或在微分起作用之前先對輸入信號進行濾波。ⅢPID算法代碼 PID 控制算法可以分為位置式 PID 和
發表于 05-30 08:00
如何實現增量式PID
雖然PID不是什么牛逼的東西,但是真心希望以后剛剛接觸這塊的人能盡快進入狀態。特地分享一些自己如何實現的過程。首先說說增量式PID的公式,這個關系到MCU算法公式的書寫,實際上兩個公式
發表于 09-13 08:19
增量式pid分析及參數整定
PID算法是工程控制領域常用的一種算法,其有著技術成熟,不需要建立數學模型,參數整定靈活,適用性強,魯棒性強,控制效果好等優點,得到了廣泛的應用,其參數整定對控制效果影響極大,針對增量式的PI
發表于 11-24 16:27
?1.6w次閱讀
增量與位置PID
最近看了一些文獻,發現其中一些文獻標題寫著是用增量式PID控制,但是看表達式乎仍是位置式PID控制。不知是他弄錯了,還是我的理解錯了,下面根
發表于 11-25 11:31
?1567次閱讀
使用單片機和Arduino實現增量式PID位置式PID算法和PID庫免費下載
本文檔的主要內容詳細介紹的是使用單片機和Arduino實現增量式PID位置式PID算法和PID庫
發表于 05-28 16:30
?69次下載
位置式PID與增量式PID的區別
PID(比例-積分-微分)控制器作為工業自動化領域中的核心控制算法,廣泛應用于各種需要精確控制的系統中。在PID控制器的實現中,有兩種主要的控制模式:位置式PID和
評論