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