以ARM為核心的嵌入式體感遙控器設(shè)計(jì)
3 軟件系統(tǒng)設(shè)計(jì)
體感遙控器的軟件系統(tǒng)設(shè)計(jì)基于實(shí)時(shí)嵌入式操作系統(tǒng)μC/OS-II,借助于μC/OS-II內(nèi)核的多任務(wù)管理和優(yōu)秀的實(shí)時(shí)性能,大大簡化了軟件系統(tǒng)設(shè)計(jì),并且可以保證系統(tǒng)響應(yīng)的實(shí)時(shí)性。
3.1 任務(wù)分配與實(shí)現(xiàn)
在任務(wù)規(guī)劃的過程中,采用分層次和模塊化的思想將整個(gè)系統(tǒng)任務(wù)進(jìn)行劃分。首先,我們必須對(duì)系統(tǒng)整體的控制任務(wù)有清楚地了解,具體任務(wù)劃分如表1所列。本文引用地址:http://2s4d.com/article/147997.htm
表1中除OSTaskStat和OSTaskIdle任務(wù)為系統(tǒng)自帶,其他8個(gè)任務(wù)均為用戶創(chuàng)建。其中:App_TaskStart為起始任務(wù),系統(tǒng)運(yùn)行后第一個(gè)建立的任務(wù),其作用是為初始化系統(tǒng)時(shí)鐘和底層設(shè)備創(chuàng)建所有事件和其他任務(wù);App_TaskAD任務(wù)監(jiān)視電池電壓的變化,當(dāng)電壓低于設(shè)定值Low Battery時(shí),將啟動(dòng)蜂鳴器報(bào)警;App_TaskAHRS任務(wù)通過DMA不斷接收iNEMO慣性導(dǎo)航模塊數(shù)據(jù),然后交由USART1接收緩沖區(qū),實(shí)時(shí)獲得手部姿態(tài)信息;App_TaskCmd根據(jù)手部姿態(tài)信息轉(zhuǎn)化為機(jī)器人運(yùn)動(dòng)指令,然后按照制定的通信協(xié)議通過nRF24L01無線模塊將指令數(shù)據(jù)包發(fā)送出去;App_TaskData任務(wù)在每發(fā)送一次指令數(shù)據(jù)包后,通過nRF24L01無線模塊接收機(jī)器人本體回傳的運(yùn)動(dòng)狀態(tài)信息包;App_TaskLCD任務(wù)實(shí)現(xiàn)運(yùn)動(dòng)指令、機(jī)器人運(yùn)動(dòng)狀態(tài)、電池電量、實(shí)時(shí)時(shí)鐘在12864液晶顯示模塊上的顯示;App_TaskLED_B任務(wù)通過LED指示遙控器上的主控芯片與iNEMO慣性導(dǎo)航模塊、遙控器與機(jī)器人是否通信正常,當(dāng)電池電量過低時(shí),通過蜂鳴器進(jìn)行報(bào)警;App_TaskClock任務(wù)得到DS1302的實(shí)時(shí)時(shí)鐘,通過消息郵箱App_LCDClockMbox發(fā)送給App_TaskLCD任務(wù)予以實(shí)時(shí)顯示。
3.2 任務(wù)間通信設(shè)計(jì)
任務(wù)和中斷服務(wù)子程序可以通過事件控制塊與其他任務(wù)進(jìn)行通信,常用的通信方式有信號(hào)量、郵箱和消息隊(duì)列,同時(shí),通過事件標(biāo)志實(shí)現(xiàn)任務(wù)與事件之間的同步。本操作系統(tǒng)共創(chuàng)建了8個(gè)消息郵箱和1個(gè)事件標(biāo)志:
OS_EVENT *App_AHRSMbox
OS_EVENT *App_CommandMbox
OS_EVENT *App_DataMbox
OS_EVENT *App_ADMbox
OS_EVENT *App_LCDCmdMbox
OS_EVENT *App_LCDDataMbox
OS_EVENT *App_LCDADMbox
OS_EVENT *App_LCDClockMbox
OS_FLAG_GRP *App_GreenLEDFlag
其中,App_GreenLEDFlag包括3個(gè)標(biāo)志位:
#define Flg_GreenLED 0x0001
#define Flg-BlueLED 0x0002
#define Flg_Buzzer 0x0004
3.3 軟件系統(tǒng)流程圖設(shè)計(jì)
軟件系統(tǒng)流程圖如圖4所示。體感遙控器經(jīng)上電初始化后,首先采集電池電壓,然后通過郵箱*App_ADMbox將采集得到的電量值發(fā)送給12864液晶顯示模塊進(jìn)行顯示,若電量過低,則使標(biāo)志位Flg_Buzzer置位,即通過蜂鳴器進(jìn)行報(bào)警。并且,通過DMA把iNEMO慣性導(dǎo)航模塊的數(shù)據(jù)接收到USART1,判斷校驗(yàn)位是否正確,若不正確則重新配置DMA,重新接收數(shù)據(jù);若正確則將接收到的數(shù)據(jù)轉(zhuǎn)化為控制指令,通過nRF24L01無線模塊發(fā)送給機(jī)器人。同時(shí)通過郵箱*App-LCDCmdMbox將指令發(fā)送給App_TaskLCD任務(wù),在12864液晶顯示模塊顯示當(dāng)前發(fā)送的指令,并通過置位Flg_GreenLED點(diǎn)亮相應(yīng)LED,以表示STM32F103C8T6與iNEMO模塊通信正常;機(jī)器人本體接收到指令后,會(huì)給遙控器返回?cái)?shù)據(jù)包,如果遙控器接收的數(shù)據(jù)錯(cuò)誤標(biāo)志位沒有置位,則說明遙控器與機(jī)器人本體通信正常,通過郵箱*App_LCDDataMbox將機(jī)器人的狀態(tài)信息發(fā)送給App_Tas kLCD任務(wù),在12864液晶顯示模塊上顯示機(jī)器人本體運(yùn)動(dòng)狀態(tài),同時(shí)通過置位Flg_BlueLED點(diǎn)亮相應(yīng)LED,以表示遙控器與機(jī)器人本體通信正常。App_TaskClock任務(wù)通過郵箱*App_LCDClockMbox向App_TaskLCD任務(wù)發(fā)送當(dāng)前時(shí)間信息,并予以顯示。
體感遙控器軟件系統(tǒng)開發(fā)環(huán)境為IAR EWARM5.4,μC/OS-II版本為V2.86,STM32F103C8T6的調(diào)試工具為J-Link仿真器,STM32F103C8T6的固件庫版本為V2.0.3。
3.4 遙控器與機(jī)器人本體通信方案設(shè)計(jì)
本設(shè)計(jì)采用嚴(yán)格的“一問一答”形式,即每發(fā)送一條指令都需要機(jī)器人本體返回一幀數(shù)據(jù)包。遙控器發(fā)送一條指令后,等待機(jī)器人本體返回的數(shù)據(jù)包,只有獲得機(jī)器人本體返回的數(shù)據(jù)包后才可以繼續(xù)發(fā)送指令包。如果機(jī)器人本體接收到錯(cuò)誤指令(經(jīng)校驗(yàn)錯(cuò)誤的指令),置位通信錯(cuò)誤標(biāo)志位,上傳數(shù)據(jù)包;同時(shí),機(jī)器人本體報(bào)警,將機(jī)器人速度置0,接下來1 s內(nèi)下位機(jī)清除串口DMA,重新接收指令。如果遙控器收到的數(shù)據(jù)包中通信錯(cuò)誤標(biāo)志位置位,則重新配置nRF24L01無線模塊,重新發(fā)送指令。
4 性能測試
對(duì)本文所描述的嵌入式機(jī)器人體感遙控器進(jìn)行了相應(yīng)的測試,測試環(huán)境分別為室內(nèi)走廊環(huán)境和室外環(huán)境,測試結(jié)果如表2所列。測試結(jié)果表明,在室內(nèi)走廊環(huán)境中,收發(fā)指令的正確率在95%以上;在室外環(huán)境中,由于環(huán)境中可能存在多種干擾,并且距離在20~30 m,正確率在90%以上。由于遙控器底層軟件具備一定容錯(cuò)能力,90%以上的正確率完全滿足要求。
結(jié)語
本文討論了基于STM32F103C8T6的嵌入式服務(wù)機(jī)器人體感遙控器的設(shè)計(jì)與實(shí)現(xiàn),并對(duì)具體的硬件電路和軟件系統(tǒng)進(jìn)行了詳細(xì)的介紹。經(jīng)過大量的實(shí)驗(yàn)證明,本體感遙控器具有操作簡便、可操作性強(qiáng)、通信可靠、穩(wěn)定性和人性化程度高等優(yōu)點(diǎn),在實(shí)驗(yàn)室服務(wù)機(jī)器人的實(shí)際應(yīng)用中取得了良好的效果。
評(píng)論