上海電子工業(yè)學(xué)校 張 帆
人工智能小車底盤控制系統(tǒng)是針對人工智能教學(xué)硬件的小車類底盤所開發(fā)的獨(dú)立控制系統(tǒng)。該系統(tǒng)使用STM32F3芯片高性能MCU,在Keil5和STM32CubeMX開發(fā)環(huán)境,集成了四路步進(jìn)電機(jī)的驅(qū)動(dòng)控制算法,小車車輪(麥克納姆輪)的行駛向量換算,三路車燈控制,由串口驅(qū)動(dòng)的紅外激光測距傳感器(TOF),并提供了一路IIC通訊擴(kuò)展接口。人工智能小車底盤控制系統(tǒng)成本低,響應(yīng)快,運(yùn)行穩(wěn)定,可靠性高。
系統(tǒng)采用STM32F303系列MCU,芯片外型如圖1所示,工作電壓為2.0--3.6V,使用ARM Cortex-M4內(nèi)核(DSP、FPU),運(yùn)行于72MHz。其具有,存儲容量范圍512K字節(jié);4個(gè)可編程增益的運(yùn)算放大器;7個(gè)快速和超快速比較器;144MHz的快速電機(jī)控制定時(shí)器等優(yōu)點(diǎn)。
圖1 STM32F303系列MCU
開發(fā)環(huán)境采用Keil5和STM32CubeMX,STM32CubeMX其作為一個(gè)可視化的配置工具如下圖2、3所示,通過一個(gè)循序漸進(jìn)的過程,可以非常輕松地配置STM32微控制器和微處理器。對于開發(fā)者來說,確實(shí)大大節(jié)省了開發(fā)時(shí)間。ST正在逐漸停止對標(biāo)準(zhǔn)外設(shè)庫的更新,主推HAL庫。STM32CubeMX就是以HAL庫為基礎(chǔ),(HAL全稱Hardware Abstract Layer,意為硬件抽象層),HAL庫是STM32開發(fā)生態(tài)中極為重要的組成部分,不過它不單獨(dú)提供,而是以STM32CubeMX拓展包的形式提供。
圖2 STM32CubeMX
拓展包中除HAL庫之外,也有Fatfs、FreeRTOS、STemWin等組件,可以在STM32CubeMX中選擇性的使用。與標(biāo)準(zhǔn)外設(shè)庫相比,HAL庫封裝得顯得更加緊湊,并且源代碼通過對外設(shè)的對象化,使“層”的特點(diǎn)非常明顯,大部分外設(shè)也都通過句柄操作,極難見到寄存器的影子。
人工智能小車底盤功能分別有電源管理模塊、IIC擴(kuò)展接口、步進(jìn)電機(jī)驅(qū)動(dòng)、麥克納姆輪算法、測距傳感器五個(gè)模塊組成。結(jié)構(gòu)如圖4所示。
圖4 人工智能小車底盤功能
(1)電源管理:系統(tǒng)提供一個(gè)心跳維持機(jī)制,用來配合IP5306電源模塊進(jìn)行多路供電管理;關(guān)機(jī)時(shí)停止心跳,待超時(shí)(30s)后電源模塊自動(dòng)停止輸出;開機(jī)后恢復(fù)心跳,即啟動(dòng)電源模塊;心跳的發(fā)送間隔為2s,低電平有效。
(2)IIC擴(kuò)展接口:系統(tǒng)提供一個(gè)基于IIC通訊總線協(xié)議的擴(kuò)展接口,以從機(jī)模式運(yùn)行,實(shí)時(shí)監(jiān)聽接口命令;該接口可與其它IIC從機(jī)設(shè)備共享總線,最多可達(dá)255個(gè)。
(3)步進(jìn)電機(jī)驅(qū)動(dòng):系統(tǒng)集成了四路高性能步進(jìn)電機(jī)驅(qū)動(dòng)程序,具備動(dòng)態(tài)細(xì)分的PWM驅(qū)動(dòng)能力,可實(shí)現(xiàn)低速靜音模式與高速大扭矩的實(shí)時(shí)無縫切換;默認(rèn)的驅(qū)動(dòng)頻率范圍為108至900Hz,對應(yīng)1:25減速步進(jìn)電機(jī)的轉(zhuǎn)速為12.96至108RPM,調(diào)速步進(jìn)為8RPM;四路驅(qū)動(dòng)可單獨(dú)控制啟停、調(diào)速及剎車等。
圖3 STM32CubeMX操作界面
(4)麥克納姆輪算法:針對四輪小車的行駛動(dòng)作,通過內(nèi)置的轉(zhuǎn)換算法提供了簡單可靠的控制方式,只需要定義橫移X、豎移Y、自轉(zhuǎn)A三個(gè)參數(shù)即可將對應(yīng)轉(zhuǎn)換后的驅(qū)動(dòng)信號輸出至四路步進(jìn)電機(jī);基礎(chǔ)的算法原理如下(不包含數(shù)值校驗(yàn)及格式化等):
當(dāng)X>0時(shí)則小車向左橫移,反之當(dāng)X<0時(shí)則小車向右橫移;
當(dāng)Y>0時(shí)則小車向前行駛,反之當(dāng)Y<0時(shí)則小車向后行駛;
當(dāng)A>0時(shí)則小車向左自轉(zhuǎn),反之當(dāng)A<0時(shí)則小車向右自轉(zhuǎn)。
(5)測距傳感器:系統(tǒng)支持一路飛行時(shí)間(TOF)測距傳感器通過異步串口協(xié)議進(jìn)行數(shù)據(jù)通訊,提供10Hz刷新速率的準(zhǔn)實(shí)時(shí)測距數(shù)據(jù)反饋,可用于安全駕駛等教學(xué)場景的應(yīng)用。
開機(jī)后系統(tǒng)進(jìn)入初始化流程,首先執(zhí)行系統(tǒng)時(shí)鐘的配置,然后依次初始化GPIO、IIC1、定時(shí)器1、定時(shí)器2、USART1,流程如圖5所示,默認(rèn)時(shí)鐘配置的單片機(jī)主頻為72MHz,兩路定時(shí)器為步進(jìn)電機(jī)驅(qū)動(dòng)提供基準(zhǔn)時(shí)序以及電源管理芯片的心跳維持機(jī)制。
圖5 系統(tǒng)初始化流程
動(dòng)態(tài)細(xì)分步進(jìn)驅(qū)動(dòng)部分由一個(gè)72KHz的全局定時(shí)器提供時(shí)序基準(zhǔn),由數(shù)個(gè)計(jì)數(shù)器來實(shí)現(xiàn)GPIO的PWM信號輸出;動(dòng)態(tài)細(xì)分機(jī)制則是通過一個(gè)包含多組正弦、余弦數(shù)據(jù)表的數(shù)組,由當(dāng)前轉(zhuǎn)速來決定使用哪一組數(shù)據(jù)表的基本原理來實(shí)現(xiàn);當(dāng)轉(zhuǎn)速越低時(shí),驅(qū)動(dòng)波形越接近正弦波,可有效的降低電機(jī)的噪聲與抖動(dòng);當(dāng)轉(zhuǎn)速越高時(shí),驅(qū)動(dòng)波形越接近方波,使得平均驅(qū)動(dòng)電流上升,可提供相對較大的扭矩力;此外因?yàn)椴竭M(jìn)電機(jī)的驅(qū)動(dòng)原理,當(dāng)阻力較大時(shí)會出現(xiàn)丟步打滑,利用這個(gè)特性可有效的防止在教學(xué)過程中出現(xiàn)學(xué)生手指卡住導(dǎo)致受傷等的安全隱患。
當(dāng)系統(tǒng)進(jìn)入定時(shí)器中斷后,依次判斷四路電機(jī)當(dāng)前的各計(jì)數(shù)器狀態(tài),轉(zhuǎn)速大于0或者小于0時(shí)按細(xì)分表來設(shè)置對應(yīng)GPIO的電平高或低,反之則停止電機(jī)驅(qū)動(dòng)信號的輸出即停止轉(zhuǎn)動(dòng)。
當(dāng)電機(jī)轉(zhuǎn)速發(fā)生變更時(shí),系統(tǒng)將進(jìn)行平滑過渡,在每個(gè)定時(shí)器中斷周期進(jìn)行最大12Hz的幅度更新,待多個(gè)周期后到達(dá)目標(biāo)轉(zhuǎn)速;此機(jī)制可有效避免轉(zhuǎn)速變更較大時(shí)的驅(qū)動(dòng)電流瞬間激增以及電機(jī)出現(xiàn)振動(dòng)影響整車的平衡。
系統(tǒng)通過異步串口(USART)接口協(xié)議進(jìn)行測距傳感器的數(shù)據(jù)通訊,默認(rèn)支持紅外激光型測距傳感器,測距范圍為0至200cm,接口波特率為9600,刷新頻率為10Hz;每次讀取數(shù)據(jù)后緩存至內(nèi)存變量中待后續(xù)使用,即實(shí)現(xiàn)了無等待響應(yīng)的效果。
系統(tǒng)可控制四路指示燈,分別為三路車燈與一路狀態(tài)燈;其中車燈分別為左前燈、右前燈、剎車燈,可在教學(xué)場景中模擬實(shí)際車輛轉(zhuǎn)向倒車等場景;狀態(tài)燈用來表示當(dāng)前小車的啟動(dòng)或熄火狀態(tài)。
IIC接口用于擴(kuò)展對接其它設(shè)備如主控板或者各種外部傳感器等,接口運(yùn)行在從機(jī)模式下,使用標(biāo)準(zhǔn)的100KHz收發(fā)速率,可與其它從機(jī)設(shè)備共享總線;當(dāng)系統(tǒng)初始化流程結(jié)束后,則進(jìn)入IIC接口命令的監(jiān)聽循環(huán)中,當(dāng)收到命令后則執(zhí)行指定的操作或返回對應(yīng)的數(shù)據(jù),詳細(xì)的命令數(shù)據(jù)格式,請參照第八節(jié)。IIC接口流程如圖6所示。
圖6 IIC接口流程圖
(1)小車發(fā)動(dòng)命令(如表1所示)指令:EN
表1 小車發(fā)動(dòng)命令表
參數(shù):無
(2)小車熄火命令(如表2所示)
表2 小車熄火命令表
指令:OF
參數(shù):無
(1)打開車燈命令(如表3所示)
表3 打開車燈命令表
指令:LT
在作物苗期,壯苗指數(shù)被廣泛應(yīng)用于衡量幼苗生長狀況,用來反映幼苗質(zhì)量的高低,壯苗指數(shù)越大,苗越健壯[8],地下部鮮重是衡量根系生物量累積的重要指標(biāo)[9]。由表3可見,晝溫30℃時(shí),隨夜溫的降低地下部鮮重增加,夜溫25、20℃處理的甜瓜幼苗地下部鮮重較夜溫30℃處理分別提高5.0%和70%。夜溫為15℃時(shí),25/15℃溫度處理的甜瓜幼苗地下部鮮重最大,為0.54 g,比其他2個(gè)處理分別高出35%、64%。壯苗指數(shù)呈相同的趨勢,25/15℃溫度處理下壯苗指數(shù)最大,為0.88。
參數(shù):第一個(gè)字節(jié)的數(shù)值表示車燈類型,1表示左前燈、2表示右前燈、3表示剎車燈。
(2)關(guān)閉車燈命令(如表4所示)
表4 關(guān)閉車燈命令表
指令:LF
參數(shù):第一個(gè)字節(jié)的數(shù)值表示車燈類型,1表示左前燈、2表示右前燈、3表示剎車燈。
(1)小車行駛命令(如表5所示)
表5 小車行駛命令表
指令:CS
參數(shù):第一個(gè)字節(jié)的數(shù)值表示橫移的方向,1表示左移、0表示右移;第二個(gè)字節(jié)的數(shù)值表示橫移的速率,范圍為0-100;第三個(gè)字節(jié)的數(shù)值表示前進(jìn)或后退,1表示前進(jìn)、0表示后退;第四個(gè)字節(jié)的數(shù)值表示前進(jìn)或后退的速率,范圍為0-100;第五個(gè)字節(jié)的數(shù)值表示自轉(zhuǎn)的方向,1表示左轉(zhuǎn)、0表示右轉(zhuǎn);第六個(gè)字節(jié)的數(shù)值表示自傳的速率,范圍為0-100。
(1)車輪控制命令(如表6所示)
表6 車輪控制命令表
指令:MS
(2)剎車控制命令(如表7所示)
表7 剎車控制命令表
指令:MB
參數(shù):第一個(gè)字節(jié)的數(shù)值表示右前輪是否剎車,1表示剎車;第二個(gè)字節(jié)的數(shù)值表示左前輪是否剎車,1表示剎車;第三個(gè)字節(jié)的數(shù)值表示左后輪是否剎車,1表示剎車;第四個(gè)字節(jié)的數(shù)值表示右后輪是否剎車,1表示剎車。
(1)獲取測距數(shù)值命令(如表8所示)
表8 獲取測距數(shù)值命令表
指令:SG
參數(shù):無
返回:整型值,表示當(dāng)前測距數(shù)值。
(1)獲取當(dāng)前車輪速率命令(如表9所示)
表9 獲取當(dāng)前車輪速率命令表
指令:VG
參數(shù):第一個(gè)參數(shù)的數(shù)值表示車輪類型,1表示右前輪、2表示左前輪、3表示左后輪、4表示右后輪。
返回:第一個(gè)參數(shù)表示轉(zhuǎn)動(dòng)方向,1表示正轉(zhuǎn)、0表示反轉(zhuǎn);第二個(gè)參數(shù)表示轉(zhuǎn)動(dòng)速率,范圍為0-100。
結(jié)束語:本文通過STM32F303系列MCU作為主控器,整體構(gòu)建了人工智能小車底盤控制系統(tǒng)。系統(tǒng)內(nèi)置了針對步進(jìn)電機(jī)的高性能動(dòng)態(tài)細(xì)分驅(qū)動(dòng)算法,步進(jìn)電機(jī)來驅(qū)動(dòng)步進(jìn)電機(jī)從而帶動(dòng)麥克納姆輪小車進(jìn)行平面內(nèi)的全向移動(dòng),并對算法優(yōu)化實(shí)現(xiàn)低速下的細(xì)分驅(qū)動(dòng)以及高速時(shí)的方波驅(qū)動(dòng),進(jìn)行無縫切換,以同時(shí)實(shí)現(xiàn)低速低噪聲與高速大扭矩的效果,同時(shí),通過獨(dú)立的IIC通訊控制接口,實(shí)現(xiàn)高速實(shí)時(shí)響應(yīng)主控系統(tǒng)的下發(fā)命令并執(zhí)行,大大的提高了底盤控制系統(tǒng)的性能。