AUV运动控制器CAN通信模块在RT-Thread上的设计与实现

2021-10-09 09:44丁一明李文魁张煦光
自动化仪表 2021年9期
关键词:外设文件夹模拟器

丁一明,李文魁,张煦光

(海军工程大学电气工程学院,湖北 武汉,430000)

0 引言

自主式水下潜航器(autonomous underwater vehicle,AUV)因机动性好、安全、智能化等优点,成为完成各种水下任务的重要工具。在复杂的水下工作环境中,执行任务的实时性和可靠性显得格外重要。传统的前后台程序实现比较直观,但在实时处理能力方面有很大的局限性。由于其再次响应任务的时间是整个循环执行的时间,导致可靠性和实时性较差[1-2]。为了提高AUV 的可靠性和实时性,加入实时多线程(real time thread,RT-Thread)操作系统对AUV进行设计和管理,利用RT-Thread优秀的同步机制和任务调度管理机制,在规定时间内完成任务。控制器局域网络(controller area network,CAN)作为应用较为广泛的现场总线之一,具有高性能、高可靠性及纠错性能好等优点[3]。本文采用CAN总线实现与导航模块等外设间的数据通信。

1 RT-Thread操作系统

1.1 RT-Thread操作系统架构及特点

RT-Thread操作系统架构如图1所示。

图1 RT-Thread操作系统架构

RT-Thread为抢占式实时多任务操作系统,采用面向对象的设计方法,架构清晰,裁剪、移植方便[4-5]。RT-Thread既有一个实时内核,又有丰富的中间层组件。系统采用分层式结构,由下至上分别为:CPU架构、内核层(kernel)、组件和服务层(components )、软件包(packages)。实时内核是系统核心,包括线程管理、时钟管理、内存管理、信号量、事件、消息队列等。任务线程调度灵活,具有多种内存管理算法,支持多种同步和通信机制。组件和服务层提供了文件系统、图形库等较完整的中间件组件。软件包内容丰富,包括物联网、系统、外设库与驱动类等60多个软件包。

1.2 Env工具

Env工具是RT-Thread的辅助开发工具,为操作系统的项目工程提供编译环境构建、图形化系统配置及软件包管理等功能,可对内核、组件和软件包进行自由裁剪。

1.3 FinSH组件模块

FinSH 是RT-Thread操作系统的命令行组件。控制终端接收的用户命令通过串口传给FinSH;FinSH读取命令,解析并自动扫描内部函数表,寻找对应函数名,执行函数后输出回应,将结果显示在控制终端上。

2 AUV半物理仿真系统

AUV半物理仿真系统如图2所示。

图2 AUV半物理仿真系统

为满足实验室环境下运动控制器开发的需要,将AUV运动控制器与前期开发的AUV运动模拟器对接,构建AUV半物理仿真系统。AUV运动控制器与AUV运动模拟器间通信的信号流为:控制器接收来自控制终端的指令航向、指令深度等控制指令,并接收来自模拟器的航向、航速、纵倾、横倾、深度等实际运动参数,形成指令舵角,发送给运动模拟器。模拟器接收控制器发送的指令舵角,进行舵机模拟和AUV运动模拟计算,并将实际舵角和运动参数发送给控制器。

控制器硬件平台采用STM32F4开发板,微控制芯片为STM32F407,基于ARM Cortex-M4内核,最高主频为168 MHz,具有192 KB SRAM、1 024 KB FLASH、USART、CAN控制器等丰富的资源[6],可通过USART连接通信模块,与上位机进行数据交换[7-8]。CAN外设支持2.0 A及2.0 B,波特率最高为1 Mbit/s。TJA1050收发器与MCU内置的CAN控制器可实现CAN总线通信。

AUV运动模拟器通过USB CAN Ⅱ分析仪与AUV运动控制器连接。USB CAN Ⅱ分析仪带有USB2.0接口和2路CAN接口,具备CAN总线协议分析功能。

3 工程创建

3.1 RT-Thread源码获取

开发环境采用Keil MDK5软件。RT-Thread源码使用版本rt-thread-v4.0.2,其源码可从RT-Thread官网下载[9]。板级支持包bsp文件夹提供了多种开发平台的配置文件。本文选取stm32文件夹中的stm32f407-atk-explorer文件。

3.2 使用Env工具创建工程模板

在Env工具命令行中输入menuconfig命令。打开图形化配置工具,将RT-Thread Kernel相关参数设为默认值。在RT-Thread Components /Device Drivers目录下,选中Using CAN device drivers选项。输入命令scons-target=mdk5生成Keil MDK5工程,输入命令scons -dist生成dist文件夹。其子文件夹stm32f407-atk-explorer包含了RT-Thread内核源码和BSP相关工程。

3.3 芯片引脚配置

使用STM32CubeMX配置芯片引脚。在Connectivity目录下使能CAN1,芯片图上CAN1_TX和CAN1_RX对应的引脚PA12和PA11显示为绿色,说明配置成功。检查时钟树配置是否正确(如最高时钟频率是否为168 MHz等),然后生成代码。将生成的文件夹Inc和Src中的stm32f4xx_hal_conf.h和stm32f4xx_hal_msp.c文件拷贝到libraries/STM32F4xx_HAL/ STM32F4xx_HAL_Driver中对应的Inc和Src文件夹,替换原来的文件。

打开Env工具,在命令行输入scons-target=mdk5生成mdk5工程。打开生成的mdk5工程应用程序,完成编译。

3.4 CAN驱动程序移植及编译

3.4.1 波特率配置

3.4.2 CAN驱动移植

①CAN驱动添加。

在stm32f4xx_hal_conf.h文件里使能HAL库CAN驱动宏定义:

#define HAL_CAN_MODULE_ENABLED

在rtconfig.h里加入相应的宏定义:

#define RT_USING_CAN

//使能CAN设备框架

#define BSP_USING_CAN

//使能CAN设备驱动

#define BSP_USING_CAN1

//使能CAN1设备驱动

②CAN设备初始化。

CAN设备初始化涉及libraries文件夹里的drv_common.c、drv_can.c和drv_can.h等文件。在drv_common.c文件中,加入头文件调用:#include "drv_can.h",并将drv_can.c文件中CAN设备初始化函数rt_hw_can_init()添加到板载外设初始化函数void rt_hw_board_init()中。

3.4.3 下载验证

通过FinSH组件进行交互操作,控制终端运行的串口助手上显示出RT-Thread版本信息,在串口助手中输入list_device,则设备(device)栏中列出配置的CAN1设备,表明CAN1设备已经成功挂载到RT-Thread系统上。

4 通信模块软件设计

4.1 CAN通信协议

CAN报文设置帧格式为扩展帧,帧类型为数据帧,波特率为125 kbit/s。

CAN接口协议如表1所示。无实际意义的字节用FFFF填充。

表1 CAN接口协议

4.2 CAN通信程序设计

在Applications目录下新建ctrboard_can.c文件,创建CAN接收事件和CAN通信线程,使用事件来实现线程间的同步,并通过串口助手将接收到的数据按照一定格式打印出来。

通信程序流程如图3所示。

图3 通信程序流程图

5 通信测试

将AUV运动控制器通过USB CANII分析仪与AUV运动模拟器连接。为便于参数比较,控制器发送固定的指令舵角,即方向舵8°和艉升降舵2°。模拟器接收报文并解码,显示方向舵为7.998°、艉升降舵为1.999 5°。该结果表明,模拟器接收到的指令信息与控制器发送的指令信息基本一致。

AUV运动模拟器发送航速航姿和深度舵角两组报文,STM32F4开发板外设CAN接收解码并通过串口助手在控制终端上显示。AUV运动控制器接收报文如表2所示。

表2 AUV运动控制器接收报文

经检验,控制器接收的报文指令信息与模拟器发送的指令一致,表明AUV运动模拟器和AUV运动控制器之间能准确地通信。

6 结论

RT-Thread具有的丰富中间组件及硬实时性,可以很好地满足AUV各种功能模块开发的需要。本文针对AUV运动控制器的开发需要,结合STM32CubeMX和Env图形化配置工具,基于RT-Thread操作系统,在SMT32F4硬件平台上成功地实现了CAN通信模块的开发。该设计方法可推广应用于RT-Thread各类硬件平台的工程配置和外设驱动添加。

猜你喜欢
外设文件夹模拟器
了不起的安检模拟器
盲盒模拟器
划船模拟器
摸清超标源头 大文件夹这样处理
调动右键 解决文件夹管理三大难题
挂在墙上的文件夹
不容忽视的空文件夹
动态飞行模拟器及其发展概述
Microchip推出具备双ADC外设的全新器件,扩展其低成本8位PIC®单片机产品线
外设天地行情