stm32藍牙平衡小車製作項目心得(一)

前言

自從肝了這麼多正點原子stm32的視頻,一直沒有做項目來實踐。這次的平衡小車項目可以說是很適合練手的,也具有一定的挑戰性,特別是新手第一次做的時候,要完成整體的框架是有一定的難度的,不知從哪裏下手。

從開始做大概經歷了半個多月,終於實現了藍牙遙控的平衡小車,這一路跌跌撞撞,一直在重複掉坑然後爬出來再掉入下一個坑,這裏寫下來一方面是爲了記錄和總結這段時間學到的知識和經驗,另一方面希望能夠爲其他的初學者排雷。畢竟我在做的時候也是一直參考其他博主和商家的資料,也希望能夠能幫自己排雷。(下面都是作者自己的見解,有什麼不對的,大神們可以聯繫我更正)

下面開始排雷:

硬件篇:

1、小車的板子,建議最好是自己畫PCB,這裏我因爲放假電烙鐵忘帶回家了,加上疫情只好買的商家的板子。這裏真的要吐槽一下某亞博智能的板子,MPU6050的中斷線也沒接浪費了,一鍵下載還要自己拔跳線帽,非常不方便。開發時很受限制,有些只能跟着他寫。

2、小車的平衡效果跟它的硬件結構其實有很大的關係,理論上,小車的重心越靠近輪軸,小車就越容易達到平衡。所以對於初學者,不用跟淘寶上商家的小車結構一樣,避免了頭重腳輕小車不容易平衡。像電池這些比較重的,可以考慮放在下面。我的是這樣:

在這裏插入圖片描述

3、電機的接線,這個簡單說說就好啦,減速電機通常是接12V左右的電源,也就是M+、M-,編碼器的正負極接5V的VCC和GND,然後編碼器的AB相就接stm32的io口就好啦,單片機可以通過io口獲取編碼器輸出的電頻計算速度。

PID篇:

小車需要使用PID算法的主要是控制小車輸出速度的直立環、速度環、轉向環。

直立環:

也是小車保持直立最基礎的控制環,需要運用的是PD控制,也就是P(比例控制)和D(微分控制),計算公式:

Vertical_Out=Vertical_Kp*(Roll-Med_Angle)+Vertical_Kd*(gyroy-0);

其中Roll是MPU6050獲取到的小車偏離y軸的角度,Med_Angle是小車達到平衡的期望角度,也就是機械中值,gyroy是MPU6050獲取到的小車對於y軸方向的加速度。

通過調節Vertical_Kp和Vertical_Kd,小車就能夠實現對偏離的角度進行反應,並正反饋去保持平衡。只靠直立環還不足以讓小車站穩,比例控制會讓小車對偏離角度產生反應導致低頻震盪,而微分控制是爲了抑制小車的震盪,讓小車趨於平穩。

速度環:

速度環的作用主要是讓小車能夠趨於穩定的狀態,通過計算當前小車的速度,和之前對小車速度的累加,進行PI控制(比例控制和積分控制)。

Velocity_Out=Velocity_KpNow_Speed+Velocity_KiSpeed_S;

Now_Speed爲計算的當前小車的速度,Speed_S是對獲取到的小車速度的累加值。
即Speed_S+=Now_Speed;
由於小車前後的速度有正有負,所以速度環的工作就是讓小車的速度值相加之後爲0,即讓小車能夠在受到干擾時回到原位,即趨於穩定。

小車要想站穩的話有了直立環和速度環就基本可以了,大體效果如下:

在這裏插入圖片描述

轉向環:

由於兩個輪子的電機可能造成同樣的值輸出會有一點差距,轉向環的作用是調整這兩個輪速度的差值,即利用MPU6050獲取到的小車偏離z軸的加速度,然後根據z軸加速度的大小賦給左右輪不同的速度讓它走直線。

Turn_Out=Turn_Kp*gyro_Z;
然後在讓一個電機輸出的值加Turn_Out,另一個減Turn_Out就好啦。(這裏要注意極性。)

就先介紹到這裏,下一篇是軟件篇,我會把寫程序的大體框架和寫程序中遇到的坑都列出來,供大家參考。這段時間比較忙,之後有空我也會把整個工程程序分享在我的微信公衆號上, 有需要到時候可以下載。要是急也可以在我的微信公衆號加我微信聯繫我,我也可以直接分享。

希望對讀者有所幫助,喜歡的話可以關注一下我的公衆號,我會把學習筆記發在上面,大家可以一起共同學習!

在這裏插入圖片描述
Alt

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章