基于LPC2104的爬壁機器人控制系統(tǒng)設(shè)計
摘要:首先,簡要介紹四足微型爬壁機器人的機構(gòu)部分,然后詳細介紹四足微型爬壁機器人控制系統(tǒng)的硬件設(shè)計,以及實時多任務(wù)操作系統(tǒng)μC/OS-II在Philips公司32位ARM處理器LPC2104上的移植和控制軟件的設(shè)計。
關(guān)鍵詞:微型爬壁機器人 LPC2104 μC/OS-II ARM
引言
近年來,隨著微機電系統(tǒng)(MEMS)技術(shù)的發(fā)展和微小型移動機器人應(yīng)用領(lǐng)域的不斷拓展,出現(xiàn)了這樣一種需求,即用微型爬壁機器人代替人工進行各種極限作業(yè),如公安消防中使用微型爬壁機器人進行縱橫交織;上下連通的大樓通風(fēng)管道進行災(zāi)情現(xiàn)場考察;敵情偵察;或進入空間狹窄的核工業(yè)管道群之間進行外管壁的檢測和維修等。微型摒棄壁機器人具有廣泛的應(yīng)用前景,在國家自動科學(xué)基金和上海市啟明星的聯(lián)合資助下,筆者開發(fā)了基于并聯(lián)腿機構(gòu)的四足微型爬壁機器人。
1 機構(gòu)簡介
本文所設(shè)計的微型爬壁機器人(長10cm,寬4cm,高4cm)采用四足對稱結(jié)構(gòu),隨機構(gòu)采用并聯(lián)機構(gòu)(也稱并行三連桿機構(gòu)),吸附裝置采用仿生高分子粘性材料經(jīng)切削加工制成的貼性吸盤。每一條腿有三個自由度,分別通過三個微型直流電機配合微型線杠螺母機構(gòu)直接驅(qū)動。圖1中,電機1驅(qū)動腿機構(gòu),使其實現(xiàn)左、右轉(zhuǎn)動;電機2驅(qū)動機器人小腿,實現(xiàn)向前、向后邁步;電機3驅(qū)動機器人大腿,實現(xiàn)大腿的抬起、放下運動。協(xié)調(diào)控制四條腿上的12個直流電機,就可以使微型爬壁機器人實現(xiàn)前進、倒退和轉(zhuǎn)彎等各種運動。
2 控制系統(tǒng)硬件設(shè)計
該微型爬壁機器人采用12個微型電機驅(qū)動,4個接觸傳感器,4個壓力傳感器,以后還要增加用于壁障的紅外傳感器和用于采集現(xiàn)場信號的微型攝像頭,所以對主控制器的要求較高。設(shè)計中,最終選定Philips公司最新開發(fā)的基于32位ARM7TDMI-S內(nèi)核的低軾耗ARM處理器LPC2104作為控制系統(tǒng)主控制器。LPC2104具有以下特性:
*128KB片內(nèi)Flash程序存儲器,帶ISP和IAP功能;
*16KB靜態(tài)RAM;
*向量中斷控制器;
*仿真跟蹤模塊支持實時跟蹤;
*標準ARM測試/調(diào)試接口,兼容現(xiàn)有工具;
*雙UART,其中一帶有調(diào)制解調(diào)器接口;
*高速I2C串行接口,400kb/s;
*SPI串行接口;
*2個定時器分別具有4路捕獲/比較通道;
*多達6路輸出的PWM單元;
*實時時鐘;
*看門狗定時器;
*通用I/O口;
*CPU操作頻率可達60MHz;
*兩個低功耗模式,空閑和掉電;
*通過外部中斷,將處理器從掉電模式中喚醒;
*外設(shè)功能可單獨使能/禁止實現(xiàn)功耗最優(yōu)化;
*片內(nèi)晶振的操作頻率范圍10~25MHz;
*處內(nèi)PLL允許CPU可以在超過整個晶振操作頻率范圍的情況下使用。
微型爬壁機器人控制系統(tǒng)的原理框圖如圖2所示,選用LPC2104作為嵌入式控制器。為提高系統(tǒng)效率和降低功耗,功放驅(qū)動電路采用基于雙極性H-橋型脈寬調(diào)整方式PWM的集成電路L293D。L293D采用16引腳DIP封裝,其內(nèi)部集成了雙極型H-橋電路,所有的開量都做成n型。這種雙極型脈沖調(diào)寬方式具有很多優(yōu)點,如電流連續(xù);電機可四角限運行;電機停止時有微振電流,起到“動力潤滑”作用,消除正反向時的靜摩擦死區(qū):低速平穩(wěn)性好等。L293D通過內(nèi)部邏輯生成使能信號。H-橋電路的輸入量可以用來設(shè)置馬達轉(zhuǎn)動方向,使能信號可以用于脈寬調(diào)整(PWM)。另外,L293D將2個H-橋電路集成到1片芯片上,這就意味著用1片芯片可以同時控制2個電機。每1個電機需要3個控制信號EN12、IN1、IN2,其中EN12是使能信號,IN1、IN2為電機轉(zhuǎn)動方向控制信號,IN1、IN2分別為1,0時,電機正轉(zhuǎn),反之,電機反轉(zhuǎn)。選用一路PWM連接EN12引腳,通過調(diào)整PWM的占空比可以調(diào)整電機的轉(zhuǎn)速。選擇一路I/O口,經(jīng)反向器74HC14分別接IN1和IN2引腳,控制電機的正反轉(zhuǎn)。為了節(jié)省LPC2104的I/O口資源,選用2片74LS138和IN2引腳,控制電機的正反轉(zhuǎn)。為了節(jié)省LPC2104的I/O資源,選用2片74LS138譯碼器對I/O口進行擴展,每片分別選用3路I/O作為輸入信號和1路I/O作為片選信號,這樣就可以將8路I/O口擴展或16路I/O口。如前所述,因為直注電機采用PWM調(diào)速,這樣每1個電機至少需要1路PWM,12個電機需要12路PWM,而LPC2104只有6路PWM輸出,所以選用2片電平鎖存器74LS373使12個電機分成2組共用6路PWM信號。
接觸傳感器由外層管和內(nèi)部超彈性線構(gòu)成,內(nèi)外兩層通過硅管隔開。當內(nèi)線和外層接觸時,開關(guān)關(guān)閉。通過這種方法,接觸傳感器向LPC2104發(fā)送信號,借此來控制吸盤的方向。
從壓力傳感器來模擬信號經(jīng)A/D轉(zhuǎn)換器轉(zhuǎn)換成數(shù)字信號,LPC2104通過壓力傳感器來的信號來判斷吸盤是否安全的吸附在墻壁上。
LPC2104還可以通過串口RS232和上位機進行通信。
3 控制系統(tǒng)軟件設(shè)計
微型爬壁機器人控制系統(tǒng)軟件選用嵌入式實時多任務(wù)操作系統(tǒng)μC/OS-II。它是一個源代碼公開、可移植、可固化、可裁剪、占先式的實時多任務(wù)操作系統(tǒng)。其絕大部分源碼是用ANSI C寫的,移植方便,且運行穩(wěn)定可靠。目前,它已經(jīng)在幾十種從8位到64位的微處理器、微控制器上實現(xiàn)了成功的移植。下面首先介紹μC/OS-II在LPC2104上的移植過程,然后介紹微型爬壁機器人控制軟件的設(shè)計。
3.1 μC/OS-II在LPC2104上的移植
移植μC/OS-II,主要包括:設(shè)置堆棧的增長方面,聲明3個宏(開中斷、關(guān)中斷和任務(wù)切換),聲明10個與編譯器相關(guān)的數(shù)據(jù)類型;用C語言編寫6個與操作系統(tǒng)相關(guān)的函數(shù)(任務(wù)堆棧初始化函數(shù)和5個鉤子函數(shù));用匯編語言編寫4個與處理器相關(guān)的函數(shù)。
用匯編語言編寫的4個與處理器相關(guān)的函數(shù)如下:
①OSStartHighRdy()用于在調(diào)度中使最高優(yōu)先級的任務(wù)處于就緒態(tài)并開始執(zhí)行;
②OSCtxSw()完成任務(wù)級的上下文切換;
③OSIntCtxSw()完成中斷級任務(wù)切換,其過程與OSCtxSw()類似,只是在執(zhí)行中斷服務(wù)子程序后可能使更高優(yōu)先級的任務(wù)處于就緒態(tài);
④OSTickISR()是系統(tǒng)節(jié)拍中斷服務(wù)子程序。
3.1.1 OS_CUP.H的移植
μC/OS-II不使用C語言中的short、int、long等數(shù)據(jù)類型的定義,因為它們與處理器類型有關(guān),隱含著不可移值性,所以代之以移值性強的整數(shù)數(shù)據(jù)類型,這樣,既直觀又可移值。
圖2
在μC/OS-II中,使用OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()開中斷和關(guān)中斷來保護臨界段代碼。ARM處理器核的用戶模式和執(zhí)行Thumb代碼時,不能改變處理器的開中斷位I。為了兼容各種模式,使用軟中斷指令SWI使處理器進入管理模式和ARM指令狀態(tài),即使用SWI 0x02關(guān)中斷,使用SWI 0x03開中斷。
ΜC/OS-II使用結(jié)構(gòu)常量OS_STK_GROWTH指定堆棧的增長方式,0表示堆棧從低地址往高地址增長,1表示堆棧從高地址往低地址增長。雖然ARM處理器核對于兩種方式支持,但ADS的C語言編譯器僅支持一種方式,即從高地址往低地址增長,并且必須是滿遞減堆棧,所以O(shè)S_STK_GROWTH的值為1。以上內(nèi)容在文件OS_CPU.h中做如下定義。
Typedef unsigned char BOOLEAN;/*布爾變量*/
Typedef unsigned char INT8U; /*無符號8位整型變量*/
Typedef signed char INT8S;/*有符號8位整型變量*/
Typedef unsigned short INT16U;/*無符號16位整型變量*/
Typedef signed short INT16S;/*有符號16位整型變量*/
Typedef unsigned int INT32U;/*無符號32位整型變量*/
Typedef signed int INT32S;/*有符號32位整型變量*/
Typedef float FP32;/*單精度浮點數(shù)(32位長度)*/
Typedef double FP64;/*雙精度浮點數(shù)(64位長度)*/
Typedef INT32U OS_STK;/*堆棧是32位寬度*/
_swi(0x02) void OS_ENTER_CRITICAL(void);/*關(guān)中斷*/
_swi(0x03) void OS_EXIT_CRITICAL(void); /*開中斷*/
#define OS_STK_GROWTH 1/*堆棧由高地址向低地址增長*/
3.1.2 OS_CPU_A.ASM文件的移值
OS_CPU_A.ASM文件要實現(xiàn)在多任務(wù)啟動函數(shù)中調(diào)用OSSTartHightRdy(),任務(wù)切換函數(shù)OSCtxSw(),中斷任務(wù)切換函數(shù)OSIntCtxSw()和時鐘節(jié)拍服務(wù)函數(shù)OSTickISR()這4個匯編函數(shù)的改寫。上層任務(wù)調(diào)度部分不需要任何改動。具體移值見網(wǎng)站www.dpj.com.cn。
3.2 系統(tǒng)任務(wù)劃分及調(diào)度
3.2.1 系統(tǒng)任務(wù)劃分
嵌入式實時系統(tǒng)中的任務(wù)不同于前后臺系統(tǒng)中的子程序模塊,任務(wù)是處理機按程序處理數(shù)據(jù)的過程,是個動態(tài)的概念。一般,一個任務(wù)對應(yīng)于一段獨立的主程序。它可以調(diào)用各種子程序,并使用各種系統(tǒng)資源如中斷、外設(shè)等,以完成某種預(yù)定的功能,且允許多個任務(wù)并行運行。嵌入式系統(tǒng)任務(wù)劃分,是將系統(tǒng)中所有要處理的事情劃分為一個個相對獨立的任務(wù)模塊,所有待處理的任務(wù)模塊按順序建立一個個的任務(wù),并分配任務(wù)的優(yōu)先級。在主程序中,所需要做的工作只是建立這些模塊的任務(wù),然后每次執(zhí)行就緒任務(wù)隊列中優(yōu)先級最高的任務(wù)。根據(jù)微型爬壁機器人控制系統(tǒng)的性能指標和技術(shù)要求,對可系統(tǒng)進行如下的任務(wù)劃分:前進、后退、左轉(zhuǎn)彎、右轉(zhuǎn)彎、串行通信、數(shù)據(jù)采樣與數(shù)據(jù)處理等任務(wù)。
3.2.2 任務(wù)調(diào)整
μC/OS-II的任務(wù)調(diào)度是按優(yōu)先級進行的,根據(jù)各任務(wù)的實時性要求及重要程度,分別置它們的優(yōu)先級為10、9、5、6、12、11,其中0、1、2、3、OS_LOWEST_PRIO3、OS_LOWEST_PRIO3、OS_LOWEST_PRIO2、OS_LOWEST_PRIO1、OS_LOWEST_PRIO0這幾個優(yōu)先級保留以被系統(tǒng)使用。優(yōu)先級號越低,任務(wù)的優(yōu)先級越高。
為了在后臺實時檢測同步信號的變化,及時產(chǎn)生相應(yīng)的事件,可直接利用嵌入式微控制器所提供的各種中斷,通過對中斷服務(wù)處理程序傳遞信號量,來喚醒等待同步信號的任務(wù),使這個任務(wù)從掛起狀態(tài)到就緒狀態(tài),送到CPU執(zhí)行,從而達到實時處理的目的。
在多任務(wù)系統(tǒng)中,消息、信號是系統(tǒng)能夠在各個任務(wù)之間通信最常用的手段,其中,使用信號量是協(xié)調(diào)多任務(wù)最簡單有效的手段。在μC/OS-II中,一個任務(wù)或者中斷服務(wù)子程序,通過事件控制塊來向另外的任務(wù)發(fā)信號。當微型爬壁機器人啟動之后,首先通過接觸傳感器和壓力傳感器檢測4只吸盤是否很好的與壁面吸合;同時,通過紅外傳感器檢測前面是否有障礙物。如果一切正常就發(fā)送信號量給直線前進任務(wù),直線前進任務(wù)接受到信號量開始運行,通過協(xié)調(diào)控制12個電機并配合相應(yīng)傳感器使爬壁機器人沿直線運行。當紅外傳感器檢測到前面有障礙物時,會進入中斷程序,在中斷程序中發(fā)送信號給停止任務(wù),停止任務(wù)接收以信號量后運行。首先使機器人停下來調(diào)整好姿勢確保機器人四足吸在壁面上,然后發(fā)送信號量喚醒左轉(zhuǎn)或者右轉(zhuǎn)任務(wù),控制機器人繞過障礙物。以后還可以給微型爬壁機器人配備微型攝像頭,對目標現(xiàn)場進行實時數(shù)據(jù)采集。總之,在微型爬壁機器人的控制系統(tǒng)中,信號、消息不斷傳遞,使得各個任務(wù)不斷切換運行,整個系統(tǒng)得以正確運轉(zhuǎn)工作。
4 未來的工作
因為微型爬壁機器人的關(guān)鍵技術(shù)是基于微機械電子技術(shù)、微驅(qū)動器技術(shù)、微傳感器技術(shù)、高分子材料技術(shù)等方面,所以只有在這些方面有所突破,微型爬壁機器人才能走向?qū)嵱没KO(shè)計的微型爬壁機器人目前只能采用半閉環(huán)控制,因為微型電機沒有理想的位置反饋傳感器,所以目前只能通過反復(fù)和實驗測出各位置的時間,然后通過時間來控制微型電機的轉(zhuǎn)動位置,在以后的研究工作中,我們希望能在微型傳感器方面有所突破。