單片機課程設(shè)計報告 基于STM32陀螺儀姿態(tài)讀取的平衡車_第1頁
單片機課程設(shè)計報告 基于STM32陀螺儀姿態(tài)讀取的平衡車_第2頁
單片機課程設(shè)計報告 基于STM32陀螺儀姿態(tài)讀取的平衡車_第3頁
單片機課程設(shè)計報告 基于STM32陀螺儀姿態(tài)讀取的平衡車_第4頁
單片機課程設(shè)計報告 基于STM32陀螺儀姿態(tài)讀取的平衡車_第5頁
已閱讀5頁,還剩21頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

《單片機原理與接口技術(shù)》課程設(shè)計(報告)基于STM32陀螺儀姿態(tài)讀取的平衡車摘要雙輪平衡車是一種利用倒立擺原理的高度不穩(wěn)定兩輪機械裝置,其力學(xué)特性具有多變量,非線性和不穩(wěn)定等特點。本文使用STM32F103C8T6作為MCU,利用MPU6050六軸加速度陀螺儀和帶霍爾編碼器的MG315減速電機搭建平衡小車。通過整合小車的加速度、傾角進(jìn)而速度信息,應(yīng)用串級PID算法實現(xiàn)對小車的直立行走以及差速轉(zhuǎn)向。此外,還使用HC-06藍(lán)牙模塊實現(xiàn)對小車的無線控制,利用4路光電模塊完成尋跡功能,經(jīng)過試驗本系統(tǒng)具有較強的適應(yīng)性和穩(wěn)定性。關(guān)鍵詞:STM32F103C8T6;雙輪平衡車;MPU6050;串級PID;單片機原理與接口技術(shù)課程設(shè)計(報告)目錄TOC\o"1-3"\h\u24495第1章概敘 概敘雙輪平衡車的發(fā)展背景雙輪平衡車是一種應(yīng)用廣泛的動力學(xué)系統(tǒng),具有多變量,非線性和不穩(wěn)定等特點。在研究控制論和應(yīng)用方面都有巨大的意義,近年來它的發(fā)展也受到了人們的廣泛關(guān)注。雙輪直立平衡車可以簡化為一階倒立擺模型進(jìn)行分析,設(shè)計的目標(biāo)是保證小車能夠在啟動后快速到達(dá)平衡位置,并且能夠在外界施加隨機擾動后依舊沒有振蕩和過大的角度偏移。即當(dāng)小車達(dá)到期望的狀態(tài)后,能夠通過控制系統(tǒng)實現(xiàn)動態(tài)穩(wěn)定。雙輪平衡車的發(fā)展意義我覺得前景應(yīng)該還是不錯的,生活是向著智能化,便捷化的方向發(fā)展,自平衡車符合這個趨勢,順應(yīng)了時代的潮流,有著良好的發(fā)展前景。總體方案設(shè)計概述直立小車使用MPU6050內(nèi)部DMP算法讀取小車當(dāng)前在三個方向上的傾角和加速度作為輸入量,此外利用霍爾傳感器得到車輪轉(zhuǎn)速作為反饋信息。小車左右兩個輪子的轉(zhuǎn)速和轉(zhuǎn)向作為控制量,實現(xiàn)前后運動和差速轉(zhuǎn)向。整個控制過程通過串級PID來實現(xiàn),利用TB6612芯片調(diào)節(jié)PWM輸出的占空比以改變電機轉(zhuǎn)速。最后通過控制參數(shù)的調(diào)整和優(yōu)化,實現(xiàn)小車的穩(wěn)定運行。硬件設(shè)計硬件框架硬件方面主要由STM32F103C8T6最小系統(tǒng),TB6612電機驅(qū)動,電源管理模塊,HC-06藍(lán)牙,OLED顯示屏,控制按鍵和編碼電機組成。通過單片機輸出的PWM控制左右電機的轉(zhuǎn)速,完成前后作用運動。利用尋跡模塊檢測地面黑線達(dá)到尋路功能,硬件框架如下圖:圖1.硬件框架圖硬件方案論述平衡車結(jié)構(gòu)論證與選擇小車需要搭乘多個模塊,因此需要足夠的空間。這里我們選擇雙層結(jié)構(gòu),層與層之間用銅柱和螺絲固定。模塊和車體之間用捆扎帶固定,杜邦線使用熱熔膠固定。車體總的來說較為穩(wěn)定,在旋轉(zhuǎn)和高速運動時車上每個結(jié)構(gòu)都能夠保持相對靜止。小車實物圖如下:圖2小車正視圖圖3小車側(cè)視圖A.框架材料選擇平衡小車的重心要盡量低,且盡量處于車體的平面上的幾何中心。這樣小車加速度和傾角將更趨于線性,也將更便于控制和整定參數(shù)。因此我們選擇鋁制板和37電機支架這樣較重的材料做車的底層,而頂層選擇用亞克力。在保持結(jié)構(gòu)有足夠的剛度的同時,將重心盡量拉低。B.車體大小選擇平衡小車的控制要點類似于四旋翼飛行器,兩者的都是體積越大越容易控制,在受到隨機擾動的時候也越容易保持穩(wěn)定。但不同的是小車是需要嚴(yán)格控制一個方向(俯仰角)的角度,而四旋翼飛行器是要保持兩個方向(俯仰角和翻滾角)的角度。也就是說垂直于小車運動方向的距離,即適當(dāng)增大輪距有助于小車的平衡。陀螺儀論證與選擇方案一:選用雙軸傾角傳感器LE-60-OEMLE-60-OEM,可以測量x,y方向上的重力加速度變換,以轉(zhuǎn)換成傾角。具有成本低,體積小,重量輕等優(yōu)點。但是操作復(fù)雜,軟件處理難度大。此外,雖然小車的航向角Yaw不太重要,但是失去轉(zhuǎn)向環(huán)對小車的穩(wěn)定性依舊有一定影響。方案二:MPU-6050是全球首個整合性6軸運動處理組件,具有體積小、重量輕和響應(yīng)速度快等優(yōu)點??梢詼y量整個空間的加速度,全面反映運動物體的空間位置。芯片內(nèi)部還有溫度傳感器能夠擬補溫度造成的誤差,使用I2C即可完成與MCU的通信。此外利用芯片內(nèi)置的DMP功能能夠很便捷地獲取姿態(tài)信息,避免了復(fù)雜的算法操作和外圍電路。DMP(DigitalMotionProcessor)是MPU6050內(nèi)部的運動引擎,可以通過它直接輸出四元數(shù),可以減輕外圍微處理器的工作負(fù)擔(dān)且避免了繁瑣的濾波和數(shù)據(jù)融合,使用方便。方案三:MPU-6050加上外接3軸磁力計可以實現(xiàn)9軸運動處理。相比于單獨的MPU-6050傳感器,這種組合可以擬補測得的航向角因為磁場和硬件問題造成的積分累積偏差,但是也大大增加了硬件的成本。由于較小的航向角誤差對于小車的整體性能并不會有較大的影響,我們也不需要小車在復(fù)雜的磁場環(huán)境下長時間工作,這里我們直接選擇方案二??刂破鞯恼撟C與選擇方案一:STM32F103是一種處理能力強、運算速度快、超低功耗、片內(nèi)資源豐富,具有方便高效的開發(fā)環(huán)境。通過I2C通信可以輕松讀取MPU-6050中DMP輸出的四元素,實現(xiàn)簡單易于新手使用。缺點是今年由于美國芯片“禁運”導(dǎo)致國內(nèi)芯片大漲,尤其是很多常用中低端芯片甚至漲價兩三倍,使用成本較高。方案二:CH32F103是南京沁恒公司推出的對標(biāo)STM32F103的芯片,其同樣基于Cortex-M3架構(gòu),在絕大多數(shù)結(jié)構(gòu)上和STM32F103一致。在軟件上也同樣兼容STM32F103程序,甚至不用做任何改動直接燒錄就可以正常運行。成本低,在一般使用情況下,可以完美替代STM32F103。最初我們選擇并具體實施了方案二,但在使用過程中我們先后遇到了兩大問題。首先是MPU-6050的DMP讀取總是只能讀取到初始化之后第一次的值,經(jīng)過多方查找最后發(fā)現(xiàn)是硬件的FIFO溢出。當(dāng)傳感器在工作時,MPU6050對陀螺儀和加速度計按照一定的采樣速率進(jìn)行采樣,并將采樣得到的陀螺儀和加速度計數(shù)據(jù)通過DMP處理后得到姿態(tài)角然后存入FIFO中。如果FIFO當(dāng)中的數(shù)據(jù)沒有得到及時處理便會溢出,最終導(dǎo)致讀取失敗。遇到這種情況我們可以在每次讀取輸出時重置FIFO,這樣的話即使處理速度達(dá)不到FIFO的溢出速度也能正常讀取信息。解決了第一個問題后本以為萬事大吉,沒想到第二個問題卻接踵而來。每次讀取時重置FIFO固然雖然可以保證數(shù)據(jù)的正常獲取,但是整個系統(tǒng)運行的速度也就下降了。雖然也能保證每秒鐘讀取1~2次數(shù)據(jù),但是造成的延時完全不滿足平很車這個高度不穩(wěn)定系統(tǒng)動態(tài)平衡的需求。由于網(wǎng)上關(guān)于CH32使用MPU6050的資料幾乎為零,再加上自身經(jīng)驗的不足最終選擇放棄。之后我們開始嘗試使用STM32F103,發(fā)現(xiàn)并不存在FIFO溢出的現(xiàn)象。說明STM32的運行速度可以滿足MPU6050的正常讀取,但是依舊有一定的延時,不能滿足動態(tài)平衡的需求,針對這個問題的解決方案我將在之后的軟件系統(tǒng)部分再詳細(xì)。為了維持MP6050的高速讀取,我們最終選擇方案二。電機驅(qū)動模塊論證與選擇方案一:L298N直流電機驅(qū)動模塊是一種接受高電壓的電機驅(qū)動器,被廣泛應(yīng)用到直流電機和步進(jìn)電機的驅(qū)動。通過主控芯片的I/O輸入對其控制電平進(jìn)行設(shè)定,就可為電機進(jìn)行正轉(zhuǎn)反轉(zhuǎn)驅(qū)動??傮w來說其操作簡單、穩(wěn)定性好,可以滿足直流電機的大電流驅(qū)動條件。方案二:TB6612N是一款功能基本等同于L298N的電機驅(qū)動芯片,相對于L298N它有體積小,結(jié)構(gòu)簡單的特點。此外它的PWM響應(yīng)速度、效率都優(yōu)于L298N,發(fā)熱也更少。綜合考慮,我們選擇能夠快速相應(yīng)且節(jié)省空間的TB6612芯片作為電機驅(qū)動,即方案二。無線模塊論證與選擇方案一:HX1838B紅外接收模塊能夠滿足短距離內(nèi)的遙控需求,且價格低廉,結(jié)構(gòu)簡單,只需要簡單的解碼就可以接收數(shù)據(jù)。但是使用它需要占用一個中斷,影響程序的運行效率。方案二:HC-06是一種廣泛應(yīng)用于各種場合,且支持藍(lán)牙4.0驅(qū)動的模塊。在最新的安卓、IOS、Windows操作系統(tǒng)以及微信小程序中都能自由使用,具有很強的兼容性。此外,使用它可以直接通過USART串口和上位機通信,方法簡單技術(shù)成熟。實際測試中我們發(fā)現(xiàn)紅外接收模塊正常接收數(shù)據(jù)必須保證無遮擋,且正常通信距離不超過2m。這給我們的調(diào)試帶來了很多不便,因此我們最終選擇方案二。電源和穩(wěn)壓模塊的論證與選擇方案一:12V18650鋰電池+12V-5/3.3V電源模塊可以滿足電機12V驅(qū)動供電,以及單片機和其他模塊的正常供電。方案二:12V聚合物電池+12V-5/3.3V電源模塊功能與方案一相同,最大的區(qū)別在于聚合物電池的體積小。對于需要重心高度集中的平衡小車而言選擇小體積是必要的,此外聚合物鋰電池放電效率也更高。所以我們選擇方案二。電機種類的論證與選擇方案一:步進(jìn)電機是將電脈沖信號轉(zhuǎn)變?yōu)榻俏灰苹蚓€位移的開環(huán)控制元步進(jìn)電機件,在非超載的情況下,電機的轉(zhuǎn)速、停止的位置只取決于脈沖信號的頻率和脈沖數(shù),電機的位置可以被精準(zhǔn)控制。但是對于平衡小車這個極度不平衡的系統(tǒng),受到的干擾很大,很難完成精準(zhǔn)控制。方案二:減速電機是在上普通電機加上了減速箱,這樣便降低了轉(zhuǎn)速,增加了扭力。滿足了小車大載重和高速反應(yīng)的需求,但是速度控制需要用PWM波調(diào)節(jié),精確度不是很高。綜合考慮,我們選擇方案二。小車的主要目的是能夠平衡,對速度控制要求不高。軟件設(shè)計軟件整體設(shè)計軟件方面主要是通過MPU6050讀取的三軸角速度和傾角信息作為基本的控制信息,再加上霍爾編碼器輸出的左右輪轉(zhuǎn)速作為反饋信息實現(xiàn)。算法方面使用串級PID算法,包括PD直立環(huán)、PI速度環(huán)以及PD轉(zhuǎn)向環(huán)三個方面綜合計算實現(xiàn)小車的穩(wěn)定運行,軟件框架如圖所示:圖4.算法框架圖軟件系統(tǒng)功能論述MPU6050數(shù)據(jù)讀取MPU6050的數(shù)據(jù)讀取一般有三種方式,分別是DMP、互補濾波和卡爾曼濾波?;パa濾波和卡爾曼濾波能夠一定程度解決航向角偏移的問題,而且對于隨機干擾也有更優(yōu)秀的表現(xiàn),但是實現(xiàn)較為復(fù)雜的算法。從自身實力考慮,我們選擇使用MPU6050內(nèi)置的DMP運動芯片自動解算模塊,只需要通過簡單讀取寄存器操作便可以獲得小車的姿態(tài)信息。最初我們選擇將讀取DMP數(shù)據(jù)的函數(shù)和PID算法都放到main中執(zhí)行,但無論我們怎樣調(diào)整參數(shù),小車只能維持短暫的平衡,且會在平衡之后進(jìn)行高頻振動。在多方查找資料后我們發(fā)現(xiàn),PID算法需要保持良好的周期性。特別是在進(jìn)行PD運算時,短暫的時差就會導(dǎo)致巨大的誤差。而MCU的每個運行周期受到運算量的影響,所以PD算法也會有隨機誤差產(chǎn)生。所以我們選擇將DMP讀取和PID算法同時放到外部中斷當(dāng)中,用MPU6050自帶的中斷引腳INT發(fā)出的信號作為定時信息。這樣就能維持高度的周期性,且PID和DMP也會高度同步。這樣原本的抖動現(xiàn)象就消失了,經(jīng)過簡單的參數(shù)整定就能保持穩(wěn)定。PID算法我們選擇簡單的串級PID算法,所謂串級PID類似于串聯(lián),它將PD直立環(huán)(balance)、PI速度環(huán)(velocity)和PD轉(zhuǎn)向環(huán)(turn)結(jié)果分別計算最后相加。得到輸出左右輪的PWMA和PWMB輸出。其極性代表轉(zhuǎn)向。三個環(huán)量“你追我趕”,“相互制約”才能保證一個動態(tài)穩(wěn)定的系統(tǒng),具體計算公式如下:其中直立環(huán)使用比例+微分變量(PD)進(jìn)行控制,比例系數(shù)計算小車傾角與平衡位置的差(Bias),而微分系數(shù)計算小車俯仰角的加速度(gyroy)。小車的直立情況與積分量無關(guān),主要與其位置和加速度有關(guān),具體計算公式如下:速度環(huán)使用優(yōu)化后的限幅比例+積分變量(PI)進(jìn)行控制,比例系數(shù)計算小車左右輪速度之和和零之間差值(Encoder_Least),積分系數(shù)計算小車速度差累加和(Encoder_Integral)。由于速度控制與小車的加速度幾乎無關(guān),所以只是用PI控制,具體公式如下:轉(zhuǎn)向環(huán)一般可以單獨使用P控制,直接差速即可。但是在實驗過程中,地面過于光滑調(diào)整參數(shù)后的整體效果極不理想,最后我們選擇用限幅的PD控制。通過輪胎的反饋速度和航向角Yaw來給定差速。比例系數(shù)計算控制理想差速度(設(shè)置為0,小車?yán)硐霠顟B(tài)是處于靜止平衡狀態(tài))和實際差速度的差(Turn_Target),微分系數(shù)計算z軸陀螺儀轉(zhuǎn)向角(yaw),具體計算公式如下:將以上三者融合在一起,我們可以得到以下框圖用以表示本文中所用到PID算法流程:圖5.PID算法框圖電機測速電機測速使用雙輸出的正交霍爾編碼器輸出,這種旋轉(zhuǎn)編碼器不僅可以測量速度還可以測量旋轉(zhuǎn)方向,編碼器的兩組A/B輸出相位差90度的300個雙相脈沖。想要使用脈沖信息測量速度,首先使用定時器定時50ms。編碼器轉(zhuǎn)一圈會發(fā)送脈沖,一個脈沖可以產(chǎn)生一個中斷,在中斷函數(shù)里令一個變量自加,每產(chǎn)生一個脈沖總脈沖數(shù)就加一。之后用脈沖數(shù)/300就可得到在這50ms內(nèi)電機轉(zhuǎn)動得圈數(shù),乘以20就是每秒鐘轉(zhuǎn)的圈數(shù)。尋跡功能通過GPIO輸入判斷地面線的位置,使用IF語句處于不同位置的情況給予不同的轉(zhuǎn)向力度。實現(xiàn)這個功能和原理比較簡單,但是參數(shù)整定過程較為麻煩。算法及程序流程圖除了以上算法之外,整個程序的運行還有一些小的優(yōu)化,用語言表達(dá)過于繁瑣,我將在下面的流程圖中表示出來:圖6.程序運行流程圖系統(tǒng)調(diào)試平衡小車的具體參數(shù)受到車體結(jié)構(gòu)和地面傾斜角度的影響,參數(shù)整定是一個極為枯燥耗時的工作。參數(shù)整定沒有好的方法,只能通過不斷嘗試,用“夾逼準(zhǔn)則”才能找到最好的值。換言之,好的參數(shù)就是大量時間堆積出來的結(jié)果,而我們的課設(shè)意在學(xué)習(xí)使用PID,對于參數(shù)的調(diào)節(jié)不過分追求。但僅僅調(diào)出一個勉強能用的參數(shù)也耗費了我們大半個月的時間,這里我們簡單敘述一下參數(shù)調(diào)整的過程。對于串級PID我們一般先調(diào)節(jié)直立環(huán),再調(diào)節(jié)速度環(huán),在調(diào)節(jié)完這兩個環(huán)節(jié)之后小車就能很好地走直線了。最后我們調(diào)節(jié)轉(zhuǎn)向環(huán),用于調(diào)節(jié)轉(zhuǎn)向。每個環(huán)的功能如下圖所示:.圖7PID對應(yīng)每部分功能確定小車機械中值首先把平衡小車放在地面上,繞電機軸旋轉(zhuǎn)平衡小車,尋找小車能夠保持平衡的角度并記錄,這里我們獲得的角度是0°。直立環(huán)調(diào)節(jié)直立環(huán)是保證小車能夠直立的關(guān)鍵,有了直立環(huán)小車就能在無任何擾動的情況下保持直立。也就是說,小車可以根據(jù)自身的俯仰角數(shù)據(jù)控制輪胎的轉(zhuǎn)向和轉(zhuǎn)速。A.Kp的極性和大小的確定我們將PWM設(shè)置為7200代表占空比100當(dāng)假如我們設(shè)定Kp值為720,那么平衡小車在±10°的時候就會滿轉(zhuǎn)。所以可以估計Kp值在0~720之間。首先我們確定Kp的極性,我們將小車的Kp設(shè)置為200。如果小車向那邊倒車輪就像哪邊轉(zhuǎn),這是我們不希望看到的正反饋。這時我們要修改Kp的極性,反之說明極性正確,這里我們的Kp極性確定為負(fù)值。確定Kp大小的方法是將其一直增加,直到出現(xiàn)大幅度的低頻抖動,大致過程如下:(1)設(shè)定Kp=-30,小車雖然有平衡的趨勢,但是顯然響應(yīng)太慢了。(2)設(shè)定Kp=-100,可以看到響應(yīng)有所加快,但是松手后小車依然會快速倒下。(3)設(shè)定Kp=-160,小車的響應(yīng)明顯加快,而且來回推動小車的時候,會有大幅度的低頻抖動。說明這個時候Kp值已經(jīng)足夠大了,需要增加微分控制削弱比例控制,抑制低頻抖動。B.Kd的極性和大小的確定通過觀察編碼器回傳的數(shù)據(jù),我們發(fā)現(xiàn)最大值在3000左右,再根據(jù)7200代表占空比100%,所以我們估算Kd值應(yīng)該在0~2.4之間。將Kd的值設(shè)定為0,再設(shè)定Kd=0.5。當(dāng)我們拿起小車旋轉(zhuǎn)的時候,車輪會反向轉(zhuǎn)動,并沒有能夠?qū)崿F(xiàn)跟隨效果。這說明了Kd的極性反了。接下來,我們設(shè)定Kd=-0.5,這個時候我們可以看到,當(dāng)我們旋轉(zhuǎn)小車的時候,車輪會同向以相同的速度跟隨轉(zhuǎn)動,這說明我們實現(xiàn)了角速度閉環(huán),至此,我們可以確定kd的極性是負(fù)的。打開確定好的比例控制,將Kd從小到大增加,直到小車出現(xiàn)劇烈高頻抖動。設(shè)定Kd=-0.5,這時由于比例控制所導(dǎo)致的低頻抖動已經(jīng)基本消失。設(shè)定Kd=-1,可以看到小車已經(jīng)趨于平衡,且松開手后可以保持短暫平衡。設(shè)定Kd=-2.3,小車開始出現(xiàn)高頻劇烈抖動,但是在遇到這種情況時需要立刻關(guān)閉小車,否則長時間高頻抖動會導(dǎo)致驅(qū)動被燒壞的。按照前人的調(diào)試經(jīng)驗,這時我們已經(jīng)獲得了最大的比例和微分?jǐn)?shù)值。這時,將我們這個數(shù)值乘以0.6就是我們需要的數(shù)值,最后通過微調(diào)得到:Kd=-97,Kd=-1.38。速度環(huán)調(diào)節(jié)有了速度環(huán)后我們還并不能讓小車保持直立。通過實驗可以發(fā)現(xiàn),當(dāng)加入微小的擾動之后,小車會向一個方向快速倒下。這是因為只依靠俯仰角信息,我們不能使有一定速度的小車依然保持平衡,小車會由于慣性倒下。我們要讓小車停下來,小車需要行駛更快的速度去“追”,小車運行的速度越快,去“追”的速度也就越快。Kp和Ki的極性相同,且是一種線性控制器,它們的系數(shù)大小一般有Ki=Kp/200的關(guān)系。A.確定Kp,Ki的極性關(guān)閉直立環(huán)控制后,設(shè)置Kp=100,Ki=0.5,拿起小車將其中一個輪胎向任意一個方向旋轉(zhuǎn),另一個輪胎會自動反向旋轉(zhuǎn)。這就是一般控制系統(tǒng)中的負(fù)反饋現(xiàn)象,這是我們不想看到的結(jié)果。設(shè)置Kp=-100,Ki=-0.5,拿起小車將其中一個輪胎向任意一個方向旋轉(zhuǎn),另一個輪胎會向相同的方向旋轉(zhuǎn)并逐漸加速到最大值。自此,我們可以確定Kp,Ki的極性為負(fù)值。B,確定Kp,Ki的大小由于直立環(huán)和速度環(huán)是相互制約的系統(tǒng),所以先打開已經(jīng)調(diào)整好的直立環(huán)控制。設(shè)定Kp=-100,Ki=-0.5,此時小車的速度控制比較弱,很難讓速度恒定。設(shè)定Kp=-150,Ki=-0.75,此時小車已經(jīng)可以保持直立,但是輕推小車后,小車會向一個方向“滑行”很長一段距離,說明對于速度的控制依然不夠。設(shè)定Kp=-200,Ki=-1,此時小車已經(jīng)可以保持直立,但是輕推小車后,小車會劇烈抖動,說明對速度的控制過大。通過以上步驟,我們可以判斷Kp,Ki的范圍為Kp:-150~-200,Ki:-0.75~-1,通過反復(fù)調(diào)整,最后我們確定Kp=-180,Ki=-0.9。轉(zhuǎn)向環(huán)調(diào)節(jié)我們前面說過,有了直立和轉(zhuǎn)向環(huán)控制后小車就已經(jīng)能夠有很好的平衡性能。但是想要小車走直線或者轉(zhuǎn)向還需要轉(zhuǎn)向環(huán)控制轉(zhuǎn)向角和兩輪的差速度值。這里我們使用左右輪編碼器數(shù)據(jù)之差的積分值作為比例控制量,以Z軸陀螺儀作為微分控制的輸入進(jìn)行PD控制,目標(biāo)是保持轉(zhuǎn)向角為設(shè)定值。A.確定Kp,Ki的極性將直立環(huán)和速度環(huán)關(guān)閉,設(shè)置Kp=-10,Ki=-0.1,將小車放到地面嘗試轉(zhuǎn)動小車。發(fā)現(xiàn)小車能夠很輕易地被轉(zhuǎn)動,這樣的正反饋是我們所不希望看到的。設(shè)置Kp=10,Ki=0.1重復(fù)上述操作,我們發(fā)現(xiàn)下車很難被轉(zhuǎn)動,說明小車控制電機保持走直線,可以確定Kp,Ki均為正值。B.確定Kp,Ki的極性首先開啟已經(jīng)調(diào)試好的轉(zhuǎn)向換和速度環(huán)。設(shè)置Kp=10,Ki=0.1,控制小車前進(jìn),發(fā)現(xiàn)小車走直線的偏差很大。設(shè)置Kp=30,Ki=0.3,控制小車前進(jìn),小車走直線的能力已經(jīng)很好。設(shè)置Kp=70,Ki=0.7,控制小車前進(jìn),小車在急停的時候又劇烈抖動,對方向的控制過大。可以確定Kp:30~70,Ki:0.3~0.7,通過多次調(diào)整最終確定Kp=42,Ki=0.5。最后小車具有很好的平衡特性,且能完成前進(jìn)后退以及轉(zhuǎn)向的功能。結(jié)論本次課設(shè)對我們小組的成員來說是一次勇敢的嘗試和巨大的挑戰(zhàn)。之所以這么說是因為我們的單片機基礎(chǔ)比較差,還選擇了這樣有難度的題目。但是這一次嘗試也給我們帶來了寶貴的收獲,下面就我們的課設(shè)做一下總結(jié)。首先是準(zhǔn)備階段,我們提前前三個月開始惡補關(guān)于單片機,在花了一個月學(xué)習(xí)完了51單片機后,之后的時間就用來學(xué)習(xí)和使用STM32F103。相比于51的駕車就熟,STM32少了很多約束,但是隨之而來讓人眼花繚亂的庫函數(shù)、寄存器操作讓我們應(yīng)接不暇。我們選擇跟著野火的教程系統(tǒng)的學(xué)習(xí)STM32的標(biāo)準(zhǔn)庫操作和初級實驗,雖然知道我們實力不濟(jì)但是在學(xué)習(xí)一個月后我們硬著頭皮開始了課設(shè)。這是因為基礎(chǔ)不牢,之后我們也是麻煩不斷。第一個遇到的問題就是使用MPU6050,我們參考了官方給的DMP手冊和CSDN上的一些資料進(jìn)行操作。一切看上去比較順利,但是無論怎么樣MPU6050只能讀到上電時的初始數(shù)據(jù)。經(jīng)過查閱資料我們發(fā)現(xiàn)是MPU6050的FIFO溢出,在每次讀取數(shù)據(jù)之前對FIFO進(jìn)行重置操作后問題得到了解決。但是嚴(yán)重的延時問題,最終還是讓我們放棄了使用CH32。在趕完了所有程序之后,就是漫長的調(diào)參過程,一開始無論我們這樣調(diào)整參數(shù)效果都不太理想。首先我們將問題歸結(jié)于機械結(jié)構(gòu),我們將小車拆了又裝裝了又拆,來來回回調(diào)整了十多次。一開始使用膠帶固定模塊,后來發(fā)現(xiàn)效果很差又改用了捆扎帶。又將電池?fù)Q成重量較小的聚合物電池,但是還是不太理想。最后我們像是搭積木一樣從下而上一點一點搭建結(jié)構(gòu)。每一步都盡量讓小車的重心處于幾何中心。這樣沒有上電的小車才能勉強立起來一兩秒。但是我們無論這樣再優(yōu)化參數(shù)最后小車總是在平衡幾秒鐘后向一個方向加速倒下。后來我

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論