趙磊
摘要:本文以STM32單片機(jī)為核心控制器,以MPU-6050為姿態(tài)讀取模塊,實(shí)現(xiàn)兩輪自平衡小車的設(shè)計(jì),能夠使小車的控制效果得到提高,以電池為電源,設(shè)計(jì)兩輪自平衡小車的硬件和軟件設(shè)計(jì);用卡爾曼濾波算法作為數(shù)據(jù)的平衡濾波,用PID算法作為控制算法,提高控制精度,從而設(shè)計(jì)和實(shí)現(xiàn)了小車的自平衡。
關(guān)鍵詞:STM32;自平衡;卡爾曼濾波;PID
中圖分類號(hào):TP273+.4 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9416(2017)01-0035-02
微控制器STM32的內(nèi)核為Cortex-M3,CPU為32位,存儲(chǔ)器為SRAM,大小為6-64kB。以STM32為基礎(chǔ),實(shí)現(xiàn)對(duì)姿態(tài)檢驗(yàn)傳感器等系統(tǒng)各方面數(shù)據(jù)的控制,能夠使小車的姿態(tài)更加合理,控制精度高,控制速度快。
1 基于STM32的兩輪自平衡小車的硬件設(shè)計(jì)
基于STM32的兩輪自平衡小車的硬件設(shè)計(jì)包括電源模塊、主控制器模塊、姿態(tài)讀取模塊與驅(qū)動(dòng)模塊四個(gè)部分。
1.1 電源模塊
電源提供是兩輪自平衡小車行駛的動(dòng)力支撐。本設(shè)計(jì)以電池作為電源,為小車的行駛提供能量[1]。小車電機(jī)電壓須要12V,擬用3節(jié)3.6V的鋰電池作為電源。
控制器STM32和MPU-6050均需要3.3V電壓支撐。本設(shè)計(jì)以3節(jié)鋰電池的12電壓進(jìn)行降壓供電。采用LM2596-3.3設(shè)計(jì)降壓穩(wěn)壓電路。
1.2 主控制器模塊
主控制器為STM32,是ST公司突出的一款微控制器。內(nèi)核為Cortex-M3,CPU為32位,存儲(chǔ)器為SRAM,6-64 kB。其增強(qiáng)型系列處理速度能達(dá)到72MHz,具有高性能,低成本等特點(diǎn)。在上述主控制器的支持下,實(shí)現(xiàn)對(duì)兩輪自平衡小車的控制,使其能夠在控制下平衡行駛[2]。
1.3 姿態(tài)讀取模塊
姿態(tài)讀取的目的在于將兩輪自平衡小車的姿態(tài)控制在合理的范圍,保證其在控制下能夠平衡行駛。系統(tǒng)以MPU-6050為姿態(tài)讀取模塊與STM32內(nèi)的運(yùn)動(dòng)處理器程序相結(jié)合。為了保證姿態(tài)讀取時(shí)實(shí)性,將陀螺儀與加速計(jì)聯(lián)合使用,兩者均選為3軸,共同構(gòu)成姿態(tài)讀取模塊,可以有效提高姿態(tài)讀取的實(shí)時(shí)性。
1.4 電機(jī)驅(qū)動(dòng)模塊
電機(jī)驅(qū)動(dòng)模塊的功能在于實(shí)現(xiàn)驅(qū)動(dòng)。小車采用L298N組成的雙H橋作為電機(jī)驅(qū)動(dòng)模塊。對(duì)兩輪自平衡小車可以起到良好的自動(dòng)化控制。為了使電機(jī)驅(qū)動(dòng)模塊的功能能夠得到有效發(fā)揮,以直流電機(jī)作為驅(qū)動(dòng)的來(lái)源。
2 基于STM32的兩輪自平衡小車的軟件設(shè)計(jì)
在硬件設(shè)計(jì)完成之后,以STM32作為核心控制,實(shí)現(xiàn)對(duì)兩輪自平衡小車軟件的設(shè)計(jì)。用卡爾曼濾波算法做姿態(tài)數(shù)據(jù)的平滑濾波;用PID控制算法做控制數(shù)據(jù)輸出。
2.1 系統(tǒng)初始化
在程序正式開(kāi)始運(yùn)行之前,需要完成系統(tǒng)的初始化過(guò)程。系統(tǒng)初始化包括的流程如圖1所示。
時(shí)鐘初始化:由于主程序的運(yùn)行過(guò)程中,需要判斷定時(shí)是否已經(jīng)達(dá)到了5ms,因此系統(tǒng)中需要設(shè)置時(shí)鐘,且時(shí)鐘功能的發(fā)揮十分重要。鑒于主程序的上述特點(diǎn),在系統(tǒng)初始化過(guò)程時(shí),需要首先進(jìn)行時(shí)鐘的初始化。
NVIC中斷初始化:為了保證按時(shí)中斷的準(zhǔn)確性,并使5ms到達(dá)之后,能夠?qū)崿F(xiàn)中斷,并開(kāi)始讀取MU-6050所采集的小車姿態(tài)數(shù)據(jù)的過(guò)程,必須保證將定時(shí)中斷初始化。
定時(shí)器初始化:該初始化實(shí)現(xiàn)的目的同樣在于保證在5ms時(shí)間達(dá)到時(shí),使定時(shí)中斷能夠順利實(shí)現(xiàn),并開(kāi)始姿態(tài)數(shù)據(jù)讀取過(guò)程。
通信初始化:又稱I2C初始化,其功能在于使數(shù)據(jù)采集能夠有效的實(shí)現(xiàn),并使所采集的數(shù)據(jù),能夠被有效傳輸。
測(cè)速模塊初始化:為了保證兩輪自平衡小車在被控制的環(huán)境下行駛的穩(wěn)定性與可靠性,提高姿態(tài)控制的準(zhǔn)確度以及時(shí)實(shí)性非常重要,而測(cè)速模塊的功能,便在于保證上述功能的順利實(shí)現(xiàn)。對(duì)于小車的行駛與控制非常重要。
MPU-6050初始化:MPU-6050為姿態(tài)讀取模塊,初始化的意義在于實(shí)現(xiàn)對(duì)小車的姿態(tài)檢驗(yàn)。
電機(jī)PWM初始化:電機(jī)PWM輸出,為系統(tǒng)主程序的最后一個(gè)流程,保證電機(jī)能實(shí)現(xiàn)不同速度的輸出。
2.2 定時(shí)中斷設(shè)計(jì)
基于STM32的兩輪自平衡小車在完成系統(tǒng)的初始化過(guò)程后等待定時(shí)中斷產(chǎn)生調(diào)整姿態(tài)的實(shí)現(xiàn)流程。
讀取姿態(tài):如果5ms時(shí)間已到,則可以直接讀取MU-6050這一姿態(tài)控制模塊所采集的小車姿態(tài)數(shù)據(jù),與此同時(shí),完成電機(jī)速度檢測(cè)(編碼器)。
數(shù)據(jù)濾波:在小車姿態(tài)數(shù)據(jù)讀取完成之后,需要利用卡爾曼濾波算法對(duì)傳感器數(shù)據(jù)進(jìn)行平滑濾波。
PID控制:將數(shù)據(jù)濾波之后的結(jié)果,與電機(jī)速度檢測(cè)結(jié)果相結(jié)合,采用PID控制算法,輸出控制數(shù)據(jù)。
PWM輸出:在計(jì)算完成過(guò)后,輸出PWM波,控制電機(jī)的數(shù)度,并再次等待定時(shí)中斷。
2.3 卡爾曼濾波算法與PID控制算法
卡爾曼濾波算法的功能在于將陀螺儀與加速度計(jì)所采集的數(shù)據(jù)進(jìn)行融合,并通過(guò)計(jì)算,得出其最優(yōu)值。兩者的各方面數(shù)據(jù)能夠達(dá)到平衡的狀態(tài),使小車在被控制的環(huán)境下,實(shí)現(xiàn)更加平穩(wěn)的行駛。因此在動(dòng)態(tài)測(cè)量過(guò)程中,其數(shù)值與實(shí)際情況相比,必定存在偏差。采用卡爾曼濾波算法的意義在于充分利用兩者的優(yōu)勢(shì),得出最優(yōu)值,消除缺陷。為小車的行駛提供良好環(huán)境。與卡爾曼濾波算法的功能相同,PID控制算法的功能同樣在于消除偏差,使控制效果達(dá)到最好,使小車姿態(tài)更加合理。
2.4 電機(jī)控制
電壓大小決定轉(zhuǎn)速大小,電機(jī)控制的意義在于保證其電壓合理,進(jìn)而使小車的速度能夠得到實(shí)時(shí)控制。電機(jī)輸出模塊輸出兩路PWM信號(hào),分別控制兩個(gè)電機(jī)的速度。與此同時(shí),通過(guò)其他設(shè)置,使電機(jī)控制得以實(shí)現(xiàn),進(jìn)而達(dá)到提高小車可控制性的目的,這對(duì)于小車運(yùn)行狀態(tài)的良好調(diào)整具有重要意義。
3 設(shè)計(jì)結(jié)果與分析
以STM32為基礎(chǔ),以MPU-6050為姿態(tài)讀取模塊,實(shí)現(xiàn)兩輪自平衡小車的設(shè)計(jì),能夠使小車的控制效果得到提高。在做好系統(tǒng)初始化后,利用卡爾曼濾波算法與PID控制算法兩種算法,可以使小車的姿態(tài)達(dá)到合理化的水平,對(duì)于提高小車運(yùn)行的穩(wěn)定性具有重大意義。
參考文獻(xiàn)
[1]楊莘,劉海濤.基于STM32的兩輪自平衡小車[J].數(shù)字技術(shù)與應(yīng)用,2014,05:151-152.
[2]季鵬飛,朱燕,程傳統(tǒng),杜曉.基于STM32的兩輪自平衡小車控制系統(tǒng)設(shè)計(jì)[J].電子科技,2014,11:96-99+105.