游瑋 崔云從 方華杰 方明
(1埃夫特智能裝備股份有限公司,安徽蕪湖,241000;2 香港中文大學(xué),香港,999077)
近年,科技進步不斷推動機器人技術(shù)的快速發(fā)展[1-2]。機器人控制器是機器人的重要組成部分,在很大程度上影響著機器人的發(fā)展[3-4]。
傳統(tǒng)經(jīng)濟型工業(yè)機器人的控制器具有成本高、功耗大等缺點[5-6],不適合中小型移動機器人[7-8]。針對上述問題,本文設(shè)計了一種底層控制系統(tǒng)軟件,經(jīng)調(diào)教,能滿足埃夫特品牌所有機器人控制器運算能力強、實時性好等要求,且具有占用內(nèi)存小、模塊化設(shè)計等優(yōu)點。
底層軟件設(shè)計的主要工作是編寫相關(guān)硬件驅(qū)動。驅(qū)動包括示教盒與主控制器兩部分,基于實時性要求不同,兩者分別采用uc/os和linux操作系統(tǒng)。示教盒與控制器關(guān)系,如圖1所示。
圖1 示教盒軟件與控制器軟件關(guān)系圖
Boot Loader作用是引導(dǎo)加載內(nèi)核程序。由于RS232串口傳輸速度慢,不適合大文件下載,而Uboot具有基于TFTP協(xié)議的以太網(wǎng)下載模式,極大提高了下載速度,因此選擇Uboot作為Boot loader。在啟動Uboot時,需要設(shè)置參數(shù)、傳輸文件和PC主機通信。示教盒的啟動流程如圖2所示。
圖2 示教盒核心板軟件啟動流程圖
內(nèi)核驅(qū)動是軟件底層核心部分,用戶調(diào)用驅(qū)動程序控制硬件,硬件利用程序進行反饋。控制器包含CAN、RS232、RS485、AD和DA通信總線,各總線需要相應(yīng)驅(qū)動程序。
本文提出用RS232C,該通信標(biāo)準(zhǔn)于1969年由美國電子工業(yè)聯(lián)合會發(fā)布,其通信形式分為零Modem和Modem兩種。本文采用零Modem與計算機串口通信,傳輸距離15m,波特率195200bps。AM3517有4個串口,其中前三路UART接口的IRQ(中斷)指向MPU系統(tǒng),第四路UART不具有IRQ(中斷)功能,不作為實時串口使用。AM3517串口功能模塊具體線路如圖3所示。
圖3 AM3517串口功能模塊
RS232驅(qū)動模塊分為初始化、發(fā)送數(shù)據(jù)、中斷接收函數(shù)三個部分。初始化函數(shù)第一步為設(shè)置串口,例如設(shè)定中斷號、優(yōu)先級和服務(wù)子程序等;第二步至第六步分別為清空寄存器,關(guān)閉FIFO,設(shè)置波特率,設(shè)置EFR寄存器,接收中斷,設(shè)置EFR轉(zhuǎn)為正常模式。接收函數(shù)指中斷服務(wù)子函數(shù),發(fā)送函數(shù)將數(shù)據(jù)寫入寄存器里,通過判斷語句進行判斷,結(jié)合AM3517手冊,初始化函數(shù)框架圖如圖4所示。
圖4 初始化函數(shù)框架圖
選用RS485接口可以顯著提高RS232的傳輸速度,具有傳輸距離長、穩(wěn)定性好的優(yōu)點。為滿足AM3517對于485接口的需求,本文將MAX3485芯片轉(zhuǎn)成RS485通信格式,使用RS232進行驅(qū)動,如圖5所示。
圖5 485轉(zhuǎn)換電路
CPK(CAN Protocol Kernel)接收消息,接收控制單元選擇信息儲存位置??刂茊卧ㄟ^檢查信息狀態(tài)、標(biāo)識符和面具(mask)決定郵箱地址,將信息過濾在第一個郵箱。管理單元通過網(wǎng)絡(luò)計數(shù)器??刂菩畔⒌膫鬏斉c接收。在規(guī)定時間內(nèi),若沒有接收信息將產(chǎn)生報警。
AM3517的CAN總線通信原理如圖6所示。
圖6 CAN總線控制圖
CPU將數(shù)據(jù)存儲并發(fā)送郵箱,RAM讀取數(shù)據(jù)和標(biāo)識符后,若TRSn被設(shè)置,信息將按優(yōu)先級發(fā)送。優(yōu)先級由寄存器(CANMCF)中TPL位決定。CPU完成數(shù)據(jù)讀取后,將中斷CPU接收信息。比較mask與標(biāo)識符,若相等,則RAM將接收標(biāo)識符、控制位以及數(shù)據(jù)字節(jié);反之,則不會存儲。CPU讀取數(shù)據(jù)后,RMPn將被重置。
AD/DA的芯片通過SPI(Serial Peripheral Interface)總線與AM3517通信,且SPI屬于串行總線式協(xié)議,故通過調(diào)用AD與DA中的驅(qū)動即可實現(xiàn)目標(biāo)要求。主機將時鐘信號發(fā)送給從機,可進行同步化處理。
即通過RS232驅(qū)動測試函數(shù)。外部發(fā)送RS232數(shù)據(jù)給控制器,系統(tǒng)讀取后,根據(jù)ServerStub.c文件的指令列表,選擇執(zhí)行Comm.c文件函數(shù),最后通過rs232.文件函數(shù),將數(shù)據(jù)發(fā)送給外部232接收器。該函數(shù)由判斷和功能句兩部分組成,具體關(guān)系如圖7所示。
圖7 測試函數(shù)
在圖7中,{“ts232”,(CommFunc) testRS232,(CommFuncHelp) WeldTestHelp}為指令列表函數(shù),主要對Comm.c文件函數(shù)起選擇作用。void testRS232(int argc,char *argv[],int whichUart)為執(zhí)行函數(shù),通過判斷是否進入1通道RS232測試。count=Rs232_1_GetStr(testbuffer_1)函數(shù)可以獲取外部發(fā)送到232中的緩存數(shù)據(jù)。Rs232_1_SendStr(testbuffer_1)函數(shù)將數(shù)據(jù)發(fā)送給外部232接收器。
uc/os是開源系統(tǒng),便于開發(fā)人員下載源碼,具有執(zhí)行效率高、占用空間小、實時性和擴展性強等特點。基于uc/os系統(tǒng),本文根據(jù)機器人相關(guān)要求設(shè)計內(nèi)核。內(nèi)核啟動流程主要包括匯編啟動程序、系統(tǒng)初始化、Main程序初始化和任務(wù)分配運行四個部分,如圖8所示。
圖8 內(nèi)核啟動流程圖
在圖8中,匯編啟動程序引導(dǎo)內(nèi)核運行啟動、中斷向量表及跳轉(zhuǎn)主程序;系統(tǒng)初始化指對板級系統(tǒng)設(shè)置,如系統(tǒng)時鐘等;Main程序初始化則是初始化各個設(shè)備驅(qū)動;任務(wù)分配運行由任務(wù)分配初始化與任務(wù)運行兩部分組成,具體如圖9、圖10所示。
在圖9中,SYS_TASK負責(zé)根文件、內(nèi)存變量、機器人相關(guān)變量的初始化、讀取配置文件、判斷示教盒有無且決定是否通信;WatchprocessorTASK負責(zé)串口監(jiān)視,執(zhí)行當(dāng)前工作狀態(tài);接收串口命令和打印信息;InterpTASK進行插值和計算目標(biāo)位置,在手動關(guān)節(jié)插補體現(xiàn);AnalyzeTASK負責(zé)示教模式下的自動計算運行位置;PlcSecondTASK通過PLC處理I/O口信息;ServoProcessorTASK處理伺服反饋信息。
圖9 任務(wù)啟動流程及優(yōu)先級
基于時間片輪番調(diào)度法,任務(wù)運行模塊對初始化任務(wù)按優(yōu)先級調(diào)度。任務(wù)進入就緒狀態(tài)后,通過任務(wù)調(diào)度運行。其中,若有中斷或其他任務(wù)進入,則執(zhí)行相應(yīng)程序。指定時間或反饋信息到達后,暫停任務(wù)繼續(xù)執(zhí)行。同時,也可在運行中刪除任務(wù),讓其進入休眠狀態(tài)。任務(wù)轉(zhuǎn)換如圖10所示。
圖10 任務(wù)轉(zhuǎn)換圖
本文針對打磨機器人對控制器運算能力強、實時性好等要求,設(shè)計機器人控制器軟件系統(tǒng),再根據(jù)系統(tǒng)總體方案,分別對Boot Loader設(shè)計和內(nèi)核驅(qū)動進行設(shè)計,并對內(nèi)核驅(qū)動進行詳細說明。本文設(shè)計的機器人控制器軟件系統(tǒng),可用于經(jīng)濟型打磨機器人,對其他品牌產(chǎn)品具有一定參考性。