自己做的自平衡小車(chē),基本達(dá)到預(yù)期效果。制作資料在壓縮包里面,供參考。
該兩輪自平衡小車(chē)硬件設(shè)計(jì)概述:
- 控制器:ATmega16;8MHz;
- 加速度傳感器:MMA2260;陀螺儀:EWTS82;
- 傳感器的融合:卡爾曼濾波;
- 馬達(dá):EN_2342CR(速比64)+雙路12脈沖編碼器+CD40106對(duì)信號(hào)整形;
- 驅(qū)動(dòng)板芯片:CD4001+IR2111+IRF1404(驅(qū)動(dòng)電流可以很大);
圖片(拍攝效果不佳),視頻如下:
小車(chē)實(shí)物圖展示:
設(shè)計(jì)分析:
其實(shí)控制很簡(jiǎn)單,利用定時(shí)器產(chǎn)生10ms中斷,每次中斷進(jìn)行如下工作:
1:AD采樣加速度傳感器和陀螺儀,然后卡爾曼濾波得出角度與角速度;(濾波模塊借鑒老外的)(互補(bǔ)濾波效果感覺(jué)不是很好);
2:計(jì)算車(chē)輪的速度,積分得出位置;
3:利用PD算法得出PWM值=K1*angle + K2*angle_dot + K3*speed + K4 * position;
4:前進(jìn)后退給定參考速度計(jì)算即可;
注意:
- 增量式輪速傳感器A相中斷,讀取B相電位判斷前進(jìn)還是后退,在10ms的時(shí)間內(nèi)累加,計(jì)算車(chē)輪的速度;
- 由于10ms累加的輪速信號(hào)不多,直接計(jì)算車(chē)體會(huì)發(fā)抖,所以增加了低通濾波,解決問(wèn)題;
- 我在外面增加4個(gè)電位器可以手動(dòng)調(diào)節(jié)4個(gè)K值,方便調(diào)試;
- 附件的文件夾里面有matlab建模的資料,可以求出所需的4個(gè)K的值,(參考NXT的),大家可自行調(diào)試K值看看對(duì)車(chē)輛的影響;
電機(jī)選取建議:
- 由于考慮到減速器,而且?guī)鞲衅?。其?shí)后面實(shí)踐得知可以不要位置傳感器,這樣選擇電機(jī)的空間就很大了,買(mǎi)便宜的;
- 電機(jī)扭矩要大;說(shuō)白了,功率要大;轉(zhuǎn)動(dòng)慣量大似乎的更穩(wěn)定,所以不用空心杯的也許更好;
- 減速比可以大一點(diǎn),用較大的輪子;
- 重心越靠下,抗擾性越強(qiáng);但是可能會(huì)影響穩(wěn)定性;
購(gòu)買(mǎi)的電機(jī)型號(hào)參考:
算法:
常用計(jì)算方法有兩種:互補(bǔ)濾波和卡爾曼濾波;都可以輸出校正后的角度與角速度;我采用的是卡爾曼濾波,考慮到單片機(jī)的運(yùn)算能力,是經(jīng)過(guò)精簡(jiǎn)的,當(dāng)然這些都是老外做的,關(guān)于卡爾曼濾波,我找了很多資料,詳見(jiàn)附件內(nèi)容。