基于RISC-V的嵌入式智能小车行进控制系统①
2022-01-06杨金宇张浩天张玲玲梁惺彦
杨金宇, 张浩天, 张玲玲, 顾 晖, 梁惺彦
1(南通大学 信息科学技术学院, 南通 226019)
2(郑州大学 网络空间安全学院, 郑州 450002)
1 引言
由于RISC-V指令集架构具有免费、开源、简洁与模块化等特点, 近年来基于RISC-V的处理器在国内外得到快速应用.本文利用FPGA硬件可编程[1]的特性, 在Xilinx XC7A100T上移植了基于RISC-V指令集架构的蜂鸟E203开源软核微处理器[2,3], 构成完整的片上系统.该系统包含多种外设接口模块, 如GPIO和PWM等, 并通过外设接口模块搭载多种传感器, 可将采集的数据进行快速处理, 实现面向各种场景的控制方案.
2 智能小车系统简介
图1是本文搭建的智能小车[4]系统实物图, 包括以下5个部分: 控制智能小车行进的运行RISC-V的FPGA主控板、采集外界信号的各种传感器、驱动小车的电机、控制超声波传感器转向的舵机和智能小车的电源.为实现自主避障、碰撞检测等功能, 本文利用RISC-V的GPIO处理各传感器信号(具体方案见第5.1节), 并设计相应算法实现智能小车行进控制: 障碍物检测的超声波避障算法[5]、不同场景下的小车行进策略及相应电机控制算法和利用RISC-V软核的GPIO中断实现碰撞-行进姿态检测算法.
图1 智能小车系统实物图
3 智能小车控制系统
3.1 逻辑结构
小车主控采用Xilinx公司的XC7A100T芯片, 移植构造了基于蜂鸟E203的开源RISC-V软核微处理器, 支持RV32C指令集, 表1是实验条件下利用vivado综合生成的FPGA内部资源占用情况, 表中同时给出了本设计采用的外接内存资源: 软核利用AXI4总线外接256 MB的系统内存RAM, 并采用2块FlashROM支持固件ROM和用户程序ROM的独立更新下载.在此基础上, 将FPGA的IO引脚映射为软核GPIO与PWM输出, 分别连接倾斜角传感器、红外传感器、超声波传感器、碰撞传感器和电机驱动模块等, 构成智能小车的状态检测模块和电机控制系统, 图2给出本方案的硬件逻辑结构示意图.检测信号利用FPGA的IO引脚实现RISC-V的GPIO数据采集, 舵机和电机由RISCV软核的PWM模块产生的输出信号驱动, 进而可结合具体算法实现不同场景下的小车控制方案.
表1 主控板硬件核心资源
图2 智能小车硬件系统逻辑结构
3.2 控制信号处理方案与RISC-V参数设定
在实现智能小车行进控制中, 主要利用了RISC-V中可复用的GPIO模块实现信号的输入输出, 利用外部IO中断实现系统响应的强实时性.在蜂鸟E203为蓝本的RISC-V软核中, 共有32个GPIO引脚, 每个GPIO引脚由32位配置寄存器的1位控制, 各寄存器的基地址为0x1001_2000.表2说明了本文用到的GPIO配置寄存器的情况.
表2 GPIO配置寄存器说明
在RISC-V中, 引脚默认功能是GPIO, 并可通过配置寄存器GPIO_IOF_EN和GPIO_IOF_SEL实现诸如PWM等其他复用功能.因此本设计按以下3个步骤实现具体GPIO的引脚操作: 引脚功能复用配置、输入/输出配置和引脚值读/写.图3是引脚功能配置过程示意图.
图3 引脚(pin)配置流程
下面介绍本系统所用输入输出引脚pin的具体连接和功能, 如表3所示.
表3 GPIO pin功能及配置说明
(1) 红外传感器用来实现倒车时障碍物的检测.本系统采用查询机制, 仅判定固定距离的障碍有无, 通过使能0号pin引脚输入并捕捉GPIO_PORT相应位电平变化来实现.
(2) 超声波模块是实现智能小车自主避障功能的基础, 物理原理可用式(1)表示[6]:
其中,d表示智能小车与障碍物的距离,t表示从发射超声信号到返回的时间差,v是声速.
本设计利用RISC-V的GPIO模块的1-2两个引脚分别控制超声模块的发射(TRIG)、接收(ECHO)两组信号实现障碍物的测距, 具体步骤包括: 1)通过使能GPIO_OUTPUT_EN寄存器的第1位, 写入GPIO_VALUE相应位触发超声波传感器TRIG信号.使能TRIG 10 μs以上的高电平信号来触发测距, 超声波模块开始自动发送8个40 kHz的方波, 记录此时计数寄存器(MTIME)的值X1; 2)使能GPIO_INPUT_EN寄存器的第2位, 读取GPIO_PORT相应位, 检测是否有信号返回, 当有信号返回时, GPIO接收ECHO输出的高电平信号, 再次记录此时计数寄存器(MTIME)的值X2; 3)通过计算计数寄存器两次理论差值, 再乘以时钟频率, 可得超声波信号往返时长t; 4) 根据式(1), 计算小车与障碍物间的距离.
(3) PWM模块实现智能小车系统的电机与舵机控制.通过使能GPIO_IOF_EN和GPIO_IOF_SEL寄存器的相应位, 将19-21位pin复用为PWM1模块, 生成3组PWM信号中有2组用来分别控制左右电机,1组用来控制舵机.小车行进时, 可通过调节19和20位输出的PWM脉宽比值, 控制小车左右电机转速比, 实现行进状态控制; 通过调节第21位的PWM占空比,控制舵机转向, 进而控制超声信号探测方向.
4 智能小车的工作状态与电机控制方案
将传感器数据作为输入参数, PWM作为输出信号, 本文设定智能小车有以下5种工作状态.图4是智能小车工作状态转换示意图.
图4 智能小车工作状态转换示意图
1) 初始态: 电源上电后, FPGA加载RISC-V软核并完成初始化后, 小车进入初始态.此时, 指示灯点亮,小车等待启动.
2) 前进: 这是小车启动后的默认状态, 当未检测到障碍物, 保持此状态.
3) 转向: 在小车前进过程中, 当超声波传感器探测到左前方或右前方一定范围内有障碍物时(障1), 小车切换到此状态.
4) 倒车: 当小车倒车时, 红外传感器[7,8]探测到左前方和右前方较短距离内有障碍物时, 表明小车前方周围均有障碍物, 使小车进入倒车状态, 当后方遇到障碍物(障3)时停止倒车, 小车切换到前进状态.
5) 停机: 此状态为异常状态.若小车在正常行进过程中, 遇到碰撞、侧倾或被中止等异常事件时, 小车从当前状态切换到停机状态.
本文针对智能小车行进过程中的不同场景, 为该系统设计了5种电机控制方案.
1) 正常行驶: 小车启动后, 以正常速度前进直至遇到障碍物减速或者转向.正常行驶时, 主控板输出左右电机的PWM控制信号占空比为50%.
2) 快速行驶: 若探测到前方D1距离内未发现障碍物时, 尝试加速行进.加速行进时, 主控板连续缓慢的调节左右电机的PWM占空比, 占空比从50%增至80%,每200 ms增长1%.直到前方探测到障碍物切换状态.
3) 慢速行驶: 若探测到前方D1距离内有障碍物时, 则减速至慢速行驶.此时主控板输出的控制左右电机的PWM占空比为25%.
4) 转向行驶: 利用超声波传感器分别探测距左前方和右前方障碍物的距离, 经比较后选择转向.转向采用左右两路电机的差速控制, 本系统采用对左右电机输出相差30%的PWM信号实现定弧度转弯.
5) 倒退行驶: 当小车左前方和右前方D2距离内都有障碍物, 选择倒车控制, 两路电机由占空比25%的PWM信号进行反转, 当后方遇到障碍物时停止倒车.同时为避免一直倒车, 设定后方无障碍物时的最长倒车时间Ts, 超时停止倒车.
5 主要场景的控制算法
5.1 智能小车的行进避障
智能小车行进过程中前方障碍物的探测通过安装在舵机上的超声波传感器实现, 后方障碍物的探测通过红外传感器实现.智能小车行进过程中通过调用超声波探测算法, 判断与障碍物的距离, 使智能小车自动调节行进方向, 实现智能小车的自主避障.图5是超声波探测算法流程.图6是智能小车行进避障流程.
图5 超声波探测算法流程图
图6 智能小车行进避障控制流程
5.2 基于中断的碰撞检测和姿态检测
为保证智能小车行进过程中的平稳, 本系统利用RISC-V的GPIO中断设计了车辆姿态检测和碰撞检测以处理异常情况.在蜂鸟E203型RISC-V中, GPIO的中断源号8-39, 可通过RISC-V的中断控制器PLIC配置中断.本系统使用8号中断源作为侧倾事件, 9号中断源作为碰撞事件.
图7是碰撞检测和行进姿态检测中断控制流程示意图, 系统利用GPIO中断响应车辆侧倾和碰撞事件.行进姿态检测依靠倾斜角传感器, 当小车侧身失衡超过固定的角度α时, 倾斜角传感器触发跳变信号引发中断, 中断服务程序内试图调整行进策略保持小车车身平衡, 避免发生侧翻.若小车行进过程中发生碰撞事件, 则会触发中断, 转入中断服务例程触发车辆保护机制——驻停且指示灯警报.
图7 碰撞检测和行进姿态检测中断控制流程示意图
6 实验测试
本系统所使用的硬件控制器是Xilinx Artix-7 XC7A100T FPGA, 其上运行蜂鸟E203 RISC-V软核.实验所用的超声波传感器型号为HC-SR04, 红外传感器型号为JXWHW-005, 碰撞传感器型号为ZD01, 倾侧传感器型号为SW-520D.
6.1 测试方法及结果
为获得该系统传感器的响应时延数据, 测试过程中将智能小车置于支架之上悬空, 将障碍物靠近智能小车, 模拟智能小车的主动避障和被动避障过程.用于测定传感器触发到输出控制信号间的时差的临时数据,如小车状态记录和计数器数值变化等, 均在响应结束后通过串口送至联调上位机, 进行统一的数据整理与分析, 计算响应时延.实验中, 取超声波避障过程中的参数D1的值为30 cm,D2的值为18 cm, 表4和表5给出了整车工作的部分实测数据及小车的状态.其中表4中各个距离的响应时延为5次测试的平均值.
表4 基于超声波传感器的主动性避障时的响应延时
表5 被动性避障时的响应延时(ms)
6.2 测试结论与分析
因本系统采用FPGA实现32位RISC-V软核, 在与内存进行数据交互上利用AXI4总线实现32位数据传输, 实验发现, 由于FPGA的RAM颗粒采用的是16位数据总线, AXI控制器的两次16位传输才可完成一次32位数据读写, 数据吞吐能力稍弱, 在一定程度上影响了系统性能.通过实验结果可以看出, 在核频50 MHz的条件下, 处理器和RAM可以良好的支持本控制方案的实现.
7 总结展望
RISC-V指令集因其免费开源的特点, 为发展国产自主可控的芯片提供了契机.芯片产业的发展不仅需要提升芯片的制造工艺, 更要推进芯片软件生态的建设.本文在自主移植RISC-V软核的基础上, 构建集成多种传感器和控制方案的智能小车行进控制系统, 实现了一个基于RISC-V的综合应用样例, 为RISC-V的应用生态建设做出一次有益的尝试.