基於RT-Thread的兩輪平衡小車設計

1、前言html

  最近參加了RT-Thread官方發起的RT-Robot Car DIY活動,藉此機會想總結一些本身本科四年的所學的部分知識。git

  也能夠幫助到那些須要的小夥伴(能夠參考個人代碼中對RT-Thread的can設備驅動的使用方法,對IIC驅動的使用方法,mpu6050+hmc5883的初始化和數據讀取的方法,RT-Thread硬件定時器的使用方法,滑動窗口濾波的鏈表實現,pid結構的代碼參考,pid參數調試方法等)github

 

2、演示算法

  github連接(包括整個keil工程的代碼,原理圖和PCB,機械圖紙和一些參考資料):https://github.com/iamluoyijie/funny_car多線程

  小車實物:app

 

  兩個演示視頻連接:https://v.youku.com/v_show/id_XNDMzNzExODMyMA==.html框架

           https://v.youku.com/v_show/id_XNDMzNzExODMxNg==.html編碼

 

 

 

 

3、詳細步驟線程

  硬件上,MCU選用stm32f407zgt6,imu選用gy-86(mpu6050+hmc5883+ms5611)。電機爲大疆無刷電機m2006,電機驅動爲電調c610,因此選用6s航模鋰電池,因此須要設計24V轉5v,5v轉3.3v穩壓電路,分別使用lm2576-5.0和asm1117-3.3穩壓芯片,因爲電調使用can總線通訊,因此須要單片機外接can芯片,選用TJA1050,除此以外就是MCU的一些接口電路,包括led,key,sw下載接口、多路串口、PWM和IO。總得來講比較簡單(須要注意一點是:電池24v輸出到電調24v輸入,是在pcb上走線,單路額定電流10A,線寬須要注意,最好雙面都佈線)。這是AD18的PCB工程連接,。這是pcb的3d圖:設計

  

  機械上,須要根據電機尺寸單獨設計電機支架和小車底板,三視圖以下所示:

     

  軟件上,我是使用的這個目錄下的bsp:https://github.com/RT-Thread/rt-thread/tree/v4.0.0/bsp/stm32f4xx-HAL,須要的功能能夠在rtconfig.h文件中開啓對應的宏。 

  1. 用rtt的can設備驅動框架,完成了對電機電調的讀寫控制,具體見keil工程目錄下的can_app.c文件,實現了對兩個電機的正反轉控制,讀取電機轉速,轉矩等數據。
  2. 因爲can讀取的電機轉速值數據的波動不穩定,再一個由於轉速更新頻率爲1k,速度環控制週期是2ms,因此用滑動窗口濾波算法對數據作了平滑處理,最後pid調參的效果所以好了不少。
  3. 用rtt的IIC驅動完成了對gy-86傳感器(mpu6050+hmc5883+ms5611)的初始化和數據讀取,具體見gy-86.c文件,完成了對角速度,加速度,和磁力計數據的讀取。
  4. 而後用Mahony算法(這算法是開源的)把讀到的數據解算成歐拉角,見imu.c文件,須要注意的是sampleFreq要根據本身的控制週期來設置,角速度須要歸一化。最後解算的pitch和roll角比較穩定,yaw角有一點漂移。
  5. 而後用rtt的軟件定時器,將pid內環速度環控制週期設置爲2ms,外環角度環控制週期設置爲5ms, 見timer_app.c文件。
  6. pid參數整定是經過山外調試助手顯示波形,經過rtt的FinSH組件在線去修改參數,極大的提升了效率,見timer_app.c文件,。
  7. pid控制框圖以下圖所示,其中的PID計算就是最簡單的比例+積分+微分的結構,再加上了適當的限幅。
  8. 平衡車直立就是將下圖指望角度設置爲0,前進後退則是將指望角度設置爲一個合適的正負的角度值,轉彎就是在左右輪的指望速度上,加減一個合適的速度值,這角度值和速度值經過PS2搖桿的模擬量給定,就能完成遙控對平衡小車的控制。
  9. 利用rtt的多線程技術,完成了ps2遙控線程(ps2代碼參考的這位朋友的,很好用,在此表示感謝),LED狀態顯示線程,電機電流保護線程,按鍵線程,很大程度上簡化了程序的設計。

4、不足分析與接下來繼續要作的工做。

  一、速度內環的pid效果不太理想,500的電機目標轉速,實際轉速波動有正負50。角度外環0度的指望角度,有正負0.5度的波動,小車運動過程當中,速度過快就會倒。我感受最重要的緣由就是電池過重,致使小車重心偏高,其次就角度更新頻率太慢,電機轉速值不許,pid參數也不是最優。

  二、代碼上,使用了太多全局變量。led的狀態顯示沒好好弄,ps2的好多按鍵沒利用上。

  三、接下里的工做就是,使用RT-Thread的IPC機制,儘可能減小全局變量的使用。 經過yaw角度或電機編碼器,實現轉向環 速度 的閉環控制。增長 前進 和 轉向 的位置控制。(前面的都是速度控制),也就是說還要增長3組pid控制。

  四、可能會從新設計電機支架,把電池放到電機下面,下降平衡車重心。會增長樹莓派,用opencv實現簡單的目標跟蹤等工做。

相關文章
相關標籤/搜索