摘 要: 隨著機(jī)械控制技術(shù)的快速發(fā)展,基于傳統(tǒng)的工控機(jī)或者PLC的控制器已經(jīng)無法滿足高壓帶電作業(yè)機(jī)器人穩(wěn)定性、實時性、擴(kuò)展性,以及高效、低功耗的工業(yè)化要求。本文設(shè)計出了一套基于ARM的嵌入式控制器,并將μC/OS-Ⅱ移植其中作為操作系統(tǒng)。其在提高開發(fā)效率、縮短開發(fā)周期,以及提高可靠性等方面的優(yōu)勢,可以很好地滿足工業(yè)控制器個性化、智能化的發(fā)展需要。
關(guān)鍵詞: PLC ARM μC/OS-Ⅱ 嵌入式控制器 移植
1.引言
高空高壓帶電作業(yè)是指在不停電的狀態(tài)下對架空高壓線路進(jìn)行維修、更換設(shè)備等,以避免停電帶來的不便與損失。帶電作業(yè)已經(jīng)成為保證供電設(shè)備可靠運行、提高電網(wǎng)運行效率與質(zhì)量的重要手段;其經(jīng)濟(jì)社會效益是無法估量的。自1999年我國開始進(jìn)行帶電作業(yè)機(jī)器人研究至今,取得了巨大的成果,但隨著智能控制技術(shù)的不斷提高,節(jié)能、低功耗且穩(wěn)定性與實時性并舉成為工業(yè)控制機(jī)器人的發(fā)展趨勢,具有嵌入式系統(tǒng)的控制器不僅可以滿足這方面的需要,在可擴(kuò)展性方面也表現(xiàn)得十分出色。
基于ARM的開放式控制系統(tǒng)不僅價格合理、結(jié)構(gòu)簡單,而且移植性好,能夠?qū)崿F(xiàn)功能模塊的最大化擴(kuò)展。這些功能模塊全部連接在總線上,互不影響、切換快速。這些優(yōu)點對于提高高壓帶電作業(yè)機(jī)器人的整體工作性能、效率與質(zhì)量具有重大的作用。因此本文設(shè)計了基于ARM的嵌入式控制器,采用模塊化結(jié)構(gòu),對于嵌入式技術(shù)的發(fā)展具有一定的技術(shù)意義。
本課題項目高壓帶電作業(yè)機(jī)械手的控制車的設(shè)計圖如圖1。
2.硬件結(jié)構(gòu)設(shè)計
帶電作業(yè)機(jī)器人嵌入式控制器的設(shè)計主要包括硬件層和內(nèi)核層,按照本控制器的設(shè)計理念,硬件層應(yīng)滿足實時性、可擴(kuò)展性、低成本,以及基于標(biāo)準(zhǔn)的總線結(jié)構(gòu)。
2.1微控制器
其采用了PHILIPS公司的ARM7TDMI-S核、總線開放的單片機(jī)LPC2292。LPC2292是世界首款可加密的具有外部存儲器接口的ARM芯片,具有零等待256KB的片內(nèi)FLASH,16KB的SRAM,可簡化系統(tǒng)設(shè)計,提高性能及可靠性。芯片內(nèi)部具有UART、硬件I2C、SPI、PWM、ADC、定時器和CAN等眾多外圍部件,功能強(qiáng)大;144引腳LQFP封裝,3.3V和1.8V系統(tǒng)電源,內(nèi)部PLL時鐘調(diào)整,功耗低。
2.2整體設(shè)計
LPC2292具有144引腳的封裝、非常低的功耗、若干個32位定時器、8路10位ADC轉(zhuǎn)換器、2路CAN接口,以及PWM通道和9個外部中斷引腳,這使其特別適用工業(yè)控制應(yīng)用以容錯維協(xié)議轉(zhuǎn)換器及許多其他應(yīng)用中護(hù)總線。此外,LPC2292內(nèi)部含有76(使用了外部存儲器)到112個(單片)可用GPIO口。并且含有寬范圍的串行通信接口,因此非常適合應(yīng)用于通信網(wǎng)關(guān)。
3.控制系統(tǒng)軟件
3.1實時操作系統(tǒng)介紹
實時操作系統(tǒng)是繼傳統(tǒng)的前后臺系統(tǒng)后,針對其及時性比較差的問題而出現(xiàn)的一段在嵌入式系統(tǒng)啟e686a0073f96efbf20129534202bf466502cd9d971f0ebd74aca02385b63333f動后首先執(zhí)行的背景程序,用戶的應(yīng)用程序是運行于RTOS之上的各個任務(wù),RTOS根據(jù)各個任務(wù)的要求,進(jìn)行資源管理、消息管理、任務(wù)調(diào)度及異常處理等工作。在RTOS支持的系統(tǒng)中,每個任務(wù)均有一個優(yōu)先級,RTOS根據(jù)各個任務(wù)的優(yōu)先級,動態(tài)的切換各個任務(wù),保證對實時性的要求。
隨著智能控制的發(fā)展,以及工業(yè)化水平的不斷提高,實時操作系統(tǒng)的應(yīng)用是十分必要的。首先,實時操作系統(tǒng)提高了系統(tǒng)的可靠性,提高了開發(fā)效率縮短了開發(fā)周期;其次,嵌入式實時操作系統(tǒng)充分發(fā)揮了32位CPU的多任務(wù)潛力,特別適合于運行多任務(wù)實時系統(tǒng)。在嵌入式實時操作系統(tǒng)環(huán)境下開發(fā)實施應(yīng)用程序使得程序的設(shè)計和擴(kuò)展變得容易,不需要大的改動就可以增加新的功能。通過將應(yīng)用程序分割成若干獨立的任務(wù)模塊,使應(yīng)用程序的設(shè)計過程大為簡化;而且對實時性要求苛刻的事件都得到了快速、可靠的處理,通過有效的系統(tǒng)服務(wù),嵌入式實時操作系統(tǒng)使得系統(tǒng)資源得到更好的利用。
常見的嵌入式實時操作系統(tǒng)有:嵌入式Linux、VxWorks、OSE、eCos、μC/OS-Ⅱ。
3.2實時操作系統(tǒng)的比較與選擇
VxWorks操作系統(tǒng)成本高,結(jié)構(gòu)復(fù)雜,不適合小型應(yīng)用;Linux操作系統(tǒng)體系結(jié)構(gòu)復(fù)雜,產(chǎn)品化和商業(yè)化程度不夠,即使在Linux本來的PC目標(biāo)環(huán)境下,也難尋理想的技術(shù)支持,更不用說嵌入式環(huán)境下的Linux,這方面的弱勢對批量生產(chǎn)、大規(guī)模、長時間運行使用的工業(yè)化產(chǎn)品來說是致命的。因此,本文選擇μC/OS-Ⅱ作為操作系統(tǒng),其主要優(yōu)勢為:μC/OS-Ⅱ是一種免費公開源代碼、結(jié)構(gòu)小巧、具有可剝奪實時內(nèi)核的實時操作系統(tǒng),成本低、實時性強(qiáng)、移植性能好、擴(kuò)展性能優(yōu)良。
4.μC/OS-Ⅱ的移植
4.1μC/OS-Ⅱ的簡介
μC/OS-Ⅱ是一個完整的、可移植、固化、裁剪的占先式實施多任務(wù)內(nèi)核,并且是用移植性很強(qiáng)的C語言編寫的,與微處理器硬件相關(guān)的部分是用匯編語言編寫的,使其可以供不同架構(gòu)的微處理器使用,至今,從8位到64位,μC/OS-Ⅱ已經(jīng)超過40種體系架構(gòu)的處理器上運行。雖然μC/OS-Ⅱ是在PC機(jī)上開發(fā)和測試的,但μC/OS-Ⅱ的實際對象是嵌入式系統(tǒng),很容易移植到不同架構(gòu)的微處理器上。所謂移植,就是使一個實時內(nèi)核能在其他的微處理器或微控制器上運行,要移植uC/OS,目標(biāo)處理器必須滿足以下要求:
1)處理器的C編譯器能產(chǎn)生可重入代碼,且用C語言就可以開/關(guān)中斷;
2)處理器支持中斷,并能產(chǎn)生定時中斷(通常為10—100Hz);
3)處理器能支持一定數(shù)量的數(shù)據(jù)存儲硬件堆棧(可能是幾千字節(jié));
4)處理器有將堆棧指針和其它CPU寄存器讀出并存儲到堆?;騼?nèi)存中的指令。
像Motorola6805系列的處理器就不能滿足上面的后兩項要求,所以μC/OS-Ⅱ不能在這類處理器上運行。因此在了解啟動代碼之前對于ARM體系結(jié)構(gòu)與啟動過程的了解非常重要。
4.2移植工作
與處理器相關(guān)代碼是移植中最關(guān)鍵的部分,內(nèi)核將上層應(yīng)用程序和底層硬件結(jié)合成為一個整體,要使內(nèi)核使用與不同硬件層就需要在內(nèi)核與硬件之間有一中間層,這就是與處理器相關(guān)的代碼,處理器不同代碼也不同,移植時我們必須進(jìn)行修改;在進(jìn)行μC/OS-Ⅱ的移植時,我們也只需要修改這部分代碼即可。
1)OS_CPU.H中需要設(shè)置一個常量來標(biāo)識堆棧增長方向;
2)OS_CPU.H中需要聲明幾個用于開關(guān)中斷和任務(wù)切換的宏;
3)OS_CPU.H中需要針對具體處理器的字長重新定義一系列數(shù)據(jù)類型;
4)OS_CPU_A.ASM需要改寫4個匯編語言的函數(shù);
5)OS_CPU_C.C需要用C語言編寫6個簡單函數(shù);
6)修改主頭文件INCLUDE.H,將上面的三個文件和其他的頭文件加入。
INCLUDES.H是一個主頭文件,它出現(xiàn)在每個.C文件的第一行,#include“includes.h”。INCLUDES.H文件使得工程項目中的每個.C文件無需分別考慮它實際上需要哪些頭文件。
OS_CPU.H包括了用#define語句定義的、與處理器相關(guān)的常數(shù)、宏,以及類型。與處理器相關(guān)的代碼為:
#define OS_CRITICAL_METHOD2
#define OS_ENTER_CRITICAL()ARMDisablet_int()
#define OS_EXIT_CRITICAL()ARMEnable_int()
#define OS_STK_GROWTH 1
#define OS_TASK_SWOSCtxSw
全局函數(shù)聲明:
extern void OSCtxSw(void);
extern void OSIntCtxSw(void);
extern void ARMDisableInt(void);
extern void ARMEnableInt(void);
extern void OSTickISR(void);
OS_CPU_C.C在μC/OS-Ⅱ的移植中需要編寫以下10個函數(shù):
OSTaskStkInit()
OSTaskCreateHook()
OSTaskDelHook()
OSTaskSwHook()
OSTaskIdleHook()
OSTaskStatHook()
OSTimeTickHook()
OSInitHookBegin()
OSInitHookEnd()
OSTCBInitHook()
在這里我們移植OS_CPU_C.C文件時,需要編寫的是任務(wù)堆棧初始化函數(shù)OSTaskStkInit和時鐘節(jié)拍中斷服務(wù)鉤子函數(shù)OSTimeTickHook。
μC/OS-Ⅱ的移植需要改寫OS_CPU_A.ASM中的4個函數(shù):
OSStartHighRdy()
OSCtxSw()
OSIntCtxSw()
OSTickISR()
如果編譯器支持插入行匯編代碼,就可以將所有與處理器相關(guān)的代碼放到OS_CPU_C.C文件中,而不必再有單獨的匯編語言文件。
4.2μC/OS-Ⅱ的測試
當(dāng)做完μC/OS-Ⅱ的移植后,緊接著就是驗證其是否正常工作,首先應(yīng)該測試內(nèi)核自身的運行狀況,可以在沒有應(yīng)用程序的情況下進(jìn)行測試,也就是讓內(nèi)核自己測試自己。這樣不僅可以使事情簡單化,而且可以很清楚地發(fā)現(xiàn)問題是移植本身的問題而不是應(yīng)用代碼產(chǎn)生的問題。如果一些簡單程序和時鐘節(jié)拍中斷服務(wù)子程序可以運行起來,那么添加應(yīng)用程序就非常簡單了。
5.結(jié)語
本文針對如今高壓帶電作業(yè)機(jī)器人生產(chǎn)作業(yè)中存在的一些問題,提出了基于ARM的實時嵌入式系統(tǒng)控制器的設(shè)計,其可移植性、可擴(kuò)展性、可交換性,以及高效低成本的顯著優(yōu)勢,不僅縮短了開發(fā)周期、提高了設(shè)備實時性、優(yōu)化了工作效率,而且其低功耗起到了節(jié)能的作用??梢姡@種設(shè)計將是未來工業(yè)機(jī)器人智能化發(fā)展的必然趨勢。
參考文獻(xiàn):
[1]Jean J.Labrosse.嵌入式實時操作系統(tǒng)μC/OS-Ⅱ(第2版)[M].北京航空航天大學(xué)出版社,2007.09.
?。?]陳是知.μC/OS-Ⅱ內(nèi)核分析、移植與驅(qū)動程序開發(fā)[M].人民郵電出版社,2007.09.
?。?]周立功.ARM嵌入式系統(tǒng)基礎(chǔ)教程[M].北京航空航天大學(xué),2005.01.
?。?]戚暉,彭商賢.面向?qū)ο蟮母邏簬щ娮鳂I(yè)機(jī)器人控制系統(tǒng)[J].機(jī)器人,2002.05.