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