找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 12813|回復(fù): 10
收起左側(cè)

低成本、低檔自平衡小車歷程(超聲自平衡小車)

  [復(fù)制鏈接]
ID:113207 發(fā)表于 2016-4-11 02:04 | 顯示全部樓層 |閱讀模式
第二階段目標:

如標題所述,真正的入門級平衡車,真的低成本,不用陀螺儀和加速度傳感器,用超聲波測距實現(xiàn)平衡的小車!!
見 114# 介紹。!

第一階段總結(jié):
1# 第一版詳細資料。

42# MPU6050-DMP輸出穩(wěn)定性測試,DMP每次啟動后均要20秒左右后角度輸出才穩(wěn)定,使用者要注意此問題。!

43# 第二版小車,硬件做了塊PCB底板,換了一個全光耦隔離的L298N模塊,這個版本做兩款軟件:一是單側(cè)碼盤測速,另一是用PWM輸出值取代測速碼盤,效果也不錯。

50# 藍牙手機控制助手,編寫了一個簡單的安卓控制平衡小車的程序。

56# 自平衡小車參數(shù)整定方法,針對前面一些經(jīng)驗和教訓(xùn),總結(jié)了參數(shù)調(diào)整中的一些問題。

63# 不用MPU6050的DMP輸出,采用原始數(shù)據(jù)一階互補濾波解算角度,也不用PID庫,直接編寫PID計算,效率更高,穩(wěn)定性與控制效果也更好。

65# 第三版源代碼,測試數(shù)據(jù)和最新視頻效果。

2014.12.4

以下為原1#貼內(nèi)容

一、基本材料
1、Arduino Pro Mini模塊
2、CP2102模塊
3、MPU6050模塊
4、CH06藍牙模塊
5、L298N驅(qū)動模塊
6、測速傳感器模塊
7、小車底盤
194937gbph1w8h46xobrr8.jpg

二、硬件設(shè)計
1、Arduino Pro Mini + MPU6050測試驗證
Arduino Pro Mini模塊與MPU6050模塊的連線圖見前面圖片,即:SDA接A4,SCL接A5,VCC接VCC,GND接GND,INT接2。
下載:i2cdevlib-master(https://github.com/jrowberg/i2cdevlib
****MPU6050庫的安裝方法*************************
a. 下載arduino編譯器,目前版本為1.0.5。
b. 下載MPU6050庫。進入“https://github.com/jrowberg/i2cdevlib”,點擊“zip”即可。
c. 安裝。將上一步下載的“I2Cdev”、“MPU6050”兩個文件夾拷貝到“arduino-1.0.5libraries”目錄下。
運行arduino可以在例子中看到MPU6050。OK!

2、硬件原理圖
Arduino-Pro-Mini-schematic.pdf (37.43 KB, 下載次數(shù): 13)


105611vs8yxtwno6zltqy4.jpg
111502tspkeskeusv7ua4e.jpg
其中D2S為外部中斷0的接線選擇:一種選擇是MPU6050的DMP方式,這種方式就只能用一個測速碼盤計數(shù)了;另一種選擇是用兩個測速碼盤計數(shù),但不能用MPU6050的DMP方式。

三、軟件設(shè)計

1、源代碼
WJY_DIY_v1_2.rar (3.23 KB, 下載次數(shù): 28)

2、說明
此處雖然用了速度PID,但這個的輸入是碼盤計數(shù)值,這個值其實不是速度,而是速度的累加,也就是速度的積分,所以其Sd、Sp這兩個參數(shù)分別對應(yīng)于速度環(huán)的P系數(shù)和I系數(shù),也就實現(xiàn)了速度環(huán)的比例和積分這兩項。

PID調(diào)節(jié)公式:PWMOut = KAp*angle + KAd*angle_velocity + KSp*speed + KSi*position

四、參數(shù)整定
1、先將 kp、ki、 kd、 sp、 si、sd 均設(shè)置為0;
2、先設(shè)定一個電機的起步補償值,因為這個之不同,就相當(dāng)于使用了不同的電機,這個值的選擇,是根據(jù)你自己搭建完平臺后,通過測試左右電機的起步值和停止值,然后綜合考慮設(shè)定的,也沒什么理論指導(dǎo),在起步和停止之間分別候選幾個,然后根據(jù)不同的補償值,在分別調(diào)整PID的系數(shù),這樣優(yōu)選一組即可;
3、逐漸增大 kp 使得小車剛剛來回擺動;
4、再逐漸增大 kd 使得小車的擺動消失,再繼續(xù)增大 kd 小車會出現(xiàn)抖動,適當(dāng)減小 kd,使得小車相對平穩(wěn)即可;
5、接下來調(diào)節(jié) sd(注意不是 sp,理由見軟件設(shè)計的說明部分),使得小車能夠來回走動(不是擺動,也不是抖動);
6、最后逐漸增大 sp,使得小車能夠相對穩(wěn)定;
7、什么程度為好,自己花一定的時間慢慢摸索,就能逐漸體會到自己的一套“主觀”標準了!
8、最后一個參數(shù)也要注意,就是“抗積分飽和”值,這個值的選擇我感覺與 sp 的大小有關(guān),自己摸索吧,這個值如果選擇太大會出現(xiàn)往一邊跑,最后跌倒在地;如果太小會很快倒地。

五、初步成果
1、靜態(tài)照片
195329biytn3vna6knx3vu.jpg

2、運行曲線圖
142415w49d03dohdfnc89f.jpg

3、視頻




六、問題及解決方案
1、電機性能測試
小車平臺裝配完畢,應(yīng)測試一下,兩個電機的特性,測試程序如下:
WJY_DIY_test.rar (1.01 KB, 下載次數(shù): 19)

用此程序分別測試兩個電機的啟動值和停止值,也可測量兩個電機的速差。

2、電機干擾問題
電機一起動,Arduino + MPU6050就無法工作,這個問題,在各論壇中均有提及,我這里采取的措施是,電機單獨用一塊7.4V的鋰電供電,并且L298N的所有控制線均用光耦隔離。

3、系統(tǒng)供電
除上述電機供電外,系統(tǒng)其他部分的供電絕不可僅用 Arduino Pro Mini 上的穩(wěn)壓電源給其他部分供電, Arduino Pro Mini 上的穩(wěn)壓電源輸出所能提供的電流有限,我這里僅用他給 MPU6050 模塊供電,藍牙串口模塊單獨用一個低壓差穩(wěn)壓模塊給其供電。

七、參考資料
1、pz_cloud 的:做了一個小小的自平衡小車(更新完整版,附視頻)
http://www.geek-workshop.com/thread-5688-1-1.html
2、匠人的百寶箱:《自平衡兩輪車》講義 http://bbs.21ic.com/blog-24110-84728.html
3、求助:用MPU6050,L298N控制的平衡小車,運行1分鐘就死機,(含詳細代碼注釋!已上...
http://www.geek-workshop.com/thread-1548-1-1.html
4、MPU6050庫,https://github.com/jrowberg/i2cdevlib
i2cdevlib-master.zip (295.46 KB, 下載次數(shù): 13)

5、PID庫: PID_v1.zip (7.47 KB, 下載次數(shù): 19)
回復(fù)

使用道具 舉報

ID:113207 發(fā)表于 2016-4-11 02:09 | 顯示全部樓層
我測速模塊燒了,今天修改了一下程序,用PWM的值取代測速碼盤,效果也不錯!
明天試另一方案:用6050模塊的加速度積分取代測速信號檢測,作為速度PID的輸入,看看效果如何?如果成功,下次在用6050的方位角信息來控制小車的兩輪均衡運轉(zhuǎn),或者控制小車的轉(zhuǎn)向。
MPU6050-DMP輸出穩(wěn)定性測試
在以往調(diào)節(jié)平衡小車的過程中,發(fā)現(xiàn)小車的平衡角不斷改變(不是物理的改變,而是測量結(jié)果的改變),造成的結(jié)果,就是小車往一邊跑,如果不及時修正角度設(shè)定值,小車就自己倒下了。
上兩張測試結(jié)果圖
165444qaxh4l8n0h0hjhyn.png
165554td83k3u72pmujj9j.png
從測試結(jié)果來看,傾斜角大約需要20多秒才能穩(wěn)定下來,方位角雖然在20秒左右穩(wěn)定下來了,但輸出始終在小幅漂移。

---------------------

新款的小車,做了塊PCB底板,換了一個帶六路光耦隔離的L298N模塊,上兩張圖片
171406dkkisb2s3b23232g.jpg
PCB底板上安裝有:Arduino ProMini模塊、MPU6050模塊、藍牙模塊、低壓差5V穩(wěn)壓、電池及充電線插座。
171517tvbws85h4ds31hav.jpg
整機取消了測速碼盤,下面安裝了一組電池共底板上各部分供電,最上面的一組電池共L298N模塊供電。
172730gaqjtadydizjtqti.jpg
172752v63kq4xxaxx1xxnl.jpg


擺動是在平衡之前,也就是開始你的小車用手扶著,松開就倒,但你逐漸增大Kp后,再松開手,就會發(fā)現(xiàn)它來回擺動了,這時就已經(jīng)初步成功站立了,然后再逐漸增大Kd……


給自己的小車編了個簡單的安卓手機藍牙控制程序,先上界面(本人水平有限僅能做這種特簡單的界面):
205640ze3nta72ukw7j7fb.jpg
再上源程序和APK安裝程序
WJY_DIY_APK.rar (509.36 KB, 下載次數(shù): 20)
開發(fā)工具軟件是:RFO_BASIC!
也是小巧好玩的東西,可以在手機上直接編程并運行!
Basic.rar (417.95 KB, 下載次數(shù): 10)

Builder_APK.rar (670.89 KB, 下載次數(shù): 15)

1.rar (7.97 MB, 下載次數(shù): 17)



回復(fù)

使用道具 舉報

ID:113207 發(fā)表于 2016-4-11 02:50 | 顯示全部樓層
自平衡小車參數(shù)整定方法

1、將Kp、Ki、Kd、Sp、Si、Sd均設(shè)為零。
2、用支架將自平衡小車支起,處于水平狀態(tài)。
3、在程序每次輸出小車實際角度的同時,輸出Arduino的系統(tǒng)時間[用millis()函數(shù)],下載并運行程序用串口調(diào)試助手記錄系統(tǒng)時間與MPU6050的角度輸出,記錄足夠的數(shù)據(jù)后“保存窗口”數(shù)據(jù),用Excel打開記錄的數(shù)據(jù)文件,觀察數(shù)據(jù)穩(wěn)定時間。
105734nhs0hyu1zf4h8nzu.jpg
105750zq4hh4hnun44t7qy.jpg
105801qdgxc5d15a2993d2.jpg

4、確定完這個穩(wěn)定時間后,將程序輸出恢復(fù)到原來狀態(tài)(去掉時間輸出部分),重新下載,去掉小車支架并啟動運行;將小車放置于一固角度位置,保持不動,觀察角度輸出數(shù)據(jù)是否穩(wěn)定(這個時間必須大于第3步所測時間),待數(shù)據(jù)穩(wěn)定后,用手扶著小車找其自然物理平衡角;通過串口工具輸出“G”或“g”將平衡設(shè)定角“setp0”設(shè)置到與小車的自然物理平衡角相一致。
5、這此之后小車的整定過程中不要斷電,始終保持運行狀態(tài),逐步增加Kp,觀察小車的兩輪是否有抵抗角度變化的力量,如果不僅不能抵抗角度的變化,而是順著角度變化(增大角度的變化),則將順其變化的控制電機接線反過來接,再繼續(xù)下一步。
6、繼續(xù)增大Kp,小車會出現(xiàn)來回擺動,增大或減小Kp,使其擺動的幅度不導(dǎo)致小車傾倒為原則。
7、增大Kd,小車的擺動會逐漸減小,如果繼續(xù)增大Kd,小車會出現(xiàn)抖動現(xiàn)象,調(diào)節(jié)Kd,使其相對平穩(wěn)(因為香蕉電機很難做到特別穩(wěn)定)即可。
8、逐漸增加Sd(這里也要做個判斷,用手平推小車,小車是否有抵抗行為,如果沒有抵抗,而是順其運行,說明速度環(huán)控制方向反了),使得小車來回走動(不是擺動),然后增加Sp,使其來回走動逐漸減小,達到比較滿意即可。

注意:第四步必須做,否則小車往往就跑向一邊了。!
自平衡小車參數(shù)調(diào)整方法.rar (181.72 KB, 下載次數(shù): 18)


------------------------------------------

今天參考了
Arduino 自平衡小車,制作經(jīng)驗記錄與分享,愿有興趣人士,一起學(xué)習(xí)探討。
http://www.torrancerestoration.com/bbs/dpj-48041-1.html
的帖子,根據(jù)自己小車的實際情況做了一些調(diào)整,完成了第3版的平衡小車,沒用使用MPU6050的DMP功能了,讀取原始數(shù)據(jù)采用一階互補濾波求角度,這樣可以用兩個中斷測量左右輪的速度了。
這個效果感覺更好,幾乎僅用一個Kp就能站立了,我測試了一下程序的整個運行周期,大概在3~4ms,這樣調(diào)整速度更快了,所以感覺效果好多了。
另外,由于碼盤一圈才20個孔,我才用電平變化測量方式,一圈也就計數(shù)40次,所以在一個周期這么短的時間內(nèi),速度計數(shù)幾乎為0,所以我是200ms左右測量一次速度。
讀取MPU6050的原始數(shù)據(jù)計算出來的角度幾乎啟動后就是穩(wěn)定的數(shù)據(jù),DMP方式要20秒左右才能穩(wěn)定!。



--------------------------------------------

第三版最新程序代碼:
WJY_DIY_v1_4.rar (2.16 KB, 下載次數(shù): 14)
程序中增加了一個兩輪速度差修正系數(shù)Kdsp,由于我這個測速碼盤只有20孔,所以速度差檢測不太敏感,目前效果不明顯,要么增大速度差的采樣周期,但這樣反應(yīng)也就變得很慢,先天硬缺陷,沒法與高端的相比。

測試記錄數(shù)據(jù)(500ms一個點)見下圖:
183404j6aut44t6one4p4g.jpg
圖中紅色區(qū)域,可以看出,當(dāng)小車實際角度偏離機械平衡點超過一定值(這個值由PID的調(diào)整輸出與電機的啟動閾限決定),由于快速的PID調(diào)整,即使是香蕉電機也能很快調(diào)整到新的平衡點。
詳細數(shù)據(jù)如下:
SAVE2014-12-4_17-57-30.rar (10.73 KB, 下載次數(shù): 15)

最新視頻效果



WJY_DIY_v1_4_1.rar (2.2 KB, 下載次數(shù): 15)

回復(fù)

使用道具 舉報

ID:127462 發(fā)表于 2016-6-20 20:01 | 顯示全部樓層
學(xué)習(xí),學(xué)習(xí),學(xué)習(xí)謝謝
回復(fù)

使用道具 舉報

ID:136714 發(fā)表于 2016-8-14 07:36 | 顯示全部樓層
學(xué)習(xí),學(xué)習(xí),學(xué)習(xí)謝謝
回復(fù)

使用道具 舉報

ID:140059 發(fā)表于 2016-9-21 18:18 | 顯示全部樓層
學(xué)習(xí),學(xué)習(xí),學(xué)習(xí)謝謝
回復(fù)

使用道具 舉報

ID:140874 發(fā)表于 2016-9-29 14:18 | 顯示全部樓層
給力啊   超贊
回復(fù)

使用道具 舉報

ID:79544 發(fā)表于 2016-11-21 15:52 | 顯示全部樓層
51hei學(xué)習(xí) 發(fā)表于 2016-4-11 02:50
自平衡小車參數(shù)整定方法

1、將Kp、Ki、Kd、Sp、Si、Sd均設(shè)為零。

樓主。有51的就好啦。學(xué)習(xí)分享學(xué)習(xí)啦,再就是你的那個軟件怎么安裝和使用,謝謝!
回復(fù)

使用道具 舉報

ID:151483 發(fā)表于 2016-12-1 21:30 | 顯示全部樓層
謝謝分享
回復(fù)

使用道具 舉報

ID:229378 發(fā)表于 2018-4-10 13:52 | 顯示全部樓層
感謝樓主。。。。。。。。。。。。。。。。。!
回復(fù)

使用道具 舉報

ID:1022278 發(fā)表于 2022-5-18 14:08 | 顯示全部樓層
51hei學(xué)習(xí) 發(fā)表于 2016-4-11 02:09
我測速模塊燒了,今天修改了一下程序,用PWM的值取代測速碼盤,效果也不錯!
明天試另一方案:用6050模塊 ...

程序沒有啊
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表