趙 鵬,錢 美,李帥波
(新疆理工學(xué)院 機(jī)電工程學(xué)院,新疆 阿克蘇 843000)
在運(yùn)動(dòng)控制系統(tǒng)中,如智能車由于受到載重、地面摩擦力、坡度等的影響,如果按照傳統(tǒng)的PWM開環(huán)調(diào)速其速度非常不穩(wěn)定,甚至?xí)?dǎo)致電機(jī)堵轉(zhuǎn)的情況;在溫度控制系統(tǒng)中,要使溫度恒定通過加熱或制冷來實(shí)現(xiàn),但由于慣性的影響,控制溫度只能在某一個(gè)范圍內(nèi)波動(dòng),無法達(dá)到相對(duì)精確的控制[1]。PID控制是根據(jù)設(shè)定值與被測(cè)值的偏差,通過比例、積分、微分環(huán)節(jié)實(shí)現(xiàn)精確的控制,是一個(gè)二階線性控制器,適用于對(duì)被控對(duì)象模型了解不清楚的場(chǎng)合,其實(shí)質(zhì)是根據(jù)輸入的偏差值,按照比例、積分、微分的函數(shù)關(guān)系進(jìn)行運(yùn)算,運(yùn)算結(jié)果用以控制輸出。鑒于此,本設(shè)計(jì)提出以單片機(jī)為控制器,以直流電機(jī)為被控對(duì)象,設(shè)計(jì)了利用上位機(jī)監(jiān)控的直流電機(jī)轉(zhuǎn)速與位置的控制系統(tǒng),結(jié)合PID控制算法,實(shí)現(xiàn)對(duì)電機(jī)的轉(zhuǎn)速和位置的精確控制。
該設(shè)計(jì)中使用的單片機(jī)STC8A8K64S4A12為國(guó)產(chǎn)增強(qiáng)型1T系列,其一個(gè)時(shí)鐘周期為一個(gè)單指令周期,是傳統(tǒng)51單片機(jī)的12倍,內(nèi)含24 MHz高精度IRC,ISP編程時(shí)可上下調(diào)整。其內(nèi)部存儲(chǔ)空間也較為充裕,數(shù)據(jù)存儲(chǔ)器和程序存儲(chǔ)器分別為8 KB和64 KB。包含4路輸入捕獲輸出比較單元,可實(shí)現(xiàn)對(duì)電機(jī)編碼器數(shù)據(jù)的獲取。驅(qū)動(dòng)電路采用L298N模塊,電機(jī)選擇370減速電機(jī),減速比為1:30。采用330線的光電編碼器[2],即電機(jī)轉(zhuǎn)一圈可產(chǎn)生330×30=9900個(gè)脈沖,以串口的形式通過上位機(jī)虛擬示波器實(shí)時(shí)顯示PWM輸出信號(hào)、電機(jī)測(cè)量轉(zhuǎn)速、設(shè)定速度等信息,以便直觀的對(duì)比控制效果達(dá)到最佳控制。L298模塊內(nèi)部含有+5 V低壓差線性直流穩(wěn)壓器,其輸出電壓可供編碼器正常工作。具體系統(tǒng)結(jié)構(gòu)圖如圖1所示。
圖1 系統(tǒng)結(jié)構(gòu)圖
PID控制規(guī)律數(shù)學(xué)表達(dá)式為:
(1)
經(jīng)離散化后得到PID控制表達(dá)式為:
(2)
上式子稱為全量式或位置式PID。如果為運(yùn)動(dòng)控制,利用PWM調(diào)節(jié)電機(jī)轉(zhuǎn)速,其位置式PID算法公式也可表示為:
Pwm=Kp×e(k)+Ki×e(k)+Kd×[e(k)-e(k-1)]
(3)
增量式PID控制算法是指其輸出只是被控制量的增量ΔU(k),只使用前后三次測(cè)量的偏差值,就可以求出控制的增量,其增量式PID控制算法公式為:
ΔU(k)=Kp[e(k)-e(k-1)]+Kie(k)+Kd[e(k)-2e(k-1)+e(k-2)]
它表示在兩次采樣時(shí)間間隔內(nèi)執(zhí)行器的位置變化量。與位置式相比,增量式計(jì)算量小得多。位置式與增量式關(guān)系如下:
(4)
后續(xù)的直流電機(jī)的速度與位置控制也是按上式進(jìn)行算法實(shí)現(xiàn)的[3-4]。
光電編碼器是利用光柵衍射原理實(shí)現(xiàn)位移-數(shù)字變換,通過光電轉(zhuǎn)換,將輸出軸上的機(jī)械幾何位移量轉(zhuǎn)換成脈沖數(shù)字量的傳感器。編碼器A、B兩相輸出為相位相差90度的正交編碼信號(hào),其中輸出脈沖如下圖所示。
圖2 電機(jī)順時(shí)針運(yùn)行編碼器輸出波形圖
圖3 電機(jī)逆時(shí)針運(yùn)行編碼器輸出波形圖
電機(jī)轉(zhuǎn)向與A、B相相位關(guān)系如表1所示。
表1 電機(jī)轉(zhuǎn)向與編碼器輸出關(guān)系表
由以上分析可知,求出編碼器輸出的A或B相中的一相單位時(shí)間內(nèi)的脈沖數(shù)即可求取電機(jī)的轉(zhuǎn)速;根據(jù)編碼器A、B相的相位差,可判斷出電機(jī)的轉(zhuǎn)向,當(dāng)A相相位超前B相相位90°時(shí),電機(jī)順時(shí)針運(yùn)動(dòng),當(dāng)A相相位滯后B相相位90°時(shí),電機(jī)逆時(shí)針運(yùn)動(dòng)[5]。
設(shè)計(jì)中所選擇的STC8A系列單片機(jī)有四通道可編程計(jì)數(shù)器陣列PCA模塊,可用于脈寬測(cè)量、脈沖捕獲計(jì)數(shù)、高速脈沖輸出及PWM輸出四項(xiàng)功能。對(duì)于編碼器的輸出采用脈沖捕獲計(jì)數(shù)模式,電機(jī)選擇帶編碼器輸出的370直流電機(jī),編碼器A、B相的輸出分別接單片機(jī)P17、P16引腳;單片機(jī)將PWM輸出數(shù)據(jù)、電機(jī)測(cè)量轉(zhuǎn)速或位置、設(shè)定轉(zhuǎn)速或位置通過單片機(jī)串口1傳輸至上位機(jī)虛擬示波器實(shí)時(shí)顯示;電機(jī)的驅(qū)動(dòng)、PWM轉(zhuǎn)速控制及轉(zhuǎn)向控制通過H橋驅(qū)動(dòng)模塊L298N實(shí)現(xiàn),具體驅(qū)動(dòng)電路與單片機(jī)接口連接如圖4所示。
圖4 電機(jī)驅(qū)動(dòng)電路圖
單片機(jī)晶振設(shè)置為24 MHz,與上位機(jī)通信的波特率為115 200,單片機(jī)每隔20 ms獲取脈沖數(shù)量并判斷轉(zhuǎn)向,單位時(shí)間內(nèi)脈沖數(shù)量即為轉(zhuǎn)速或速度的累加即為位置,調(diào)用位置式或增量式PID函數(shù)實(shí)現(xiàn)速度或位置的控制,通過修改PID參數(shù)加載至PWM輸出函數(shù)中調(diào)節(jié)電機(jī)轉(zhuǎn)速或位置[6]。PWM輸出頻率設(shè)置為10 kHz,具體主程序流程圖如圖5所示。
圖5 軟件流程圖
采用模塊化程序編寫,無需將PID參數(shù)獨(dú)立在函數(shù)之外定義,方便程序的移植。函數(shù)返回值為有符號(hào)整型,其正負(fù)為電機(jī)轉(zhuǎn)向,大小為具體PWM輸出值,實(shí)現(xiàn)對(duì)轉(zhuǎn)速的調(diào)節(jié)。其模塊化接口函數(shù)的設(shè)計(jì)是對(duì)式(3)的C語言實(shí)現(xiàn),具體程序如下:
int Position_PID (int Target,int Encoder)
{
float Position_KP=15.0,Position_KI=13.0;
float Position_KD=12.0;
static float Bias=0,Integral_Bias=0,Last_Bias=0;
int Pwm;
Bias=Target-Encoder;
Integral_Bias+=Bias;
Integral_Bias=Integral_Bias>1000?1000:(Integral_Bias<(-1000)?(-1000):Integral_Bias);
Pwm=Position_KP*Bias+Position_KI*Integral_Bias+Position_KD*(Bias-Last_Bias);
Pwm=Pwm>9800?9800:(Pwm<(-9800)?(-9800):Pwm);
Last_Bias=Bias;
return Pwm;
}
增量式PID是有偏差的累加和求取的,其公式如下所示,程序結(jié)構(gòu)與位置式相似。
Pwm+=Kp[e(k)-e(k-1)]+Ki×e(k)+Kd[e(k)-2e(k-1)+e(k-2)]
(5)
PID位置控制的實(shí)質(zhì)是對(duì)速度的積分,積分的實(shí)質(zhì)為分割、求和、取極限,設(shè)計(jì)中每隔20 ms對(duì)速度累加一次,累加到一定值后停止,即位置已經(jīng)確定。其調(diào)用的位置式PID函數(shù)和通過增量式改進(jìn)的全量式PID函數(shù)完全相同,只是在主程序中要對(duì)采集的數(shù)據(jù)每隔20 ms累加一次,且PID函數(shù)的實(shí)參為設(shè)定的位置值和測(cè)量的具體的脈沖累加的位置值而非速度值[7]。
硬件設(shè)計(jì)中L298N模塊是隨機(jī)接至直流電機(jī)的兩個(gè)繞組上的,給電機(jī)通以不同極性的電源其輸出方向就會(huì)變化,對(duì)于轉(zhuǎn)速或位置的控制要求為負(fù)反饋,如設(shè)定速度和初始速度均為0即電機(jī)靜止,PID控制實(shí)質(zhì)是對(duì)偏差的控制,設(shè)置比例系數(shù),如果為正反饋,用手扭動(dòng)電機(jī),單片機(jī)通過編碼器檢測(cè)到有偏差產(chǎn)生,會(huì)由初始的0轉(zhuǎn)速加速到最大值,此時(shí)與設(shè)定的靜止態(tài)剛好相反。可以通過硬件或軟件方案解決,硬件方法為交換驅(qū)動(dòng)模塊接至電機(jī)繞組的相序;軟件方法為在程序中根據(jù)PID函數(shù)返回的PWM值的正負(fù)修改轉(zhuǎn)向控制。如果為負(fù)反饋,且設(shè)置了比例系數(shù),當(dāng)設(shè)定速度和初始速度均為0時(shí),使用外力使其產(chǎn)生偏差時(shí)電機(jī)就有反作用力阻值偏差的產(chǎn)生,說明電機(jī)轉(zhuǎn)向符合設(shè)置的負(fù)反饋的控制要求[8]。
通過調(diào)節(jié)位置式PID函數(shù)中的比例、積分、微分環(huán)節(jié)的參數(shù),為了便于觀察控制效果,設(shè)計(jì)中每隔2秒,使編碼器連接的電機(jī)每20 ms測(cè)量的轉(zhuǎn)速由500修改為-500。采用串口1將PID函數(shù)返回值、測(cè)量速度、設(shè)定速度上傳至上位機(jī)虛擬示波器[9-11],其控制效果如圖6所示。
圖6 位置式PID轉(zhuǎn)速調(diào)節(jié)效果圖
由于電機(jī)轉(zhuǎn)一圈會(huì)產(chǎn)生9900個(gè)脈沖,因此為了便于觀察,設(shè)定位置每隔2秒,由9900修改為-9900,其控制效果為每隔2秒由正轉(zhuǎn)切換至反轉(zhuǎn),其控制效果如圖7所示。
圖7 位置式PID位置控制效果圖
從以上兩圖可以看出位置式PID能有效實(shí)現(xiàn)轉(zhuǎn)速和位置的調(diào)節(jié),且控制效果良好[12-13]。增量式PID與位置式相似,只不過其PID算法的實(shí)現(xiàn)是按增量Δu(i)的累加和求取的。
設(shè)計(jì)中電機(jī)空載時(shí)轉(zhuǎn)速為333 r/min,減速比為1∶30,編碼器為330線,主程序每隔20 ms讀取一次編碼器的值以確定電機(jī)轉(zhuǎn)速和轉(zhuǎn)向。則20 ms內(nèi)讀取的最大值為:(333÷60)×30×330×(20÷1000)≈1099,因此積分限幅值設(shè)置為±1000。
單片機(jī)程序設(shè)計(jì)中占空比為100%時(shí)的PWM的值為10 000,因此輸出限幅絕對(duì)值略小于PWM的最大值,從而設(shè)置為±9800[14]。
相同硬件條件下,相同程序其控制效果差異較大,導(dǎo)致要重新調(diào)節(jié)PID參數(shù),其原因在于編譯軟件Keil目標(biāo)設(shè)置不同,導(dǎo)致執(zhí)行效率不同,設(shè)計(jì)中為使程序兼容,應(yīng)將編譯軟件的配置保持一致。具體編譯軟件中Code Rom Size空間設(shè)置的含義如下[15-16]。
SMALL模式:只用低于2 KB的程序空間。
COMPACT模式:?jiǎn)蝹€(gè)函數(shù)程序大小不超過2 KB,總程序不超過64 KB,效率比LARGE高。
LARGE模式:可用全部64 KB空間。
STC8A8K64S4A12單片機(jī)的PCA與PWM模塊部分端口是復(fù)用的,PCA的端口為高阻輸入,而PWM為準(zhǔn)雙向I/O或強(qiáng)推挽輸出,結(jié)果導(dǎo)致如果PCA端口都設(shè)置為高阻輸入復(fù)用的PWM就無法輸出。設(shè)計(jì)中采用非復(fù)用端口加以解決。
傳統(tǒng)的非模塊化程序設(shè)計(jì),將偏差、偏差的積分和上次的偏差定義為全局變量,實(shí)現(xiàn)整個(gè)程序調(diào)用過程中的數(shù)據(jù)保持不丟失。此方案降低了程序的集成度,移植過程中還要考慮全局變量。本設(shè)計(jì)通過將以上變量定義為static類型,使三個(gè)變量在下一次調(diào)用時(shí)其值仍然保持。
傳統(tǒng)電機(jī)由于制造誤差,當(dāng)同頻率同占空比的信號(hào)加載到兩個(gè)同一型號(hào)的電機(jī)時(shí),電機(jī)轉(zhuǎn)速可能有偏差。如果為小車,則可能出現(xiàn)該直行的時(shí)候逐漸偏離的情況,因此必須結(jié)合傳感器一般為正交編碼器與單片機(jī)結(jié)合控制算法使其根據(jù)偏差實(shí)時(shí)調(diào)節(jié),達(dá)到運(yùn)行穩(wěn)定的效果。該文基于單片機(jī)設(shè)計(jì)了一款PID電機(jī)轉(zhuǎn)速與位置控制系統(tǒng),從系統(tǒng)結(jié)構(gòu)和原理分析、軟硬件設(shè)計(jì)、系統(tǒng)調(diào)試及存在問題分析方面層層深入,通過實(shí)踐驗(yàn)證,該方案有效解決了傳統(tǒng)直流電機(jī)轉(zhuǎn)速和位置的精確控制的問題。