楊金宇, 張浩天, 張玲玲, 顧 暉, 梁惺彥
1(南通大學 信息科學技術學院, 南通 226019)
2(鄭州大學 網絡空間安全學院, 鄭州 450002)
由于RISC-V指令集架構具有免費、開源、簡潔與模塊化等特點, 近年來基于RISC-V的處理器在國內外得到快速應用.本文利用FPGA硬件可編程[1]的特性, 在Xilinx XC7A100T上移植了基于RISC-V指令集架構的蜂鳥E203開源軟核微處理器[2,3], 構成完整的片上系統.該系統包含多種外設接口模塊, 如GPIO和PWM等, 并通過外設接口模塊搭載多種傳感器, 可將采集的數據進行快速處理, 實現面向各種場景的控制方案.
圖1是本文搭建的智能小車[4]系統實物圖, 包括以下5個部分: 控制智能小車行進的運行RISC-V的FPGA主控板、采集外界信號的各種傳感器、驅動小車的電機、控制超聲波傳感器轉向的舵機和智能小車的電源.為實現自主避障、碰撞檢測等功能, 本文利用RISC-V的GPIO處理各傳感器信號(具體方案見第5.1節), 并設計相應算法實現智能小車行進控制: 障礙物檢測的超聲波避障算法[5]、不同場景下的小車行進策略及相應電機控制算法和利用RISC-V軟核的GPIO中斷實現碰撞-行進姿態檢測算法.

圖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 智能小車硬件系統邏輯結構
在實現智能小車行進控制中, 主要利用了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占空比,控制舵機轉向, 進而控制超聲信號探測方向.
將傳感器數據作為輸入參數, 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是超聲波探測算法流程.圖6是智能小車行進避障流程.

圖5 超聲波探測算法流程圖

圖6 智能小車行進避障控制流程
為保證智能小車行進過程中的平穩, 本系統利用RISC-V的GPIO中斷設計了車輛姿態檢測和碰撞檢測以處理異常情況.在蜂鳥E203型RISC-V中, GPIO的中斷源號8-39, 可通過RISC-V的中斷控制器PLIC配置中斷.本系統使用8號中斷源作為側傾事件, 9號中斷源作為碰撞事件.
圖7是碰撞檢測和行進姿態檢測中斷控制流程示意圖, 系統利用GPIO中斷響應車輛側傾和碰撞事件.行進姿態檢測依靠傾斜角傳感器, 當小車側身失衡超過固定的角度α時, 傾斜角傳感器觸發跳變信號引發中斷, 中斷服務程序內試圖調整行進策略保持小車車身平衡, 避免發生側翻.若小車行進過程中發生碰撞事件, 則會觸發中斷, 轉入中斷服務例程觸發車輛保護機制——駐停且指示燈警報.

圖7 碰撞檢測和行進姿態檢測中斷控制流程示意圖
本系統所使用的硬件控制器是Xilinx Artix-7 XC7A100T FPGA, 其上運行蜂鳥E203 RISC-V軟核.實驗所用的超聲波傳感器型號為HC-SR04, 紅外傳感器型號為JXWHW-005, 碰撞傳感器型號為ZD01, 傾側傳感器型號為SW-520D.
為獲得該系統傳感器的響應時延數據, 測試過程中將智能小車置于支架之上懸空, 將障礙物靠近智能小車, 模擬智能小車的主動避障和被動避障過程.用于測定傳感器觸發到輸出控制信號間的時差的臨時數據,如小車狀態記錄和計數器數值變化等, 均在響應結束后通過串口送至聯調上位機, 進行統一的數據整理與分析, 計算響應時延.實驗中, 取超聲波避障過程中的參數D1的值為30 cm,D2的值為18 cm, 表4和表5給出了整車工作的部分實測數據及小車的狀態.其中表4中各個距離的響應時延為5次測試的平均值.

表4 基于超聲波傳感器的主動性避障時的響應延時

表5 被動性避障時的響應延時(ms)
因本系統采用FPGA實現32位RISC-V軟核, 在與內存進行數據交互上利用AXI4總線實現32位數據傳輸, 實驗發現, 由于FPGA的RAM顆粒采用的是16位數據總線, AXI控制器的兩次16位傳輸才可完成一次32位數據讀寫, 數據吞吐能力稍弱, 在一定程度上影響了系統性能.通過實驗結果可以看出, 在核頻50 MHz的條件下, 處理器和RAM可以良好的支持本控制方案的實現.
RISC-V指令集因其免費開源的特點, 為發展國產自主可控的芯片提供了契機.芯片產業的發展不僅需要提升芯片的制造工藝, 更要推進芯片軟件生態的建設.本文在自主移植RISC-V軟核的基礎上, 構建集成多種傳感器和控制方案的智能小車行進控制系統, 實現了一個基于RISC-V的綜合應用樣例, 為RISC-V的應用生態建設做出一次有益的嘗試.