stm32控制器下經常會用到對溫度控制,適度控制,轉速控制等需要自動控制相關的操作,因此在使用中需要不斷提高對自動控制 原理部分的學習,一個好的自動控制系統包含三個 主要因素:穩,快,準。穩即系統的穩定性,快即系統的快速性,準即控制的準確性。
在自動控制中比例增益,積分時間,微分時間三個主要變量。下面就這三個變量進行動態展示。
如上圖所示,假設在單位階躍響應下,比例控制幅值,kp越大值越高相關的,積分時間控制精確度,數值越大波形超調量越大,微分時間控制波形的平緩程度。
//實現增量式PID算法
#include "stdio.h"
void pid_init();//PID參數初始化
float pid_realise(float speed);//實現PID算法
struct {
float set_speed;//設定速度
float actual_speed;//實際速度
float error;//偏差
float error_next;//上一個偏差
float error_last;//上上一個偏差
float kp,ki,kd;//定義比例,積分,微分參數
}pid;
int main()
{
pid_init();
int count = 0;
while(count<400)//進行400次 PID 運算,使初始值從0開始接近200.0
{
float speed = pid_realise(200.0);//設定值設定為200.0
printf("%f\n",speed);//輸出每一次PID 運算后的結果
count++;
}
}
void pid_init()
{
pid.set_speed = 0.0;
pid.actual_speed = 0.0;
pid.error = 0.0;
pid.error_next = 0.0;
pid.error_last = 0.0;
//可調節PID 參數。使跟蹤曲線慢慢接近階躍函數200.0 //
pid.kp = 0.2;
pid.ki = 0.01;
pid.kd = 0.2;
}
float pid_realise(float speed)//實現pid
{
pid.set_speed = speed;//設置目標速度
pid.error = pid.set_speed - pid.actual_speed;
float increment_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;
}
運行數據得到圖標如下 :
審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
控制器
+關注
關注
112文章
16395瀏覽量
178482 -
STM32
+關注
關注
2270文章
10906瀏覽量
356530 -
PID
+關注
關注
35文章
1472瀏覽量
85604
發布評論請先 登錄
相關推薦
教你用C語言實現位置式PID和增量式PID
控制器”,拿控制電機來說,參考下面模型:下面引用一段網上經典的話:在工業應用中PID及其衍生算法是應用最廣泛的算法之一,是當之無愧的萬能算法
發表于 05-30 08:00
如何使用免疫粒子群優化算法實現增量式的PID控制
基于粒子群優化算法的收斂速度快簡單易實現的特點和免疫算法的免疫記憶、免疫自我調節和多峰值收斂的特點,本文設計出免疫粒子群算法,并將其應用于PID
發表于 11-01 15:41
?7次下載
使用單片機和Arduino實現增量式PID位置式PID算法和PID庫免費下載
本文檔的主要內容詳細介紹的是使用單片機和Arduino實現增量式PID位置式PID
發表于 05-28 16:30
?69次下載
評論