張加宏,楊天民,劉 恒,冒曉莉,周炳宇
(南京信息工程大學(xué) 電子與信息工程學(xué)院,江蘇 南京 210044)
嵌入式系統(tǒng)是一門匯集計算機(jī)軟硬件、模擬電子技術(shù)、數(shù)字電子技術(shù)、應(yīng)用領(lǐng)域?qū)I(yè)技術(shù)等各方面知識的綜合性課程,需要學(xué)生擁有完整的理論知識、清晰的設(shè)計思路和較強(qiáng)的實(shí)際動手調(diào)試能力。而目前的嵌入式系統(tǒng)課程多以理論教學(xué)為主,缺乏實(shí)際操作和思維訓(xùn)練,學(xué)生不能獲得參與感和知識獲得感,因此很難切實(shí)提升學(xué)生的實(shí)踐創(chuàng)新能力。如何進(jìn)行嵌入式實(shí)驗(yàn)教學(xué)改革、設(shè)計與構(gòu)建較好的嵌入式教學(xué)實(shí)驗(yàn)是一個值得探索的方向[1-2]。本文以恒溫微電子機(jī)械系統(tǒng)(MEMS)傳感器芯片為例,設(shè)計了一個較為完備的嵌入式系統(tǒng)教學(xué)實(shí)驗(yàn)。實(shí)驗(yàn)以嵌入式系統(tǒng)為平臺,利用PID 控制算法、脈沖寬度調(diào)制(PWM)技術(shù)[3-4],實(shí)現(xiàn)MEMS 壓力傳感器芯片的恒溫控制。通過這樣有實(shí)際意義的嵌入式系統(tǒng)應(yīng)用開發(fā),提升了學(xué)生對嵌入式系統(tǒng)課程的學(xué)習(xí)興趣和實(shí)踐精神,有效地提高了教學(xué)水平和質(zhì)量。
PID 控制算法是一種具有幾十年應(yīng)用經(jīng)驗(yàn)的控制算法,在工業(yè)控制系統(tǒng)中已經(jīng)得到了廣泛的應(yīng)用[5]。其原理如圖1 所示,PID 控制器通過設(shè)定值rin(t)與實(shí)際值yout(t)的偏差e(t)進(jìn)行控制,將偏差e(t)作為控制器輸入,經(jīng)過PID 控制器的比例(P)、積分(I)、微分(D)線性組合后構(gòu)成控制器輸出u(t)。當(dāng)被控系統(tǒng)的輸出與設(shè)定值有偏差時,通過對信號的檢測采集可以把偏差回傳到PID 控制系統(tǒng)。PID 控制器依據(jù)設(shè)定好的控制參數(shù)進(jìn)行輸出,從而改變被控系統(tǒng)的輸出值,使其趨于設(shè)定值以達(dá)到穩(wěn)定輸出的目的[6]。
圖1 PID 控制系統(tǒng)原理框圖
本實(shí)驗(yàn)中采用增量式PID 控制算法,k時刻其離散化處理后的公式為[7]:
式中:KP是比例系數(shù),KI是積分系數(shù),KD是微分系數(shù)。由上式可見,只需得知當(dāng)前時刻誤差e(k)及前兩個時刻誤差e(k–1)與e(k–2)即可實(shí)現(xiàn)PID 控制。相比于常用的位置式PID 算法,該算法具有更小的累積誤差、避免占用大量計算資源和內(nèi)存空間,適合在ARM微處理器上運(yùn)行。
如圖2 所示,本文設(shè)計的嵌入式恒溫控制系統(tǒng)包括:貼在MEMS 傳感器芯片背面的聚酰亞胺加熱片、粘附在加熱片上面的溫度傳感器PT1000、加熱片驅(qū)動芯片TB6612FNG、微處理器主控芯片S5PV210、采集溫度信息并進(jìn)行A/D 轉(zhuǎn)換的AD7794 芯片以及電源模塊。嵌入式恒溫控制實(shí)驗(yàn)運(yùn)用PID 控制算法,調(diào)節(jié)PWM 波形控制加熱片驅(qū)動芯片,從而實(shí)現(xiàn)加熱片溫度(MEMS 傳感器芯片溫度)在目標(biāo)溫度值附近小幅度擺動,而人機(jī)交互主要通過串口通信與TCP 通信實(shí)現(xiàn)。通過這類具體的嵌入式實(shí)驗(yàn)案例,可以讓學(xué)生了解工程項(xiàng)目規(guī)范化的軟硬件設(shè)計及調(diào)試要求,熟悉嵌入式項(xiàng)目的應(yīng)用開發(fā)流程,理解閉環(huán)電子控制系統(tǒng)的結(jié)構(gòu),掌握PID 控制和PWM 方法,并能夠拓展應(yīng)用到其他的場景中。
圖2 嵌入式恒溫控制系統(tǒng)框圖
本文嵌入式恒溫控制系統(tǒng)的硬件平臺構(gòu)建在三星公司生產(chǎn)的S5PV210 ARM 微處理器芯片上,系統(tǒng)功耗低、運(yùn)算速度快,已經(jīng)被廣泛應(yīng)用于電力設(shè)施、網(wǎng)絡(luò)通信、醫(yī)療設(shè)備、工業(yè)控制等行業(yè)[8-9]。S5PV210芯片包括180 個引腳,有兩組SPI 接口,本文使用SPI0接口進(jìn)行實(shí)驗(yàn),SPI0_CSn、SPI0_CLK、SPI0_MOSI、SPI0_MISO 分別與AD7794 芯片的CS、SCLK、DIN、DOUT 引腳相連接。微處理器的KP_ROW0、KP_ROW1、KP_ROW2 、 PWMTOUT0 引腳分別與驅(qū)動芯片TB6612FNG 的STBY、AIN1、AIN2、PWMA 引腳相連。芯片SP3232 的T2IN、R2OUT 與微處理器的TXD2、RXD2 引腳相連實(shí)現(xiàn)串口通信,可以方便快捷地進(jìn)行調(diào)試。溫度傳感器采用四線制測量方法,通過AD7794 芯片的3、4 通道采集溫度信息。驅(qū)動芯片為兩通道輸出,考慮到微處理器輸出的PWM 信號與驅(qū)動芯片的PWMA 相連,因此加熱片與驅(qū)動芯片的A通道相連,為保證驅(qū)動芯片正常工作,采用5 V 獨(dú)立電源為其供電。電源包括+9 V、+5 V、+3.3 V 以及參考電壓+4.096 V,分別為微處理器、驅(qū)動芯片、通信電路、AD7794 芯片等模塊供電,不同的模塊電源地連接公共地。整個嵌入式系統(tǒng)硬件實(shí)物圖如圖3 所示。
圖3 嵌入式系統(tǒng)硬件電路實(shí)物圖
嵌入式開發(fā)的初期階段,為了運(yùn)行開發(fā)工具和方便代碼的調(diào)試,需要在宿主機(jī)上通過交叉編譯、匯編、鏈接工具生成可在目標(biāo)板上執(zhí)行的二進(jìn)制代碼文件系統(tǒng),然后將該文件系統(tǒng)下載到目標(biāo)板運(yùn)行[10]。為保證用戶應(yīng)用程序可以在嵌入式環(huán)境下運(yùn)行,除了必要的上述硬件平臺外,還必須建立與應(yīng)用程序相關(guān)的軟件平臺。系統(tǒng)軟件開發(fā)環(huán)境如下:
(1)宿主機(jī):Ubuntu 14.04 操作系統(tǒng)。
(2)目標(biāo)板:基于SAMSUNG S5PV210 的PID恒溫控制系統(tǒng)。
(3)交叉編譯工具:arm-linux-gcc-4.4.1。
(4)bootloader:u-boot-1.3.4。
(5)內(nèi)核源碼:linux-2.6.35.7。
本嵌入式恒溫系統(tǒng)的軟件系統(tǒng)移植步驟包括:
(1)移植bootloader;
(2)配置、移植linux 內(nèi)核;
(3)構(gòu)建根文件系統(tǒng);
(4)交叉編譯busybox,移植庫文件到/lib 與/usr/lib目錄;
(5)根據(jù)需要構(gòu)建etc 目錄,在/dev 目錄下創(chuàng)建靜態(tài)設(shè)備文件節(jié)點(diǎn);
(6)創(chuàng)建proc,tmp,mnt,sys,root 文件;
(7)將庫文件、應(yīng)用程序以及動態(tài)設(shè)備驅(qū)動分別添加到對應(yīng)的目錄;
(8)制作根文件系統(tǒng)鏡像并燒寫。
在S5PV210 芯片上移植完操作系統(tǒng)后,用戶編寫的應(yīng)用程序就可以通過調(diào)用Linux 系統(tǒng)提供的API 對硬件設(shè)備進(jìn)行操作,實(shí)現(xiàn)程序?qū)τ布O(shè)備的控制。如編寫SPI 通信程序[11],則可實(shí)現(xiàn)對AD7794 芯片寄存器讀寫,獲取溫度信息。整個系統(tǒng)軟件框架如圖4 所示。
圖4 系統(tǒng)軟件框架圖
整個恒溫控制實(shí)驗(yàn)分為兩步, 第一步, 利用AD7794 采集溫度傳感器PT1000 的溫度信息,通過串口通信在PC 端實(shí)時顯示;第二步,設(shè)定目標(biāo)溫度,觀察輸出的溫度變化情況,調(diào)節(jié)PID 控制參數(shù),使加熱片可以快速升溫至設(shè)定溫度且保持穩(wěn)定。
具體步驟如下:
步驟一,首先上電準(zhǔn)備,輸入init 命令對系統(tǒng)進(jìn)行初始化,成功則返回信息 “initdone”,輸入read_Temperature 獲取溫度信息并進(jìn)行顯示,如圖5(a)所示。
步驟二,程序中預(yù)先設(shè)置了目標(biāo)溫度值與PID 的比例系數(shù)KP,積分系數(shù)KI,微分系數(shù)KD的值。首先重復(fù)實(shí)驗(yàn)步驟一,初始化成功后輸入PID 控制命令pid_algorithm,啟動PID 算法控制PWM 脈沖寬度,驅(qū)動加熱片工作,根據(jù)返回的溫度信息調(diào)節(jié)比例系數(shù)KP,積分系數(shù)KI,微分系數(shù)KD的值,使MEMS 傳感器芯片處于設(shè)定溫度,如圖5(b)所示。具體調(diào)節(jié)過程為:初始設(shè)定KP為較大的值,KI、KD設(shè)置為0,觀察溫度變化情況,當(dāng)出現(xiàn)振蕩時,記錄此時的系數(shù)值;接下來調(diào)節(jié)KI,設(shè)定一個初始值,當(dāng)擺動在目標(biāo)值附近單一輪回且恢復(fù)慢時,適當(dāng)減小KI,當(dāng)擺動在目標(biāo)位置多次來回波動,加大KI;最后設(shè)置KD,偏離目標(biāo)值大且恢復(fù)慢,加大KD,單位時間內(nèi)偏離目標(biāo)角度誤差不大,但振蕩頻繁,則減小KD[12]。圖中計算溫度差并調(diào)整占空比的過程為程序自動計算,這里列出來是為方便更好地理解增量式PID 的過程。
圖5 PID 恒溫算法軟件流程圖
實(shí)驗(yàn)中,嵌入式端利用Linux 平臺提供的Socket網(wǎng)絡(luò)通信API,實(shí)現(xiàn)與PC 端的網(wǎng)絡(luò)通信[13]。PC 端作為客戶端,嵌入式端作為服務(wù)器??蛻舳耸紫刃枰c服務(wù)器建立主連接,并發(fā)送用戶登錄信息(包括用戶名和密碼);服務(wù)器接收到數(shù)據(jù)后校驗(yàn)用戶登錄信息,如果一致則表示登錄成功,服務(wù)器就可以將實(shí)時溫度數(shù)據(jù)和PWM 占空比等信息以數(shù)據(jù)包的形式發(fā)送給客戶端;同時,客戶端可通過向服務(wù)器發(fā)送命令控制和配置服務(wù)器,實(shí)現(xiàn)網(wǎng)絡(luò)通信。網(wǎng)絡(luò)通信框架及流程圖如圖6 所示。
圖6 TCP 網(wǎng)絡(luò)通信框架示意圖
實(shí)驗(yàn)設(shè)計搭建的實(shí)驗(yàn)平臺包括中科賽凌高低溫試驗(yàn)箱和嵌入式恒溫控制系統(tǒng)測量電路,實(shí)驗(yàn)平臺效果如圖7 所示。為驗(yàn)證系統(tǒng)性能,將嵌入式恒溫控制電路置于中科賽凌溫度箱中進(jìn)行實(shí)驗(yàn),測試不同溫度環(huán)境下系統(tǒng)恒溫效果。該試驗(yàn)箱提供-90~150 ℃的溫度調(diào)節(jié)范圍,升降溫速率為2~5 ℃/min,溫度波動小于±0.5 ℃。試驗(yàn)箱性能指標(biāo)優(yōu)越、管理智能化、觸摸屏界面易操作、數(shù)據(jù)接口豐富,可以與PC 機(jī)和其他設(shè)備組網(wǎng),非常適用于恒溫測試實(shí)驗(yàn)。
圖7 實(shí)驗(yàn)平臺效果圖
開展實(shí)驗(yàn)時將測量電路放入溫度試驗(yàn)箱內(nèi),設(shè)定試驗(yàn)箱溫度,待試驗(yàn)箱溫度穩(wěn)定后測量溫度并進(jìn)行實(shí)驗(yàn),實(shí)驗(yàn)完畢重新設(shè)定試驗(yàn)箱溫度并重復(fù)以上步驟,直至完成全部實(shí)驗(yàn)。在系統(tǒng)安全設(shè)計方面,主要考慮以下幾點(diǎn):
(1)合理配置I/O 引腳,采用排線進(jìn)行電氣連接,避免誤插線引起的故障。
(2)實(shí)驗(yàn)中,要求實(shí)驗(yàn)者牢記先斷電再插線,檢查正確后再上電進(jìn)行測試,操作中不允許帶電熱插拔和接線。
(3)軟件編程采用工程模塊化方法,頭文件里配置引腳及宏定義、函數(shù)聲明,便于工程的硬件平臺移植。
(4)系統(tǒng)調(diào)試時,根據(jù)模塊功能進(jìn)行單一模塊的調(diào)試,子模塊調(diào)試通過后再級聯(lián)測試,避免將所有模塊連一起再測試復(fù)雜的功能。
(5)實(shí)驗(yàn)過程中禁止長時間打開溫度箱,實(shí)驗(yàn)完畢及時關(guān)閉電源。
根據(jù)搭建的實(shí)驗(yàn)平臺依次連接,將測量電路放入溫度試驗(yàn)箱中并關(guān)緊箱門,設(shè)定試驗(yàn)箱溫度,輸入init命令對系統(tǒng)進(jìn)行初始化,輸入read_Temperature 可以獲取當(dāng)前MEMS 傳感器芯片溫度數(shù)據(jù);待試驗(yàn)箱溫度穩(wěn)定后輸入控制命令pid_algorithm,啟動PID 算法控制PWM 脈沖寬度,驅(qū)動加熱片工作,監(jiān)測并記錄傳感器5 min 內(nèi)溫度變化情況,一組數(shù)據(jù)測量完成后,更改試驗(yàn)箱溫度重復(fù)上述步驟直至測完所有數(shù)據(jù)。
恒溫系統(tǒng)的目標(biāo)溫度設(shè)定要略高于最大工作溫度,由于通常環(huán)境中壓力傳感器最高工作溫度是50 ℃,因此加熱目標(biāo)溫度設(shè)定為50 ℃。如圖8 為傳感器記錄的恒溫控制系統(tǒng)加熱片溫度變化情況,可以看出,在不同的溫度環(huán)境下,加熱片經(jīng)過一段時間的波動,在150 s左右趨向于穩(wěn)定,并且芯片溫度保持在50 ℃左右。
圖8 恒溫控制系統(tǒng)溫度變化曲線圖
本實(shí)驗(yàn)使用了增量式PID 算法,它根據(jù)溫度差可自動調(diào)節(jié)輸出PWM 波形的占空比來恒溫[14]。實(shí)驗(yàn)也可測試不同環(huán)境下加熱片維持在 50 ℃時需要的PWM 波形占空比,如圖9 所示。實(shí)驗(yàn)中由于PWM 占空比先增大后減小、再振蕩、最后穩(wěn)定,不方便記錄,所以我們記錄的是穩(wěn)定后的PWM 占空比,即PWM波的穩(wěn)定功率。根據(jù)測試結(jié)果,當(dāng)環(huán)境溫度為-40 ℃時,加熱片維持恒溫50 ℃所需要的占空比為44.7%,當(dāng)環(huán)境溫度為50 ℃時,加熱片維持恒溫50 ℃所需要的占空比為0.03%。由圖9 可知,環(huán)境溫度越低,加熱片需要更大的功率才能達(dá)到50 ℃恒溫,也即需要的PWM 波占空比更大。值得注意的是,不同的加熱片因其形狀、阻值不同,維持50 ℃需要的占空比并不相同,若更換加熱片則需要重新標(biāo)定PID 參數(shù)。
為了實(shí)時監(jiān)測恒溫控制電路的恒溫情況,本實(shí)驗(yàn)在PC 端提供了基于QT 的圖形顯示界面[15],如圖10所示,為試驗(yàn)箱不同溫度情況下輸出的溫度變化信息。
根據(jù)圖10 實(shí)驗(yàn)結(jié)果不難看出,在溫度箱設(shè)定為-40 ℃時,芯片溫度在50.2~49.95 ℃范圍內(nèi)波動;當(dāng)溫度箱設(shè)定為50 ℃時,壓力傳感器芯片溫度基本保持在50.23 ℃;加熱片穩(wěn)定后不同溫度條件下MEMS壓力傳感器芯片的溫度誤差范圍小于±0.5 ℃,恒溫系統(tǒng)溫度控制效果明顯,達(dá)到了設(shè)定要求。
圖9 不同溫度下恒溫50 ℃所需的PWM 波占空比
圖10 不同溫度情況下試驗(yàn)箱輸出的溫度信息
該實(shí)驗(yàn)設(shè)計提出了一種以PID 溫度控制為主要功能的嵌入式系統(tǒng)綜合設(shè)計實(shí)驗(yàn),實(shí)驗(yàn)涉及的知識面廣,軟件包括傳感器的SPI 通信時序、數(shù)字增量式PID 編程、基于定時器的脈沖寬度調(diào)制技術(shù)、微處理器的中斷編程、Linux 應(yīng)用及網(wǎng)絡(luò)編程等,該實(shí)驗(yàn)設(shè)計的創(chuàng)新主要體現(xiàn)在:
(1)利用定時器輸出PWM 波,調(diào)節(jié)PWM 波的占空比,即可實(shí)現(xiàn)加熱片溫度的增大或減小,實(shí)現(xiàn)恒溫控制功能,擴(kuò)充了PWM 波的應(yīng)用場景;
(2)以增量式PID 控制算法為例,指導(dǎo)學(xué)生在實(shí)踐過程中掌握PID 參數(shù)的調(diào)節(jié)方法,為后續(xù)更好更復(fù)雜的PID 算法在實(shí)踐中的應(yīng)用和調(diào)試打下堅實(shí)基礎(chǔ);
(3)實(shí)現(xiàn)多種通信接口(TCP/IP、串口),搭建了嵌入式端服務(wù)器與上位機(jī)客戶端進(jìn)行通信,實(shí)現(xiàn)多種方式的人機(jī)交互功能。
通過本次實(shí)踐,學(xué)生不僅能夠獲取PID 控制算法在控制領(lǐng)域的具體方法,更能掌握嵌入式開發(fā)中的軟硬件設(shè)計流程,提高學(xué)生對嵌入式系統(tǒng)這門課程的學(xué)習(xí)興趣。理論結(jié)合實(shí)際應(yīng)用的實(shí)驗(yàn)設(shè)計在教學(xué)實(shí)踐中獲得較好的效果。2012 年以來,筆者一直負(fù)責(zé)所在團(tuán)隊(duì)研究生電子設(shè)計大賽的賽前培訓(xùn)和競賽指導(dǎo)工作。團(tuán)隊(duì)學(xué)生100%獲獎,其中獲國家總決賽一等獎2 項(xiàng)、二等獎2 項(xiàng)、三等獎1 項(xiàng),華東賽區(qū)一等獎3 項(xiàng)、二等獎3 項(xiàng)。