學習目的:
1.掌握PID編程
2.學會兩種PID控制的程序
3. 了解溫度控制曲線、阻尼系數等專業術語
學習重點和難點
1.溫度控制中的熱慣性問題
2. 傳感器延遲等問題的系統分析
學習練習過程:
一.理論基礎
1.什么是PID
Proportional-Integral-Derivative control的縮寫
比例積分微分控制,簡稱PID控制,是最早發展起來的控制策略之一,由于其算法簡單、魯棒性好(Robust即強健穩定)和可靠性高,被廣泛應用于工業過程控制,至今仍有90%左右的控制回路具有PID結構。
簡單的說,根據給定值和實際輸出值構成控制偏差,將偏差按比例、積分和微分通過線性組合構成控制量,對被控對象進行控制。常規PID控制器作為一種線性控制器。
Proportional比例即實際輸出和設定值之間的差值乘上一個比例來控制輸出調整量。
Integral積分,當實際輸出正好等于設定值時仍需給出一個調整量,即殘差,由積分來給出。
Derivative抑制達到設定值后過多的在設定點上下振蕩。
2.增量式PID
增量式PID控制,數字PID控制算法的一種基本形式,是通過對控制量的增量(本次控制量和上次控制量的差值)進行PID控制的一種控制算法。
實例:有一直流減速電機裝有編碼器,現在用PID進行速度控制,已知每10ms讀取一次編碼值,每次讀到的編碼值減去上一次的編碼值(除以時間)可以反映出速度的快慢。也就是每次的增量就是反映實際的輸出值。
3.位置式PID
直線電機或者導軌電機,需移動到某一個位置,這個位置可以用相對的脈沖數來表示,當然這個數相對于絕對零位開關是個固定數。
二.具體編程步驟
1.增量式PID
①設定三個值kp、ki、kd即比例量、積分量、微分量
②增量=本次采集值-上次采集值
③增量與設定值算出當時差值dif
④積分量=累加dif*ki
⑤輸出量=kp*dif+∑dif*ki+kd*((dif- lastdif)-( lastdif - prevdif))
= kp*dif+∑dif*ki+kd*(dif+d prevdif -2* lastdif)
⑥上次lastdif再前次prevdif, 本次dif送上次lastdif。
說明:(dif-lastdif)-(lastdi-prevdif)反映被控值變化的快慢,抑制過快的變化。
float kp=50,ki=0.01,kd=2,sumi=0;
float dif,lastdif,prevdif,ks=132; //ks是設定值與采集增量之間的系數
float scan,scan0,setnum=80,adjnum;
while(1)
{
scan=TIM1->CNT; //采集
dif=(scan-scan0)*ks-setnum; //算出與設定值的差值
scan0=scan; //保存本次采集值
sumi+=ki*dif; //算出積分和
adjnum=kp*dif+sumi+kd*(dif+ prevdif -2*lastdif); //算出調整量
TIM3->CCR3=adjnum; //送出PWM調整
prevdif = lastdif; //上一次送前一次
lastdif =dif; //本次送上一次
delay(10); //時間為10ms采集和發出控制值,
} //建議用定時器做
另外可以做出限幅控制
if (adjnum>2000) adjnum=2000;
if (adjnum<0) adjnum=0;
比例及積分和的限幅和清零也可同上處理
2.位置式PID
基本與增量式相似。
差值dif就是實際值與設定值的差
Lastdif同樣也是保存上一次的差值
積分和也同樣算法,不同在于微分項,直接用本次差與上次差來計算。參考以下代碼
float kp=50,ki=0.01,kd=2,sumi=0;
float dif,lastdif; //ks是設定值與采集增量之間的系數
float scan,setnum=80,adjnum;
while(1)
{
scan=readencode(1); //讀取1號導軌滑臺現在位置值
dif=scan-setnum;
sumi +=dif*ki;
if (sumi >100) sumi =100;
if (sumi <-100) sumi =-100;
adjnum=dif*kp+sumi+(dif-lastdif)*kd;
TIM3->CCR3=adjnum; //通過TIM3的PWM來輸出控制
if (dif==0) sumi=0;
lastdif = dif;
delay(10); //同樣只有教學才能用消耗性延時
}
3.溫度控制中的問題
①熱慣性,熱電偶作為一種測溫傳感元件,被廣泛地應用在工業現場及實驗室。由于熱接點具有一定的熱容量,熱接點從介質中吸熱量后,加熱自身、使溫度提高到穩定值需要一定的時間。即熱接點的溫度變化,在時間上總是滯后于被測介質的溫度變化。熱電偶的這種現象稱為熱慣性。
②阻尼曲線
由于存在傳感器滯后,和輸出變化及系統響應上也存在一定的時間差,因為電生熱,熱要傳導都需要時間,往往會在設定目標點上下振動,逐漸趨于穩定。
這是理想中的溫度曲線,加入PID目標就快速到達設定值,并盡量減少目標點上下的振蕩。
③測溫傳感器的選用,常用的有半導體測溫、熱電偶兩大種類,另外還有非接觸式紅外測溫,一般來說半導測溫靈敏度高,缺點溫度范圍較小即量程小,熱電偶線性度也不太好,但溫度測量范圍大。
4.參數設定
①確定比例系數
以系統不振蕩為準、最快達到設定值為依據。
②再確定積分和微分系數,從小到大的方法。
③控制方式,由于烤箱是單相交流供電,所以輸出以準PWM方式,因為SSR(固態繼電器)開關時間<10ms,所以用10ms周期的PWM方式。
④光電隔離
因為涉及到單相市電,所以SSR雖然已經是光電耦合式,不過還是建議再用一級光耦來隔離,練習一下光耦的應用。
12是光電輸入,各光耦的輸入電流有所區別,一般設計在5-10ma之間,34為輸出的光敏三極管,輸出驅動電流可以設計在10-30ma之間。
5.系統控制設計
輸入有兩路:
①熱電偶溫度傳感器
②設定值(簡單的話可以做個電位器AD轉成溫度設定),做一個按鍵設定程序
控制程序
每隔10ms掃描一次,進行PID數據采集,經過計算后輸出控制信號,做一個100分辨度的PWM,以1秒為單位,輸出1,就是開10ms,停990ms,輸出95,即開950ms,停50 ms。
在選用SSR時一定要開關時間小于10ms的產品。
|