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