我的STM32主控紅外遙控雙輪平衡小車

我的STM32主控紅外遙控雙輪平衡小車

(2015-05-28 17:38:27)[編輯][刪除]
   
  我的紅外遙控雙輪平衡小車程序初步完整,STM32F103ZET6主控,整個LCD顯示,MPU6050數據讀取,角度計算,卡爾曼濾波,PID算法,PWM輸出,紅外遙控,都已完成,還剩下最後PID的幾個具體參數的調試了,這個需要等我的硬件部分完成之後開始,下面附上我初步的工程程序的鏈接,已經編譯OK了的。http://pan.baidu.com/s/1dD2I4zZ
後面會繼續更新。包括硬件部分。
最近在硬件調試時,電路哥哥模塊都鏈接好之後,接上12V驅動電機的電源之後,把我的STM32的板子給燒了,具體原因還在找,估計得加上光耦隔離。需要做好足夠的保護措施纔是,確實我的STM32在連接那個L298N的驅動時候就遇到了顯示的問題,開始沒太在意,最後給L298N接上12V的時候,整個就燒了,雖然沒有和STM32直接相連。最開始接上6V(給L298N芯片供電的,理論上應該是5V)時,TFT顯示等等都是沒有問題的,然後給編碼器接上電池(3.7V的,3V到5V的都可以),接着給L298N接上12V的,然後TFT屏就白了,不能顯示東西了,但這個時候燒錄程序什麼的都是可以進行的,而且,燒錄我原來的程序,也就是沒有驅動電機的,而只是單純地顯示MPU6050參數的程序是可以正常運行的,而且TFT是可以正常顯示的,燒錄進後面完整的通過定時中斷方式輸出PWM的程序時,屏幕就無法顯示了,我後來認爲是那個編碼器的電源沒有與單片機共地,然後我引了一條線與單片機共地,再接上12V電源,再給單片機供電時,發現板子上沒有任何反應了,並且發現UART模塊發熱很嚴重,一插上板子,那上面的燈就不亮了,板子上的燈根本沒有反應了,通過其他端口供電也米有反應,果然是電源端與地段短路了,通過萬用表也測出來了,但無法找出是哪裏發生短路了,估計是哪裏被擊穿了吧。後來我看了下這個板子的系統電路圖,他們的電源端和地端之間都是接有電容的,我想很可能是某個電容被擊穿了,導致短路。電機啓動瞬間會產生尖峯脈衝會對控制器產生影響。

複製他人(如圖爲L298組成的電機控制,MCU是STM32F103RBT6,電源12V,經過LM2676轉換5V供給板上5V的芯片,5V經過LM1117輸出3.3V給STM32,電機運行的情況下將產生50V的反向電動勢,這個電動勢將在續流二極管SK24的作用下回饋到電源VIN消耗掉,也就是這樣會擡高輸入的12V電壓,假使這個50V的反壓會通過LM2676到達+5V電壓,在L298的+5V端通過L298的IO作用到STM32的IO,
第一個問題,看到STM32的IO說明圖裏面有保護二極管,這個保護二極管是內部帶的嗎?這個二極管吧高壓回饋到STM32的電源,會不會燒芯片,手冊上的“VDD_FT 對5 伏兼容I/O 腳是特殊的”,VDD_FT是如何連接的,什麼原理能使他兼容5V輸入,。是不是兼容5V就去掉了內部的上拉保護二極管。它與VDD 不同手冊所說的ESD保護2000V是否能保護我現在這種情況的發生。
第二個問題,我現在L298用的5V邏輯電壓,STM32用的3.3V,這種情況下STM32做輸出會產生什麼不好的因素,如何避免。設置爲OD嗎?

經過試驗,現在很快燒燬了兩片103RBT6,實在是無法也不太敢在原來電路基礎上做實驗,望各位多多指教,)
http://bbs.eeworld.com.cn/thread-249976-1-1.html


http://www.amobbs.com/thread-5495321-1-1.html


http://bbs.21ic.com/icview-583546-1-1.html

解決任何問題必須下定決心,一定要一定要!!!不然拖拖拉拉!

我認爲編碼器與單片機是需要共地的,需要參考定位點,寬且編碼器的電源並不是導致TM32燒掉的原因,罪魁禍首應當還是那個12V電源!

給平衡小車編碼器供電時需要跟單片機共地麼

肯定需要共地的。

不然你編碼器返回的脈衝和你單片機參考電平不一致

這樣單片機就不能得到有效的電平信息

所有的類似的需要兩個系統之間通訊的,在使用一套電源的前提下都是需要共地



STM32的IO口是要先進行時鐘定義然後初始化的。


在我對IO口初始化後,再在main函數中寫入PWM_INT()之後,我的車子受PWM輪子可以轉了。
終於進入最後的PID參數的調節。
此時的小車程序代碼如下,當然我還沒有接上紅外遙控模塊,但PWM可以正常輸出控制電機了。http://pan.baidu.com/s/1pJuqIz5



平衡小車matlab建模:
建模、控制算法及PD調節的取值參考:

 http://www.mathworks.com/matlabcentral/fileexchange/19147-nxtway-gs-self-balancing-two-wheeled-robot-controller-design
 
硬件及軟件參考如下網站資料;
 http://www.circuitcellar.com/avr2006/winners/de/at3329.htm
 http://tlb.org/scooter.html
 http://www.geology.smu.edu/~dpa-www/robo/nbot/

matlab(matlab需要2008版,舊的6.5版打不開)裏打開NXT.mdl,輸入NXT.m.txt內容回車,K_f的四個值就是所需的PD調節比例;詳細參考NXT的文檔;

主控制板說明:

 1:新佈置的,因爲修改了一些不合理的地方,和我使用的不一樣,主控制板上RS232硬件部分還未調試過,所以使用時需要注意;
 
 2:可調電位器用來調試修改PD參數;
 
 3:另外幾個接口可以用來改成遙控輸入,比例遙控可以用AD採樣口實現,但需要增加濾波;
 
 4:車輪速度我進行了低通濾波,否則可能會發抖;
 

馬達控制板說明:

 1:同樣重新修訂,PCB最好自己優化並檢查;
 2:馬達控制板最好是使用IR2184,因爲直接兼容5V電平,IR2111需要使用12V輸入,我直接在單片機輸出口接12V上拉電阻,也可以使用,但不推薦;
 
上位機只是簡單的查看濾波效果和車速是否正確取得,VB編寫的,大家可做完善;


zl
2010.06.16




辛苦了大概兩個多月,之前一直都調不好。中間也遇到了很多的問題,但當問題解決後每次都是重大的突破。現在就介紹一下,製作過程中遇到的問題。
                1、關於加速度計的轉換系數
                要製作自平衡車,角度和角速度的計算就很重要。關於加速度計和陀螺儀的使用就不多說了,他們一個用來測加速度計,一個用來測角速度。
                把從加速度計讀出來的數據轉換成角度,要乘以一個比例係數。在轉換成角度角度的過程中,可以完全不用三角函數(因爲車的傾角其實不會超過正負10度,後面會提到),直接把(最大值-最小值)/90(/2如果有正負的話)作爲比例係數就可以了(這樣可以和真實角度比較)。其實理論上這個比例係數是什麼都可以,因爲後面陀螺儀轉換系數是根據加速度計的轉換比例係數跳出來的,所以加速度計的比例係數無論是什麼值都沒有影響。
                
                2、關於陀螺儀轉換系數
                陀螺儀的轉換系數需要根據濾波的波形來調(我是在飛思卡爾公佈的官方方案中看到的,經實踐千真萬確),陀螺儀的轉換系數不用去算,只需要通過看波形去調就可以了,直到不超調也不滯後就可以了,具體的可以看附件官網方案中的93頁(第二版)。
                
                3、關於濾波
                角度濾波有很多方案,我所知道的是互補濾波、官網的方案和卡爾曼濾波,我的感想是什麼濾波都不重要,重要的是參數要調好。

                互補濾波:這是很簡單也很實用的方法,其實和官網的方案有一點類似的地方,在網上有一個很著名的20頁的PPT文件The Balance Filter,介紹的是互補濾波,相信大家看了之後都會明白的。在文件中,作者把高通濾波係數a和時間常數T(濤,不知道怎麼打出來)及採樣週期dt用一個公式建立了聯繫,而我的經驗是,我們不要用這個公式去計算。高通濾波係數取0.98(不能比0.98再小了,會不平滑),採樣週期根據你程序的需要是多少就多少(5ms的效果會比10ms好很多,越小越好),濾波可以通過調陀螺儀的轉換系數達到很好的效果。也就是說,用互補濾波的關鍵調試參數是陀螺儀轉換系數,把加速度計轉換系數、高通濾波係數和採樣週期定好之後,只需要調試陀螺儀轉換系數就可以達到滿意的效果了
                PS:互補濾波的效果一定不差,我看過網上用互補濾波和單純的P控制達到很好的效果的。

                官網濾波方案:我總覺得官網的和互補濾波有些相似,經實驗,效果也是很好的。具體的公式在參考方案裏面也有。調試的關鍵就是陀螺儀轉換系數。

                卡爾曼濾波:一直沒用過,也不會用,主要是沒弄懂。我不喜歡用一知半解的東西,因爲出現問題的時候排查不出來或者不知道怎麼解決問題。網上也有很多卡爾曼濾波的程序,因爲一直看不懂,就連試也沒試。如果會用的話,效果應該是好的,但我不會用。如果有誰用興趣的話還請多多指教,互相交流一下。

                4、關於控制
                當然有再好的角度和角速度控制不好的話也是站不好的。控制就用一般的PID控制,PWM=P*角度+D*角速度,這裏沒用積分控制,效果已經很好了。
                在官網的方案中,還加上了死區電壓,我的最大的體會就是,這個死區電壓是可以不要的,而且不要更好(或者去一個小一點的值)。
                這樣的話就要把P調的很大。具體是多大呢,至少是電機滿值的十分之一(五分之一甚至三分之一都是沒問題的),例如電機最大輸出是1的話,P取0.1、0.2、0.3都是沒問題的(官網的方案好像是取的0.3),如果點擊最大輸出是5000的話,那麼P取500、1000、1500都是可以的,(當然前提是加速度計轉換系數轉換出來的角度值和真實值相當,否則另當別論)。所以車模的角度應該不會超過正負十度,因爲當P=0.3的時候,車模有三度多的偏差時電機就滿電壓輸出了。我之前就是一直用一個很小的P去調,原來所有的問題就在於把P調大就可以了。
                至於D的話,大概在P的七十分之一或八十分之一之間都是可以有很好的效果的。這個關係就和加速度轉換系數沒有關係了。比如官網中P=0.3則D=0.3*1/75=0.004,在我這裏P=1000,則D=1000*1/75=13.3,效果都是很好的。PS:這個關係只是在車模靜止平衡時的關係,行進中的關係我還沒有實驗過。

                5、說明
                (1)陀螺儀的過沖是一個嚴重問題,高通濾波的那個電容是不可取的,要把它去掉纔好。
                (2)每一步都是關鍵,要真正理解原理纔會知道怎麼調。
                (3)資料不知道怎麼上傳,他總是說附件超過大小了,有需要的可以留言

                 下一步打算把速度控制加上,誰有好的又不是很貴的編碼器可以推薦下,謝謝!


http://www.amobbs.com/forum.php?mod=viewthread&tid=5464211
總結得也是相當到位的,現在才漸漸看懂。

現在才漸漸意識到核心不是PID的調節了,是濾波還有轉換系數等等。

 





下面一張截圖是我目前小車調到最好時的濾波,可以明顯感受到濾波前和濾波後的不一樣,也深深地感受到濾波信號處理的厲害與重要。

這個波形的顯示的扯個串口調試助手還是用山外的好,那個SSCOM32以後建議不用了,直接用這個,功能非常強大,支持自動搜索串口等等,包括髮送字符也支持16進制的顯示。完爆SSCOM32,也謝謝學長的推薦,我也附上合格山外串口調試助手的下載鏈接,裏面有使用說明文檔。http://pan.baidu.com/s/1i3AItQt
經過串口調試顯示波形再調試參數等等,現在車子可以達到穩定十幾秒最高紀錄42秒了。(連續幾十個小時徹夜的參數調試),下面附上目前調的最好的一組參數的程序,至少可以讓小車保持基本(十幾秒幾十秒)的平衡,當然我最終目標是永久的平衡。下面是程序鏈接:http://pan.baidu.com/s/1i38a27V


附上我小車的圖片吧(硬件上已經完成的)

本來是想自己把串口引出來,後來才發現那個手機數據線插口下載程序的就是串口,可以共用哈哈。




我覺得我之後要好好研究下濾波了,對於這個小車,還遠沒有結束,只是開始,我要它像那天晚上我見到的四軸飛行器一樣平穩!我覺得濾波是關鍵中的關鍵!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章