㈠ 廣義預測控制+經典PID控制如何用matlab編程實現在工業上如何實現控制(硬體平台)請這方面的高手幫助
廣義預測控制需要實現四個功能:1、參數估計,可以用遞推最小二乘法實現;2、使用丟番圖方程對模型分解,分解為當前狀態和歷史輸入對模型未來輸出值的作用公式,未來輸入對模型未來輸出值的作用公式;推導過程過於繁瑣,可以直接套用公式計算。3、參考軌跡生成,可以使用下面公式遞推得到:r(n)=(1-k)*y(n-1)+k*(s-y(n-1)),其中k為時間常量,決定系統的調節速度,s為設定值。4、最優值計算,可以直接套用公式。實現過程:首先辨識系統模型,然後使用丟番圖方程對辨識得到的模型進行分解,計算參考軌跡,最後把參考估計和分解後的系統模型帶入公式得到最優輸出值(其實是次優解),如此反復即可實現預測控制。
經典PID計算:可以使用增量式的公式:y(n)=y(n-1)+Kp*[e(n)-e(n-1)]+Ki*e(n)+Kd*[e(n)+e(n-2)-2*e(n-1)]
需要說明廣義預測控制和PID控制輸出都需要設置輸出值限幅。
工業實現:可以用c語言編寫程序作為控制軟體的控制代碼,硬體平台可以是一台工控機或者PLC,另外也有這方面的軟體包,不過很貴。
㈡ 哪位大神,求幫忙啊,怎樣編程實現PID控制三軸轉台伺服控制系統非常感謝啊,5分
我不太懂三軸轉台伺服控制系統,只是懂點PID。
下面是一個C#版的PID控制器,我用它來控制網路爬蟲的抓取速度,你可以很輕易地把它翻譯成C語言。
使用的時候需要兩個步驟:一、初始化。二、定時測量控制系統的值(比如速度、溫度等),代入PID控制器,生成新的控制因素。
初始化:其中SpeedSetting是你要設置的抓取速度,如果是你的控制系統,那就是你的系統值。IntervalTime 是控制因素,我把它作為一個讀取一個網頁後的等待時間來控制爬蟲速度。如果是你的系統,那就是通過它的改變來控制系統的值。初始化代碼:
PID_Con = new PIDControler(SpeedSetting, IntervalTime , -0.1f , -0.05f , 0.0f);
PID_Con.LimitLow = 0.2f;
PID_Con.LimitHigh = 100.0f;
定時測量: 其中value就是測量值,可以使速度、溫度等,或者你的控制系統所要控制的量
float value = (float)(UrlCount - LastUrlCount); //計算當前時間間隔內抓取網頁數量
IntervalTime = PID_Con.Observation(value); //將測量值(或者觀察值)帶入PID控制器,獲取新的控制因素的值
LastUrlCount = UrlCount;
在你的系統裡面,可以類比來實現。
public class PIDControler
{
public float LimitLow;//上限
public float LimitHigh;//下限
private float Kp;//差值系數
private float Ki;//積分系數
private float Kd;//微分系數
private float ControlParam;//控制因子
private float SettingValue;//設置值
private float LastDiff;//上一次的差值
private float LastSumDiff;//上一次差值的積分
public PIDControler(float sets, float init,float p, float i, float d)
{
LimitLow = 0.0f; LimitHigh = 1000.0f;
SettingValue = sets; ControlParam = init;
Kp = p; Ki = i; Kd = d;
LastDiff = 0.0f; LastSumDiff = 0.0f;
}
public float Observation(float value)
{
float diff=(SettingValue - value);
if (Math.abs(diff / SettingValue) < 0.01) //控制差值積分下限
LastSumDiff = 0.0f;
else if (Math.abs(LastSumDiff) > SettingValue*2)//控制差值積分上限
LastSumDiff /= 2.0f;
else
LastSumDiff += diff; //差值積分
ControlParam += Kp * diff + Ki * LastSumDiff+Kd*(diff-LastDiff); //計算控制因素
if (ControlParam < LimitLow) ControlParam = LimitLow; //限制控制因素上限
if (ControlParam > LimitHigh) ControlParam = LimitHigh; //限制控制因素下限
LastDiff = diff;
return ControlParam; //返回控制因素
}
}
㈢ st編程語言入門教學
ST編程語言入門教學旨在幫助初學者掌握ST語言的基本概念與基礎知識。這部分內容將涵蓋ST語言的基礎語法,包括變數、表達式、操作符、邏輯結構、數據類型和控制語句等。通過實例演示,使學習者能夠更好地理解和掌握這些概念。比如,在講解變數時,會介紹如何定義變數,以及變數的類型和作用范圍;在表達式部分,則會涉及算術表達式、邏輯表達式等的具體用法。
接下來,教學將深入介紹ST語言在電氣控制領域的應用,這是ST語言的一大特色。通過實際案例,學習者可以了解到如何使用ST語言來實現PID控制演算法,以及如何編寫PLC程序。這不僅有助於提高編程技能,還能增強實際應用能力。例如,通過編寫一個簡單的PID控制器,學習者可以理解如何調整控制器參數以實現精確控制;而編寫PLC程序,則能學會如何處理復雜的邏輯控制任務。
最後,課程還會介紹ST語言的開發工具,包括集成開發環境(IDE)和調試工具。這些工具能夠幫助學習者更高效地編寫和調試ST代碼。此外,課程還會對比ST語言與其他編程語言的特點,如C語言、Python等,幫助學習者根據項目需求選擇最適合的編程語言。
總之,ST編程語言入門教學旨在為學習者提供全面、系統的知識,使他們能夠熟練掌握ST語言,並將其應用於實際項目中。
㈣ 如何在STM32中實現模糊自整定PID演算法
不管在什麼單片機或者ARM晶元中,你需要的是PID演算法,你需要將你的模糊整定PID演算法使用C語言編程實現你的PID整定功能。