




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
論文題目: 基于單片機的平衡小車的設計摘要:兩輪自平衡車在我們的生活中已經(jīng)是越來越常見,他的一個極其突出的特性就是不穩(wěn)定,與他很類似的一個模型就是倒立擺。我們必須知道倒立擺的狀態(tài),然后對他進行干擾才能使它保持穩(wěn)定狀態(tài)。本論文所研究的方案就是基于這種原理,用陀螺儀和加速度計來獲取到平衡車的當前狀態(tài),然后控制電機來作出相應的干擾,來讓小車保持平衡。整個系統(tǒng)設計完成后,小車可以實現(xiàn)自主平衡功能。并且,在人為加入適量干擾后小車也能夠自主調(diào)整并迅速恢復至穩(wěn)定狀態(tài)。系統(tǒng)還保留了大部分接口,可以進行二次開發(fā)和升級,包括手機藍牙控制、wifi控制、視覺導航、軌跡跟蹤等。關(guān)鍵詞:加速度;PID算法;陀螺儀;兩輪自平衡小車Abstract:tworoundsofself-balancingvehicleisalreadymoreandmorecommoninourlife,he'saveryprominentfeatureisunstable,andheisverysimilartoamodelofinvertedpendulum.Weneedtoknowthestatusoftheinvertedpendulum,andthentohisinterferencetokeepitstable.Mentionedinthepresentpaperresearchplanisbasedontheprincipleofusinggyroscopeandaccelerometertogettothecurrentstateofthebalanceofthecar,andthencontrolthemotortomakecorrespondinginterference,toletthecarbalance.Aftercompletionofthewholesystemdesign,thecarcanachievebalancefunctionindependently.And,inhumanafteraddingsuitableamountofinterferenceThecarcanalsoindependentadjustmentandquicklyreturntoastablestate.Systemalsohaskeptmostoftheinterface,canundertakesecondarydevelopmentandupgrading,includingmobilephonebluetooth,wifi,visualnavigation,pathtracking,etc.Keywords:Accelerometer;PIDalgorithm;Gyroscope;Balanceofthecar目 錄1緒論 11.1自平衡小車的研究意義 11.2課題研究的主要任務 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)硬件設計 63.1物理架構(gòu) 73.2元器件選型 83.2.1微處理器 23.2.2陀螺儀與加速度計 23.2.3電機驅(qū)動 33.2.4編碼器 33.2.5顯示屏 34系統(tǒng)軟件設計 164.1模塊初始化 174.2PID算法設計 184.3總體軟件架構(gòu) 274.4調(diào)試技巧 275總結(jié)與展望 375.1總結(jié) 375.2展望 37參考文獻 38附錄 38致謝 381緒論1.1研究意義近年來,科技發(fā)展,時代進步。其中各種科技產(chǎn)品也是如雨后春筍紛紛涌現(xiàn),用科技改變世界的時代也是在加速到來。但是,日益擁堵的交通狀況問題也是越來越嚴重。改變交通現(xiàn)狀已經(jīng)刻不容緩,其中兩輪平衡車是極具代表性的一個產(chǎn)品,他適應時代,應運而生。以其新穎,時尚,方便的優(yōu)勢迅速走入大家的生活。這種平衡車與其他短途代步工具的最顯著的特點是:他只有兩個輪子,都是獨立驅(qū)動工作,并且兩個輪子在一根軸上面,車的重量加上人的重量正好落在車軸上面,通過輪子前后運動來保持車生的平衡。由于是使用蓄電池供電,所以沒有污染,并且可以重復適用,壽命很高。而且電動機能量轉(zhuǎn)換運行效率較高并且只有很小的噪音。由于兩個輪子都可以前進后退,所以他可以在很狹窄的空間范圍當中也可以進退自如。對他的控制也是極其方便,只要通過身體的前后傾斜改變平衡車的傾斜角度,當陀螺儀檢測到角度的變化后,將數(shù)據(jù)傳送給單片機,單片機進行數(shù)據(jù)處理和融合,將輸出型號傳送給電機驅(qū)動芯片,進而來控制電機運轉(zhuǎn),防止人摔倒。這樣完全可以避免在傳統(tǒng)汽車上出現(xiàn)的剎車片老化剎車不靈的情況,極大地保證了駕駛?cè)藛T的安全。基于以上各種優(yōu)點可以看出兩輪自平衡車有著廣泛的應用前景,目前市面上已經(jīng)涌現(xiàn)除了大量的平衡車。因此本論文對于平衡車的研究意義非凡。1.2課題研究的主要內(nèi)容本論文著重研究的兩輪平衡車系統(tǒng)主要是由單片機進行控制。完成該設計后,小車能實現(xiàn)自我平衡,直立行走等基本功能。該系統(tǒng)采用了STM單片機作為核心的控制單元,并加上各種輔助傳感器,完成相對應的電路設計并編寫相對應程序完成平衡控制。加速度計可以獲得小車的傾斜角度,陀螺儀可以捕獲小車的角速度,兩種數(shù)據(jù)捕獲后傳送給MCU,MCU對數(shù)據(jù)進行處理,濾波然后加以融合。而編碼器可以捕獲平衡小車兩個輪子的即時速度。然后把即時速度和濾波后的數(shù)據(jù)進行閉環(huán)數(shù)據(jù)處理,得到最終的輸出量把所有的數(shù)據(jù)量進行數(shù)據(jù)疊加然后傳送給驅(qū)動芯片,進而來控制小車的行走狀態(tài)。2原理分析與關(guān)鍵技術(shù)2.1原理分析舉一個例子,在生活中我們可以嘗試讓一個根木桿立在手心當中而不倒下去,這一個看似簡單的過程,其實就包括了反饋機制里面所有的條件。我們眼睛看到木桿往一邊倒下去,我們就會嘗試讓手往相反的方向去移動,讓木桿繼續(xù)保持平衡??刂平o定控制對象執(zhí)行機構(gòu)控制算法控制給定控制對象執(zhí)行機構(gòu)控制算法傳感器大腦手掌眼睛木棒傳感器大腦手掌眼睛木棒圖圖2-1保持木棍直立的反饋控制系統(tǒng) 應用到平衡車上面也是一樣的。由于小車是兩輪共一個軸,所以小車只會向前或者向后傾斜,當小車傾斜后,陀螺儀加速度計等傳感器就會感知到小車傾斜了,并且CPU會算出小車傾斜的角度和速度。電機在得知傾斜的角度和速度后以相對應迅速向相同的方向移動,小車就可以保持平衡。這里的傳感器就相當于木桿模型中的眼睛,用來捕獲傾斜的角度和速度,而大腦控制手往那個方向動的過程就相當于CPU算出電機轉(zhuǎn)動方向與速度的過程。最后手控制木桿就相當于電機的轉(zhuǎn)動。2.2關(guān)鍵技術(shù)2.2.1系統(tǒng)建模數(shù)學建模的主要理論依據(jù)是牛頓力學原理,建立模型后整個控制流程一目了然,而且一個良好的物理模型還有助于軟件方面的設計與實現(xiàn)。如圖1.2所示,倒立擺只有在直立時才算是處于平衡的,但是當?shù)沽[向右傾斜時,它就偏離了平衡位置。而此時小車的合力與位移方向相同,他就會加速向右傾斜,然后倒下去。我們?yōu)榱俗屝≤嚥坏瓜路€(wěn)定在一個平衡位置。在下面輪子上施加一個向右的外力,使輪子快速向右移動,來保持車身的平衡。以小車作為參考系,重心受到一個額外的慣性力,與車輪加速度大小相同,方向相反。因此倒立擺所受到的回復力為F=mgsinθ-macosθ(3-1)根據(jù)控制系統(tǒng)的特性,角θ需要控制在很小的范圍內(nèi),并且假設控制車輪加速度與角θ成正比,比例系數(shù)為k1F=mgθ-mk此時,只要k1>gF=mgθ-mk式中,k1,k2均為比例系數(shù),θ為小車傾角,θ'為角速度。只要滿足k1>g,k2>0,便可以將小車維持在直立狀態(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)境的變化而變化。這些變化隨著時間的推移會產(chǎn)生很大的誤差,因此我們會采用一些濾波算法對數(shù)據(jù)進行處理,使融合后的數(shù)據(jù)最接近真實的數(shù)據(jù)。2.2.3控制算法兩個輪子的平衡車的最終目標是要在適當?shù)耐饨绺蓴_下還能實現(xiàn)自我平衡。這就需要我們選擇合適的控制算法進行控制,進而讓小車迅速恢復到平衡狀態(tài)。傳統(tǒng)的PID算法已經(jīng)問世了很多年,他已經(jīng)經(jīng)歷了幾十年的實踐檢驗,所以PID算法是本論文要著重研究的控制算法。
3系統(tǒng)硬件設計3.1系統(tǒng)架構(gòu)本設計采用stm32f103c8t6作為主要控制器。用mpu6050作為輔助姿態(tài)傳感器,mpu6050獲取平衡車的姿態(tài)將數(shù)據(jù)傳送給主控制器。主控制器得到數(shù)據(jù)后通過互補濾波或者卡爾曼濾波進行數(shù)據(jù)處理。然后經(jīng)過PID算法處理,將處理后的數(shù)據(jù)反饋給電機驅(qū)動芯片TB6612,驅(qū)動芯片得到數(shù)據(jù)后,然后控制電機,電機轉(zhuǎn)動時小車保持平衡。3.2元器件選型3.2.1微處理器STM32是由意法半導體推出的一款基于ARMCortex-M系列內(nèi)核的高性能
32位單片機。目前有STM32L0,STM32L1,STM32L4等九個產(chǎn)品線。其中“STM32”表示基于ARM核心的32位微控制器。時鐘、復位和電源管理2.0~3.6伏供電和I/O引腳上電/斷電復位(POR/PDR)、可編程電壓監(jiān)測器(PVD)4~16MHz晶體振蕩器。內(nèi)嵌帶校準的40kHz的RC振蕩器他有兩個12位的ADC通道數(shù)也可以達到16個,而且他的模數(shù)轉(zhuǎn)換的范圍也可以達到0-3.6V。7通道DMA控制器。支持的外設有定時器、ADC、SPI、I2C和USART。該控制器有多達48個快速I/O端口,所有I/O口可以映像到16個外部中斷。3.2.2陀螺儀與加速度計為了保證準確的控制小車穩(wěn)定,我們就有必要準確的測量平衡小車傾斜角度和電機轉(zhuǎn)速,其中電機轉(zhuǎn)速在下面一章節(jié)會介紹,主要是通過編碼器測量。本章節(jié)主要利用MPU6050來測量校車的傾斜角度。本控制測量系統(tǒng)采用了集成度相當高的6軸運動處理器,這樣就避免了用多個傳感器組合測量的方案,極大地減少了車身上的空間問題。而且避免了陀螺儀和加速度計在方向上安裝不能統(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è)量是有好很多種的周期,為了準確跟蹤小車運動的快慢速。所以,陀螺儀的配置范圍為有±250,±500,±1000,±2000°/秒(dps),加速度計的配置范圍有±2,±4,±8,±16g。當然MPU6050測量精度越低,他的配置范圍也就越大。MPU6050的加速度計的測量原理如下圖。圖圖3-3加速度檢測的基本原理在縱向方向上加兩個點極,形成一個電容。當外部產(chǎn)生加速度后兩個電極之間的距離會發(fā)生改變,電容也會相應的改變。電容的改變會導致電壓變化。電壓通過放大電路后再進行處理,然后被ADC轉(zhuǎn)化為數(shù)字量。一套參數(shù)的傳遞就形成了加速度與電壓數(shù)值的關(guān)系。 而陀螺儀則是克里利奧力的原理,在器件里面安裝了一個能感知震動的單元。,當物體高速旋時,原件里面的震動單元的震動頻率也會相應地改變,我們只要測出了物體的振動頻率就可以很輕松的得知物體的旋轉(zhuǎn)角速度。將MPU6050安裝在小車上時,可以測量出小車傾斜的角速度,將角速度信號進行積分便可得到角度,如下圖所示。上面得到了小車的旋轉(zhuǎn)角速度,但是需要的是小車的傾斜角度,所以必須會對角速度進行積分,得到角度。由于小車測量的是角速度。外界對他的干擾可以忽略不計。但是將角速度積分后,那些很小的干擾也會累加。從而使測量值與真實值存在較大的誤差。如下圖所示。圖圖3-5角度積分漂移所以這個過程會進行一些數(shù)據(jù)濾波處理。但是還是無法消除誤差。擬采用加速度數(shù)據(jù)與陀螺儀數(shù)據(jù)融合的方式來處理這個問題。但是由于加速度計測量很靈敏,容易摻雜一下外部的高頻率信號。但是他沒有積分,也就沒有積分誤差。但是陀螺儀就不一樣他受外部高頻噪聲的影響很小。但是他有積分誤差。因此可以使用互補濾波,將這兩種傳感器的優(yōu)勢互補。換句話說,互補濾波就是以陀螺儀測量的角度為準。然后定時用加速度及測量的角度為輔進行修正。3.2.3電機驅(qū)動芯片本控制系統(tǒng)準備用東芝生產(chǎn)的一款驅(qū)動芯TB6612FNG,他正好可以同時驅(qū)動兩個電機,非常滿足本論文設計的需求。而且它的驅(qū)動電流也是相當?shù)拇???梢赃_到1.2A,峰值可達2A、2.3A。芯片原理結(jié)構(gòu)如下圖,AO1/AO2/BO1/BO2是兩個電機的電源的供電口,AIN1/AIN2/BIN1/BIN2是控制兩個電機正反轉(zhuǎn)的管腳。而PWM1/PWM2就是接受的控制信號。單片機通過PID計算后得到PWM輸出信號。芯片就是通過這兩個管腳來接受單片機發(fā)過來的pwm信號,然后來控制電機的速度與正反轉(zhuǎn)。圖圖3-6TB6612FNG芯片功能示意圖
3.2.4編碼器編碼器是一種常用的用來檢測步進電機的元器件,他的檢測原理是當電機馬達轉(zhuǎn)動的時候會掃描到光電管器件,然后就會觸發(fā)光電管器件發(fā)送出數(shù)字脈沖信號。數(shù)字脈沖信號輸出到單片機的捕獲接口就可捕獲到脈沖信號的頻率進而得知步進電機的速度。關(guān)于電機正轉(zhuǎn)還是反轉(zhuǎn)的問題,可以通過脈沖信號的相位來判斷。如果脈沖信號相位超前半個周期就說明電機正轉(zhuǎn),相反,如果脈沖信號相位落后半個周期就說明電機反轉(zhuǎn)。圖圖3-7光電編碼器3.2.5顯示屏OLED是一種有機發(fā)光二極管,我們就是采用這種顯示屏來作為顯示的。OLED也有很多的特點,比如說,制作簡單,響應速度快,可以做到很薄,他可以自己發(fā)光,不需要背光源,對比度很高,色彩顯示鮮艷,適應的溫度范圍廣等等??傊甇LED屏是下一代顯示材料的趨勢。圖3-8OLED顯示器本論文采用的OLED顯示器為0.96寸,他的長寬比例為27mm*26mm。但是他的分辨率卻可以達到128*64。模塊的去東街口主要有兩種,串行SPI接口和IIC接口。串行接口的速率要比IIC的借口要稍微快一點,但是這種接口需要4根管腳來驅(qū)動,相比IIC兩根接口的驅(qū)動方式要臉肥一些資源。在兩種接口都可以滿足需求的情況下我們選擇IIC接口。只要用2根線就可以驅(qū)動。
4系統(tǒng)軟件設計4.1模塊初始化IIC初始化:IIC初始化用于配置MPU6050,由于MPU6050的配置采用的是IIC接口,所以這個初始化是必要的,另外IIC還用于驅(qū)動OLED顯示屏。下面列出重要的函數(shù)名(具體函數(shù)體見附錄)初始化IIC對應的引腳voidIIC_Init(void){}產(chǎn)生IIC起始信號intIIC_Start(void){}產(chǎn)生IIC停止信號voidIIC_Stop(void){}等待應答信號intIIC_Wait_Ack(void){}產(chǎn)生ACK應答voidIIC_Ack(void){}產(chǎn)生NACK應答voidIIC_NAck(void){}IIC寫一個字節(jié)voidIIC_Send_Byte(u8txd){}IIC讀取一個字節(jié)u8IIC_Read_Byte(unsignedcharack){}IIC寫字符串inti2cWrite(uint8_taddr,uint8_treg,uint8_tlen,uint8_t*data){}IIC讀字符串inti2cRead(uint8_taddr,uint8_treg,uint8_tlen,uint8_t*buf){}串口初始化:串口初始化用于打印調(diào)試信息,方便我們調(diào)試程序。初始化串口引腳,串口時鐘和波特率voiduart_init(u32pclk2,u32bound){}配置串口中斷函數(shù)voidUSART2_IRQHandler(void){}中斷定時器初始化:用于產(chǎn)生50ms的中斷周期,來進行一次PID算法運算。初始化中斷定時器voidEXTI_Init(){}PWM初始化:用于輸出PWM值,電機驅(qū)動通過改值的大小來直接控制電機的速度與方向。初始化PWM分頻器和自動重裝值voidMiniBalance_PWM_Init(u16arr,u16psc){}配置電機輸出引腳voidMiniBalance_Motor_Init(void){}設置PWM值,改變電機速度voidSet_Pwm(intmoto1,intmoto2){}設置電機方向intmyabs(inta){}編碼器初始化:用于測量電機的實時轉(zhuǎn)速初始化左右編碼器voidEncoder_Init_TIM2(void){}voidEncoder_Init_TIM3(void){}獲取電機的速度intRead_Encoder(u8TIMX){}MPU6050初始化:初始化MPU6050,測量小車的實時狀態(tài)和傾斜角度讀取MPU6050內(nèi)置溫度傳感器數(shù)據(jù)intRead_Temperature(void){}讀取MPU6050內(nèi)置DMP姿態(tài)信息voidRead_DMP(void){}初始化MPU6050內(nèi)置DMPvoidDMP_Init(void){}初始化MPU6050以進入可用狀態(tài)voidMPU6050_initialize(void){}設置MPU6050是否為AUXIIC線的主機voidMPU6050_setI2CBypassEnabled(void){}檢測MPU6050是否已連接uint8_tMPU6050_testConnection(void){}讀取MPU6050WHO_AM_I標識uint8_tMPU6050_getDeviceID(void){}設置MPU6050是否進入睡眠狀態(tài)voidMPU6050_setSleepEnabled(uint8_tenabled){}設置MPU6050加速度計的最大量程voidMPU6050_setFullScaleAccelRange(uint8_trange){}設置MPU6050的時鐘源voidMPU6050_setClockSource(uint8_tsource){}將新的ADC數(shù)據(jù)更新到FIFO數(shù)組,進行濾波處理voidMPU6050_newValues(int16_tax,int16_tay,int16_taz,int16_tgx,int16_tgy,int16_tgz){}Flash初始化:用于保存PID數(shù)據(jù)解鎖FlashvoidSTMFLASH_Unlock(void){}上鎖FlashvoidSTMFLASH_Lock(void){}得到Flash狀態(tài)u8STMFLASH_GetStatus(void){}等待Flash操作完成u8STMFLASH_WaitDone(u16time){}擦除Flash頁u8STMFLASH_ErasePage(u32paddr){}從Flash指定的地址寫入半字u8STMFLASH_WriteHalfWord(u32faddr,u16dat){}從Flash指定的地址讀出半字u16STMFLASH_ReadHalfWord(u32faddr){}不檢查Flash寫入數(shù)據(jù)voidSTMFLASH_Write_NoCheck(u32WriteAddr,u16*pBuffer,u16NumToWrite){}從Flash指定的地址寫入指定長度的數(shù)據(jù)voidSTMFLASH_Write(u32WriteAddr,u16*pBuffer,u16NumToWrite){}從Flash指定的地址讀出指定長度的數(shù)據(jù)voidSTMFLASH_Read(u32ReadAddr,u16*pBuffer,u16NumToRead){}Flash測試voidTest_Write(u32WriteAddr,u16WriteData){}Flash讀voidFlash_Read(void){}Flash寫voidFlash_Write(void){}4.2PID算法設計PID控制公式如下。(4-2)(4-2)實際使用中,PID算法不必使用所有控制(比例控制、積分控制、微分控制),只要能滿足使用要求即可。常見的有PD控制和PI控制。在本控制系統(tǒng)中,速度控制使用了PI控制,角度控制使用了PD控制。相應控制控制如下:速度控制輸出=車速*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)速,完成左右電機的差分控制。由于小車輪胎與地面存在靜摩擦力,因此當占空比很小時,電機驅(qū)動電流很小,電機可以認為沒有發(fā)生轉(zhuǎn)動。所有需要根據(jù)實際情況加上死區(qū)常量用來克服這種情況下的靜摩擦力。輸出控制算法程序框圖如下所示。(b(b)(a)intEXTI3_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);//獲得當前角度 Balance_Pwm=balance(Angle_Balance,Gyro_Balance);//PID控制計算 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);//控制電機return0; }}4.3總體軟件架構(gòu)intmain(void){ Stm32_Clock_Init(9); JTAG_Set(JTAG_SWD_DISABLE); JTAG_Set(SWD_ENABLE);delay_init(72);KEY_Init();OLED_Init();Flash_Init();uart_init(72,115200); IIC_Init(); MPU6050_Init(); Flash_Read(); EXTI_Init();Display_All();While(1);}由于整個平衡車的處理復雜度不算特別高,所以整個軟件系統(tǒng)的設計沒有采用才做系統(tǒng)的架構(gòu)模式,而是采用了相對簡單且容易實現(xiàn)的前后臺架構(gòu)。從上到下,首先完成的是對系統(tǒng)的時鐘初始化。這一點是非常必要的,應為單片機可以工作在多種頻率下,應為我們有大量的數(shù)據(jù)處理計算,所以要配置到單片機的最高頻率。也就是72兆赫茲。這里我沒當然也不會考慮到功率問題。這種頻率完全有能力處理起來整個平衡車的任務。其次是關(guān)閉單片機的JTAG調(diào)試口,應為JTAG調(diào)試口占用的管腳較多,而且好需要專門的JTAG調(diào)試器來輔助工作,而這種調(diào)試器非常的昂貴,有的達到幾千元。因此我們將調(diào)試接口配置為SWD模式,而SWD模式下的調(diào)試器只要幾十元就可以買的到,并且它所占用的管腳資源也是比JTAG要少得多。接下來我們是初始化delay函數(shù),在很多場合延時對我們來說用的很頻繁。我們事先就寫了一個精準的延時函數(shù),包括納秒級,微妙級和秒級三種。這就可以滿足我們大部分的需求了。后面是對按鍵的初始化,它的作用是在調(diào)試階段調(diào)參數(shù)時,不只有一個參數(shù)要調(diào)。我們可以用按鍵的形式來選擇去改變哪一個參數(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ù)。下面是中斷的初始化,這個初始化非常重要,我么把他設置到50ms,當50毫秒時間到達后,進入中斷函數(shù),獲取電機轉(zhuǎn)速,小車傾斜角度和小車方向。然后進行PID計算輸出到電機,讓電機以特定的速度運轉(zhuǎn),保持小車平衡。最后是顯示所有信息到OLED屏幕,和一個死循環(huán)。我們在設計時死循環(huán)中什么任務也沒有做,其實中里面可以添加一些其他的功能函數(shù),比如要坐上位機通訊時的功能可以放到這里面。這是就形成了所謂的前后臺系統(tǒng)了。圖4-3控制流程
4.4調(diào)試技巧平衡車的調(diào)試還是有很多技巧的,首先我們能想到的就是最常用的串口調(diào)試,這種調(diào)試只能應用在硬件初始化的過程。比如,陀螺儀的初始化,顯示屏的初始化等等,一旦到了PID參數(shù)整定的調(diào)試工作,這種調(diào)試方法就不奏效了。應為我問要在實物上調(diào)試,并且小車還會在調(diào)試過程中運動。用串口調(diào)試就顯得有些力不從心了。因此我們采取了另外一種調(diào)試方法。OLED顯示屏加上編碼器和單片機內(nèi)部flash結(jié)合起來調(diào)試。下面我們來具體介紹。首先我們知道平衡車上有一個編碼器,我們在頻繁該PID參數(shù)時可以轉(zhuǎn)動編碼器,然后設置對應的PID參數(shù)顯示到顯示屏上面,順時針轉(zhuǎn)就加參數(shù)值,逆時針轉(zhuǎn)就減參數(shù)值。然后保存芯片內(nèi)部flash存儲芯片。這樣我們下次重啟平衡車時就可以直接讀取上次我們設置的PID參數(shù),而不用每次到改完參數(shù)后要重新燒寫程序到單片機了。這樣就讓我們調(diào)參數(shù)的過程變得輕松許多。
5總結(jié)與展望5.1總結(jié)本設計系統(tǒng)的硬件系統(tǒng)以ARM公司的STM32為控制核心,使用MPU6050檢測小車的車身姿態(tài),通過編碼器獲取小車當前轉(zhuǎn)速,實現(xiàn)對車速的閉環(huán)控制。通過TB6612FNG驅(qū)動電路對兩個電機實現(xiàn)差分控制,進而單獨的控制兩個電機。通過藍牙擴展獲得上位機發(fā)送的控制信號,也可以實現(xiàn)人機交互的功能。軟件系統(tǒng)設計中,根據(jù)單片機使用手冊設置各個寄存器;根據(jù)IIC總線協(xié)議編寫通信程序,并且根據(jù)芯片說明配置MPU6050芯片。使用互補濾波融合加速度計與陀螺儀數(shù)據(jù)并實現(xiàn)角度控制。使用PID算法計算角度控制與速度控制的最終輸出量。使得小車在保持平衡的同時通過藍牙可實現(xiàn)人機交互。5.2展望由于時間倉促,能力又有限,該設計還有許多需要改進的地方。采用更先進、速度更快的控制器,如ARM,X86等。使用更先進的數(shù)據(jù)融合算法,如卡爾曼濾波算法。使用更先進的控制算法,如模糊控制,神經(jīng)網(wǎng)絡等。調(diào)試手段有待進一步優(yōu)化。可以對平衡車添加一些人機互動功能。比如,添加一個語音助手,能夠通過語音對平衡車進行控制,讓小車完成像左轉(zhuǎn)彎右轉(zhuǎn)彎自旋轉(zhuǎn)等指定的動作。還可以連接藍牙或者wifi用手機對小車進行控制。
參考文獻[1]肖洪兵.跟我學用單片機.北京:北京航空航天大學出版社,2002.8。
[2]何立民.單片機高級教程.第1版.北京:北京航空航天大學出版社,2001。
[3]趙曉安.MCS-51單片機原理及應用.天津:天津大學出版社,2001.3。
[4]李廣第.單片機基礎.第1版.北京:北京航空航天大學出版社,1999。
[5]徐惠民.安德寧.單片微型計算機原理接口與應用.第1版.北京:北京郵電大學出版社,1996。
[6]何立民.從Cygnal80C51F看8位單片機發(fā)展之路.單片機與嵌入式系統(tǒng)應用,2002年,第5期。
[7]夏繼強.單片機實驗與實踐教程.北京:北京航空航天大學出版社,2001。
[8]陳志強胡輝.單片機應用系統(tǒng)設計實踐指南.自編教材。
[9]肖洪兵.單片機應用技術(shù).自編教材。
[10]肖洪兵高茂科.CAI課件自主開發(fā)。[11]V.Yu.Teplov,A.V.Anisimov.ThermostattingSystemUsingaSingle-ChipMicrocomputerand[12]ThermoelectricModulesBasedonthePeltierEffect[J],2002
。
[13]YeagerBrent.Howtotroubleshootyourelectronicscale[J]..PowderandBulkEngineering.1995。
[14]MeehanJoanne,MuirLindsey.SCMinMerseysideSMEs:Benefitsandbarriers[J]..TQMJournal.2008。
附錄1.系統(tǒng)設計的電路框圖2.部分源代碼#include"sys.h"u8Way_Angle=1;//獲取角度的算法,1:四元數(shù)u8Flag_Show=1;//停止標志位和顯示標志位默認停止顯示打開intEncoder_Left,Encoder_Right;//左右編碼器的脈沖計數(shù)intMoto1,Moto2;//電機PWM變量應是Motor的floatAngle_Balance,Gyro_Balance,Gyro_Turn;//平衡傾角平衡陀螺儀轉(zhuǎn)向陀螺儀u32Distance;//超聲波測距u8delay_50,delay_flag,Bi_zhang=0,PID_Send,Flash_Send;//默認情況下floatAcceleration_Z;//Z軸加速度計floatPA=100,PB=500,PC=888,PD=6813;//PID參數(shù)u16PID_Parameter[10],Flash_Parameter[10];//Flash相關(guān)數(shù)組intBalance_Pwm,Velocity_Pwm,Turn_Pwm;floatkp=0,kd=0;floatKp_v=0,Ki_v=0,Kd_v=0; floatmy_Encoder_Integral;floatmy_v_kp1;floatmy_v_kp2;intbalance_pwm;u8key1=0;charEncoder_num;floatoffset;intmy_pwm;voidofset(void);intmain(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,"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,9600); MiniBalance_PWM_Init(7199,0); //TIM4通道34PB89 Encoder_Init_TIM2(); //PA01 Encoder_Init_TIM3(); //PA67 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,4,Ki_v*10); OLED_Num_String(35,5,Kd_v*10); #if1ofset(); 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();//=====MPU60505ms定時中斷初始化while(1){#if1 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);//比例
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國無氨高速曬圖機市場調(diào)查研究報告
- 2025年中國新工拉馬市場調(diào)查研究報告
- 2025年中國數(shù)字絕緣高阻測試儀數(shù)據(jù)監(jiān)測報告
- 2025-2030年中國三氧化鉬行業(yè)市場現(xiàn)狀及投資發(fā)展前景預測研究報告
- 肇慶市實驗中學高中歷史三:第課文藝復興巨匠的人文風采教案
- 2025至2031年中國網(wǎng)絡光纖行業(yè)投資前景及策略咨詢研究報告
- 新疆維吾爾自治區(qū)沙灣一中2025年高三5月第二次月考試題(數(shù)學試題理)含解析
- 新疆烏魯木齊市第四中學2025屆初三第二學期物理試題4月月考試卷含解析
- 新鄉(xiāng)學院《皮膚性病學》2023-2024學年第二學期期末試卷
- 興安市重點中學2025年初三年級第二學期第二次月考含解析
- 國開大學2024秋《國家開放大學學習指南》在線形考(任務一至五)試題及答案
- 高壓設施維修合同范例
- AI新時代算力需求高增長-算力網(wǎng)絡建設有望奔向太空
- 2024年北京大學強基計劃物理試題(附答案)
- 2024企業(yè)咨詢服務與戰(zhàn)略規(guī)劃合同
- DB32T-無錫水蜜桃標準
- 大型活動策劃與管理第九章 大型活動知識產(chǎn)權(quán)保護
- 2024年新課標培訓2022年小學英語新課標學習培訓課件
- 精神科患者便秘護理
- 煤礦反三違認定培訓課件
- 超高清視頻技術(shù)
評論
0/150
提交評論