版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、題目: 基于單片機的平衡小車的設(shè)計 摘要:兩輪自平衡車在我們的生活中已經(jīng)是越來越常見,他的一個極其突出的特性就是不穩(wěn)定,與他很類似的一個模型就是倒立擺。我們必須知道倒立擺的狀態(tài),然后對他進行干擾才能使它保持穩(wěn)定狀態(tài)。本論文所研究的方案就是基于這種原理,用陀螺儀和加速度計來獲取到平衡車的當(dāng)前狀態(tài),然后控制電機來作出相應(yīng)的干擾,來讓小車保持平衡。整個系統(tǒng)設(shè)計完成后,小車可以實現(xiàn)自主平衡功能。并且,在人為加入適量干擾后小車也能夠自主調(diào)整并迅速恢復(fù)至穩(wěn)定狀態(tài)。系統(tǒng)還保留了大部分接口,可以進行二次開發(fā)和升級,包括手機藍牙控制、wifi控制、視覺導(dǎo)航、軌跡跟蹤等。關(guān)鍵詞: 加速度;PID算法;陀螺儀;兩輪
2、自平衡小車Abstract: two rounds of self-balancing vehicle is already more and more common in our life, he's a very prominent feature is unstable, and he is very similar to a model of inverted pendulum. We need to know the status of the inverted pendulum, and then to his interference to keep it stable.
3、 Mentioned in the present paper research plan is based on the principle of using gyroscope and accelerometer to get to the current state of the balance of the car, and then control the motor to make corresponding interference, to let the car balance.After completion of the whole system design, the c
4、ar can achieve balance function independently. And, in human after adding suitable amount of interferenceThe car can also independent adjustment and quickly return to a stable state. System also has kept most of the interface, can undertake secondary development and upgrading, including mobile phone
5、 bluetooth, wifi, visual navigation, path tracking, etc.Keywords: Accelerometer;PID algorithm;Gyroscope;Balance of the car目錄1 緒論11.1 自平衡小車的研究意義11.2 課題研究的主要任務(wù)12 原理分析與關(guān)鍵技術(shù)22.1 原理分析22.2關(guān)鍵技術(shù)22.2.1 系統(tǒng)建模22.2.2 姿態(tài)檢測22.2.3 控制算法33 系統(tǒng)硬件設(shè)計63.1 物理架構(gòu)73.2 元器件選型83.2.1 微處理器23.2.2 陀螺儀與加速度計23.2.3 電機驅(qū)動33.2.4 編碼器33.2.5
6、 顯示屏34 系統(tǒng)軟件設(shè)計164.1 模塊初始化174.2 PID算法設(shè)計184.3 總體軟件架構(gòu)274.4 調(diào)試技巧275 總結(jié)與展望375.1 總結(jié)375.2 展望37參考文獻38附錄38致謝38III1 緒論1.1研究意義近年來,科技發(fā)展,時代進步。其中各種科技產(chǎn)品也是如雨后春筍紛紛涌現(xiàn),用科技改變世界的時代也是在加速到來。但是,日益擁堵的交通狀況問題也是越來越嚴(yán)重。改變交通現(xiàn)狀已經(jīng)刻不容緩,其中兩輪平衡車是極具代表性的一個產(chǎn)品,他適應(yīng)時代,應(yīng)運而生。以其新穎,時尚,方便的優(yōu)勢迅速走入大家的生活。這種平衡車與其他短途代步工具的最顯著的特點是:他只有兩個輪子,都是獨立驅(qū)動工作,并且兩個輪子
7、在一根軸上面,車的重量加上人的重量正好落在車軸上面,通過輪子前后運動來保持車生的平衡。由于是使用蓄電池供電,所以沒有污染,并且可以重復(fù)適用,壽命很高。而且電動機能量轉(zhuǎn)換運行效率較高并且只有很小的噪音。由于兩個輪子都可以前進后退,所以他可以在很狹窄的空間范圍當(dāng)中也可以進退自如。對他的控制也是極其方便,只要通過身體的前后傾斜改變平衡車的傾斜角度,當(dāng)陀螺儀檢測到角度的變化后,將數(shù)據(jù)傳送給單片機,單片機進行數(shù)據(jù)處理和融合,將輸出型號傳送給電機驅(qū)動芯片,進而來控制電機運轉(zhuǎn),防止人摔倒。這樣完全可以避免在傳統(tǒng)汽車上出現(xiàn)的剎車片老化剎車不靈的情況,極大地保證了駕駛?cè)藛T的安全?;谝陨细鞣N優(yōu)點可以看出兩輪自平
8、衡車有著廣泛的應(yīng)用前景,目前市面上已經(jīng)涌現(xiàn)除了大量的平衡車。因此本論文對于平衡車的研究意義非凡。1.2課題研究的主要內(nèi)容本論文著重研究的兩輪平衡車系統(tǒng)主要是由單片機進行控制。完成該設(shè)計后,小車能實現(xiàn)自我平衡,直立行走等基本功能。該系統(tǒng)采用了STM單片機作為核心的控制單元,并加上各種輔助傳感器,完成相對應(yīng)的電路設(shè)計并編寫相對應(yīng)程序完成平衡控制。加速度計可以獲得小車的傾斜角度,陀螺儀可以捕獲小車的角速度,兩種數(shù)據(jù)捕獲后傳送給MCU,MCU對數(shù)據(jù)進行處理,濾波然后加以融合。而編碼器可以捕獲平衡小車兩個輪子的即時速度。然后把即時速度和濾波后的數(shù)據(jù)進行閉環(huán)數(shù)據(jù)處理,得到最終的輸出量把所有的數(shù)據(jù)量進行數(shù)據(jù)
9、疊加然后傳送給驅(qū)動芯片,進而來控制小車的行走狀態(tài)。2 原理分析與關(guān)鍵技術(shù)2.1 原理分析舉一個例子,在生活中我們可以嘗試讓一個根木桿立在手心當(dāng)中而不倒下去,這一個看似簡單的過程,其實就包括了反饋機制里面所有的條件。我們眼睛看到木桿往一邊倒下去,我們就會嘗試讓手往相反的方向去移動,讓木桿繼續(xù)保持平衡??刂平o定控制對象執(zhí)行機構(gòu)控制算法傳感器大腦手掌眼睛木棒 圖2-1 保持木棍直立的反饋控制系統(tǒng) 應(yīng)用到平衡車上面也是一樣的。由于小車是兩輪共一個軸,所以小車只會向前或者向后傾斜,當(dāng)小車傾斜后,陀螺儀加速度計等傳感器就會感知到小車傾斜了,并且CPU會算出小車傾斜的角度和速度。電機在得知傾斜的角度和速度后
10、以相對應(yīng)迅速向相同的方向移動,小車就可以保持平衡。這里的傳感器就相當(dāng)于木桿模型中的眼睛,用來捕獲傾斜的角度和速度,而大腦控制手往那個方向動的過程就相當(dāng)于CPU算出電機轉(zhuǎn)動方向與速度的過程。最后手控制木桿就相當(dāng)于電機的轉(zhuǎn)動。2.2關(guān)鍵技術(shù)2.2.1 系統(tǒng)建模數(shù)學(xué)建模的主要理論依據(jù)是牛頓力學(xué)原理,建立模型后整個控制流程一目了然,而且一個良好的物理模型還有助于軟件方面的設(shè)計與實現(xiàn)。如圖1.2所示,倒立擺只有在直立時才算是處于平衡的,但是當(dāng)?shù)沽[向右傾斜時,它就偏離了平衡位置。而此時小車的合力與位移方向相同,他就會加速向右傾斜,然后倒下去。我們?yōu)榱俗屝≤嚥坏瓜路€(wěn)定在一個平衡位置。在下面輪子上施加一個向
11、右的外力,使輪子快速向右移動,來保持車身的平衡。以小車作為參考系,重心受到一個額外的慣性力,與車輪加速度大小相同,方向相反。因此倒立擺所受到的回復(fù)力為 F=mgsinmacos (3-1)根據(jù)控制系統(tǒng)的特性,角需要控制在很小的范圍內(nèi),并且假設(shè)控制車輪加速度與角成正比,比例系數(shù)為k1,因此上式可近似處理為 F=mgmk1 (3-2)此時,只要k1g,回復(fù)力的方向便和位移方向相反,此時小車可以恢復(fù)到平衡位置。為使小車能在平衡位置盡快的穩(wěn)定下來,還需要有阻尼力,阻尼力與角速度方向相反,大小成正比。式(3-2)可變?yōu)?F=mgmk1mk2' (3-3)式中,k1,k2均為比例系數(shù),為小車傾角,
12、'為角速度。只要滿足k1g,k20,便可以將小車維持在直立狀態(tài)。k2是小車回到垂直位置的阻尼系數(shù),選取合適的阻尼系數(shù)可以保證小車可以盡快穩(wěn)定在垂直位置。因此為了控制小車穩(wěn)定,需要精確的測量小車傾角的大小和角速度'的大小,并以此控制車輪的加速度。2.2.2 姿態(tài)檢測兩個輪子自的平衡小車的一個主要特征就是高度的不穩(wěn)定,對小車進行控制好與壞的一個重要前提是傳感器能否采集到精確地數(shù)據(jù)。目前,采用最多的解決方案是:傾斜角度由加速度計采集,角速度有陀螺儀采集,將兩種數(shù)據(jù)融合處理后得到小車的即時運行狀態(tài)。但是,由于這些傳感器有一些自有的特征屬性,他們采集的數(shù)據(jù)會因溫度等外界環(huán)境的變化而變化。
13、這些變化隨著時間的推移會產(chǎn)生很大的誤差,因此我們會采用一些濾波算法對數(shù)據(jù)進行處理,使融合后的數(shù)據(jù)最接近真實的數(shù)據(jù)。2.2.3控制算法兩個輪子的平衡車的最終目標(biāo)是要在適當(dāng)?shù)耐饨绺蓴_下還能實現(xiàn)自我平衡。這就需要我們選擇合適的控制算法進行控制,進而讓小車迅速恢復(fù)到平衡狀態(tài)。傳統(tǒng)的PID算法已經(jīng)問世了很多年,他已經(jīng)經(jīng)歷了幾十年的實踐檢驗,所以PID算法是本論文要著重研究的控制算法。3 系統(tǒng)硬件設(shè)計3.1 系統(tǒng)架構(gòu)本設(shè)計采用stm32f103c8t6作為主要控制器。用mpu6050作為輔助姿態(tài)傳感器,mpu6050獲取平衡車的姿態(tài)將數(shù)據(jù)傳送給主控制器。主控制器得到數(shù)據(jù)后通過互補濾波或者卡爾曼濾波進行數(shù)據(jù)
14、處理。然后經(jīng)過PID算法處理,將處理后的數(shù)據(jù)反饋給電機驅(qū)動芯片TB6612,驅(qū)動芯片得到數(shù)據(jù)后,然后控制電機,電機轉(zhuǎn)動時小車保持平衡。3.2 元器件選型3.2.1 微處理器STM32 是由意法半導(dǎo)體推出的一款基于 ARM Cortex - M 系列內(nèi)核的高性能32 位單片機。目前有 STM32L0,STM32L1,STM32L4 等九個產(chǎn)品線。其中“STM32”表示基于 ARM核心的 32 位微控制器。時鐘、復(fù)位和電源管理2.03.6 伏供電和 I/O 引腳上電/斷電復(fù)位(POR/PDR)、可編程電壓監(jiān)測器(PVD) 416MHz 晶體振蕩器。內(nèi)嵌帶校準(zhǔn)的 40kHz的RC振蕩器他有兩個12
15、位的ADC通道數(shù)也可以達到16個,而且他的模數(shù)轉(zhuǎn)換的范圍也可以達到0-3.6V。7 通道 DMA 控制器。支持的外設(shè)有定時器、ADC、SPI、I2C和USART。該控制器有多達48個快速I/O 端口,所有 I/O 口可以映像到16個外部中斷。3.2.2 陀螺儀與加速度計為了保證準(zhǔn)確的控制小車穩(wěn)定,我們就有必要準(zhǔn)確的測量平衡小車傾斜角度和電機轉(zhuǎn)速,其中電機轉(zhuǎn)速在下面一章節(jié)會介紹,主要是通過編碼器測量。本章節(jié)主要利用MPU6050來測量校車的傾斜角度。本控制測量系統(tǒng)采用了集成度相當(dāng)高的6軸運動處理器,這樣就避免了用多個傳感器組合測量的方案,極大地減少了車身上的空間問題。而且避免了陀螺儀和加速度計在
16、方向上安裝不能統(tǒng)一的問題。MPU6050中的陀螺儀和加速度計都是采用了3個ADC,其中ADC的精度可以達到16位。分辨率也是可以達到很高。在MPU6050采集到數(shù)據(jù)后,數(shù)據(jù)量是模擬量,模擬量被ADC轉(zhuǎn)化為數(shù)字量,然后傳送給內(nèi)部DMP進行姿態(tài)解算。得到平衡小車的傾斜角度。MPU6050的也是有很多種張配置,配置接口采用了I2C接口,速率可以達到4000kHZ。因為角度側(cè)量是有好很多種的周期,為了準(zhǔn)確跟蹤小車運動的快慢速。所以,陀螺儀的配置范圍為有±250,±500,±1000,±2000°/秒(dps),加速度計的配置范圍有±2,
17、77;4,±8,±16g。當(dāng)然MPU6050測量精度越低,他的配置范圍也就越大。MPU6050的加速度計的測量原理如下圖。圖3-3 加速度檢測的基本原理在縱向方向上加兩個點極,形成一個電容。當(dāng)外部產(chǎn)生加速度后兩個電極之間的距離會發(fā)生改變,電容也會相應(yīng)的改變。電容的改變會導(dǎo)致電壓變化。電壓通過放大電路后再進行處理,然后被ADC轉(zhuǎn)化為數(shù)字量。一套參數(shù)的傳遞就形成了加速度與電壓數(shù)值的關(guān)系。 而陀螺儀則是克里利奧力的原理,在器件里面安裝了一個能感知震動的單元。,當(dāng)物體高速旋時,原件里面的震動單元的震動頻率也會相應(yīng)地改變,我們只要測出了物體的振動頻率就可以很輕松的得知物體的旋轉(zhuǎn)角速度
18、。將MPU6050安裝在小車上時,可以測量出小車傾斜的角速度,將角速度信號進行積分便可得到角度,如下圖所示。上面得到了小車的旋轉(zhuǎn)角速度,但是需要的是小車的傾斜角度,所以必須會對角速度進行積分,得到角度。由于小車測量的是角速度。外界對他的干擾可以忽略不計。但是將角速度積分后,那些很小的干擾也會累加。從而使測量值與真實值存在較大的誤差。如下圖所示。圖3-5 角度積分漂移所以這個過程會進行一些數(shù)據(jù)濾波處理。但是還是無法消除誤差。擬采用加速度數(shù)據(jù)與陀螺儀數(shù)據(jù)融合的方式來處理這個問題。但是由于加速度計測量很靈敏,容易摻雜一下外部的高頻率信號。但是他沒有積分,也就沒有積分誤差。但是陀螺儀就不一樣他受外部高
19、頻噪聲的影響很小。但是他有積分誤差。因此可以使用互補濾波,將這兩種傳感器的優(yōu)勢互補。換句話說,互補濾波就是以陀螺儀測量的角度為準(zhǔn)。然后定時用加速度及測量的角度為輔進行修正。3.2.3 電機驅(qū)動芯片本控制系統(tǒng)準(zhǔn)備用東芝生產(chǎn)的一款驅(qū)動芯TB6612FNG,他正好可以同時驅(qū)動兩個電機,非常滿足本論文設(shè)計的需求。而且它的驅(qū)動電流也是相當(dāng)?shù)拇?。可以達到1.2A,峰值可達2A、2.3A。芯片原理結(jié)構(gòu)如下圖,AO1/AO2/BO1/BO2是兩個電機的電源的供電口,AIN1/AIN2/BIN1/BIN2是控制兩個電機正反轉(zhuǎn)的管腳。而PWM1/PWM2就是接受的控制信號。單片機通過PID計算后得到PWM輸出信號
20、。 芯片就是通過這兩個管腳來接受單片機發(fā)過來的pwm信號,然后來控制電機的速度與正反轉(zhuǎn)。圖3-6 TB6612FNG芯片功能示意圖3.2.4 編碼器編碼器是一種常用的用來檢測步進電機的元器件,他的檢測原理是當(dāng)電機馬達轉(zhuǎn)動的時候會掃描到光電管器件,然后就會觸發(fā)光電管器件發(fā)送出數(shù)字脈沖信號。數(shù)字脈沖信號輸出到單片機的捕獲接口就可捕獲到脈沖信號的頻率進而得知步進電機的速度。關(guān)于電機正轉(zhuǎn)還是反轉(zhuǎn)的問題,可以通過脈沖信號的相位來判斷。如果脈沖信號相位超前半個周期就說明電機正轉(zhuǎn),相反,如果脈沖信號相位落后半個周期就說明電機反轉(zhuǎn)。圖3-7 光電編碼器3.2.5 顯示屏OLED是一種有機發(fā)光二極管,我們就是采
21、用這種顯示屏來作為顯示的。OLED也有很多的特點,比如說,制作簡單,響應(yīng)速度快,可以做到很薄,他可以自己發(fā)光,不需要背光源,對比度很高,色彩顯示鮮艷,適應(yīng)的溫度范圍廣等等??傊甇LED屏是下一代顯示材料的趨勢。 圖3-8 OLED顯示器本論文采用的OLED顯示器為0.96寸,他的長寬比例為27mm*26mm。但是他的分辨率卻可以達到128*64。模塊的去東街口主要有兩種,串行SPI接口和IIC接口。串行接口的速率要比IIC的借口要稍微快一點,但是這種接口需要4根管腳來驅(qū)動,相比IIC兩根接口的驅(qū)動方式要臉肥一些資源。在兩種接口都可以滿足需求的情況下我們選擇IIC接口。只要用2根線就可以驅(qū)動。4
22、 系統(tǒng)軟件設(shè)計 4.1 模塊初始化IIC初始化:IIC初始化用于配置MPU6050,由于MPU6050的配置采用的是IIC接口,所以這個初始化是必要的,另外IIC還用于驅(qū)動OLED顯示屏。 下面列出重要的函數(shù)名(具體函數(shù)體見附錄)初始化IIC對應(yīng)的引腳void IIC_Init(void)產(chǎn)生IIC起始信號int IIC_Start(void)產(chǎn)生IIC停止信號void IIC_Stop(void)等待應(yīng)答信號int IIC_Wait_Ack(void)產(chǎn)生ACK應(yīng)答void IIC_Ack(void)產(chǎn)生NACK應(yīng)答void IIC_NAck(void)IIC寫一個字節(jié)void IIC_Se
23、nd_Byte(u8 txd)IIC讀取一個字節(jié)u8 IIC_Read_Byte(unsigned char ack)IIC寫字符串int i2cWrite(uint8_t addr, uint8_t reg, uint8_t len, uint8_t *data)IIC讀字符串int i2cRead(uint8_t addr, uint8_t reg, uint8_t len, uint8_t *buf)串口初始化:串口初始化用于打印調(diào)試信息,方便我們調(diào)試程序。初始化串口引腳,串口時鐘和波特率void uart_init(u32 pclk2,u32 bound)配置串口中斷函數(shù)void US
24、ART2_IRQHandler(void)中斷定時器初始化:用于產(chǎn)生50ms的中斷周期,來進行一次PID算法運算。初始化中斷定時器void EXTI_Init()PWM初始化:用于輸出PWM值,電機驅(qū)動通過改值的大小來直接控制電機的速度與方向。初始化PWM分頻器和自動重裝值void MiniBalance_PWM_Init(u16 arr,u16 psc)配置電機輸出引腳void MiniBalance_Motor_Init(void)設(shè)置PWM值,改變電機速度void Set_Pwm(int moto1,int moto2)設(shè)置電機方向int myabs(int a)編碼器初始化:用于測量電
25、機的實時轉(zhuǎn)速初始化左右編碼器void Encoder_Init_TIM2(void)void Encoder_Init_TIM3(void)獲取電機的速度int Read_Encoder(u8 TIMX)MPU6050初始化:初始化MPU6050,測量小車的實時狀態(tài)和傾斜角度讀取MPU6050內(nèi)置溫度傳感器數(shù)據(jù)int Read_Temperature(void)讀取MPU6050內(nèi)置DMP姿態(tài)信息void Read_DMP(void)初始化MPU6050內(nèi)置DMPvoid DMP_Init(void)初始化MPU6050以進入可用狀態(tài)void MPU6050_initialize(void)設(shè)
26、置MPU6050是否為AUX IIC線的主機void MPU6050_setI2CBypassEnabled(void)檢測MPU6050是否已連接uint8_t MPU6050_testConnection(void)讀取MPU6050 WHO_AM_I 標(biāo)識uint8_t MPU6050_getDeviceID(void)設(shè)置MPU6050是否進入睡眠狀態(tài)void MPU6050_setSleepEnabled(uint8_t enabled)設(shè)置MPU6050加速度計的最大量程void MPU6050_setFullScaleAccelRange(uint8_t range)設(shè)置MPU6
27、050的時鐘源void MPU6050_setClockSource(uint8_t source)將新的ADC數(shù)據(jù)更新到FIFO數(shù)組,進行濾波處理void MPU6050_newValues(int16_t ax,int16_t ay,int16_t az,int16_t gx,int16_t gy,int16_t gz)Flash初始化:用于保存PID數(shù)據(jù)解鎖Flashvoid STMFLASH_Unlock(void)上鎖Flashvoid STMFLASH_Lock(void)得到Flash狀態(tài)u8 STMFLASH_GetStatus(void)等待Flash操作完成u8 STMFL
28、ASH_WaitDone(u16 time)擦除Flash頁u8 STMFLASH_ErasePage(u32 paddr)從Flash指定的地址寫入半字u8 STMFLASH_WriteHalfWord(u32 faddr, u16 dat)從Flash指定的地址讀出半字u16 STMFLASH_ReadHalfWord(u32 faddr)不檢查Flash寫入數(shù)據(jù)void STMFLASH_Write_NoCheck(u32 WriteAddr,u16 *pBuffer,u16 NumToWrite) 從Flash指定的地址寫入指定長度的數(shù)據(jù)void STMFLASH_Write(u32
29、WriteAddr,u16 *pBuffer,u16 NumToWrite)從Flash指定的地址讀出指定長度的數(shù)據(jù)void STMFLASH_Read(u32 ReadAddr,u16 *pBuffer,u16 NumToRead) Flash測試void Test_Write(u32 WriteAddr,u16 WriteData) Flash讀void Flash_Read(void)Flash寫void Flash_Write(void)4.2 PID算法設(shè)計PID控制公式如下。(4-2) ut=Kpet+1T10tetdt+TDdetdt實際使用中,PID算法不必使用所有控制(比例控
30、制、積分控制、微分控制),只要能滿足使用要求即可。常見的有PD控制和PI控制。在本控制系統(tǒng)中,速度控制使用了PI控制,角度控制使用了PD控制。相應(yīng)控制控制如下:速度控制輸出=車速*Kp+路程*Ki角度控制輸出=傾角*Kp+角速度*Kd其中,Kp為比例系數(shù),Kd為微分系數(shù),Ki為阻尼系數(shù)。在完成速度控制與角度控制之后,需要將獲得的數(shù)據(jù)進行疊加,并且加入藍牙方向控制,以完成小車的左右轉(zhuǎn)。最后對所得數(shù)據(jù)進行判斷與轉(zhuǎn)換,以數(shù)據(jù)的正負控制電機的轉(zhuǎn)向,以數(shù)據(jù)的數(shù)值控制占空比,調(diào)節(jié)PWM輸出來控制轉(zhuǎn)速,完成左右電機的差分控制。由于小車輪胎與地面存在靜摩擦力,因此當(dāng)占空比很小時,電機驅(qū)動電流很小,電機可以認為
31、沒有發(fā)生轉(zhuǎn)動。所有需要根據(jù)實際情況加上死區(qū)常量用來克服這種情況下的靜摩擦力。輸出控制算法程序框圖如下所示。(b)(a)int EXTI3_IRQHandler(void) if(PBin(3)=0) EXTI->PR=1<<3; /判斷是否由外部中斷 Encoder_Left=Read_Encoder(2); /獲取電機轉(zhuǎn)速 Encoder_Right=Read_Encoder(3);/獲取電機轉(zhuǎn)速 Get_Angle(Way_Angle); /獲得當(dāng)前角度 Balance_Pwm =balance(Angle_Balance,Gyro_Balance); /PID控制計算
32、Velocity_Pwm=velocity(Encoder_Left,Encoder_Right);/ Moto1=Balance_Pwm+Velocity_Pwm; /輸出pwm值 Moto2=Balance_Pwm+Velocity_Pwm; /輸出pwm值 Xianfu_Pwm(); /限制幅度 Set_Pwm(Moto1,Moto2);/控制電機 return 0; 4.3總體軟件架構(gòu)int main(void) Stm32_Clock_Init(9); JTAG_Set(JTAG_SWD_DISABLE); JTAG_Set(SWD_ENABLE); delay_init(72);
33、KEY_Init(); OLED_Init(); Flash_Init();uart_init(72,115200); IIC_Init(); MPU6050_Init(); Flash_Read();EXTI_Init(); Display_All();While(1);由于整個平衡車的處理復(fù)雜度不算特別高,所以整個軟件系統(tǒng)的設(shè)計沒有采用才做系統(tǒng)的架構(gòu)模式,而是采用了相對簡單且容易實現(xiàn)的前后臺架構(gòu)。從上到下,首先完成的是對系統(tǒng)的時鐘初始化。這一點是非常必要的,應(yīng)為單片機可以工作在多種頻率下,應(yīng)為我們有大量的數(shù)據(jù)處理計算,所以要配置到單片機的最高頻率。也就是72兆赫茲。這里我沒當(dāng)然也不會考慮到
34、功率問題。這種頻率完全有能力處理起來整個平衡車的任務(wù)。其次是關(guān)閉單片機的JTAG調(diào)試口,應(yīng)為JTAG調(diào)試口占用的管腳較多,而且好需要專門的JTAG調(diào)試器來輔助工作,而這種調(diào)試器非常的昂貴,有的達到幾千元。因此我們將調(diào)試接口配置為SWD模式,而SWD模式下的調(diào)試器只要幾十元就可以買的到,并且它所占用的管腳資源也是比JTAG要少得多。接下來我們是初始化delay函數(shù),在很多場合延時對我們來說用的很頻繁。我們事先就寫了一個精準(zhǔn)的延時函數(shù),包括納秒級,微妙級和秒級三種。這就可以滿足我們大部分的需求了。后面是對按鍵的初始化,它的作用是在調(diào)試階段調(diào)參數(shù)時,不只有一個參數(shù)要調(diào)。我們可以用按鍵的形式來選擇去改
35、變哪一個參數(shù),這樣一來我們就不必每次都改寫整個函數(shù)去調(diào)整參數(shù)了。后面是OLED的初始化,在調(diào)試階段,OLED是用來作為輔助調(diào)試手段的。他可以記錄電機轉(zhuǎn)速,PWM輸出,PID參數(shù)和平衡小車的傾斜角度。在調(diào)試完成后還可以作為輔助顯示手段。Flash_Init()是初始化單片機的內(nèi)部存儲芯片,用于保存PID的參數(shù)值。后面是串口初始化,用來打印調(diào)試信息。IIC的初始化用來配置MPU6050,以及驅(qū)動顯示屏。后面是MPU6050的初始化,用來初始化陀螺儀。 然后是讀取flash中保存的參數(shù),主要是上次保存的PID參數(shù),模式參數(shù)以及一些其他的參數(shù)。下面是中斷的初始化,這個初始化非常重要,我么把他設(shè)置到50
36、ms,當(dāng)50毫秒時間到達后,進入中斷函數(shù),獲取電機轉(zhuǎn)速,小車傾斜角度和小車方向。然后進行PID計算輸出到電機,讓電機以特定的速度運轉(zhuǎn),保持小車平衡。最后是顯示所有信息到OLED屏幕,和一個死循環(huán)。我們在設(shè)計時死循環(huán)中什么任務(wù)也沒有做,其實中里面可以添加一些其他的功能函數(shù),比如要坐上位機通訊時的功能可以放到這里面。這是就形成了所謂的前后臺系統(tǒng)了。 圖4-3控制流程 4.4調(diào)試技巧平衡車的調(diào)試還是有很多技巧的,首先我們能想到的就是最常用的串口調(diào)試,這種調(diào)試只能應(yīng)用在硬件初始化的過程。比如,陀螺儀的初始化,顯示屏的初始化等等,一旦到了PID參數(shù)整定的調(diào)試工作,這種調(diào)試方法就不奏效了。應(yīng)為我問要在實物
37、上調(diào)試,并且小車還會在調(diào)試過程中運動。用串口調(diào)試就顯得有些力不從心了。因此我們采取了另外一種調(diào)試方法。OLED顯示屏加上編碼器和單片機內(nèi)部flash結(jié)合起來調(diào)試。下面我們來具體介紹。首先我們知道平衡車上有一個編碼器,我們在頻繁該PID參數(shù)時可以轉(zhuǎn)動編碼器,然后設(shè)置對應(yīng)的PID參數(shù)顯示到顯示屏上面,順時針轉(zhuǎn)就加參數(shù)值,逆時針轉(zhuǎn)就減參數(shù)值。然后保存芯片內(nèi)部flash存儲芯片。這樣我們下次重啟平衡車時就可以直接讀取上次我們設(shè)置的PID參數(shù),而不用每次到改完參數(shù)后要重新燒寫程序到單片機了。這樣就讓我們調(diào)參數(shù)的過程變得輕松許多。5 總結(jié)與展望5.1 總結(jié)本設(shè)計系統(tǒng)的硬件系統(tǒng)以ARM公司的STM32為控制
38、核心,使用MPU6050檢測小車的車身姿態(tài),通過編碼器獲取小車當(dāng)前轉(zhuǎn)速,實現(xiàn)對車速的閉環(huán)控制。通過TB6612FNG驅(qū)動電路對兩個電機實現(xiàn)差分控制,進而單獨的控制兩個電機。通過藍牙擴展獲得上位機發(fā)送的控制信號,也可以實現(xiàn)人機交互的功能。軟件系統(tǒng)設(shè)計中,根據(jù)單片機使用手冊設(shè)置各個寄存器;根據(jù)IIC總線協(xié)議編寫通信程序,并且根據(jù)芯片說明配置MPU6050芯片。使用互補濾波融合加速度計與陀螺儀數(shù)據(jù)并實現(xiàn)角度控制。使用PID算法計算角度控制與速度控制的最終輸出量。使得小車在保持平衡的同時通過藍牙可實現(xiàn)人機交互。5.2 展望 由于時間倉促,能力又有限,該設(shè)計還有許多需要改進的地方。1. 采用更先進、速度
39、更快的控制器,如ARM,X86等。2. 使用更先進的數(shù)據(jù)融合算法,如卡爾曼濾波算法。3. 使用更先進的控制算法,如模糊控制,神經(jīng)網(wǎng)絡(luò)等。4. 調(diào)試手段有待進一步優(yōu)化。5. 可以對平衡車添加一些人機互動功能。比如,添加一個語音助手,能夠通過語音對平衡車進行控制,讓小車完成像左轉(zhuǎn)彎右轉(zhuǎn)彎自旋轉(zhuǎn)等指定的動作。還可以連接藍牙或者wifi用手機對小車進行控制。參考文獻1肖洪兵. 跟我學(xué)用單片機. 北京:北京航空航天大學(xué)出版社,2002.8 。2何立民. 單片機高級教程 第1版北京:北京航空航天大學(xué)出版社,2001。 3趙曉安. MCS-51單片機原理及應(yīng)用. 天津:天津大學(xué)出版社,2001.3。 4李廣
40、第 單片機基礎(chǔ) 第1版北京:北京航空航天大學(xué)出版社,1999。 5徐惠民.安德寧 單片微型計算機原理接口與應(yīng)用 第1版 北京:北京郵電大學(xué)出版社,1996。 6何立民從Cygnal 80C51F看8位單片機發(fā)展之路 單片機與嵌入式系統(tǒng)應(yīng)用,2002年,第5期。 7夏繼強. 單片機實驗與實踐教程. 北京:北京航空航天大學(xué)出版社, 2001。 8陳志強 胡輝. 單片機應(yīng)用系統(tǒng)設(shè)計實踐指南. 自編教材。 9肖洪兵. 單片機應(yīng)用技術(shù). 自編教材。10肖洪兵 高茂科. CAI課件 自主開發(fā)。11V.Yu.Teplov,A.V.Anisimov.ThermostattingSystem Using a S
41、ingle-Chip Microcomputer and 12Thermoelectric Modules Based on the Peltier EffectJ ,2002 。13Yeager Brent.How to troubleshoot your electronic scaleJ.Powder and Bulk Engineering.1995。 14Meehan Joanne,Muir Lindsey.SCM in Merseyside SMEs:Benefits and barriersJ.TQM Journal.2008。 附錄1.系統(tǒng)設(shè)計的電
42、路框圖2.部分源代碼#include "sys.h"u8 Way_Angle=1; /獲取角度的算法,1:四元數(shù) u8 Flag_Show=1; /停止標(biāo)志位和 顯示標(biāo)志位 默認停止 顯示打開int Encoder_Left,Encoder_Right; /左右編碼器的脈沖計數(shù)int Moto1,Moto2; /電機PWM變量 應(yīng)是Motor的 float Angle_Balance,Gyro_Balance,Gyro_Turn; /平衡傾角 平衡陀螺儀 轉(zhuǎn)向陀螺儀u32 Distance; /超聲波測距u8 delay_50,delay_flag,Bi_zhang=0,P
43、ID_Send,Flash_Send; /默認情況下float Acceleration_Z; /Z軸加速度計 float PA=100,PB=500,PC=888,PD=6813; /PID參數(shù)u16 PID_Parameter10,Flash_Parameter10; /Flash相關(guān)數(shù)組 int Balance_Pwm,Velocity_Pwm,Turn_Pwm;float kp=0,kd=0;float Kp_v=0,Ki_v=0,Kd_v=0;float my_Encoder_Integral;float my_v_kp1;float my_v_kp2;int balance_pwm
44、;u8 key1=0;char Encoder_num;float offset;int my_pwm;void ofset(void);int main(void) Stm32_Clock_Init(9); delay_init(72); JTAG_Set(JTAG_SWD_DISABLE); JTAG_Set(SWD_ENABLE); KEY_Init(); OLED_Init(); OLED_ShowString(0,0,"Key :");OLED_ShowString(66,0,"Angle:"); OLED_ShowString(0,1,&qu
45、ot;KP_b: 1");OLED_ShowString(0,2,"KD_b: 2");OLED_ShowString(0,3,"KP_v: 3");OLED_ShowString(0,4,"KI_v: 4");OLED_ShowString(0,5,"KD_v: 5");OLED_ShowString(0,7,"Pwm : ");OLED_ShowString(0,6,"Moto:"); uart_init(72,115200); uart2_init(36,96
46、00); MiniBalance_PWM_Init(7199,0); /TIM4 通道3 4 PB8 9 Encoder_Init_TIM2(); /PA0 1 Encoder_Init_TIM3(); /PA6 7 IIC_Init(); /=模擬IIC初始化 MPU6050_initialize(); /=MPU6050初始化 DMP_Init(); /=初始化DMP Flash_Read();OLED_Num_String(35,1,kp);OLED_Num_String(35,2,kd*10);OLED_Num_String(35,3,Kp_v);OLED_Num_String(35,
47、4,Ki_v*10);OLED_Num_String(35,5,Kd_v*10);#if 1 ofset();OLED_Num_String(35,1,kp);OLED_Num_String(35,2,kd*10);OLED_Num_String(35,3,Kp_v);OLED_Num_String(35,4,Ki_v*10);OLED_Num_String(35,5,Kd_v*10); #endif EXTI_Init(); /=MPU6050 5ms定時中斷初始化 while(1) #if 1 OLED_Num_String(35,6,Encoder_Left); OLED_Num_String(70,6,Encoder_Right); OLED_Num_String1(35,7,my_pwm); OLED_Num_String1(90,7,(int)my_Encoder_Integral);/積分 OLED_Num_String1(70,1,(int)my_v_kp1);/比例 OLED_Num_String1(70,2,(int)my_v_kp2);/微分 OLED_Num_String(96,0,Angle_Balance); #endifvoi
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年人教版七年級科學(xué)上冊月考試卷含答案
- 2025年人教版選修6地理下冊階段測試試卷含答案
- 2024版年度廣告制作與發(fā)布合同3篇
- 2024年珠海城市職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測驗歷年參考題庫(頻考版)含答案解析
- 二零二五年度高端酒店管理雇員勞動合同書3篇
- 高職園藝技術(shù)課程設(shè)計
- 2024年韶關(guān)市粵北人民醫(yī)院高層次衛(wèi)技人才招聘筆試歷年參考題庫頻考點附帶答案
- 2024童鞋新品研發(fā)與市場銷售合作框架協(xié)議6篇
- 英語小組課 課程設(shè)計
- 路面改造施工方案
- 人才交流中心聘用合同模板
- 騰訊云人工智能工程師認證考試題(附答案)
- 廣東省廣州市天河區(qū)2023-2024學(xué)年高一上學(xué)期期末考試數(shù)學(xué)試卷(解析版)
- 鋼構(gòu)樓板合同范例
- 2024-2025學(xué)年人教版(2024)信息技術(shù)四年級上冊 第11課 嘀嘀嗒嗒的秘密 說課稿
- 2024中考物理真題匯編:電與磁(含解析)
- 物流管理概論 課件全套 王皓 第1-10章 物流與物流管理的基礎(chǔ)知識 - 物流系統(tǒng)
- 蘇教版六年級上冊分?jǐn)?shù)四則混合運算100題帶答案
- 醫(yī)療組長競聘
- 2024年業(yè)績換取股權(quán)的協(xié)議書模板
- 顳下頜關(guān)節(jié)疾病(口腔頜面外科學(xué)課件)
評論
0/150
提交評論