楊金宇, 張浩天, 張玲玲, 顧 暉, 梁惺彥
1(南通大學(xué) 信息科學(xué)技術(shù)學(xué)院, 南通 226019)
2(鄭州大學(xué) 網(wǎng)絡(luò)空間安全學(xué)院, 鄭州 450002)
由于RISC-V指令集架構(gòu)具有免費(fèi)、開源、簡潔與模塊化等特點(diǎn), 近年來基于RISC-V的處理器在國內(nèi)外得到快速應(yīng)用.本文利用FPGA硬件可編程[1]的特性, 在Xilinx XC7A100T上移植了基于RISC-V指令集架構(gòu)的蜂鳥E203開源軟核微處理器[2,3], 構(gòu)成完整的片上系統(tǒng).該系統(tǒng)包含多種外設(shè)接口模塊, 如GPIO和PWM等, 并通過外設(shè)接口模塊搭載多種傳感器, 可將采集的數(shù)據(jù)進(jìn)行快速處理, 實(shí)現(xiàn)面向各種場景的控制方案.
圖1是本文搭建的智能小車[4]系統(tǒng)實(shí)物圖, 包括以下5個(gè)部分: 控制智能小車行進(jìn)的運(yùn)行RISC-V的FPGA主控板、采集外界信號的各種傳感器、驅(qū)動(dòng)小車的電機(jī)、控制超聲波傳感器轉(zhuǎn)向的舵機(jī)和智能小車的電源.為實(shí)現(xiàn)自主避障、碰撞檢測等功能, 本文利用RISC-V的GPIO處理各傳感器信號(具體方案見第5.1節(jié)), 并設(shè)計(jì)相應(yīng)算法實(shí)現(xiàn)智能小車行進(jìn)控制: 障礙物檢測的超聲波避障算法[5]、不同場景下的小車行進(jìn)策略及相應(yīng)電機(jī)控制算法和利用RISC-V軟核的GPIO中斷實(shí)現(xiàn)碰撞-行進(jìn)姿態(tài)檢測算法.
圖1 智能小車系統(tǒng)實(shí)物圖
小車主控采用Xilinx公司的XC7A100T芯片, 移植構(gòu)造了基于蜂鳥E203的開源RISC-V軟核微處理器, 支持RV32C指令集, 表1是實(shí)驗(yàn)條件下利用vivado綜合生成的FPGA內(nèi)部資源占用情況, 表中同時(shí)給出了本設(shè)計(jì)采用的外接內(nèi)存資源: 軟核利用AXI4總線外接256 MB的系統(tǒng)內(nèi)存RAM, 并采用2塊FlashROM支持固件ROM和用戶程序ROM的獨(dú)立更新下載.在此基礎(chǔ)上, 將FPGA的IO引腳映射為軟核GPIO與PWM輸出, 分別連接傾斜角傳感器、紅外傳感器、超聲波傳感器、碰撞傳感器和電機(jī)驅(qū)動(dòng)模塊等, 構(gòu)成智能小車的狀態(tài)檢測模塊和電機(jī)控制系統(tǒng), 圖2給出本方案的硬件邏輯結(jié)構(gòu)示意圖.檢測信號利用FPGA的IO引腳實(shí)現(xiàn)RISC-V的GPIO數(shù)據(jù)采集, 舵機(jī)和電機(jī)由RISCV軟核的PWM模塊產(chǎn)生的輸出信號驅(qū)動(dòng), 進(jìn)而可結(jié)合具體算法實(shí)現(xiàn)不同場景下的小車控制方案.
表1 主控板硬件核心資源
圖2 智能小車硬件系統(tǒng)邏輯結(jié)構(gòu)
在實(shí)現(xiàn)智能小車行進(jìn)控制中, 主要利用了RISC-V中可復(fù)用的GPIO模塊實(shí)現(xiàn)信號的輸入輸出, 利用外部IO中斷實(shí)現(xiàn)系統(tǒng)響應(yīng)的強(qiáng)實(shí)時(shí)性.在蜂鳥E203為藍(lán)本的RISC-V軟核中, 共有32個(gè)GPIO引腳, 每個(gè)GPIO引腳由32位配置寄存器的1位控制, 各寄存器的基地址為0x1001_2000.表2說明了本文用到的GPIO配置寄存器的情況.
表2 GPIO配置寄存器說明
在RISC-V中, 引腳默認(rèn)功能是GPIO, 并可通過配置寄存器GPIO_IOF_EN和GPIO_IOF_SEL實(shí)現(xiàn)諸如PWM等其他復(fù)用功能.因此本設(shè)計(jì)按以下3個(gè)步驟實(shí)現(xiàn)具體GPIO的引腳操作: 引腳功能復(fù)用配置、輸入/輸出配置和引腳值讀/寫.圖3是引腳功能配置過程示意圖.
圖3 引腳(pin)配置流程
下面介紹本系統(tǒng)所用輸入輸出引腳pin的具體連接和功能, 如表3所示.
表3 GPIO pin功能及配置說明
(1) 紅外傳感器用來實(shí)現(xiàn)倒車時(shí)障礙物的檢測.本系統(tǒng)采用查詢機(jī)制, 僅判定固定距離的障礙有無, 通過使能0號pin引腳輸入并捕捉GPIO_PORT相應(yīng)位電平變化來實(shí)現(xiàn).
(2) 超聲波模塊是實(shí)現(xiàn)智能小車自主避障功能的基礎(chǔ), 物理原理可用式(1)表示[6]:
其中,d表示智能小車與障礙物的距離,t表示從發(fā)射超聲信號到返回的時(shí)間差,v是聲速.
本設(shè)計(jì)利用RISC-V的GPIO模塊的1-2兩個(gè)引腳分別控制超聲模塊的發(fā)射(TRIG)、接收(ECHO)兩組信號實(shí)現(xiàn)障礙物的測距, 具體步驟包括: 1)通過使能GPIO_OUTPUT_EN寄存器的第1位, 寫入GPIO_VALUE相應(yīng)位觸發(fā)超聲波傳感器TRIG信號.使能TRIG 10 μs以上的高電平信號來觸發(fā)測距, 超聲波模塊開始自動(dòng)發(fā)送8個(gè)40 kHz的方波, 記錄此時(shí)計(jì)數(shù)寄存器(MTIME)的值X1; 2)使能GPIO_INPUT_EN寄存器的第2位, 讀取GPIO_PORT相應(yīng)位, 檢測是否有信號返回, 當(dāng)有信號返回時(shí), GPIO接收ECHO輸出的高電平信號, 再次記錄此時(shí)計(jì)數(shù)寄存器(MTIME)的值X2; 3)通過計(jì)算計(jì)數(shù)寄存器兩次理論差值, 再乘以時(shí)鐘頻率, 可得超聲波信號往返時(shí)長t; 4) 根據(jù)式(1), 計(jì)算小車與障礙物間的距離.
(3) PWM模塊實(shí)現(xiàn)智能小車系統(tǒng)的電機(jī)與舵機(jī)控制.通過使能GPIO_IOF_EN和GPIO_IOF_SEL寄存器的相應(yīng)位, 將19-21位pin復(fù)用為PWM1模塊, 生成3組PWM信號中有2組用來分別控制左右電機(jī),1組用來控制舵機(jī).小車行進(jìn)時(shí), 可通過調(diào)節(jié)19和20位輸出的PWM脈寬比值, 控制小車左右電機(jī)轉(zhuǎn)速比, 實(shí)現(xiàn)行進(jìn)狀態(tài)控制; 通過調(diào)節(jié)第21位的PWM占空比,控制舵機(jī)轉(zhuǎn)向, 進(jìn)而控制超聲信號探測方向.
將傳感器數(shù)據(jù)作為輸入?yún)?shù), PWM作為輸出信號, 本文設(shè)定智能小車有以下5種工作狀態(tài).圖4是智能小車工作狀態(tài)轉(zhuǎn)換示意圖.
圖4 智能小車工作狀態(tài)轉(zhuǎn)換示意圖
1) 初始態(tài): 電源上電后, FPGA加載RISC-V軟核并完成初始化后, 小車進(jìn)入初始態(tài).此時(shí), 指示燈點(diǎn)亮,小車等待啟動(dòng).
2) 前進(jìn): 這是小車啟動(dòng)后的默認(rèn)狀態(tài), 當(dāng)未檢測到障礙物, 保持此狀態(tài).
3) 轉(zhuǎn)向: 在小車前進(jìn)過程中, 當(dāng)超聲波傳感器探測到左前方或右前方一定范圍內(nèi)有障礙物時(shí)(障1), 小車切換到此狀態(tài).
4) 倒車: 當(dāng)小車倒車時(shí), 紅外傳感器[7,8]探測到左前方和右前方較短距離內(nèi)有障礙物時(shí), 表明小車前方周圍均有障礙物, 使小車進(jìn)入倒車狀態(tài), 當(dāng)后方遇到障礙物(障3)時(shí)停止倒車, 小車切換到前進(jìn)狀態(tài).
5) 停機(jī): 此狀態(tài)為異常狀態(tài).若小車在正常行進(jìn)過程中, 遇到碰撞、側(cè)傾或被中止等異常事件時(shí), 小車從當(dāng)前狀態(tài)切換到停機(jī)狀態(tài).
本文針對智能小車行進(jìn)過程中的不同場景, 為該系統(tǒng)設(shè)計(jì)了5種電機(jī)控制方案.
1) 正常行駛: 小車啟動(dòng)后, 以正常速度前進(jìn)直至遇到障礙物減速或者轉(zhuǎn)向.正常行駛時(shí), 主控板輸出左右電機(jī)的PWM控制信號占空比為50%.
2) 快速行駛: 若探測到前方D1距離內(nèi)未發(fā)現(xiàn)障礙物時(shí), 嘗試加速行進(jìn).加速行進(jìn)時(shí), 主控板連續(xù)緩慢的調(diào)節(jié)左右電機(jī)的PWM占空比, 占空比從50%增至80%,每200 ms增長1%.直到前方探測到障礙物切換狀態(tài).
3) 慢速行駛: 若探測到前方D1距離內(nèi)有障礙物時(shí), 則減速至慢速行駛.此時(shí)主控板輸出的控制左右電機(jī)的PWM占空比為25%.
4) 轉(zhuǎn)向行駛: 利用超聲波傳感器分別探測距左前方和右前方障礙物的距離, 經(jīng)比較后選擇轉(zhuǎn)向.轉(zhuǎn)向采用左右兩路電機(jī)的差速控制, 本系統(tǒng)采用對左右電機(jī)輸出相差30%的PWM信號實(shí)現(xiàn)定弧度轉(zhuǎn)彎.
5) 倒退行駛: 當(dāng)小車左前方和右前方D2距離內(nèi)都有障礙物, 選擇倒車控制, 兩路電機(jī)由占空比25%的PWM信號進(jìn)行反轉(zhuǎn), 當(dāng)后方遇到障礙物時(shí)停止倒車.同時(shí)為避免一直倒車, 設(shè)定后方無障礙物時(shí)的最長倒車時(shí)間Ts, 超時(shí)停止倒車.
智能小車行進(jìn)過程中前方障礙物的探測通過安裝在舵機(jī)上的超聲波傳感器實(shí)現(xiàn), 后方障礙物的探測通過紅外傳感器實(shí)現(xiàn).智能小車行進(jìn)過程中通過調(diào)用超聲波探測算法, 判斷與障礙物的距離, 使智能小車自動(dòng)調(diào)節(jié)行進(jìn)方向, 實(shí)現(xiàn)智能小車的自主避障.圖5是超聲波探測算法流程.圖6是智能小車行進(jìn)避障流程.
圖5 超聲波探測算法流程圖
圖6 智能小車行進(jìn)避障控制流程
為保證智能小車行進(jìn)過程中的平穩(wěn), 本系統(tǒng)利用RISC-V的GPIO中斷設(shè)計(jì)了車輛姿態(tài)檢測和碰撞檢測以處理異常情況.在蜂鳥E203型RISC-V中, GPIO的中斷源號8-39, 可通過RISC-V的中斷控制器PLIC配置中斷.本系統(tǒng)使用8號中斷源作為側(cè)傾事件, 9號中斷源作為碰撞事件.
圖7是碰撞檢測和行進(jìn)姿態(tài)檢測中斷控制流程示意圖, 系統(tǒng)利用GPIO中斷響應(yīng)車輛側(cè)傾和碰撞事件.行進(jìn)姿態(tài)檢測依靠傾斜角傳感器, 當(dāng)小車側(cè)身失衡超過固定的角度α?xí)r, 傾斜角傳感器觸發(fā)跳變信號引發(fā)中斷, 中斷服務(wù)程序內(nèi)試圖調(diào)整行進(jìn)策略保持小車車身平衡, 避免發(fā)生側(cè)翻.若小車行進(jìn)過程中發(fā)生碰撞事件, 則會觸發(fā)中斷, 轉(zhuǎn)入中斷服務(wù)例程觸發(fā)車輛保護(hù)機(jī)制——駐停且指示燈警報(bào).
圖7 碰撞檢測和行進(jìn)姿態(tài)檢測中斷控制流程示意圖
本系統(tǒng)所使用的硬件控制器是Xilinx Artix-7 XC7A100T FPGA, 其上運(yùn)行蜂鳥E203 RISC-V軟核.實(shí)驗(yàn)所用的超聲波傳感器型號為HC-SR04, 紅外傳感器型號為JXWHW-005, 碰撞傳感器型號為ZD01, 傾側(cè)傳感器型號為SW-520D.
為獲得該系統(tǒng)傳感器的響應(yīng)時(shí)延數(shù)據(jù), 測試過程中將智能小車置于支架之上懸空, 將障礙物靠近智能小車, 模擬智能小車的主動(dòng)避障和被動(dòng)避障過程.用于測定傳感器觸發(fā)到輸出控制信號間的時(shí)差的臨時(shí)數(shù)據(jù),如小車狀態(tài)記錄和計(jì)數(shù)器數(shù)值變化等, 均在響應(yīng)結(jié)束后通過串口送至聯(lián)調(diào)上位機(jī), 進(jìn)行統(tǒng)一的數(shù)據(jù)整理與分析, 計(jì)算響應(yīng)時(shí)延.實(shí)驗(yàn)中, 取超聲波避障過程中的參數(shù)D1的值為30 cm,D2的值為18 cm, 表4和表5給出了整車工作的部分實(shí)測數(shù)據(jù)及小車的狀態(tài).其中表4中各個(gè)距離的響應(yīng)時(shí)延為5次測試的平均值.
表4 基于超聲波傳感器的主動(dòng)性避障時(shí)的響應(yīng)延時(shí)
表5 被動(dòng)性避障時(shí)的響應(yīng)延時(shí)(ms)
因本系統(tǒng)采用FPGA實(shí)現(xiàn)32位RISC-V軟核, 在與內(nèi)存進(jìn)行數(shù)據(jù)交互上利用AXI4總線實(shí)現(xiàn)32位數(shù)據(jù)傳輸, 實(shí)驗(yàn)發(fā)現(xiàn), 由于FPGA的RAM顆粒采用的是16位數(shù)據(jù)總線, AXI控制器的兩次16位傳輸才可完成一次32位數(shù)據(jù)讀寫, 數(shù)據(jù)吞吐能力稍弱, 在一定程度上影響了系統(tǒng)性能.通過實(shí)驗(yàn)結(jié)果可以看出, 在核頻50 MHz的條件下, 處理器和RAM可以良好的支持本控制方案的實(shí)現(xiàn).
RISC-V指令集因其免費(fèi)開源的特點(diǎn), 為發(fā)展國產(chǎn)自主可控的芯片提供了契機(jī).芯片產(chǎn)業(yè)的發(fā)展不僅需要提升芯片的制造工藝, 更要推進(jìn)芯片軟件生態(tài)的建設(shè).本文在自主移植RISC-V軟核的基礎(chǔ)上, 構(gòu)建集成多種傳感器和控制方案的智能小車行進(jìn)控制系統(tǒng), 實(shí)現(xiàn)了一個(gè)基于RISC-V的綜合應(yīng)用樣例, 為RISC-V的應(yīng)用生態(tài)建設(shè)做出一次有益的嘗試.