1、項目概述
在網上看到各種制作自平衡小車的帖子,也跟著做了起來。因為第一次做,心里沒底,也就沒有投入過多的資金,一切按照最小配置進行,所以選擇“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系數設置的調整。
電路原理圖如下所示:
圖中J1為HC-SR04超聲波測距模塊,J2、J3為L298N模塊,Arduino Nano為核心控制模塊,MG1、MG2分別為左右電機。
與之前用香蕉電機+MPU6050做的自平衡小車相比較要簡單很多,在MPU6050方案中,用了兩塊電池,其中一塊單獨用于電機供電,而且L298N必須用光耦隔離的。
而用超聲波做的自平衡小車,雖然用的是TT馬達(俗稱香蕉電機),但僅一塊電池供電,L298N電機驅動模塊也沒有光耦隔離,從最終調試后的效果上看,還比前者更穩定。
成品照:
材料清單
這個材料清單比較完整,是帶遙控器的。在電商平臺可以收集齊全,大家可以i自行搜索。
4、程序設計
程序源代碼:http://www.52solution.com/auto-dl/7374
5、調試流程
最新版超聲平衡小車裝配完畢后如下圖所示。
串口調試助手程序:http://www.52solution.com/auto-dl/7375
a、準備工作
將Kp與Kd調為0,調整方法是,旋轉電位器后,按下Arduino模塊上的復位鍵調整方可有效。調整后用串口調試助手(sscom42.exe)發送 “F”命令,讀取超聲自平衡小車參數的設定值。在使用串口調試助手前,首先選擇串口調試助手對應的串口號,設置好波特率,方可發送上述命令讀取超聲自平衡小車參數的設定值,操作界面如下圖所示。
第一個數據為平衡點設定值,第二個數據為Kp,第三個數據為Kd。
b、超聲波測距測試
發送相應“L”命令,讀取超聲波的測距值,注意,這里不是實際的mm或cm值,而是對應距離來回的傳播時間值,是單片機內部計時的輸出值。
操作界面如下圖所示。
第一個數為超聲波測距模塊的直接輸出值,第二個數為一階濾波后的值。改變超聲波測距模塊與被測界面的距離,這兩個值會發生相應的改變,距離近,測得的值變小,距離遠測得的值就增大。
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使得平衡點設定值減小,直到小車能夠長時間穩定為止。
6、總結與展望
超聲自平衡小車的基本版已經完成,在制作過程中與我之前用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、另外,我還做了一個對比測試,數據見下表:
誤差絕對值是指小車在一段時間內,實測距離與設定平衡點距離誤差絕對值的平均值;濾波是指程序中對超聲波測量的距離濾波或不濾波直接使用;循環周期是程序中的延時時間,超聲波測量需要大約704us,一個周期大約為3.84ms,程序處理時間大約為136us
評論
查看更多