吳 琳
(遼寧裝備制造職業(yè)技術(shù)學(xué)院,遼寧沈陽 110161)
傳統(tǒng)運(yùn)動(dòng)小車的嵌入式系統(tǒng)通常使用單片機(jī),從構(gòu)成上來看,包括硬件系統(tǒng)和軟件系統(tǒng)。軟件系統(tǒng)可以使用STM32CubeIDE,是ST公司基于Eclipse/CDT框架和GUN GCC工具鏈制作的免費(fèi)IDE,并集成了STM32CubeMX,可以實(shí)現(xiàn)STM32系列芯片的外圍設(shè)備配置、代碼生成、代碼編輯、代碼編譯、在線調(diào)試,并且支持?jǐn)?shù)百個(gè)Eclipse現(xiàn)有插件[1]。
運(yùn)動(dòng)小車主要由STM32單片機(jī)開發(fā)板、DRV8837驅(qū)動(dòng)模塊、編碼直流電機(jī)模塊、OLED顯示模塊、電源模塊等組成,圖1是運(yùn)動(dòng)小車系統(tǒng)組成圖[2]。采用編碼器對(duì)電機(jī)速度進(jìn)行檢測(cè),采用STM32CubeIDE軟件配置定時(shí)器PWM、硬件編碼器和SPI來控制直流電機(jī)的運(yùn)動(dòng)形態(tài)并在顯示屏上顯示速度。
圖1 運(yùn)動(dòng)小車控制系統(tǒng)組成圖
STM32單片機(jī)通過定時(shí)器輸出PWM來控制編碼直流減速電機(jī),通過改變PWM波的占空比來實(shí)現(xiàn)電壓大小的調(diào)節(jié),從而控制直流電機(jī)的轉(zhuǎn)速[3]。STM32單片機(jī)輸出電壓為3.3 V,而要驅(qū)動(dòng)的編碼直流減速電機(jī)的電壓一般都大于3.3 V,所以STM32單片機(jī)是無法直接驅(qū)動(dòng)電機(jī)的。因此可以使用電機(jī)驅(qū)動(dòng)DRV8837來幫助單片機(jī)來驅(qū)動(dòng)電機(jī)轉(zhuǎn)動(dòng),由電機(jī)驅(qū)動(dòng)來提供驅(qū)動(dòng)電機(jī)的電壓與電流。直流電機(jī)的轉(zhuǎn)速特別快,直流減速電機(jī)內(nèi)部安裝了一個(gè)減速器來降低電機(jī)的轉(zhuǎn)速,因?yàn)闇p小轉(zhuǎn)速后可以增強(qiáng)電機(jī)可控性。
電機(jī)上有高精度編碼器,電機(jī)轉(zhuǎn)動(dòng)一圈,電機(jī)上的A、B兩個(gè)霍爾傳感器就會(huì)輸出A相和B相固定個(gè)數(shù)的方波,精度越高的編碼器輸出方波的個(gè)數(shù)就越多。所以測(cè)量單位時(shí)間內(nèi)A相輸出的方波個(gè)數(shù)就可以知道電機(jī)在單位時(shí)間內(nèi)轉(zhuǎn)了幾圈,也就是轉(zhuǎn)速。也可以測(cè)量B相輸出的方波來測(cè)量速度,這里采用四倍頻技術(shù)獲得更高的精度。判別直流電機(jī)正反轉(zhuǎn)時(shí),當(dāng)A相“正跳變”時(shí),如果B相是高電平,那么就是正轉(zhuǎn),反之是反轉(zhuǎn)[4]。
GA12-N20編碼直流電機(jī)模塊如圖2所示,首先需要P2排座給電機(jī)輸入5 V電源,通過圖中U2模塊的AMS1117[5]電壓轉(zhuǎn)換芯片,將5 V電源轉(zhuǎn)換成3.3 V,這個(gè)3.3 V電壓主要是為了U1模塊DRV8837電機(jī)驅(qū)動(dòng)芯片進(jìn)行供電。電機(jī)驅(qū)動(dòng)芯片DRV8837需要輸入兩路PWM信號(hào),可由P2端口提供,再由電機(jī)驅(qū)動(dòng)芯片輸出兩路信號(hào)控制編碼直流電機(jī)[6]。編碼直流電機(jī)轉(zhuǎn)動(dòng)時(shí),高精度編碼器會(huì)輸出兩路脈沖信號(hào),通過P5模塊采集脈沖信號(hào),計(jì)算轉(zhuǎn)速。
圖2 編碼直流電機(jī)和驅(qū)動(dòng)模塊
GA12-N20直流電機(jī)內(nèi)部有減速比為1∶30的減速裝置,即理論上電機(jī)轉(zhuǎn)軸旋轉(zhuǎn)1圈碼盤旋轉(zhuǎn)30圈。碼盤上有兩個(gè)開關(guān)型霍爾傳感器,有7個(gè)磁點(diǎn)。當(dāng)采集單個(gè)開關(guān)型霍爾傳感器的一路脈沖時(shí),碼盤旋轉(zhuǎn)1圈,就會(huì)產(chǎn)生7個(gè)脈沖信號(hào)。所以當(dāng)電機(jī)轉(zhuǎn)軸旋轉(zhuǎn)1圈時(shí),碼盤就會(huì)旋轉(zhuǎn)30圈,采集一路信號(hào)就會(huì)產(chǎn)生210個(gè)脈沖。
編碼器硬件連接如圖3所示,利用16p排線通過P11端口將核心板與擴(kuò)展版連接,連接后,通過4p排線將P9端口與P5端口再進(jìn)行連接,P9端口引出的D0、D1可以對(duì)應(yīng)不同的核心板,在這里就是對(duì)應(yīng)的P11端口定時(shí)器中斷I/O口PI5、PI6,通過查詢數(shù)據(jù)手冊(cè)可知,PI5是TIM8_CH1,PI6 是 TIM8_CH2,STM32CubeIDE軟件要按照定時(shí)器端口進(jìn)行配置。
圖3 編碼器硬件連接
如圖4所示,通過4p排線將擴(kuò)展版中的P10端口與編碼直流電機(jī)和驅(qū)動(dòng)模塊的P2端口連接就可以控制直流電機(jī)。A0和A1端口分別對(duì)應(yīng)PA5和PA1,這兩個(gè)引腳都支持PWM輸出,通過PWM輸出脈沖來控制直流電機(jī)。
圖4 直流電機(jī)連接
OLED顯示模塊電路主要由4個(gè)部分組成,包括OLED 2.42寸液晶顯示屏U5、P1端口、電壓轉(zhuǎn)換電路U4和升壓轉(zhuǎn)換電路U3,如圖5所示。P1是通信顯示接口,U4將5 V電壓轉(zhuǎn)換成3.3 V電壓提供給OLED作為邏輯電平,U3是將5V轉(zhuǎn)換成13V給OLED提供顯示電壓。
圖5 OLED顯示模塊電路
2.2.1 OLED2.42寸液晶顯示屏
在控制液晶顯示屏?xí)r,OLED屏每個(gè)像素點(diǎn)都是獨(dú)立的,需要為每一個(gè)像素點(diǎn)進(jìn)行賦值。如果直接用單片機(jī)通過地址進(jìn)行賦值,那么屏幕顯示速度非常慢,所以在屏幕上用一個(gè)控制器,當(dāng)單片機(jī)將數(shù)據(jù)發(fā)送給控制器時(shí),控制芯片直接將數(shù)據(jù)寫入屏幕中呈現(xiàn)出相應(yīng)的圖形。
控制器使用SSD1309控制芯片,它是一款用于有機(jī)/聚合物發(fā)光二極管點(diǎn)陣圖形顯示系統(tǒng)的帶控制器的單片CMOS OLE/PLED驅(qū)動(dòng)器。它有128個(gè)段和64個(gè)公共區(qū)組成,專為普通陰極型OLED面板設(shè)計(jì)。
SSD1309控制器有5種總線接口模式:8-bit 8080、8-bit 6800、3-wire SPI、4-wire SPI和I2C。此時(shí)SSD1309控制器中BS1和BS2接地,所以需要通過4-wire SPI進(jìn)行通信。SPI通信是一種高速、全雙工、同步的通信總線,并且在芯片的管腳上只占用四根線,節(jié)約了芯片的管腳,同時(shí)為PCB的布局節(jié)省空間。使用OLED片選信號(hào)端CS#、復(fù)位OLED端RES#、命令/數(shù)據(jù)標(biāo)志端DC#(0讀寫命令、1讀寫數(shù)據(jù))、時(shí)鐘線 D0(SCLK)、數(shù)據(jù)輸入端 D1(SDIN)。
2.2.2 升壓轉(zhuǎn)換電路
升壓轉(zhuǎn)換電路的作用就是將5 V電壓轉(zhuǎn)換成13 V電壓,利用MT3608升壓轉(zhuǎn)換器來實(shí)現(xiàn)。MT3608升壓轉(zhuǎn)換器是一個(gè)恒定頻率,6腳SOT23電流模式階躍變換器,開關(guān)頻率1.2 MHz,允許使用微型低成本電容器,該芯片的特點(diǎn)是在輕負(fù)載時(shí)自動(dòng)切換到脈沖頻率調(diào)制模式,并且包括低壓閉鎖、限流和熱過載保護(hù)。升壓轉(zhuǎn)換電路輸出電壓可以利用式(1)求得。
查詢技術(shù)手冊(cè)可知VREF=0.6 V,而電路中R7=10KΩ,R8=470Ω所以計(jì)算可得Vout=13.37 V,這樣就實(shí)現(xiàn)了升壓目的。
按照系統(tǒng)硬件構(gòu)成在軟件STM32CubeIDE中配置STM32芯片引腳[7],配置時(shí)鐘源、時(shí)鐘中斷、通道及模式、分頻系數(shù)等參數(shù)保證編碼直流電機(jī)和OLED有正確的控制功能。利用參數(shù)配置可以控制電機(jī)、OLED的顯示和計(jì)算電機(jī)的轉(zhuǎn)速。
例如配置定時(shí)器輸出PWM信號(hào)的步驟如圖6所示。首先將PA5端口配置為“TIM2_CH1”,PA1端口配置為“TIM2_CH2”模式。然后配置TIM2,選擇內(nèi)部時(shí)鐘源,通道1和通道2都選擇PWM形式,最后配置定時(shí)器的頻率,如圖7所示,這樣PWM信號(hào)就配置完成。
圖6 配置PA5和PA1端口
圖7 配置定時(shí)器TIM2
車輛運(yùn)動(dòng)控制系統(tǒng)的關(guān)鍵是編碼直流電機(jī)的轉(zhuǎn)動(dòng)和OLED的顯示。其中編碼直流電機(jī)的轉(zhuǎn)動(dòng)需要STM32單片機(jī)發(fā)出PWM信號(hào)給驅(qū)動(dòng)芯片來控制電機(jī)正轉(zhuǎn)、反轉(zhuǎn)和停止,所以要完成PWM比較值的設(shè)定以及OLED顯示程序的設(shè)計(jì)。
3.2.1 PWM控制程序
PWM的模式選擇采用向上計(jì)數(shù)時(shí),當(dāng)計(jì)數(shù)值大于比較值時(shí),輸出高電平,當(dāng)計(jì)數(shù)值小于比較值時(shí),輸出低電平。PWM設(shè)定程序如下:當(dāng)value大于零時(shí),將此值賦予通道1并且通道2賦予0,這時(shí)就實(shí)現(xiàn)電機(jī)正轉(zhuǎn)功能;反之value小于零,則將此負(fù)值取反變成正值賦予通道2,而通道1賦予0,此時(shí)實(shí)現(xiàn)電機(jī)反轉(zhuǎn)功能。比較值變低時(shí),高電平時(shí)間變長(zhǎng),即PWM占空比變大,可以通過調(diào)節(jié)PWM占空比調(diào)節(jié)電機(jī)轉(zhuǎn)速;當(dāng)比較值變成0時(shí),整個(gè)周期輸出是高電平,此時(shí)驅(qū)動(dòng)芯片輸入兩路高電平,電機(jī)就停止。
3.2.2 OLED顯示程序
首先觸發(fā)編碼器定時(shí)器,設(shè)定碼盤初始值、電機(jī)初始轉(zhuǎn)速、初始速度,通過Get_Motor_Encoder_Val()函數(shù)獲得實(shí)時(shí)狀態(tài)的碼盤值、電機(jī)轉(zhuǎn)速,并在OLED中顯示。
運(yùn)動(dòng)小車速度顯示如圖8所示,通過按鍵啟動(dòng)系統(tǒng),占空比初始值為50%,調(diào)節(jié)占空比可以看出隨著占空比變大,碼盤值變大,速度也變快,車輛控制系統(tǒng)得以實(shí)現(xiàn)。
圖8 車輛控制系統(tǒng)顯示
本文通過使用STM32CubeIDE、STM32單片機(jī)、編碼直流電機(jī)和OLED顯示屏進(jìn)行軟硬件結(jié)合,進(jìn)行運(yùn)動(dòng)小車的設(shè)計(jì)。該系統(tǒng)的設(shè)計(jì)是基于STM32CubeMX的開發(fā)模式,這種方法可以根據(jù)應(yīng)用需求使用圖形化配置工具對(duì)MCU片上外設(shè)進(jìn)行配置,然后生成基于HAL庫(kù)和LL庫(kù)的初始化代碼,最后將生成的代碼導(dǎo)入集成開發(fā)環(huán)境并進(jìn)行編輯。從以上研究可以看出,利用嵌入式技術(shù),基于STM32的小車設(shè)計(jì),能夠?qū)崿F(xiàn)精準(zhǔn)的速度控制和啟停控制,控制性能優(yōu)越,具有較高的應(yīng)用價(jià)值。