,,
(蘇州大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,蘇州215006)
隨著現(xiàn)代計(jì)算機(jī)、電子、自動(dòng)化等技術(shù)的發(fā)展,越來越多的智能設(shè)備進(jìn)入人們的生活。智能汽車作為近些年來的研究熱點(diǎn),其無人駕駛技術(shù)具有良好的應(yīng)用前景。而直立智能車由于具有靈活、占地面積小等特點(diǎn),在擁擠的地方有較大用途。
小車設(shè)計(jì)遵循第十二屆全國(guó)大學(xué)生智能汽車競(jìng)賽技術(shù)規(guī)范,使用E型車模作為基礎(chǔ)機(jī)械結(jié)構(gòu),完成硬件電路設(shè)計(jì),并基于實(shí)時(shí)操作系統(tǒng)MQXLite設(shè)計(jì)了控制算法,實(shí)現(xiàn)小車直立行駛,自動(dòng)循跡功能。
系統(tǒng)硬件架構(gòu)圖如圖1所示,小車硬件系統(tǒng)由輸入部分、微控制器、輸出部分和供電模塊組成。輸入部分的陀螺儀和加速度傳感器、編碼器、攝像頭作為信息采集設(shè)備,實(shí)時(shí)采集小車狀態(tài)信息,經(jīng)微控制器處理后,微控制器輸出PWM波至電機(jī)驅(qū)動(dòng)模塊,控制電機(jī)轉(zhuǎn)速,實(shí)現(xiàn)自動(dòng)循跡。而迷你鍵盤和OLED顯示屏作為人機(jī)交互設(shè)備,方便調(diào)試和獲取信息。

圖1 系統(tǒng)硬件架構(gòu)圖
微控制器選用恩智浦半導(dǎo)體公司生產(chǎn)的MK64FX512VLL12(K64),其特點(diǎn)為高性能,主頻可達(dá)120 MHz,且有FTM、ADC、SPI、I2C、UART等豐富接口。作為智能車的核心控制模塊,微控制器需要獲取各傳感器的輸入信息,轉(zhuǎn)換為可處理的數(shù)字量,并由控制算法計(jì)算出PWM占空比,輸出PWM波至電機(jī)驅(qū)動(dòng)模塊。一款高性能的微控制器可以快速完成控制任務(wù),使系統(tǒng)更加穩(wěn)定。
小車使用7.2 V、2 000 mAh的鎳鎘電池供電,而陀螺儀、加速度傳感器、攝像頭的工作電壓為3.3 V,編碼器的工作電壓為5 V,因此需要設(shè)計(jì)降壓電路,獲得各設(shè)備的工作電壓。
TPS系列低壓差線性穩(wěn)壓芯片的工作壓降較低,靜態(tài)工作電流較小,且具有過載保護(hù)功能[1]。利用TPS7333和TPS7350兩款芯片,完成了電路設(shè)計(jì),具有較高的穩(wěn)定性。其中,TPS7350電路原理圖如圖2所示,TPS7333電路原理圖與其類似。

圖2 TPS7350電路原理圖
輸入部分包含陀螺儀和加速度傳感器、編碼器、攝像頭和迷你鍵盤。它們?yōu)檎麄€(gè)系統(tǒng)采集信息,是一切控制的基礎(chǔ)。
我們選用的陀螺儀型號(hào)為ENC-03,加速度傳感器型號(hào)為MMA7361,它們集成在一個(gè)模塊上,通過兩個(gè)ADC接口與微控制器連接,將采集到的角速度和加速度模擬量傳輸至微控制器處理。
對(duì)于編碼器,選用了歐姆龍公司生產(chǎn)的500線編碼器,通過齒輪與電機(jī)連接,這樣電機(jī)旋轉(zhuǎn)時(shí),編碼器便會(huì)產(chǎn)生脈沖,脈沖數(shù)與電機(jī)轉(zhuǎn)速成正比。K64的FTM模塊有正交解碼功能,可以利用該模塊捕獲編碼器脈沖。
OV7725是由Omnivision公司生產(chǎn)的圖像感光器件,與OV7620、OV7670這些型號(hào)相比,OV7725信噪比更高、速度更快、穩(wěn)定性更好、微光靈敏度更高[2]。我們選用的鷹眼攝像頭既使用了OV7725芯片,又設(shè)計(jì)了硬件二值化電路,可直接將攝像頭采集到的二值化圖像傳輸至微控制器。
迷你鍵盤為人機(jī)交互設(shè)備的一部分,它是一個(gè)4×4的矩陣鍵盤,可以自定義按鍵功能,完成參數(shù)的錄入與修改。
輸出部分包含電機(jī)驅(qū)動(dòng)模塊和OLED顯示屏。
在設(shè)計(jì)電機(jī)驅(qū)動(dòng)模塊時(shí),我們使用兩片IR2104S芯片和4個(gè)MOSFET組成全橋驅(qū)動(dòng)電路,利用MOSFET的通斷來控制兩個(gè)電機(jī)的轉(zhuǎn)動(dòng)方向與轉(zhuǎn)速。其中,IR2104S芯片為IR公司生產(chǎn)的半橋驅(qū)動(dòng)芯片。
OLED顯示屏為人機(jī)交互設(shè)備的另一部分,其分辨率為128×64,可以顯示攝像頭拍攝的圖像、采集到的數(shù)據(jù)等,方便調(diào)試。
直立小車運(yùn)動(dòng)控制任務(wù)可以分解成以下三個(gè)基本任務(wù)[3]:
① 直立控制。根據(jù)小車當(dāng)前的角度和角速度,控制電機(jī)正反轉(zhuǎn),使小車保持平衡。
② 速度控制。根據(jù)小車當(dāng)前的速度,調(diào)整小車傾角,使小車按設(shè)定速度行駛。
③ 方向控制。根據(jù)攝像頭采集到的圖像,計(jì)算離中心線的偏離程度,控制兩個(gè)電機(jī)之間的轉(zhuǎn)動(dòng)差速,使小車轉(zhuǎn)向。
這三個(gè)控制會(huì)分別輸出對(duì)電機(jī)轉(zhuǎn)向和轉(zhuǎn)速的控制量,通過線性疊加,得到PWM占空比,最終輸出PWM波至電機(jī)驅(qū)動(dòng)模塊。
可以將直立小車看成一個(gè)倒立的單擺,當(dāng)它往一個(gè)方向傾倒時(shí),在它的底部提供一個(gè)同向的加速度,便可以使它回到平衡位置,如圖3所示。

圖3 直立控制原理
加速度傳感器采集到小車加速度a后,由下式可以得到小車當(dāng)前角度θ1:
(1)
其中,g為重力加速度單位。另外,將陀螺儀采集到的角速度ω積分,可以得到角度θ2。通過卡爾曼濾波,可以將θ1和θ2融合為變化平滑的角度θ。
利用PD控制,得到直立控制的控制量Ca:
Ca=Kpa×(θ-θ0)+Kda×ω
(2)
其中,Kpa為直立控制比例系數(shù),Kda為直立控制微分系數(shù),θ0為小車平衡時(shí)的角度。Kpa和Kda均需通過實(shí)驗(yàn)得到。
為了使系統(tǒng)更加穩(wěn)定,我們希望小車勻速行駛。完成直立控制后,若想讓小車加速,則僅需使其前傾。通過不斷調(diào)整傾角,便可以使其按設(shè)定速度行駛。
利用編碼器獲得左右輪的速度后,先由式(3)得到速度差值ve:
(3)
其中,vl為左輪速度,vr為右輪速度,v0為設(shè)定速度。再將ve積分,得到總的距離偏差d。最后利用PI控制,由式(4)得到速度控制的控制量Cs:
Cs=Kps×ve+Kis×d
(4)
其中,Kps為速度控制比例系數(shù),Kis為速度控制積分系數(shù),它們均需通過實(shí)驗(yàn)得到。這樣,當(dāng)小車速度低于設(shè)定速度時(shí),Cs為負(fù),小車前傾,而直立控制為了使小車保持平衡,便會(huì)給小車一個(gè)向前的加速度,使小車加速。
為了使小車能夠沿指定道路行駛,還需要進(jìn)行方向控制,根據(jù)道路情況及時(shí)調(diào)整小車的前進(jìn)方向。

圖4 中線提取效果
中線提取效果如圖4所示,在攝像頭采集到的二值化圖像上,道路中間為白色,邊緣為黑色。使用中線提取算法,找出圖像上每行的左右邊線,進(jìn)而求出道路中心線的位置。對(duì)每行中點(diǎn)位置進(jìn)行加權(quán)平均,得到表示小車位置的量,用這個(gè)量減去小車目標(biāo)位置,得到小車離中心線的偏離度me。再計(jì)算me的微分量Δme,Δme表示小車方向的變化率。利用PD控制,由式(5)得到方向控制的控制量Ct:
Ct=Kpt×me+Kdt×Δme
(5)
其中,Kpt為方向控制比例系數(shù),Kdt為方向控制微分系數(shù),它們均需通過實(shí)驗(yàn)得到。當(dāng)小車在道路左側(cè)時(shí),拍攝到的圖像向右移動(dòng),me為正,因而Ct為正。線性疊加控制量時(shí),左輪加Ct,而右輪減Ct,這樣,小車會(huì)向右轉(zhuǎn)向,恢復(fù)至道路中心位置。
在完成了直立、速度和方向控制后,線性疊加Ca、Cs和Ct,為了使小車能夠轉(zhuǎn)向,在疊加Ct時(shí),左輪加Ct,而右輪減Ct。線性疊加的結(jié)果即為PWM占空比,根據(jù)這個(gè)占空比,微控制器輸出PWM波至電機(jī)驅(qū)動(dòng)模塊,控制小車行駛。
為了使系統(tǒng)獲得更好的實(shí)時(shí)性和穩(wěn)定性,我們使用了實(shí)時(shí)操作系統(tǒng)MQXLite。與無操作系統(tǒng)時(shí)不同,操作系統(tǒng)下的編程是以任務(wù)為單位的,每一個(gè)任務(wù)完成一個(gè)特定功能,各個(gè)任務(wù)之間相互獨(dú)立。編寫完各個(gè)任務(wù)后,交由操作系統(tǒng)調(diào)度運(yùn)行,降低了程序設(shè)計(jì)的難度。
MQXLite是標(biāo)準(zhǔn)MQX(Message Queue eXecutive)嵌入式實(shí)時(shí)操作系統(tǒng)的輕量級(jí)版本,它支持多任務(wù)、優(yōu)先級(jí)調(diào)度、同步訪問資源、任務(wù)間通信、中斷處理,具有實(shí)時(shí)性高、內(nèi)核精簡(jiǎn)、資源占用低等特點(diǎn)[4]。
MQXLite中,任務(wù)的基本形式按其執(zhí)行方式分為單次執(zhí)行任務(wù)、周期執(zhí)行任務(wù),以及資源驅(qū)動(dòng)任務(wù)[5]。
單次執(zhí)行任務(wù)在創(chuàng)建后,只執(zhí)行一次,之后便被銷毀或阻塞;周期執(zhí)行任務(wù)按照一定周期執(zhí)行一次;資源驅(qū)動(dòng)任務(wù)僅在它等待的資源可用時(shí),才可能被執(zhí)行。
根據(jù)設(shè)計(jì)的控制算法,我們劃分了5個(gè)任務(wù):task_main、task_angle、task_speed、task_turn和task_comm。
task_main為單次執(zhí)行任務(wù),它是MQXLite啟動(dòng)后執(zhí)行的第一個(gè)任務(wù),用于初始化全局變量、初始化外設(shè)、創(chuàng)建其他任務(wù)和安裝用戶中斷服務(wù)例程。
task_angle為5 ms執(zhí)行一次的周期性任務(wù),該任務(wù)用于直立控制。首先,它獲取陀螺儀和加速度傳感器采集到的角速度和加速度,再通過直立控制算法,計(jì)算得到直立控制的控制量。最后,在該任務(wù)中還完成控制量的線性疊加,更新左右電機(jī)PWM占空比,以變更小車行駛狀態(tài)。
task_speed為20 ms執(zhí)行一次的周期性任務(wù),該任務(wù)用于速度控制。在獲取左右輪速度后,根據(jù)速度控制算法,更新速度控制的控制量。
task_turn為資源驅(qū)動(dòng)任務(wù),用于方向控制。攝像頭采集完畢圖像后,會(huì)觸發(fā)一個(gè)中斷,在該中斷的中斷服務(wù)例程中,置輕量級(jí)事件位,觸發(fā)task_turn任務(wù)。該任務(wù)中,對(duì)采集到的圖像使用方向控制算法,更新方向控制的控制量。
task_comm為資源驅(qū)動(dòng)任務(wù),主要用于與上位機(jī)的通信,進(jìn)行調(diào)試。在收到上位機(jī)的命令后,該任務(wù)被觸發(fā),將小車的參數(shù)發(fā)送至上位機(jī),用于調(diào)試與分析。
另外,由于各控制量被多個(gè)任務(wù)使用,在更新控制量時(shí),還需要使用互斥體來保證對(duì)它們的同步訪問。
各任務(wù)優(yōu)先級(jí)從高到低依次為:task_main、task_turn、task_speed、task_angle和task_comm。由于圖像采集的時(shí)間較長(zhǎng),在圖像采集完畢后,我們希望能夠盡快更新方向信息,所以task_turn優(yōu)先級(jí)較高。task_speed和task_angle同理。而task_comm并不是特別重要,優(yōu)先級(jí)最低。這樣設(shè)置任務(wù)優(yōu)先級(jí)后,對(duì)方向、速度控制的響應(yīng)會(huì)比無操作系統(tǒng)時(shí)快,使整個(gè)系統(tǒng)獲得了更好的實(shí)時(shí)性和穩(wěn)定性。

[1] Texas Instruments. Low-Dropout Voltage Regulators With Integrated Delayed Reset Function (Rev. F)[EB/OL]. (1999-01-01) [2018-01-31].http://www.ti.com/lit/ds/symlink/tps73.pdf.
[2] Omnivision. OV7725 datasheet[EB/OL]. (2007-12-17) [2018-01-31].http://www.zhopper.narod.ru/mobile/ov7725_full.pdf.
[3] 劉明,王洪軍,李永科.直立行走的智能車設(shè)計(jì)方案[J].科技信息,2012,29(20):122.
[4] Freesca1e Semiconductor. MQXLite Real-Time Operating System User Guide. Rev 1.1[EB/OL]. (2014-02-01) [2018-01-31].http://cache.freescale.com/files/soft_dev_tools/doc/user_guide/MQXLITEUG.pdf.
[5] 王宜懷,朱仕浪,姚望舒.嵌入式實(shí)時(shí)操作系統(tǒng)MQX應(yīng)用開發(fā)技術(shù)—ARM Cortex-M微處理器[M]. 北京:電子工業(yè)出版社,2014.
[6] 卓晴,黃開勝,邵貝貝.學(xué)做智能車:挑戰(zhàn)“飛思卡爾”杯[M]. 北京:北京航空航天大學(xué)出版社,2007.
趙俊杰、高曉雅(本科),物聯(lián)網(wǎng)工程專業(yè);張建(講師),主要研究方向?yàn)镸IS系統(tǒng)開發(fā)、嵌入式系統(tǒng)應(yīng)用。
單片機(jī)與嵌入式系統(tǒng)應(yīng)用2018年4期