全瑞坤, 楊 浩
(重慶大學(xué) 電工電子技術(shù)基礎(chǔ)教學(xué)實(shí)驗(yàn)中心,重慶 400044)
PID控制算法是一種極為經(jīng)典的控制算法,目前廣泛應(yīng)用于工業(yè)控制領(lǐng)域,在電機(jī)調(diào)速系統(tǒng)中特別是要求魯棒性較高的場(chǎng)合,PID算法起著舉足輕重的作用[1]。PID控制系統(tǒng)是由比例,微分,積分三個(gè)控制單元組成的一種控制系統(tǒng),極其適合多種情形下的控制[2]。直流電機(jī)具有良好的調(diào)速性能,如可以實(shí)現(xiàn)無(wú)級(jí)調(diào)速、調(diào)速范圍寬、低速性能好、起動(dòng)轉(zhuǎn)矩大、高效率等。本實(shí)驗(yàn)通過(guò)設(shè)計(jì)以微控制器和NMOS場(chǎng)效應(yīng)管組成的 H 橋?yàn)橛布A(chǔ)而設(shè)計(jì)的PID算法的直流電機(jī)調(diào)速系統(tǒng),通過(guò)改變電源電壓占空比從而達(dá)到直流電機(jī)調(diào)速的目的。速度傳感器采用編碼器脈沖輸出和定時(shí)計(jì)數(shù)進(jìn)行速度計(jì)算,然后通過(guò)中斷采集傳感器產(chǎn)生的脈沖以實(shí)現(xiàn)速度閉環(huán)反饋控制。
通過(guò)使用仿真軟件Proteus設(shè)計(jì)一種創(chuàng)新型直流電機(jī)調(diào)速實(shí)驗(yàn),是一種對(duì)傳統(tǒng)實(shí)驗(yàn)課程的有效補(bǔ)充[3]。該仿真軟件有非常友好的人機(jī)界面,有豐富的操作菜單與工具,能方便地完成單片機(jī)系統(tǒng)的硬件設(shè)計(jì)、軟件設(shè)計(jì)、單片機(jī)源代碼級(jí)調(diào)試與仿真[4]。
電機(jī)速度閉環(huán)控制就是根據(jù)編碼器的脈沖獲取電機(jī)的位置信息,然后對(duì)位置求微分即可得到速度信息,通過(guò)比較實(shí)際值和目標(biāo)的預(yù)設(shè)值得到控制偏差,再使用比例(P),積分(I),微分(D)對(duì)偏差進(jìn)行控制,從而使偏差逐步趨于零的過(guò)程[5]。
圖1 基本PID控制算法的示意圖
比例響應(yīng)單元本身取決于目標(biāo)設(shè)定值和實(shí)際過(guò)程變量之間的差值,在目標(biāo)設(shè)定值和實(shí)際過(guò)程變量中稱這個(gè)差值為“誤差”。比例增益(KC)決定了系統(tǒng)的輸出對(duì)誤差信號(hào)的響應(yīng)比例。一般而言,為了提高系統(tǒng)的實(shí)際響應(yīng)速度,可以適當(dāng)提高系統(tǒng)的比例響應(yīng)系數(shù),如果比例響應(yīng)系數(shù)設(shè)置的過(guò)大,過(guò)程變量會(huì)有振蕩[6]。此時(shí)需要調(diào)整比例響應(yīng)單元參數(shù),如果在此基礎(chǔ)上繼續(xù)增加KC,系統(tǒng)振蕩會(huì)越來(lái)越大,以至于在實(shí)際使用中超出控制,使得系統(tǒng)變得不穩(wěn)定,成為不穩(wěn)定系統(tǒng)[7]。
積分響應(yīng)單元在實(shí)際應(yīng)用中往往作為讓穩(wěn)定狀態(tài)時(shí)過(guò)程變量和目標(biāo)設(shè)定值的差值保持為零的特定功能。它會(huì)將一段時(shí)間內(nèi)的系統(tǒng)誤差連續(xù)相加, 所以系統(tǒng)即便存在一個(gè)很小的誤差,也會(huì)在累加的作用下讓積分響應(yīng)緩慢增加。如果控制器沒(méi)有將誤差保持在零,而此時(shí)積分操作卻達(dá)到了控制器的條件,那么會(huì)產(chǎn)生積分飽和的誤差結(jié)果。
微分響應(yīng)單元在過(guò)程變量迅速增大時(shí)停止輸出。增加微分響應(yīng)單元時(shí)間將會(huì)使系統(tǒng)對(duì)誤差的響應(yīng)更加劇烈,同時(shí)也會(huì)增加整個(gè)控制系統(tǒng)的響應(yīng)時(shí)間。在實(shí)際上,由于使用的系統(tǒng)微分響應(yīng)對(duì)實(shí)際過(guò)程變量的噪聲特別敏感而往往使用非常小的微分時(shí)間。 此外,如果系統(tǒng)的反饋信號(hào)中有噪聲或微控制器速度過(guò)慢,微分響應(yīng)會(huì)使整個(gè)系統(tǒng)變得不穩(wěn)定。
基本PID控制器的理想算式為:
(1)
式中:u(t)為控制器(也稱調(diào)節(jié)器)的輸出;e(t)為控制器的輸入(常常是設(shè)定值與被控量之差),即e(t)=r(t)-c(t);KP是控制器的比例放大系數(shù);TI是控制器的積分時(shí)間;TD是控制器的微分時(shí)間。
相應(yīng)的傳遞函數(shù)為:
(2)
設(shè):u(k)為第k次采樣時(shí)刻控制器的輸出值,那么可以得到離散的PID計(jì)算式為:
KD[e(k)-e(k-1)]
(3)
針對(duì)增量式算法,需要注意的是增量是本次狀態(tài)與上次狀態(tài)的改變量,而不是現(xiàn)有的實(shí)際使用量。假如執(zhí)行機(jī)構(gòu)的累積功能使用軟件實(shí)現(xiàn),如利用算式u(k)=u(k-1)+Δu(k)程序化來(lái)完成,則由式(3)可得增量式PID控制算式:
Δu(k)=u(k)-u(k-1)=KPΔe(k)+
KIe(k)+KD[Δe(k)-Δe(k-1)]
(4)
式中:Δe(k)=e(k)-e(k-1)進(jìn)一步可以改寫成
Δu(k)=Ae(k)-Be(k-1)+Ce(k-2)
A=KP(1+T/TI+TD/T)
B=KP(1+2TD/T),C=KPTD/T
本實(shí)驗(yàn)通過(guò)設(shè)計(jì)使用一個(gè)固定采樣周期T,在此周期之內(nèi)通過(guò)前后3次的測(cè)量偏差值求出控制增量,實(shí)驗(yàn)中所需的控制增量可以由式(3)、(4)求得[8-9]。
增量式PID控制算法優(yōu)點(diǎn):①優(yōu)化累加計(jì)算,控制增量不再需要累加多次之前的數(shù)值,而只需要處理最近的3次數(shù)值,進(jìn)一步減小誤差;②優(yōu)化輸出,為了保證實(shí)際輸出對(duì)系統(tǒng)的變化影響因素最小,此處僅輸出控制增量,使得故障影響最小化,即發(fā)生故障只有小范圍問(wèn)題不會(huì)嚴(yán)重影響系統(tǒng)過(guò)程。
PID控制是一種閉環(huán)控制系統(tǒng),在仿真實(shí)驗(yàn)中通過(guò)使用帶有編碼器的直流電機(jī)作為被控元件,編碼器輸出的脈沖經(jīng)過(guò)計(jì)算后轉(zhuǎn)換為速度信號(hào)作為反饋信號(hào)輸入,由此構(gòu)成一個(gè)閉環(huán)反饋控制系統(tǒng)[10]。直流電機(jī)模型較為復(fù)雜,在常規(guī)實(shí)驗(yàn)中需要很多儀表進(jìn)行實(shí)驗(yàn)。Proteus的元件庫(kù)中包含有多種類型的電機(jī),例如直流電機(jī),步進(jìn)電機(jī),伺服電機(jī)等,是一個(gè)很好的仿真實(shí)驗(yàn)環(huán)境[11-12]。其中電機(jī)和編碼器的參數(shù)可以在仿真環(huán)境下直接設(shè)置,而且電機(jī)元件本身具有一定的顯示方法,如轉(zhuǎn)速以r/min為單位顯示在電機(jī)旁邊,正負(fù)號(hào)表示轉(zhuǎn)動(dòng)方向。增量式PID要對(duì)速度進(jìn)行閉環(huán)控制,需要實(shí)時(shí)獲取電機(jī)的速度,微控制器通過(guò)定時(shí)器中斷進(jìn)行編碼器脈沖計(jì)數(shù),然后通過(guò)計(jì)算即可得到電機(jī)的實(shí)時(shí)速度。
通過(guò)對(duì)以上情況的分析,設(shè)計(jì)一種基于微控制器的閉環(huán)控制系統(tǒng)方案。
(1) 硬件總體設(shè)計(jì)。系統(tǒng)原理圖如圖2所示。
編碼器實(shí)時(shí)測(cè)得電機(jī)的實(shí)際速度,微控制器先通過(guò)比較設(shè)定速度和實(shí)際速度計(jì)算出速度差值,接著使用PID算法得出控制量,然后改變脈沖輸出占空比,最后經(jīng)H橋驅(qū)動(dòng)電路進(jìn)行功率放大輸出,從而達(dá)到改變電機(jī)速度的目的。
圖2 系統(tǒng)原理圖
(2) 驅(qū)動(dòng)電路,此電路采用NMOS場(chǎng)效應(yīng)管作為功率輸出器件,設(shè)計(jì)并實(shí)現(xiàn)了直流電機(jī)的H 橋驅(qū)動(dòng)電路,可以實(shí)現(xiàn)對(duì)直流電機(jī)進(jìn)行閉環(huán)控制。許多半導(dǎo)體公司推出了直流電機(jī)專用驅(qū)動(dòng)芯片, 用這些專用的電機(jī)驅(qū)動(dòng)芯片多數(shù)更為適合,但是Proteus軟件目前還沒(méi)有進(jìn)行支持,所以此處使用場(chǎng)效應(yīng)管作為驅(qū)動(dòng)電路。電機(jī)驅(qū)動(dòng)電路如圖3所示。
圖3 電機(jī)驅(qū)動(dòng)電路圖
軟件PID算法一般可以通過(guò)C語(yǔ)言或者匯編語(yǔ)言實(shí)現(xiàn),此處使用C語(yǔ)言編程實(shí)現(xiàn)控制算法[13]。程序中通過(guò)比較設(shè)定值和真實(shí)值得到誤差,再經(jīng)過(guò)PID計(jì)算實(shí)現(xiàn)一個(gè)閉環(huán)控制仿真實(shí)驗(yàn)[14]。
軟件設(shè)計(jì)總體思路為:通過(guò)改變電機(jī)電樞的等效電壓來(lái)達(dá)到調(diào)整電機(jī)轉(zhuǎn)速的目的,具體步驟為先設(shè)置微控制器相應(yīng)的寄存器和工作模式,實(shí)現(xiàn)定時(shí)和中斷功能,再結(jié)合CCP硬件控制模塊輸出脈寬可調(diào)的PWM。
程序設(shè)計(jì)操作步驟如下:
(1) 讀取當(dāng)前指定的值Set_point;
(2) 讀取測(cè)量值Previous_value;
(3) Error=Set_point-Previous_value,并將偏差值轉(zhuǎn)換為有效的Current_value值輸出,用于調(diào)節(jié)當(dāng)前值,使之接近Set_point值;
(4) 重復(fù)前面的步驟。
程序設(shè)計(jì)偽代碼實(shí)現(xiàn):
Loop
Previous_value=GetMotorSpeed()
Isum=Isum+Error //累積偏差
Error=Set_point-Previous_value //得到偏差值
LastError=Error //暫存偏差值
Speed=Error-LastError //得到偏差變化量
Current_value=Error*Kprop+Krate*Speed +Kint*Isum
Setpwm(Current_value) //輸出增量
Goto Loop //繼續(xù)下一次循環(huán)
具體通過(guò)C語(yǔ)言實(shí)現(xiàn)的代碼如下:當(dāng)數(shù)據(jù)采樣時(shí)間很短的情況下,我們可以使用差分計(jì)算代替微分計(jì)算,用累加計(jì)算代替積分計(jì)算(實(shí)驗(yàn)中設(shè)定采樣周期為10 ms)。
int Calculate_PID (int Encoder,int Target)
{
float Kp,Ki,Kd; //參數(shù)由電機(jī)類型和負(fù)載決定
static int iError, LastError, PrevError, Pwm;
iError =Encoder-Target; //計(jì)算偏差
Pwm+=Kp* iError + Ki* LastError + Kd* PrevError; //增量式PID控制器
PrevError = LastError;
LastError = iError;
return Pwm; //增量輸出
}
其中函數(shù)的參數(shù)為編碼器的實(shí)際速度值和速度控制的期望值,函數(shù)返回值為PID輸出的增量PWM。
在仿真環(huán)境中通過(guò)使用以上的軟件和硬件,具體包括微控制器的軟件代碼,電機(jī)編碼器的脈沖計(jì)數(shù)和速度計(jì)算,其中還選取了適合人機(jī)交互的的按鍵和顯示屏,以及通過(guò)示波器觀察PID的增量輸出[15]。通過(guò)觀察可以發(fā)現(xiàn),當(dāng)設(shè)置速度增加時(shí),輸出增量也跟著增加,在即將達(dá)到預(yù)定值時(shí)會(huì)有一定的震蕩過(guò)程,這是PID在進(jìn)行運(yùn)算造成的,震蕩過(guò)后會(huì)穩(wěn)定在一個(gè)預(yù)定值,這符合我們對(duì)電機(jī)速度控制的要求,說(shuō)明設(shè)計(jì)的PID控制系統(tǒng)是合理的。調(diào)節(jié)設(shè)定速度值(增大)后的PWM輸出如圖4所示。
圖4 調(diào)節(jié)設(shè)定速度值(增大)后的PWM輸出
隨著仿真技術(shù)與自動(dòng)控制技術(shù)的不斷成熟,實(shí)驗(yàn)室也可以使用魯棒性強(qiáng)的控制算法在仿真軟件環(huán)境中進(jìn)行仿真實(shí)驗(yàn)。通過(guò)實(shí)際使用發(fā)現(xiàn),本文設(shè)計(jì)的實(shí)驗(yàn)可以作為實(shí)驗(yàn)課程的一種有益補(bǔ)充,通過(guò)本實(shí)驗(yàn),不僅能獲取PID控制算法在電機(jī)控制的具體方法,而且可以突破學(xué)生在實(shí)驗(yàn)室做常規(guī)實(shí)驗(yàn)的局限性。
參考文獻(xiàn)(References):
[1] 秦娟英, 關(guān)軍明, 王榮鑄,等. 參數(shù)自整定模糊PID直流電機(jī)調(diào)速系統(tǒng)研究[J]. 機(jī)電設(shè)備, 2004, 21(2):38-41.
[2] 劉海珊, 陳宇晨. 無(wú)刷直流電機(jī)PID控制系統(tǒng)仿真及實(shí)驗(yàn)研究[J]. 系統(tǒng)仿真學(xué)報(bào), 2009, 21(16):5157-5160.
[3] 孫曉旭, 王勁松, 安志勇. 基于Proteus和AVR單片機(jī)的無(wú)刷直流電機(jī)控制系統(tǒng)仿真[J]. 電子設(shè)計(jì)工程, 2015(19):174-176.
[4] 班永鑫, 賈英民. 基于Proteus的嵌入式系統(tǒng)開發(fā)方法研究[J]. 控制工程, 2008, 15(6):692-695.
[5] 方紅慶, 陳 龍, 李訓(xùn)銘. 基于線性與非線性模型的水輪機(jī)調(diào)速器PID參數(shù)優(yōu)化比較[J]. 中國(guó)電機(jī)工程學(xué)報(bào), 2010, 30(5):100-106.
[6] 霍 炬, 曹貴奇, 楊 明. 基于預(yù)測(cè)控制的PID調(diào)節(jié)位置跟蹤系統(tǒng)的設(shè)計(jì)[J]. 電機(jī)與控制學(xué)報(bào), 2004, 8(2):127-129.
[7] 宋樂(lè)鵬, 陳勇剛, 胡大勇,等. 模糊自整定PID在電機(jī)調(diào)速系統(tǒng)中仿真研究[J]. 微計(jì)算機(jī)信息, 2010, 26(7):185-187.
[8] 仇 韜, 丁艷軍, 吳占松,等. 基于預(yù)測(cè)模型的多PID控制器模糊加權(quán)控制[J]. 中國(guó)電機(jī)工程學(xué)報(bào), 2006, 26(24):121-124.
[9] 鄭雪欽, 郭東輝. 一種實(shí)時(shí)自適應(yīng)步進(jìn)電機(jī)PID控制器設(shè)計(jì)[J]. 控制工程, 2009, 16(5):643-646.
[10] 王傳峰, 李東海, 姜學(xué)智. 基于概率魯棒的PID控制器設(shè)計(jì)方法研究[J]. 中國(guó)電機(jī)工程學(xué)報(bào), 2007, 27(32):92-97.
[11] 盧 超. 基于Proteus的步進(jìn)電機(jī)控制系統(tǒng)仿真設(shè)計(jì)[J]. 實(shí)驗(yàn)室研究與探索, 2010, 29(6):54-57.
[12] 潘萬(wàn)平, 徐 剛, 張勁松. 基于Proteus的步進(jìn)電機(jī)閉環(huán)控制的仿真[J]. 煤礦機(jī)械, 2010, 31(2):46-48.
[13] 海 濤. 基于C語(yǔ)言的正弦逆變器的軟件設(shè)計(jì)[J]. 微計(jì)算機(jī)信息, 2000(4):45-46.
[14] 歷風(fēng)滿. 數(shù)字PID控制算法的研究[J]. 遼寧大學(xué)學(xué)報(bào)(自然科學(xué)版), 2005, 32(4):367-370.
[15] 劉樹東, 潘萬(wàn)平, 代金鳳. 基于步進(jìn)電機(jī)的閥門閉環(huán)控制的仿真[J]. 煤炭技術(shù), 2010, 29(5):47-49.