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