版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 本科生單片機課程設計報告</p><p> 課 題:光電平衡小車</p><p><b> 車模整體設計方案</b></p><p> 1.1兩輪自平衡智能車整體框架</p><p> 智能車是在車模結構的框架上,搭上硬件結構,通過MC9S12XS128單片機的處理能力,將傳感器采集到
2、的信息處理分析后得出運算結果,指揮電機做出適應賽道及戰(zhàn)術策略的響應的一套系統(tǒng)。其硬件結構框架如下圖:</p><p> 1.2 直立行走任務分解</p><p> 電磁組比賽要求車模在直立的狀態(tài)下以兩個輪子著地沿著賽道進行比賽,相比四輪著地狀態(tài),車??刂迫蝿崭鼮閺碗s。為了能夠方便找到解決問題的辦法,首先將復雜的問題分解成簡單的問題進行討論。為了分析方便,根據比賽規(guī)則,假設維持車模直立、
3、運行的動力都來自于車模的兩個后車輪,后輪轉動由兩個直流電機驅動。因此從控制角度來看,由控制車模兩個電機旋轉方向及速度實現(xiàn)對車模的控制。車模運動控制任務可以分解成以下三個基本任務:</p><p> ?。?) 控制車模直立:通過控制兩個電機正反向運動保持車模直立狀態(tài);</p><p> ?。?) 控制車模速度:通過控制兩個電機轉速速度實現(xiàn)車模行進控制;</p><p>
4、; ?。?) 控制車模轉向:通過控制兩個電機之間的轉動差速實現(xiàn)車模轉向控制。</p><p> 以上三個任務都是通過控制車模兩個后輪驅動電機完成的??梢约僭O車模的電機可以虛擬地被拆解成三個不同功能的驅動電機,它們同軸相連,分別控制車模的直立平衡、前進行走、左右轉向,如圖2.1所示。</p><p> 圖 2.1 車模運動控制分解示意圖</p><p> 直流電
5、機的力矩最終來自于電機驅動電壓產生的電流。因此只要電機處于線性狀態(tài),上述拆解可以等效成三種不同控制目標的電壓疊加之后,施加在電機上。</p><p> 在上述三個任務中保持車模直立是關鍵。由于車模同時受到三種控制的影響,從車模直立控制的角度,其它兩個控制就成為它的干擾。因此在速度、方向控制的時候,應該盡量平滑,以減少對于直立控制的干擾。三者之間的配合如圖2.2所示。</p><p>
6、圖 2.2 三層控制之間相互配合,底層盡量減少對于上層的干擾</p><p> 上述三個控制各自獨立進行控制,它們各自假設其它兩個控制都已經達到穩(wěn)定。比如速度控制時,假設車模已經在直立控制下保持了直立穩(wěn)定,通過改變電機的電壓控制車模加速和減速。車模在加速和減速的時候,直立控制一直在起作用,它會自動改變車模的傾角,移動車模的重心,使得車模實現(xiàn)加速和減速。</p><p> 1.3 車模直
7、立控制</p><p> 控制車模直立的直觀經驗來自于雜技表演。一般的人通過簡單練習就可以讓一個直木棒在手指尖上保持直立。這需要兩個條件:一個是托著木棒的手掌可以移動;另一個是眼睛可以觀察到木棒的傾斜角度和傾斜趨勢(角加速度)。通過手掌移動抵消木棒的傾斜角度和趨勢,從而保持木棒的直立。這兩個條件缺一不可,實際上就是控制中的負反饋機制,參見圖2.3。</p><p> 世界上還沒有任何一
8、個天才雜技演員可以蒙著眼睛使得木棒在自己手指上直立,因為沒有了負反饋。</p><p> 圖 2.3 通過反饋保持木棒的直立</p><p> 車模直立也是通過負反饋實現(xiàn)的。但相對于上面的木棒直立相對簡單。因為車模有兩個輪子著地,因此車體只會在輪子滾動的方向上發(fā)生傾斜??刂戚喿愚D動,抵消傾斜的趨勢便可以保持車體直立了。如圖2.4所示。</p><p> 圖 2
9、.4 通過車輪運動控制保持車體直立</p><p> 那么車輪如何運行,才能夠最終保持車體垂直穩(wěn)定?為了回答這個問題,一般的做法需要建立車模的運動學和動力學數學模型,通過設計最優(yōu)控制來保證車模的穩(wěn)定。為了使得同學們能夠比較清楚理解其中的物理過程。下面通過對比單擺模型來說明保持車模穩(wěn)定的控制規(guī)律。重力場中使用細線懸掛著重物經過簡化便形成理想化的單擺模型。直立著的車??梢钥闯煞胖迷诳梢宰笥乙苿悠脚_上的倒立著的單擺。
10、如圖2.5所示。</p><p> 圖 2.5 車??梢院喕傻沽⒌膯螖[</p><p> 普通的單擺受力分析如圖2.6所示。</p><p> 圖 2.6 普通的單擺受力分析</p><p> 當物體離開垂直的平衡位置之后,便會受到重力與懸線的作用合力,驅動重物回復平衡位置。這個力稱之為回復力,其大小為在此回復力作用下,單擺便進行周
11、期運動。在空氣中運動的單擺,由于受到空氣的阻尼力,單擺最終會停止在垂直平衡位置。空氣的阻尼力與單擺運行速度成正比,方向相反。阻尼力越大,單擺越會盡快在垂直位置穩(wěn)定下來。圖2.7顯示出不同阻尼系數下,單擺的運動曲線。</p><p> 圖 2.7 單擺在不同阻尼下的運動情況</p><p> 總結單擺能夠穩(wěn)定在垂直位置的條件有兩個:</p><p> ?。?) 受
12、到與位移(角度)相反的恢復力;</p><p> ?。?) 受到與運動速度相反的阻尼力。</p><p> 如果沒有阻尼力,單擺會在垂直位置左右擺動。阻尼力會使得單擺最終停止在垂直位置。阻尼力過?。ㄇ纷枘幔沟脝螖[產生震蕩,阻尼力過大(過阻尼)會使得單擺到達平衡位置時間拉長。存在一個阻尼臨界阻尼系數,使得單擺最快穩(wěn)定在平衡位置。為什么倒立擺在垂直位置時,在受到外部擾動的情況下,無法保持
13、穩(wěn)定呢?分析倒立擺的受力,如圖2.8所示。</p><p> 圖 2.8 在車輪上參照系中車體受力分析</p><p> 倒立擺之所以不能像單擺一樣可以穩(wěn)定在垂直位置,就是因為在它偏離平衡位置的時候,所受到的回復力與位移方向相同,而不是相反!因此,倒立擺便會加速偏離垂直位置,直到倒下。如何通過控制使得倒立擺能夠像單擺一樣,穩(wěn)定在垂直位置呢?要達到這一目的,只有兩個辦法:一個是改變重力的
14、方向;另一個是增加額外的受力,使得恢復力與位移方向相反才行。由此,能夠做的顯然只有第二種方式。</p><p> 控制倒立擺底部車輪,使得它作加速運動。這樣站在小車上(非慣性系)看倒立擺,它就會受到額外的力(慣性力),該力與車輪的加速度方向相反,大小成正比。這樣倒立擺所受到的回復力為</p><p><b> ? (2-1)</b></p><
15、p> 式中,假設控制車輪加速度與偏角成正比,比例為。顯然,如果,(g是重力加速度)那么回復力的方向便于位移方向相反了。</p><p> 此外,為了使得倒立擺能夠盡快地在垂直位置穩(wěn)定下來,還需要增加阻尼力,與偏角的速度成正比,方向相反。因此式(2-1)可變?yōu)?lt;/p><p><b> ?。?-2)</b></p><p> 按照上面
16、的控制方法,可把倒立擺模型變?yōu)閱螖[模型,能夠穩(wěn)定在垂直位置。因此,可得控制車輪加速度的控制算法</p><p><b> ?。?-3)</b></p><p> 式中,為車模傾角; '為角速度;k1、k2均為比例系數;兩項相加后作為車輪加速度的控制量。只要保證在、條件下,可以維持車模直立狀態(tài)。其中, 決定了車模是否能夠穩(wěn)定到垂直位置,它必須大于重力加速度;決
17、定了車?;氐酱怪蔽恢玫淖枘嵯禂?,選取合適的阻尼系數可以保證車模盡快穩(wěn)定在垂直位置。</p><p> 因此控制車模穩(wěn)定,需要下列兩個條件:</p><p> ?。?)能夠精確測量車模傾角的大小和角速度的大??;</p><p> ?。?)可以控制車輪的加速度。</p><p><b> 1.4車模速度控制</b><
18、;/p><p> 車模運行速度是通過控制車輪速度實現(xiàn)的,車輪通過車模兩個后輪電機經由減速齒輪箱驅動,因此通過控制電機轉速可以實現(xiàn)對車輪的運動控制。</p><p> 電機的運動控制有三個作用:</p><p> ?。?) 通過電機加速度控制實現(xiàn)車模直立穩(wěn)定。</p><p> ?。?)通過電機速度控制,實現(xiàn)車模恒速運行和靜止。雖然本屆比賽規(guī)則
19、中沒有要求車模速度恒定,也沒有要求車模在比賽之前和沖過終點之后保持靜止狀態(tài)。但是通過速度控制,可以提高車模穩(wěn)定性。在將來的比賽中,如果規(guī)則增加了靜止要求,或者需要通過路橋等障礙,速度控制將會發(fā)揮作用。</p><p> (3)通過電機差速控制,可以實現(xiàn)車模方向控制。電機運動控制是通過改變施加在其上的驅動電壓實現(xiàn)的。對于電機的電磁模型、動力學模型以及車模的動力學模型進行分析和簡化,可以將電機運動模型簡化成如下的一
20、階慣性環(huán)節(jié)模型。施加在電機上一個階躍電壓,電機的速度變化曲線為</p><p><b> ?(2-4)</b></p><p> 式中,E為電壓;為單位階躍函數;為慣性環(huán)節(jié)時間常數;為電機轉速常數。</p><p> 對應不同的電壓,電機的速度變化曲線如圖2.9示。</p><p> 圖 2.9 電機在不同電壓下
21、的速度</p><p> 由圖2.9可以看出,電機運動明顯分為兩個階段:第一個階段是加速階段;第二個階段為恒速階段。其中,在加速階段,電機帶動車模后輪進行加速運動,加速度近似和施加在電機上的電壓成正比,加速階段的時間長度取決于時間常數,該常數由電機轉動慣量、減速齒輪箱、車模的轉動慣量決定;在恒速階段,電機帶動車模后輪進行恒速運行,運行速度與施加在電機上的電壓成正比。調整車模直立時間常數很小,此時電機基本上運行在
22、加速階段。由上一節(jié)式(2-3)計算所得到的加速度控制量a再乘以一個比例系數,即為施加在電機上的控制電壓,這樣便可以控制車模保持直立狀態(tài)。車模運行速度調整時間相對很長,此時,電機速度與施加在其上的電壓成正比。通過傳統(tǒng)的PID反饋控制,便可以精確控制電機的運行速度,從而控制車模的運行速度。</p><p> 1.5 車模方向控制</p><p><b> 略</b>&
23、lt;/p><p><b> 程序控制說明</b></p><p><b> 2.1 主程序框架</b></p><p><b> 中斷服務程序框架</b></p><p><b> 2.2電機死區(qū)補償</b></p><p>
24、 由于摩擦力等因素的存在,電機與PWM給定信號存在非線性死去特性。為了使系統(tǒng)具有更好的線性,首先需要對電機死區(qū)進行補償。</p><p> 2.3角度單閉環(huán)控制</p><p> 首先我們忽略速度控制,僅僅只考慮角度閉環(huán)系統(tǒng)。那么在這個前提下,只有兩個速度量:角度和角速度;被控變量只有角度。那么就可以使用PID控制器。這里需要進行解釋,為何有兩個輸入變量任然可以使用SISO系統(tǒng)才能使
25、用PID。雖然角度和角速度是不同的量,但是角速度就是對角度求微分。而使用陀螺儀獲得的角速度比對卡爾曼濾波后求微分獲得的角速度更準確,而D控制器輸入變量正好是角速度,所以此處使用PID完全沒有問題。</p><p> 常用的PID控制器及其變形有P控制器、PI控制器、PD控制以及PID控制器。分析系統(tǒng)要求,僅有P控制器,系統(tǒng)極易發(fā)散造成不穩(wěn)定,而積分環(huán)節(jié)對于這個需要快速調整的系統(tǒng),要求不大。因此最后我們選擇了PD
26、控制器。</p><p><b> 控制系統(tǒng)框圖如下:</b></p><p> 在實際調試過程中,倒立擺可以進行短時間的直立,但是會朝向一個方向加速運行,最后車模會倒下。這是由于未加速速度閉環(huán)的結果,未對車輪轉速進行必要的控制,則最終由于電機轉速的飽和,而發(fā)生了無法對倒立擺進行調整的后果。</p><p> 為了解決這個問題,必須要引入
27、速度閉環(huán)控制。</p><p> 2.4角度、速度雙閉環(huán)控制</p><p> 對于直立車模速度的控制相對于普通車模的速度控制則比較復雜。由于在速度控制過程中需要始終保持車模的平衡,因此車模速度控制不能夠直接通過改變電機轉速來實現(xiàn)。下面先分析一下引起車模速度變化的原因。</p><p> 假設車模在上面直立控制調節(jié)下已經能夠保持平衡了,但是由于安裝誤差,傳感器
28、實際測量的角度與車模角度有偏差,因此車模實際不是保持與地面垂直,而是存在一個傾角。在重力的作用下,車模就會朝傾斜的方向加速前進。</p><p> 首先對一個簡單例子進行分析。假設車模開始保持靜止,然后增加給定速度,為此需要車模往前傾斜以便獲得加速度。在車模直立控制下,為了能夠有一個往前的傾斜角度,車輪需要往后運動,這樣會引起車輪速度下降(因為車輪往負方向運動了)。由于負反饋,使得車模往前傾角需要更大。如此循環(huán)
29、,車模很快就會傾倒。原本利用負反饋進行速度控制反而成了“正”反饋。在直立控制下的車模速度與車模傾角之間傳遞函數具有非最小相位特性,在反饋控制下容易造成系統(tǒng)的不穩(wěn)定性。但根據實際經驗,是可以通過速度控制進行車模傾角控制的。</p><p> 而速度閉環(huán)控制仍然可以看做是一個SISO系統(tǒng)。所以使用PID控制器來完成控制。由于系統(tǒng)對于靜態(tài)誤差存在一定要求,所以使用PI控制器。</p><p>
30、 正如前文所述,直立控制和速度控制存在強耦合,所以這里我們使用的分立控制周期的方法。每10個直立控制周期進行一次速度控制。這樣,可以將速度控制視為對于直立控制的一種擾動。</p><p> 下圖為速度閉環(huán)的控制框圖。</p><p> 直立、速度閉環(huán)控制框圖</p><p><b> 車模機械設計</b></p><
31、p><b> 3.1車模地盤安裝</b></p><p> C車模地盤由兩部分組成,電機部分以及前地盤部分。兩部分的連接可以采用彈性連接或者剛性連接。在經過幾次測試后我們發(fā)現(xiàn),如果使用彈性連接,且將MEMS傳感器安裝在前部地盤上,由于彈性將使得角度信號產生滯后,對于信號的處理帶來很大影響,因此,這部分使用了剛性連接,為了減輕重量,考慮使用2mm碳纖維版作為連接部件。</p&g
32、t;<p> 圖3.1 車模地盤安裝</p><p> 3.2車模編碼器安裝</p><p> 測速編碼器對于攝像頭組以及光電組而言,起到速度閉環(huán)的作用,而對于兩輪車的選題,編碼器不僅起到速度閉環(huán),還對直立控制有很重要的作用,因此,編碼器對于電磁組兩輪車而言,是不可或缺的一部分。</p><p> 但是由于直立行走,相較于攝像頭組與光電組,電磁
33、車編碼器安裝的額位置受到了較大制約。同時,為了控制的簡便,我們使用了雙向增量式編碼器。通過選型,決定使用歐姆龍E6A2-CW3C雙向增量式測速編碼器。</p><p> 歐姆龍編碼器體積較大,我們將其放置在車輪上方,自己設計了碳纖維支架以及齒輪,使編碼器可靠安裝于車身上。</p><p> 圖3.2 編碼器安裝</p><p> 3.3車模電池位置改裝<
34、/p><p> C車模的電機標稱值為4.17W,在三組車模中屬于最弱的一只,但是對于直立車而言,電機的功率對于車模直立的效果有著決定性因素。在無法修改電機的情況下,必須對結構進行優(yōu)化。合理降低重心是最為行之有效的一個方法。</p><p> 為了降低重心,我們對車模各個部件進行了稱重,具體數據如下:</p><p> 從上表中不難看出,質量最大的部件是電池,同時,
35、電池的位置可以方便更改,所以我們決定嘗試改動電池的安裝位置。</p><p> 為此,我們擬定了三種安裝方式:</p><p><b> 方式一:原始位置。</b></p><p> 圖3.3.1 電池安裝方案一。</p><p> 方案一的優(yōu)勢在于無需對于機械結構進行任何改動,可以直接安裝。缺點在于電池高度過高
36、,導致重心整體偏高。</p><p> 方案二:背面縱向安裝</p><p> 圖3.3.2電池安裝方案二。</p><p> 方案二的優(yōu)勢在于轉向慣量較小,轉向靈活,重心低于方案一。缺點在于重心依然較高。</p><p> 方案三:背面橫向安裝</p><p> 圖3.3.3電池安裝方案三</p>
37、;<p> 方案三的優(yōu)勢在于將電池重心降到最低,對于直立控制而言存在較大優(yōu)勢。缺點在于轉向慣量略大于方案二。</p><p> 經過綜合比較和測試,選用方案三。</p><p><b> 車模硬件電路設計</b></p><p><b> 詳見原理圖。</b></p><p>
38、<b> 卡爾曼濾波</b></p><p> 4.1卡爾曼濾波簡介</p><p> 卡爾曼濾波是一種高效率的遞歸濾波器(自回歸濾波器), 它能夠從一系列的不完全及包含噪聲的測量中,估計動態(tài)系統(tǒng)的狀態(tài)。簡單來說,卡爾曼濾波器是一個“optimal recursive data processing algorithm(最優(yōu)化自回歸數據處理算法)”。對于解決很大
39、部分的問題,他是最優(yōu),效率最高甚至是最有用的。他的廣泛應用已經超過30年,包括機器人導航,控制,傳感器數據融合甚至在軍事方面的雷達系統(tǒng)以及導彈追蹤等等。近年來更被應用于計算機圖像處理,例如頭臉識別,圖像分割,圖像邊緣檢測等等。</p><p> 5.2使用卡爾曼濾波的原因</p><p> 當決定使用加速度計(反應角度)以及陀螺儀(反應角速度)以后,我們對參考的論文中為何要同時使用加速
40、度計以及陀螺儀產生過一些疑問。因為如果需要角速度,我們可以通過這樣的方法對加速度計進行微分,計算出角速度,或者可以通過對于陀螺儀積分,從而獲得角度。既然如此為何我們需要使用兩個傳感器。</p><p> 于是,我們對兩個傳感器進行了數據采樣,觀測其輸出信號的關系。由于考慮電機轉動產生的震動會對傳感器產生比較大的干擾, </p><p> 隨著PWM占空比的不斷提高,陀螺儀的噪聲也更加顯
41、著。之后我們對加速度傳感器進行了測試。</p><p> 我們不難獲得以下一些結論:</p><p> 1、陀螺儀的噪聲還在可以接受范圍,但是加速度計噪聲已經遠遠超出可控范圍接受</p><p> 2、對于加速度計做一個補充說明,加速度計在車模直立狀態(tài)下,電機PWM占空比100%噪聲情況下,幅值映射到實際角度大約是60度左右。根本不能直接使用。</p&g
42、t;<p> 3、方差(可以等效理解為噪聲大?。╇S著占空比不斷增加。</p><p> 4、加速度計雖然噪聲很大,但是長時間來看,他的數學期望是非常穩(wěn)定的。</p><p> 5、陀螺儀的噪聲比較小,但是他的誤差會對積分造成漂移。</p><p> 無論是加速度計還是陀螺儀,都有自己的優(yōu)勢和劣勢。簡而言之:加速度計短時間內不可信,但是長時間內可
43、信。陀螺儀短時間內可信而長時間內不可信。</p><p> 這也就是為什么車模直立必須使用兩個傳感器來完成信號獲取。因為單個傳感器不可靠,只有取其精華去其糟粕,發(fā)揮兩個傳感器的共同優(yōu)勢,才能夠取得好的效果。于是,我們需要一種算法,能夠在短時間內置信陀螺儀,而長時間內置信加速度計的算法。</p><p> 這就需要卡爾曼濾波。</p><p> 5.3卡爾曼濾波
44、原型</p><p> 首先我們建立系統(tǒng)的狀態(tài)方程和測量方程,由于傾角和傾角角速度存在導數關系,系統(tǒng)傾斜真實角度可以用來做一個狀態(tài)向量。在該系統(tǒng)中,采用加速度傳感器估計出陀螺儀常值偏差b,以此偏差作為狀態(tài)向量得到相應的狀態(tài)方程和觀測方程</p><p> 式中,為包含固定偏差的陀螺儀輸出角速度,為加速度計經處理后得到的角度值,為陀螺儀測量噪聲,為加速度傳感器測量噪聲,為陀螺儀漂移誤差,
45、和相互獨立,此處假設二者為滿足正態(tài)分布的白色噪聲。令為系統(tǒng)采樣周期,得到離散系統(tǒng)的狀態(tài)方程和測量方程:</p><p> 同時,要估算k時刻的實際角度,就必須根據k-1時刻的角度值,再根據預測得到的k時刻的角度值得到k時刻的高斯噪聲的方差,在此基礎之上卡爾曼濾波器進行遞歸運算直至估算出最優(yōu)的角度值。在此,須知道系統(tǒng)過程噪聲協(xié)方差陣Q以及測量誤差的協(xié)方差矩陣R, 對卡爾曼濾波器進行校正,Q與R矩陣的形式如下:&l
46、t;/p><p> 式中。和分別是加速度傳感器和陀螺儀測量的協(xié)方差,其數值代表卡爾曼濾波器對其傳感器數據的信任程度,數值越小表明信任程度越高。在該系統(tǒng)中陀螺儀的值更為接近準確值,因此取的值小于的值。當前狀態(tài):</p><p><b> (1)</b></p><p> 式中,,,是利用k預測的結果,是k - 1 時刻的最優(yōu)結果。</p&
47、gt;<p> 則有對應于的協(xié)方差為:</p><p><b> (2)</b></p><p> 式中,是對應的協(xié)方差,表示的轉置矩陣,是系統(tǒng)過程的協(xié)方差,式子(1)、(2)即對系統(tǒng)的狀態(tài)更新。</p><p> 則狀態(tài)k的最優(yōu)化估算值:</p><p><b> ?。?)</b&
48、gt;</p><p> 其中,為卡爾曼增益:</p><p><b> ?。?)</b></p><p> 此時,我們已經得到了k狀態(tài)下最有的估算值,但是為了使卡爾曼濾波器不斷的運行下去直到找到最優(yōu)的角度值,我們還要更新k狀態(tài)下的協(xié)方差:</p><p><b> ?。?)</b></p
49、><p> 其中為單位陣,對于本系統(tǒng)則有。當系統(tǒng)進入k+1狀態(tài)時,就是式子(2)的。(3)、(4)、(5)式為卡爾曼濾波器狀態(tài)更新方程。計算完時間更新方程后,再重復上一次計算得到的后驗估計,作為下一次的計算的先驗估計,這樣,周而復始、循環(huán)往復地運算下去直至找到最優(yōu)的結果。</p><p> 5.4卡爾曼濾波化簡</p><p> 上述五個公式便是卡爾曼濾波的五條數
50、學公式在本項目中的使用。但是,以上五個公式,僅僅只是矩陣形式。雖然可以在MATLAB里進行仿真,但是卻不能使用單片機進行有效運算。</p><p> 然后,將卡爾曼濾波矩陣形式轉化為方程形式:</p><p> 這里,X01即為我們需要的角度卡爾曼濾波值。</p><p> 可以看到的是,卡爾曼濾波方程形式共有14個公式,同時很多參數的運算涉及浮點數,這對于單
51、片機的高效運行時極為不利的,因此我們需要通過一些方法對卡爾曼濾波的公式進行化簡,從而在不失精度的情況下,盡可能減小運算量。</p><p> 需要注意的是,Q,R兩個參數是關于傳感器和系統(tǒng)的方差,他們隨著系統(tǒng)的工作狀況不同而會產生相應變化,對應到我們的系統(tǒng),在車模運行狀態(tài)不同(傾角不同,PWM不同)情況下,Q,R都是不同的。</p><p> 根據相關參考文獻,Q,R雖然都是關于時間的
52、變量,但是由于卡爾曼濾波有很好的收斂性,所以可以將Q,R都取比較極端的參數。用常量來定義。</p><p><b> 然后再看下圖</b></p><p> 注意方框中的公式,根據我們的觀察,不難發(fā)現(xiàn),整個方框中都是為了獲得卡爾曼增益(矩陣Kg),我們設想,能否使用一個常數來等效替代卡爾曼增益那?根據我們在實驗中的觀察,卡爾曼增益是一個收斂的變量,并且針對到我們的
53、這個系統(tǒng),他的值非常小,直立狀態(tài)下趨近于一個常數。(所有這些工作都在MATLAB下完成)</p><p> 所以,我們將方框中的所有公式完全省略,通過實驗整定,選取一個近似Kg來替代方框中的所有運算。同時,通過NATLAB觀測各變量的變化趨勢,我們嘗試讓Kg2=0(Kg1,Kg2本身就是非常小的變量,所以可以讓其等于0)。并發(fā)現(xiàn)Kg2對于整個卡爾曼濾波的影響非常有限。所以將Kg2設定為0。</p>
54、<p> 以下就是我們組程序中卡爾曼濾波的簡化算法實現(xiàn)</p><p> X1=X0+gyro*dt;</p><p> X0=X1+(acc-X1)*kg;</p><p> 化簡后的卡爾曼濾波框圖如下:</p><p> 5.5卡爾曼濾波參數整定</p><p> 化簡后的卡爾曼濾波主要是對
55、dt以及Kg兩個參數進行整定。需要特別指出的是,這里的dt并不只是一個采樣間隔。由于陀螺儀的輸出和加速度計輸出的量綱并不相同,所以陀螺儀采樣值*dt并不直接反應一個角度,而是與實際角度相差一個系數。因此此處的dt可以等效理解為dt=采樣間隔*比例系數。</p><p> dt越大,積分速度越快,卡爾曼輸出追隨實際角度的情況越好(當然不能太大,不然可能會出現(xiàn)超前相位)。但是dt越大,陀螺儀漂移造成的影響也就越大。
56、</p><p> Kg決定了加速度計的權重。Kg越大,實際輸出的漂移就越小,但是濾波效果的噪聲也就越大。</p><p> 所以dt和kg是一對矛盾,不能太過于極端。</p><p><b> 首先是靜態(tài)整定。</b></p><p> 將車模保持在穩(wěn)定直立狀態(tài),讓車輪以恒定PWM(80%以上)轉動,然后調節(jié)參
57、數。</p><p> 目標是達到上圖效果。紅色為卡爾曼濾波輸出,藍色為加速度計直接輸出。如果紅色抖動非常厲害,可以適當減小Kg的大小。</p><p><b> 接著是動態(tài)整定</b></p><p> 還是保持車輪恒定PWM旋轉,同時,搖擺車身。</p><p> 大致調節(jié)到上圖所示的樣子。目前存在一個相位差
58、,這個相位差在后期直立算法的調試中是致命的,必須克服掉。解決方法,逐漸增加dt即可。</p><p> 達到上圖效果即可認為卡爾曼濾波參數整定完成。</p><p><b> 程序控制說明</b></p><p> 在完成了信號處理的層面之后,就是對于控制算法的設計。在設計算法之前,讓我們對于系統(tǒng)進行一個簡單分析。系統(tǒng)雖然是高階非線性系統(tǒng)
59、,但是由于直立期間,傾斜角度非常小,所以可等等效為一個線性系統(tǒng)。控制輸入有三個,分別對應角度,角速度,車輪轉速。被控變量有兩個:角度以及車輪轉速。所以這是一個MIMO系統(tǒng),因此不能使用簡單的PID等SISO控制器進行控制。同時,無論是控制角度還是控制電機,執(zhí)行機構都為電機,所以系統(tǒng)也具有強耦合性。對于倒立擺的控制,參考的文獻中有使用各種算法進行控制,比如狀態(tài)反饋、自適應算法、神經網絡算法、模糊算法等等。這些算法都需要更高深的理論基礎,同
60、時,在高階倒立擺系統(tǒng)中,這些算法擁有不可替代性。但是對于我們的兩輪車式倒立擺,這僅僅只是一個一階倒立擺,可以使用更簡單的方法進行控制。我們在本設計中使用了角度、速度雙閉環(huán)的控制算法。角度控制頻率高,速度控制周期頻率慢。</p><p><b> 6.1電機死區(qū)補償</b></p><p> 由于摩擦力等因素的存在,電機與PWM給定信號存在非線性死去特性。為了使系統(tǒng)
61、具有更好的線性,首先需要對電機死區(qū)進行補償。</p><p> 6.2角度單閉環(huán)控制</p><p> 首先我們忽略速度控制,僅僅只考慮角度閉環(huán)系統(tǒng)。那么在這個前提下,只有兩個速度量:角度和角速度;被控變量只有角度。那么就可以使用PID控制器。這里需要進行解釋,為何有兩個輸入變量任然可以使用SISO系統(tǒng)才能使用PID。雖然角度和角速度是不同的量,但是角速度就是對角度求微分。而使用陀螺儀
62、獲得的角速度比對卡爾曼濾波后求微分獲得的角速度更準確,而D控制器輸入變量正好是角速度,所以此處使用PID完全沒有問題。</p><p> 常用的PID控制器及其變形有P控制器、PI控制器、PD控制以及PID控制器。分析系統(tǒng)要求,僅有P控制器,系統(tǒng)極易發(fā)散造成不穩(wěn)定,而積分環(huán)節(jié)對于這個需要快速調整的系統(tǒng),要求不大。因此最后我們選擇了PD控制器。</p><p><b> 控制系
63、統(tǒng)框圖如下:</b></p><p> 在實際調試過程中,倒立擺可以進行短時間的直立,但是會朝向一個方向加速運行,最后車模會倒下。這是由于未加速速度閉環(huán)的結果,未對車輪轉速進行必要的控制,則最終由于電機轉速的飽和,而發(fā)生了無法對倒立擺進行調整的后果。</p><p> 為了解決這個問題,必須要引入速度閉環(huán)控制。</p><p> 6.3角度、速度雙
64、閉環(huán)控制</p><p> 對于直立車模速度的控制相對于普通車模的速度控制則比較復雜。由于在速度控制過程中需要始終保持車模的平衡,因此車模速度控制不能夠直接通過改變電機轉速來實現(xiàn)。下面先分析一下引起車模速度變化的原因。</p><p> 假設車模在上面直立控制調節(jié)下已經能夠保持平衡了,但是由于安裝誤差,傳感器實際測量的角度與車模角度有偏差,因此車模實際不是保持與地面垂直,而是存在一個傾
65、角。在重力的作用下,車模就會朝傾斜的方向加速前進。</p><p> 首先對一個簡單例子進行分析。假設車模開始保持靜止,然后增加給定速度,為此需要車模往前傾斜以便獲得加速度。在車模直立控制下,為了能夠有一個往前的傾斜角度,車輪需要往后運動,這樣會引起車輪速度下降(因為車輪往負方向運動了)。由于負反饋,使得車模往前傾角需要更大。如此循環(huán),車模很快就會傾倒。原本利用負反饋進行速度控制反而成了“正”反饋。在直立控制下
66、的車模速度與車模傾角之間傳遞函數具有非最小相位特性,在反饋控制下容易造成系統(tǒng)的不穩(wěn)定性。但根據實際經驗,是可以通過速度控制進行車模傾角控制的。</p><p> 而速度閉環(huán)控制仍然可以看做是一個SISO系統(tǒng)。所以使用PID控制器來完成控制。由于系統(tǒng)對于靜態(tài)誤差存在一定要求,所以使用PI控制器。</p><p> 正如前文所述,直立控制和速度控制存在強耦合,所以這里我們使用的分立控制周期
67、的方法。每10個直立控制周期進行一次速度控制。這樣,可以將速度控制視為對于直立控制的一種擾動。</p><p> 下圖為速度閉環(huán)的控制框圖。</p><p> 圖6.3 直立、速度閉環(huán)控制框圖</p><p> 第七章車模參數調試圖解</p><p> 在完成了所有控制算法方案的制定,以及程序代碼的編寫之后,接下來需要對一些參數在實際
68、系統(tǒng)運行中進行整定以及微調。整定方法遵從先直立控制再速度控制;先P參數,后I參數,最后D參數的整定順序。本章節(jié)著重介紹在調試環(huán)節(jié)中不同現(xiàn)象對應的原因以及參數調整方法。</p><p> 在下文中,會使用如下幾個變量在此說明。</p><p> dt:陀螺儀積分參數</p><p> Kg:加速度計參數(卡爾曼增益)</p><p>
69、角度閉環(huán),速度開環(huán)P:直立算法P參數</p><p> 角度閉環(huán),速度開環(huán)D:直立算法D參數</p><p> 速度閉環(huán)P:速度控制P參數</p><p> 速度閉環(huán)I:速度控制I參數</p><p> 原因:開環(huán)P過大,系統(tǒng)震蕩</p><p> 解決方法:減小開環(huán)P或者增加開環(huán)D</p>&
70、lt;p> 原因:開環(huán)D參數過大,系統(tǒng)抗干擾性降低</p><p> 解決方法:減小開環(huán)D,或者適當增加開環(huán)P</p><p> 原因:傾角值為0時刻,車身重心不在軸線上</p><p> 解決方法:微調加速度計零偏置,使得角度為0時,重心落在軸線上。也可能是陀螺儀零偏置錯誤,同理,微調即可。</p><p> 原因:陀螺儀積
71、分速度過慢,導致卡爾曼濾波相位滯后</p><p> 解決方法:適當增加dt</p><p> 原因:速度閉環(huán)對系統(tǒng)整體的控制程度過小</p><p> 解決方法:適當增加速度閉環(huán)的各個參數</p><p> 原因:速度閉環(huán)調節(jié)速度過慢</p><p> 解決方法:適當增加閉環(huán)P參數</p>&
72、lt;p> 原因:速度閉環(huán)存在靜態(tài)誤差</p><p> 解決方法:適當增加閉環(huán)I參數</p><p> 原因:速度閉環(huán)調節(jié)速度過慢</p><p> 解決方法:適當增加閉環(huán)P參數,或者也可以使用PID(而非PI)進行速度閉環(huán)的控制</p><p> 原因:速度控制對于階躍響應存在超調</p><p>
73、 解決方法:減小閉環(huán)P參數,或者加入閉環(huán)D參數,也可以不用階躍信號,而是通過斜波信號慢慢將速度提升。</p><p> 原因:陀螺儀漂移之后和加速度傳感器之間的關系發(fā)生了變化,導致濾波角度出現(xiàn)比較大的問題。</p><p> 解決方法:增大Kg。</p><p><b> 附件源代碼</b></p><p>
74、//******************端口初始化</p><p> void PAC_Init(void)</p><p><b> {</b></p><p> //**********計數器接口初始化 ---->ok(5.9)</p><p> DDRB = 0X00;
75、 //PORTB作為輸入</p><p> DDRA = 0X00;</p><p> DDRE_DDRE2 = 1;</p><p> DDRE_DDRE5 = 1;</p><p> DDRE_DDRE6 = 1;</p><p> DDRE_DDRE3 = 1;</p><p
76、> //***********計數器清零</p><p> PORTE_PE2 = 0;</p><p> PORTE_PE5 = 0;</p><p> PORTE_PE3 = 0;</p><p> PORTE_PE6 = 0;</p><p> //***********計數使能</p&g
77、t;<p> PORTE_PE2 = 1;</p><p> PORTE_PE5 = 1;</p><p> PORTE_PE3 = 0;</p><p> PORTE_PE6 = 0;</p><p> //***********************電機控制電路接口初始化 --->ok(5.9)</p
78、><p> PUCR = 0X50; //全部禁止上拉電阻</p><p> DDRK_DDRK2 =1; //電機IO接口</p><p> DDRK_DDRK3 =1; //電機IO接口</p><p> PORTK_PK2 =0;</p><p> PORTK_
79、PK3 =0;</p><p> //***********CCD接口初始化</p><p> DDRK_DDRK5 =1; //PORTK_PK1,PORTK_PK3輸出</p><p> DDRK_DDRK4 =1;</p><p> //***********數碼管接口電路</p><p>
80、 DDRM = 0XFF; //輸出</p><p> DDRJ_DDRJ6 =1;</p><p><b> }</b></p><p> //*****************設置系統(tǒng)時鐘為64MHz</p><p> void SystemCLK_64M(void
81、)</p><p><b> {</b></p><p> CLKSEL = 0; //使PLL與系統(tǒng)隔離</p><p> PLLCTL_PLLON = 1; //打開PLL</p><p> SYNR = 0Xc7; //設置 fvc
82、0=2*fosc*(SYNDIV+1)/(REFDIV+1);fpll=fvco/(2*POSTDIV);</p><p> //fbus=fpll/2;若POSTDIV=0,fbus=fvco/2;</p><p> REFDV = 0X81; //fbus = 2*16*(9+1)/(1+1)=80m;</p><p> PO
83、STDIV = 0; //fpll = fvco;</p><p> _asm(nop); //_asm匯編語言,nop做空操作;延時</p><p> _asm(nop);</p><p> while(CRGFLG_LOCK == 0); //頻率穩(wěn)定后再
84、操作</p><p> CLKSEL_PLLSEL = 1;</p><p><b> }</b></p><p> //******************* PIT中斷服務</p><p> void PIT_Init(void) //1ms周期中斷</p><
85、;p><b> {</b></p><p> PITCFLMT = 0; // PIT disabled,</p><p> PITCE_PCE0 = 1; //通道0使能</p><p> PITMUX_PMUX = 0;
86、//8位,16位定時器共同作用</p><p> PITMTLD0 = 79; //8位定時器初值設定,80</p><p> PITLD0 =799; //16位定時器初值設定 time_out period = (79+1)*(799+1)/64000000 = 1ms</p><p>
87、 PITINTE_PINTE0 = 1; //0通道中斷有效</p><p> PITCFLMT_PITE=1; //定時器使能,初始化一次即可</p><p><b> }</b></p><p> /**************************************
88、**********</p><p> 功能 :總線頻率為64MHz,設置SCI0模塊波特率為19200bps</p><p><b> 入口參數:無</b></p><p> 出口參數:無 40000/1152</p><p> ******************************
89、**********************/</p><p> void SCI0_init(void)</p><p><b> {</b></p><p> //SCI0BD = 208; //設置波特率為9600Kbps(寫一個字) AMAP = 0</p><p> //SCI0BD = 10
90、4; //設置波特率為19200Kbps(寫一個字) AMAP = 0 --->總線頻率32MHz</p><p> //SCI0BD = 208; //設置波特率為19200Kbps(寫一個字) AMAP = 0 --->總線頻率64MHz</p><p> //SCI0BD = 69; //設置波特率為57600Kbps(寫一個字)
91、AMAP = 0 --->總線頻率64MHz</p><p> //SCI0BD = 35; //設置波特率為115200Kbps(寫一個字) AMAP = 0 --->總線頻率64MHz</p><p> SCI0BD = 104; //設置波特率為38400Kbps(寫一個字) AMAP = 0 --->總線頻率64MHz</p
92、><p> //SCI0BD = 139; //設置波特率為28800Kbps(寫一個字) AMAP = 0 --->總線頻率64MHz</p><p> SCI0CR1 = 0X00; //SCI0工作在正常情況下,禁止奇偶校正,使用8為數據位(共10位)</p><p> SCI0CR2 = 0X2c; //允許使用發(fā)送器,使用接收
93、器,允許接收中斷</p><p><b> }</b></p><p> /***************************************************</p><p> 函數功能:完成帶符號的char型數據傳送</p><p> 入口參數:char num,為要傳送的數據</p&
94、gt;<p><b> 出口參數:無</b></p><p> 說明 :每次傳送133個數據---->上位機定義的一幀數據</p><p> ****************************************************/</p><p> void SCI0_Char_Send(un
95、signed char num[])</p><p><b> {</b></p><p> unsigned int i =0;</p><p> for(i=0;i<133;i++)</p><p><b> {</b></p><p> while(!S
96、CI0SR1_TDRE); //等待發(fā)送寄存器空</p><p> SCI0DRL = num[i]; //發(fā)送數據</p><p><b> }</b></p><p><b> }</b></p><p> /***************
97、*************************************</p><p> 功能 :初始化定時器模塊(TIM模塊輸入撲捉功能初始化)</p><p> Ic0上升沿 , Ic1輸入撲捉下降沿</p><p><b> 入口參數:無</b></p><p><b> 出口參數:無&
98、lt;/b></p><p> ******************************************************/</p><p> void Time_init_CCD(void){ //--->ok(5.9)</p><p> TSCR1 |= 0X90; //啟動主定時器模塊,使用快速清零(
99、TFFCA=1)</p><p> TSCR2 |= 0X03; //禁止定時溢出中斷---定時器時鐘頻率為4MHz</p><p> //定時器頻率為總線頻率的8分頻</p><p> TIOS = 0Xf0; //啟用IC0,IC1,IC2,IC3輸入撲捉功能</p><p> TCTL4 = 0X
100、99; //IC0,IC2上升沿 , IC1,IC3輸入撲捉下降沿</p><p> TIE = 0X00; //禁止輸出撲捉申請中斷</p><p><b> }</b></p><p> /*****************************************************&l
101、t;/p><p> 函數功能:對PWM初始化,設置PWM0,PWM1級聯(lián),PWM2,PWM3級聯(lián)</p><p><b> 入口參數:無</b></p><p><b> 出口參數:無</b></p><p> ******************************************
102、************/</p><p> void PWM_init(void)</p><p><b> {</b></p><p> PWME = 0X00;</p><p> PWMPOL = 0XCf; //開始輸出極性為高電平</p><p> PWMCLK =
103、0XC0; //PWM0,1選擇ClockA作為時鐘,PWM2,3選擇ClockB作為時鐘</p><p> PWMPRCLK = 0X00; //ClockA,ClockB對總線頻率0分頻--->64MHz</p><p> PWMCAE = 0X00; //全部使用左對齊</p><p> PWMCTL = 0X30;
104、 //使用 PWM0,PWM1級聯(lián),PWM2,PWM3級聯(lián)</p><p> PWMPER01 = 15000; //PWM頻率為4KHz</p><p> PWMPER23 = 15000;</p><p> PWMDTY01 = 0; //占空比為0</p><p> PWMDTY23 = 0;</p&g
105、t;<p> PWMSCLB = 20; //SB的分頻因子為40 --->ClockSB=1600KHz</p><p> PWMPER7 = 10; //左對齊,PWM7通道頻率為160KHz</p><p> PWMPER6 = 10; //左對齊,PWM6通道頻率為160KHz</p>&
106、lt;p> PWMDTY7 =5; //設置占空比為50%</p><p> PWMDTY6 =5; //設置占空比為50%</p><p> PWME = 0X0f; //允許PWM0,1,2,3</p><p><b> }</b></p><
107、p> /*******************************************************</p><p> 函數功能:初始化AD轉換,轉換位數--8位,轉換的通道必須在調用函數之前設置</p><p> 入口參數:無 ----------ATD的 fclk 可以達到8.3MHz</p><p><b> 出口
108、參數:無</b></p><p><b> 使用方法:</b></p><p> ATD0CTL5 = 0X00; unsigned char resulut = ATD_single_send_uchar();---->采樣AD0通道的數據,單次轉換.</p><p> ************************
109、************************************/</p><p> void ATD_init(void)</p><p><b> {</b></p><p> ATD0DIEN = 0X00; //全部使用模擬輸入</p><p> ATD0CTL1 = 0
110、X00; //采樣前不放電,0x02-->分辨率為12位 0x00-->分辨率為8位 0x01-->分辨率為10位</p><p> ATD0CTL2 = 0X40; //A/D模塊快速清零,禁止外部觸發(fā),禁止中斷</p><p> ATD0CTL3 = 0X88; //A/D轉換結果右
111、對齊,每個序列1個通道,非FIFO</p><p> ATD0CTL4 = 0X04; //采樣時間為ATD時鐘周期的4倍,ATD時鐘為系統(tǒng)時鐘的10分頻 ---6.4MHZ</p><p> ATD0CTL5 = 0X20; //連續(xù)轉換,單獨對某通道采樣 ,并啟動轉換---具體通道需要在調用它之前</p><p
112、> } //end of ATD0_Init</p><p> /*****************************************************</p><p> 函數功能:轉換一個模擬量---8位轉換</p><p> 入口參數: unsigned char result</p><p> 出
113、口參數: unsigned char result ---啟動單次裝換</p><p> ******************************************************/</p><p> unsigned char ATD_uchar_convert(void)</p><p><b> {</b><
114、/p><p> while(!ATD0STAT2L_CCF0); //等待轉換結束</p><p> return (ATD0DR0); //返回轉換結果</p><p><b> }</b></p><p> /***************************
115、********************************</p><p> 函數功能:在系統(tǒng)頻率為64MHz下,延時約1us</p><p><b> 入口參數:無</b></p><p><b> 出口參數:無</b></p><p> **********************
116、**************************************/</p><p> void delay_1us(void)</p><p><b> {</b></p><p><b> int j;</b></p><p> for(j=0;j<6;j++)</
117、p><p> _asm(nop);</p><p><b> }</b></p><p> /******************************************************</p><p> 函數功能:數碼管顯示</p><p><b> 入口參數:數
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機循跡小車課程設計
- 單片機課程設計---電動智能小車
- 單片機課程設計-自動循跡小車
- 單片機課程設計--智能小車—硬件設計
- 單片機課程設計報告---語音控制小車
- 單片機課程設計--光電工程實踐
- 單片機課程設計-單片機課程設計---電子時鐘
- 單片機課程設計
- 單片機課程設計
- 單片機課程設計
- 單片機課程設計
- 單片機課程設計——超聲波避障小車
- 單片機課程設計--單片機串行通訊
- 單片機課程設計--超聲波避障小車
- 單片機秒表單片機課程設計
- 單片機課程設計
- 單片機課程設計基于pic24智能小車設計
- 單片機課程設計---單片機數字時鐘
- 課程設計----基于單片機的自動避障小車
- 避障小車設計書 哈工大 單片機課程設計
評論
0/150
提交評論