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