一. 硬件介紹
底板資源:
MPU6050陀螺儀
WS2812 RGB彩色燈 * 4
紅外接收頭
ESP-01S WIFI
核心板
電機采用的是平衡小車之家的MG310(GMR編碼器)電機。底板上有兩個TB6612芯片,可以驅動四個電機,除了做平衡小車之外,也可以用來作為四驅車的底板,非常nice,同時支持兩種控制方式,推薦通過紅外遙控進行控制,實現起來非常簡單,紅外遙控器也非常便宜。
二. RTL 介紹
本次設計分為三大部分: MPU6050姿態解算 , 電機驅動(PWM+編碼器) , 平衡控制,遙控器控制的模塊另外算。其中MPU6050姿態解算為設計的核心,解算出來的角度越穩,平衡控制就越容易,小車也就越穩定。平衡控制其核心是調節PID的參數,參數調的好,小車沒煩惱。
這里只對框架上做一個簡單的介紹
整體架構如下
? ? ? ?
1. MPU6050姿態解算
模塊數據流如下圖所示,將獲取到的角度進行一個8階的FIR濾波,加速度進行一個2階的IIR濾波,即可得到相對平滑一點的數據,然后經過Cordic算法進行姿態解算,即可得到roll和pitch角度,為了得到更加平滑一點的roll和pitch數據,這里將得到的角度再進行了一個1階的均值濾波(本來使用的是3階的均值濾波,但是相位延時有點大,所以修改為1階的了)
? ? ? ?
2. 電機驅動(PWM+編碼器)
框圖如下,在實際使用的時候,只使用了速度的檢測,角度檢測這部分功能就去掉了,PWM生成模塊另算,這部分的代碼是比較簡單的,就不作過多的說明了。
? ? ? ?
3. 平衡控制
平衡車的控制采用三環: 直立環、速度環、轉向環,來進行控制,直立環采用的是PID進行控制,速度環采用的是PI進行控制,而轉向環由于yaw在MPU6050解算的時候,誤差較大,所以沒有使用PID來進行控制轉向的速度,而是直接輸出的兩輪的速度差進行控制。框圖如下,三環通過PID進行調節后,相加得到最終的PWM值進行輸出。三5環的具體實現可以參考開源的平衡小車C語言實現,所以難點不在代碼實現上,而在于PID的調參上面,沒有經驗且沒有人指導的情況下,那簡直是噩夢,如果長時間沒有調好的話,容易懷疑是不是小車的結構有問題(但小車的結結構一般是沒有問題的,哈哈哈)。
? ? ? ?
4. 遙控控制
本來想使用低成本高效率的紅外遙控來對小車進行控制的,但是出現了意外,接收到的紅外遙控值不穩定,按同一個按鍵,接收到值居然不一樣。沒辦法,還好弄了個esp-01S,可以通過tcp進行連接,之前弄四軸飛機的有程序,可以拿來直接使用,美滋滋。
三. 總結
FPGA平衡小車的基本架構就已經介紹完了,很多模塊在都已經實現過,拿來通過簡單的修改就可以直接用了,代碼實現上還是比較輕松的,難點在于PID的調參上,也是花了非常多的時間。
速度環,還是有點問題,能力時間有限, 沒有調好(?﹏?),希望后面有時間了可以接著調。
來源:FPGA之旅
-
FPGA
+關注
關注
1630文章
21796瀏覽量
605988 -
陀螺儀
+關注
關注
44文章
792瀏覽量
98972 -
開發板
+關注
關注
25文章
5121瀏覽量
98191 -
驅動芯片
+關注
關注
13文章
1295瀏覽量
54920 -
平衡小車
+關注
關注
1文章
39瀏覽量
12531
原文標題:FPGA實現平衡小車
文章出處:【微信號:FPGA研究院,微信公眾號:FPGA研究院】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論