1、項目概述
2015年底在網上看到各種制作自平衡小車的帖子,也跟著做了起來。因為第一次做,心里沒底,也就沒有投入過多的資金,一切按照最小配置進行,所以選擇“TT馬達”,俗稱“香蕉電機”的小車底盤。在等快遞送貨期間,才看到各種說用“香蕉電機”做自平衡小車的問題,最大的問題就是電機啟動對傳感器和單片機的干擾問題,還有就是平衡的穩定性不好等問題。在我以Arduino + MPU6050 + L298N為核心做完后,閑得沒事干,就想做一款成本低,易上手,最小配置和最基本功能的自平衡小車,其目的就是給那些沒有什么經驗的剛入行的新手們提供一個入門的解決方案。所以這個項目的目標有以下幾點:
a、成本低;
b、目標功能明確,就是實現小車的自平衡;
c、系統穩定可靠;
d、調試、操作方便簡單。
2、項目方案
基于上述目標,本方案采用超聲波測距模塊作為小車平衡狀態的檢測,免去了對加速度、陀螺儀傳感器的理解和復雜處理算法。小車的平衡控制仍然采用網絡上流行的Arduino開源硬件,再加上電機驅動模塊 L298N,電機仍然采用TT馬達(香蕉電機)。
該方案為了降低成本,采用電位器調整設定小車的平衡參數,不使用藍牙無線模塊或有線串口在線調整參數。
用超聲波測距的方式實現的自平衡小車,網絡上有人提出這種方案無法在坡度變化的斜坡上保持平衡,這種說法經過我的實踐,是有解決方案的,這個問題我將在后面進行闡述。
平衡控制的算法還是采用平衡車中經典的PD算法。
3、硬件設計
硬件設計比較簡單,以Arduino Nano為核心控制模塊,采用HC-SR04超聲波測距模塊,L298N電機驅動模塊,供電采用7.4V/2200mAh鋰電池。圖中三個10K電位器分別用于平衡點設置、PD算法中Kp和Kd系數設置的調整。
電路原理圖如下所示:
100423je5trvu9ctru8885.jpg (121.58 KB, 下載次數: 173)
下載附件
2016-4-10 01:52 上傳
圖中J1為HC-SR04超聲波測距模塊,J2、J3為L298N模塊,Arduino Nano為核心控制模塊,MG1、MG2分別為左右電機。
與之前用香蕉電機+MPU6050做的自平衡小車相比較要簡單很多,在MPU6050方案中,用了兩塊電池,其中一塊單獨用于電機供電,而且L298N必須用光耦隔離的。
而用超聲波做的自平衡小車,雖然用的是TT馬達(俗稱香蕉電機),但僅一塊電池供電,L298N電機驅動模塊也沒有光耦隔離,從最終調試后的效果上看,還比前者更穩定。
成品照:
142743dt0xvvqzv2l22tiu.jpg (110.34 KB, 下載次數: 152)
下載附件
2016-4-10 01:52 上傳
材料清單
151854qqsm9cjo78ysa9xm.jpg (179.93 KB, 下載次數: 171)
下載附件
2016-4-10 01:52 上傳
這個材料清單比較完整,是帶遙控器的。
4、器材采購
a、Arduino Nano模塊
143224rcn6lwi77vjw6nrc.jpg (79.74 KB, 下載次數: 169)
下載附件
2016-4-10 01:52 上傳
b、HC-SR04 超聲波模塊
143301pht278lhdehv1soh.jpg (113.79 KB, 下載次數: 155)
下載附件
2016-4-10 01:52 上傳
注意,HC-SR04超聲波模塊,寶上有兩種,我們用的是這種不帶晶體的,還有種帶晶體(見下圖)3.80元左右不要買,在近距離不穩定,另外測量的最小周期要稍長一些。
143338ecv44c2ivppsv3vn.jpg (69.15 KB, 下載次數: 147)
下載附件
2016-4-10 01:52 上傳
c、L298N電機驅動模塊
143428yuqeh1q4u31o5ohq.jpg (68.88 KB, 下載次數: 149)
下載附件
2016-4-10 01:52 上傳
d、TT馬達及固定件
143524vkih6f0h0skiubb1.jpg (54.48 KB, 下載次數: 199)
下載附件
2016-4-10 01:52 上傳
143536zt7mdmjkfiyimn5r.jpg (60.58 KB, 下載次數: 148)
下載附件
2016-4-10 01:52 上傳
e、電池及充電器
143635lw53jgjvwbob6f5h.jpg (51.81 KB, 下載次數: 157)
下載附件
2016-4-10 01:52 上傳
143646k05g7f8405sok007.jpg (59.31 KB, 下載次數: 192)
下載附件
2016-4-10 01:52 上傳
143656ouzyep8aweap86yy.jpg (60.8 KB, 下載次數: 135)
下載附件
2016-4-10 01:52 上傳
5、程序設計
程序源代碼:
v2.4.zip
(7.66 KB, 下載次數: 97)
2016-4-10 01:28 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
程序很簡單,總共不到90行,有不明之處請留言
6、調試流程
最新版超聲平衡小車裝配完畢后如下圖所示。
144506liomsghhzi0ho6i7.jpg (316.42 KB, 下載次數: 154)
下載附件
2016-4-10 01:52 上傳
串口調試助手程序
SSCOM32.zip
(351.78 KB, 下載次數: 25)
2016-4-10 01:29 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
a、準備工作
將Kp與Kd調為0,調整方法是,旋轉電位器后,按下Arduino模塊上的復位鍵調整方可有效。調整后用串口調試助手(sscom42.exe)發送“F”命令,讀取超聲自平衡小車參數的設定值。在使用串口調試助手前,首先選擇串口調試助手對應的串口號,設置好波特率,方可發送上述命令讀取超聲自平衡小車參數的設定值,操作界面如下圖所示。
144647yfuaushu5u5rlhug.jpg (101.11 KB, 下載次數: 144)
下載附件
2016-4-10 01:52 上傳
第一個數據為平衡點設定值,第二個數據為Kp,第三個數據為Kd。
b、超聲波測距測試
發送相應“L”命令,讀取超聲波的測距值,注意,這里不是實際的mm或cm值,而是對應距離來回的傳播時間值,是單片機內部計時的輸出值。
操作界面如下圖所示。
144735un9g9n4vpkuyk6ew.jpg (116.17 KB, 下載次數: 148)
下載附件
2016-4-10 01:52 上傳
第一個數為超聲波測距模塊的直接輸出值,第二個數為一階濾波后的值。改變超聲波測距模塊與被測界面的距離,這兩個值會發生相應的改變,距離近,測得的值變小,距離遠測得的值就增大。
c、尋找物理平衡點
在Kp、Kd為0時,用手尋找自平衡小車的物理平衡點,同時用“L”命令(500ms定時發送)讀取超聲波測量的返回值,確定平衡點的返回值,并記錄下來。
d、平衡點PB的設定
調整PB電位器,并在Arduino復位后,用“F”命令讀取超聲自平衡小車參數的設定值,使得第一個返回的數據與上述確定的物理平衡點相一致。
e、判斷電機運轉方向是否正確
在完成上述調整后,逐漸增大Kp(請記住,每次調整后,都必須復位Arduino模塊,調整才能生效),看到電機能夠動作時,停止調整Kp。這時將超聲波模塊一端稍稍下壓(也就是使超聲波探頭與地面距離縮短),觀察兩個電機的轉動方向,往前(超聲波測距模塊一端為前)轉測試正確的,往后轉則說明相應的電機兩根線接反了,將接反的線調換過來即可。
f、Kp參數整定
在電機接線正確后,再逐漸增大Kp,使得小車能夠來回有點擺動即可進入調整Kd參數階段。
g、Kd參數整定
在調整完Kp后,逐漸增大Kd,使得擺動消失,如果繼續增大Kd,小車會出現明顯的抖動,此時將Kd往回調整,使得抖動消失即可。
h、平衡點PB的進一步調整
在上述參數調整完畢后,小車一般就能保持平衡了,如果出現小車往一邊跑的現象,可通過調整PB電位器加以修正。如果小車往前跑(超聲波模塊一端為前),調整PB使得平衡點設定值增大;如果小車往后跑,調整PB使得平衡點設定值減小,直到小車能夠長時間穩定為止。
7、照片與視頻
145029df54o4v7mob4xmh1.jpg (304.08 KB, 下載次數: 156)
下載附件
2016-4-10 01:52 上傳
8、總結與展望
超聲自平衡小車的基本版已經完成,在制作過程中與我之前用MPU6050制作的小平衡車相比有以下幾點體會:
a、在用TT馬達的情況下,如果系統使用同一組電池供電,電機一啟動Arduino與MPU6050立即死機,或者MPU6050的數據受干擾極為嚴重,不可使用。解決辦法是用另一組電池單獨給L298N供電,并且L298N要選擇帶光耦隔離的。但同樣的使用TT馬達的情況下,用超聲波測距方案,系統僅用一組電池即可,而且L298N也無需光耦隔離,系統很穩定。
b、超聲波傳感器的選擇要選擇最小測量周期短的模塊,第一次我使用的是US-015 超聲波測距模塊,US-015是目前市場上分辨率最高,重復測量一致性最好的超聲波測距模塊,US-015的分辨率高于1mm,可達0.5mm,測距精度高,重復測量一致性好,測距穩定可靠。但他的最小測量周期大于10ms,而且對輸出數據經常有跳動(這是由于它的靈敏度很高,在近距離時超聲波在模塊與地面之間的來回反射的二次信號都能被檢測到),為此在地面墊上一個地毯吸收了部分能量的超聲波,才能穩定工作。在第二版中更換了HC-SR04超聲波模塊,這個模塊的測距精度雖然只有3mm,但它的最小測量周期僅略大于3ms。但這種模塊市場上有兩種,一種沒有晶體,一種是帶晶體的,帶晶體的很不穩定,建議大家不要選擇。
c、小車的平衡穩定性與多種因素有關,建議在結構上,重心越低越好。
d、另外,我還做了一個對比測試,數據見下表:
150122o41gx42d33ccgxdg.jpg (49.13 KB, 下載次數: 152)
下載附件
2016-4-10 01:52 上傳
誤差絕對值是指小車在一段時間內,實測距離與設定平衡點距離誤差絕對值的平均值;濾波是指程序中對超聲波測量的距離濾波或不濾波直接使用;循環周期是程序中的延時時間,超聲波測量需要大約704us,一個周期大約為3.84ms,程序處理時間大約為136us,實測波形圖如下。
超聲測距波形圖:
150217gf1a1kafvqstfoxz.bmp (146.3 KB, 下載次數: 145)
下載附件
2016-4-10 01:52 上傳
3ms延時的一個周期波形圖:
150248zxaak1s5x1w5vavs.bmp (146.3 KB, 下載次數: 173)
下載附件
2016-4-10 01:52 上傳
通過以上對比分析,當一個循環周期大于20ms時,小車很難長時間保持平衡了,另外重心的升高,平衡的穩定性明顯變差。
e、下一步選擇具有測速功能的小車底盤,實現上下坡、下臺階等復雜動作,不為別的,只是證明超聲自平衡小車這個方案是沒有嚴重的缺陷的。因為自平衡小車本身就有很多局限性,譬如他能下臺階就不能上臺階吧,也不能在極不平坦的路上行走等等。
f、最后,我想說明一下,自平衡小車雖然簡單,但也是一個麻雀雖小五臟俱全的項目,譬如小車的結構設計、電機的響應、扭矩的大小、小車的輪胎的選擇、PID的調參等等都會影響到小車的平衡穩定性。我們在網上看到的資料大都是說傳感器、程序和調參,在結構設計、電機的選擇(明確的參數數據對比)等方面都很欠缺或不完整,沒有充分的說服力。很多新人就想學校的實驗課程一樣,僅僅照別人的做法做了一遍,沒有太大的收獲,特別是碰到問題不知道如何深入分析。大家在DIY的過程中都做出點自己的東西,無論成功與失敗,哪怕做一些經驗和教訓的總結也是對大家的貢獻。希望大家在DIY這個樂園里無拘無束的、自由自在的、快快樂樂的玩耍!!!
加“全棉地毯”是由于US-015的超聲波測距模塊在一般的反射面情況下,并且超聲測量周期小于40ms時,返回值經常出現異常,我用示波器觀察的波形與返回的實測數據是完全一致的。現附上波形示意圖如下:
145950agav2cig2navhwha.jpg (83.64 KB, 下載次數: 193)
下載附件
2016-4-10 01:52 上傳
在實測過程中,我發現在超聲波的探測面朝上工作時,我用小塊的障礙物測試時,并不出現上述現象。我分析可能是由于朝下時,反射面比較大,可能是超聲波在小車與地面之間來回反射造成的某種干擾,后來我就想到用“全棉地毯”吸收部分超聲波能量,避免來回反射造成測距的干擾。因為測量周期大于40ms的話,整個調整就反應不過來了。
這里告訴大家,任何事、或者任何方案都有可能會出現一些意想不到的問題的。當時選擇US-015是考慮到它的測距精度高,探測精度0.1cm+1%。
今天我換上HC-SR04模塊,這個模塊的探測精度要差一些,給的指標是3mm。但我通過測試發現,就在桌面和其他普通界面不存在US-015的那種問題,而且測量周期在小于4ms的情況下都能穩定工作。
這就是今天發的照片跟以前的差別所在:1、小車運行的地面不同;2、超聲波測距模塊已經更換了。
9、后記
在完成上述工作之后,又進行了一些不成系統的零散實驗性的工作。第一項工作是在上述平臺上增加了一個具有AB相編碼輸出的測速單元,將小車的速度控制作為最終目標,以調整平衡設定距離來控制小車的速度為手段,這樣就可實現超聲自平衡小車在變化的坡度上保持動態穩定平衡。
小車平衡算法一般有兩種:一種是平衡(角度或距離)PID + 速度PID;另一種是,速度PIDà平衡PID。這第二種就是用速度PID的輸出去改變平衡PID的目標值。要實現超聲自平衡小車在變化的坡度上保持動態穩定平衡,就必須采用這第二種控制算法。
另外,網絡上有些人利用控制電機的PWM輸出值,代替測速單元,近似的給出小車的速度。對于此問題我也簡單的測試和分析過,現簡要談談我對這一問題的看法:這種方式在一定的條件下是可以近似替代的,前提是在水平的地面上,地面不能有影響小車運動的各種障礙物,第三個是小車的響應不能太滯后。如果這三條不能滿足,此方案不可取。
這項工作的驗證比較簡單,就是在有測速單元的小車上,同時增加PWM輸出模擬測速,將兩個測速的結果輸出,對輸出的數據畫出曲線,就可直觀的看出兩者的差距。
另一項工作是,在原有的平臺上增加了一個升壓模塊,將L298N的Vin由以前的7.4V提高到12V,小車的穩定性有一定的改觀,關于這一點一是通過觀察就可感覺到平衡的穩定性有所提高,另外通過數據分析也可明顯的得出結論。在兩種電壓(注意,此時的Kp、Kd、PB等參數都要做相應的調整,使得每種電壓下都是最佳狀態)下,將PID的輸出值(這個值是在輸出限制在255以內之前的值),觀察超過255的頻數就可得出結論,如果超過255,在輸出之前被限制了,就說明這次調整是不到位的。
第三項工作是增加了一個四通道遙控開關,實現了小車的前進、后退、左轉、右轉功能,這項工作中就利用PWM的輸出近似得出小車的速度。這個遙控開關也很便宜,雖然只有A、B、C、D四個按鍵,但可以輕易的做到八個有效狀態的控制。這八個狀態分別為:A、B、C、D、AB、CD、AC、BD。
150551bzex2u6e2eta9tau.jpg (53.68 KB, 下載次數: 186)
下載附件
2016-4-10 01:52 上傳
150604xmp5e4nmfluuezmp.jpg (167.97 KB, 下載次數: 139)
下載附件
2016-4-10 01:52 上傳
遙控超聲自平衡小車視頻
坡度動態改變時的超聲自平衡小車視頻(拆了門板做的測試)
平面與坡度上的超聲自平衡小車
二代超聲自平衡小車視頻
第二代超聲自平衡小車:材料成本不超過90元人民幣;程序源代碼不超過90行;PID參數整定非常容易。
材料清單:
083632awemz2eoodvhlvx4.jpg (157.4 KB, 下載次數: 186)
下載附件
2016-4-10 01:52 上傳
原理圖:
085237ebo5b0258py66zp6.jpg (256.57 KB, 下載次數: 174)
下載附件
2016-4-10 01:52 上傳
需要超聲自平衡小車程序源代碼的請加入QQ群:385432944
PID參數整定:
1、先根據你超聲波測距在平衡點處附近的實際返回值(通過串口發送“L”命令讀取實測值),將源代碼中的Len_0修改為“實際返回值” 減去50,編譯并下載程序;
2、將KD電位器設置為0,將KP設置到小車能明顯抵抗傾倒運動即可;
3、調整PB電位器,使得小車基本既不往前也不往后跑即可;
4、繼續增大KP,使得小車在原地有點前后擺動;
5、增大KD,使得小車擺動消失達到你滿意的平穩程度即可。
新到60線測速碼盤和AB線編碼光電傳感器,上圖:
安裝示意圖:
163942zch0chw6fehtwqh1.png (434.96 KB, 下載次數: 189)
下載附件
2016-4-10 01:52 上傳
測試實物連接照片(注意電機電源兩端要接個104電容,否則窄脈沖干擾):
164027b0nhw8478f8keer0.jpg (150.23 KB, 下載次數: 143)
下載附件
2016-4-10 01:52 上傳
164039udggginw5gxfxg5f.jpg (172.29 KB, 下載次數: 151)
下載附件
2016-4-10 01:52 上傳
實測波形圖:
164200g6k7se6ksskvekk1.bmp (146.3 KB, 下載次數: 144)
下載附件
2016-4-10 01:52 上傳
放假有東西玩了。。
今天上午在第二代超聲自平衡小車上加裝了金屬碼盤(60線),帶AB相輸出的測速裝置,遇到點小坎坷,其中的B相輸出接觸不良,無奈又換成WTK-20(這個質量的確要好些),但固定方式要改造,下午干了半天鉗工活,裝上后,吃完晚飯開始調程序,解決所謂的超聲自平衡小車不能在坡上平衡的問題。
剛剛調試完畢,非常興奮,把臥室的門板拆下來一邊墊高,建立了一個斜坡小環境,拍了兩段視頻:
一個是先在水平的地面上平衡,然后放到斜坡上平衡(是同一組參數);
另一個是在斜坡上平衡,但坡度在平衡過程中是變化的。
正在上傳視頻,等上傳完畢后再供大家欣賞。
照片其實差不多,視頻還沒確認,就發兩張吧(晚上照的,不太清楚)
正面(跟二代差不多,仔細看就是多了4根線)
202743rssostt5stxbxsoo.jpg (107.01 KB, 下載次數: 158)
下載附件
2016-4-10 01:52 上傳
反面的測速裝置
202812dbpeenq7ujqpsnzn.jpg (108.32 KB, 下載次數: 161)
下載附件
2016-4-10 01:52 上傳
原本在假期中解決這個問題,沒想到解決得還很順利(就是裝測速裝置,由于質量問題,采購花時間,安裝時又反復了兩次)第三代超聲自平衡小車原理圖:
204649esgvcgcdqc98k5ha.jpg (251.91 KB, 下載次數: 165)
下載附件
2016-4-10 01:52 上傳
平面與坡度上的超聲自平衡小車視頻
其實超聲測距平衡車的坡度(變化)上平衡問題,換個思路就不是問題了,平衡車首要關注的是小車平衡,關注的是角度,控制的是小車速度的變化(加速度);對于超聲波測距平衡車,其思路恰恰相反,關注的是速度,控制的是平衡角的變化,這樣問題就迎刃而解了!
昨天晚上升壓模塊到了,將用TT馬達做的超聲自平衡小車的電機電壓由以前的7.4V升到12V,重新調整了一下各參數,12V的比7.4V的穩定性有所提高。
最近沒事,買了一個底盤,測了一下電機的響應特性,順便將TT馬達(明顯看出性能很差)也測了一下,結果如下:
115132m1hmjmwo3pmxjjn3.jpg (116.69 KB, 下載次數: 165)
下載附件
2016-4-10 01:52 上傳
曲線模式
115142anuy0u2q002y0ugn.jpg (76.46 KB, 下載次數: 172)
下載附件
2016-4-10 01:52 上傳
數據模式
每個電機測了三次,第一條曲線表示加電壓,不要看具體指,其實PWM都是給到了255。
這是在帶AB相輸出測速,好電機底盤上的超聲自平衡小車
213331p4cacclk6zhfabbj.jpg (142.88 KB, 下載次數: 148)
下載附件
2016-4-10 01:52 上傳
下面是MPU6050的,用了兩組電池、光耦隔離電機驅動
213402x7djlbatvvwa7gv2.jpg (185.06 KB, 下載次數: 143)
下載附件
2016-4-10 01:52 上傳
視頻效果
|