丁一明,李文魁,張煦光
(海軍工程大學(xué)電氣工程學(xué)院,湖北 武漢,430000)
自主式水下潛航器(autonomous underwater vehicle,AUV)因機(jī)動性好、安全、智能化等優(yōu)點,成為完成各種水下任務(wù)的重要工具。在復(fù)雜的水下工作環(huán)境中,執(zhí)行任務(wù)的實時性和可靠性顯得格外重要。傳統(tǒng)的前后臺程序?qū)崿F(xiàn)比較直觀,但在實時處理能力方面有很大的局限性。由于其再次響應(yīng)任務(wù)的時間是整個循環(huán)執(zhí)行的時間,導(dǎo)致可靠性和實時性較差[1-2]。為了提高AUV 的可靠性和實時性,加入實時多線程(real time thread,RT-Thread)操作系統(tǒng)對AUV進(jìn)行設(shè)計和管理,利用RT-Thread優(yōu)秀的同步機(jī)制和任務(wù)調(diào)度管理機(jī)制,在規(guī)定時間內(nèi)完成任務(wù)??刂破骶钟蚓W(wǎng)絡(luò)(controller area network,CAN)作為應(yīng)用較為廣泛的現(xiàn)場總線之一,具有高性能、高可靠性及糾錯性能好等優(yōu)點[3]。本文采用CAN總線實現(xiàn)與導(dǎo)航模塊等外設(shè)間的數(shù)據(jù)通信。
RT-Thread操作系統(tǒng)架構(gòu)如圖1所示。
圖1 RT-Thread操作系統(tǒng)架構(gòu)
RT-Thread為搶占式實時多任務(wù)操作系統(tǒng),采用面向?qū)ο蟮脑O(shè)計方法,架構(gòu)清晰,裁剪、移植方便[4-5]。RT-Thread既有一個實時內(nèi)核,又有豐富的中間層組件。系統(tǒng)采用分層式結(jié)構(gòu),由下至上分別為:CPU架構(gòu)、內(nèi)核層(kernel)、組件和服務(wù)層(components )、軟件包(packages)。實時內(nèi)核是系統(tǒng)核心,包括線程管理、時鐘管理、內(nèi)存管理、信號量、事件、消息隊列等。任務(wù)線程調(diào)度靈活,具有多種內(nèi)存管理算法,支持多種同步和通信機(jī)制。組件和服務(wù)層提供了文件系統(tǒng)、圖形庫等較完整的中間件組件。軟件包內(nèi)容豐富,包括物聯(lián)網(wǎng)、系統(tǒng)、外設(shè)庫與驅(qū)動類等60多個軟件包。
Env工具是RT-Thread的輔助開發(fā)工具,為操作系統(tǒng)的項目工程提供編譯環(huán)境構(gòu)建、圖形化系統(tǒng)配置及軟件包管理等功能,可對內(nèi)核、組件和軟件包進(jìn)行自由裁剪。
FinSH 是RT-Thread操作系統(tǒng)的命令行組件??刂平K端接收的用戶命令通過串口傳給FinSH;FinSH讀取命令,解析并自動掃描內(nèi)部函數(shù)表,尋找對應(yīng)函數(shù)名,執(zhí)行函數(shù)后輸出回應(yīng),將結(jié)果顯示在控制終端上。
AUV半物理仿真系統(tǒng)如圖2所示。
圖2 AUV半物理仿真系統(tǒng)
為滿足實驗室環(huán)境下運動控制器開發(fā)的需要,將AUV運動控制器與前期開發(fā)的AUV運動模擬器對接,構(gòu)建AUV半物理仿真系統(tǒng)。AUV運動控制器與AUV運動模擬器間通信的信號流為:控制器接收來自控制終端的指令航向、指令深度等控制指令,并接收來自模擬器的航向、航速、縱傾、橫傾、深度等實際運動參數(shù),形成指令舵角,發(fā)送給運動模擬器。模擬器接收控制器發(fā)送的指令舵角,進(jìn)行舵機(jī)模擬和AUV運動模擬計算,并將實際舵角和運動參數(shù)發(fā)送給控制器。
控制器硬件平臺采用STM32F4開發(fā)板,微控制芯片為STM32F407,基于ARM Cortex-M4內(nèi)核,最高主頻為168 MHz,具有192 KB SRAM、1 024 KB FLASH、USART、CAN控制器等豐富的資源[6],可通過USART連接通信模塊,與上位機(jī)進(jìn)行數(shù)據(jù)交換[7-8]。CAN外設(shè)支持2.0 A及2.0 B,波特率最高為1 Mbit/s。TJA1050收發(fā)器與MCU內(nèi)置的CAN控制器可實現(xiàn)CAN總線通信。
AUV運動模擬器通過USB CAN Ⅱ分析儀與AUV運動控制器連接。USB CAN Ⅱ分析儀帶有USB2.0接口和2路CAN接口,具備CAN總線協(xié)議分析功能。
開發(fā)環(huán)境采用Keil MDK5軟件。RT-Thread源碼使用版本rt-thread-v4.0.2,其源碼可從RT-Thread官網(wǎng)下載[9]。板級支持包bsp文件夾提供了多種開發(fā)平臺的配置文件。本文選取stm32文件夾中的stm32f407-atk-explorer文件。
在Env工具命令行中輸入menuconfig命令。打開圖形化配置工具,將RT-Thread Kernel相關(guān)參數(shù)設(shè)為默認(rèn)值。在RT-Thread Components /Device Drivers目錄下,選中Using CAN device drivers選項。輸入命令scons-target=mdk5生成Keil MDK5工程,輸入命令scons -dist生成dist文件夾。其子文件夾stm32f407-atk-explorer包含了RT-Thread內(nèi)核源碼和BSP相關(guān)工程。
使用STM32CubeMX配置芯片引腳。在Connectivity目錄下使能CAN1,芯片圖上CAN1_TX和CAN1_RX對應(yīng)的引腳PA12和PA11顯示為綠色,說明配置成功。檢查時鐘樹配置是否正確(如最高時鐘頻率是否為168 MHz等),然后生成代碼。將生成的文件夾Inc和Src中的stm32f4xx_hal_conf.h和stm32f4xx_hal_msp.c文件拷貝到libraries/STM32F4xx_HAL/ STM32F4xx_HAL_Driver中對應(yīng)的Inc和Src文件夾,替換原來的文件。
打開Env工具,在命令行輸入scons-target=mdk5生成mdk5工程。打開生成的mdk5工程應(yīng)用程序,完成編譯。
3.4.1 波特率配置
3.4.2 CAN驅(qū)動移植
①CAN驅(qū)動添加。
在stm32f4xx_hal_conf.h文件里使能HAL庫CAN驅(qū)動宏定義:
#define HAL_CAN_MODULE_ENABLED
在rtconfig.h里加入相應(yīng)的宏定義:
#define RT_USING_CAN
//使能CAN設(shè)備框架
#define BSP_USING_CAN
//使能CAN設(shè)備驅(qū)動
#define BSP_USING_CAN1
//使能CAN1設(shè)備驅(qū)動
②CAN設(shè)備初始化。
CAN設(shè)備初始化涉及l(fā)ibraries文件夾里的drv_common.c、drv_can.c和drv_can.h等文件。在drv_common.c文件中,加入頭文件調(diào)用:#include "drv_can.h",并將drv_can.c文件中CAN設(shè)備初始化函數(shù)rt_hw_can_init()添加到板載外設(shè)初始化函數(shù)void rt_hw_board_init()中。
3.4.3 下載驗證
通過FinSH組件進(jìn)行交互操作,控制終端運行的串口助手上顯示出RT-Thread版本信息,在串口助手中輸入list_device,則設(shè)備(device)欄中列出配置的CAN1設(shè)備,表明CAN1設(shè)備已經(jīng)成功掛載到RT-Thread系統(tǒng)上。
CAN報文設(shè)置幀格式為擴(kuò)展幀,幀類型為數(shù)據(jù)幀,波特率為125 kbit/s。
CAN接口協(xié)議如表1所示。無實際意義的字節(jié)用FFFF填充。
表1 CAN接口協(xié)議
在Applications目錄下新建ctrboard_can.c文件,創(chuàng)建CAN接收事件和CAN通信線程,使用事件來實現(xiàn)線程間的同步,并通過串口助手將接收到的數(shù)據(jù)按照一定格式打印出來。
通信程序流程如圖3所示。
圖3 通信程序流程圖
將AUV運動控制器通過USB CANII分析儀與AUV運動模擬器連接。為便于參數(shù)比較,控制器發(fā)送固定的指令舵角,即方向舵8°和艉升降舵2°。模擬器接收報文并解碼,顯示方向舵為7.998°、艉升降舵為1.999 5°。該結(jié)果表明,模擬器接收到的指令信息與控制器發(fā)送的指令信息基本一致。
AUV運動模擬器發(fā)送航速航姿和深度舵角兩組報文,STM32F4開發(fā)板外設(shè)CAN接收解碼并通過串口助手在控制終端上顯示。AUV運動控制器接收報文如表2所示。
表2 AUV運動控制器接收報文
經(jīng)檢驗,控制器接收的報文指令信息與模擬器發(fā)送的指令一致,表明AUV運動模擬器和AUV運動控制器之間能準(zhǔn)確地通信。
RT-Thread具有的豐富中間組件及硬實時性,可以很好地滿足AUV各種功能模塊開發(fā)的需要。本文針對AUV運動控制器的開發(fā)需要,結(jié)合STM32CubeMX和Env圖形化配置工具,基于RT-Thread操作系統(tǒng),在SMT32F4硬件平臺上成功地實現(xiàn)了CAN通信模塊的開發(fā)。該設(shè)計方法可推廣應(yīng)用于RT-Thread各類硬件平臺的工程配置和外設(shè)驅(qū)動添加。