簡介
此次為大家帶來的是OpenAtom OpenHarmony(以下簡稱“OpenHarmony”)系統與PID控制算法相結合并落地的平衡車項目。 PID控制算法是一種經典的,并被廣泛應用在控制領域的算法。類似于這種:需要將某一個物理量保持穩定的場合,比如維持平衡,穩定溫度、轉速等,PID都會適用。在四軸飛行器,平衡小車、汽車定速巡航、溫度控制器等場景均有應用。



硬件配置資源
- 兩輪平衡小車主要硬件資源:
- 主控CPU:小熊派BearPi-HM Nano(Hi3861)開發板;
- 陀螺儀:MPU6050六軸陀螺儀傳感器;
- 左右輪:帶有霍爾傳感器的直流電機;
- 小車平臺及結構件資源可以自行在相關網站獲得。
原理概括


PID算法介紹
平衡車的控制離不開對PID算法的應用。那么什么是PID算法?它能解決什么問題? PID算法:就是“比例(proportional)、積分(integral)、微分(derivative)”,是一種常見的“保持穩定”控制算法。

- P比例參數:該參數能夠快速讓小車達到平衡狀態,但是由于控制是滯后的,以及是慣性系統,容易帶來超調,即小車會出現前后搖擺的現象。所以P參數不能太大;
- I積分參數:小車由于摩擦力或者風阻力,并且P不能太大,只靠P控制有可能達不到穩定狀態,所以需要加入I積分參數,消除穩態誤差;
- D微分參數:平衡小車維持的是傾斜角度要為平衡角度,由于PI參數使小車振蕩,小車會出現前后搖擺現象,加入D微分參數能夠消除小車的振蕩。
兩步搭建樣例工程
在OpenHarmony源碼基礎上,兩步構建平衡小車代碼。(OpenHarmony源碼下載路徑及BearPi-HM Nano(Hi3861)開發板代碼燒錄,請參考文章末尾相關鏈接) 第一步:拷貝Balance_car文件夾到源碼路徑下:deviceoardearpiearpi_hm_nanoapp (Balance_car文件獲取路徑,請參考文章末尾相關鏈接) 如圖文件夾目錄:

關鍵算法講解
兩輪平衡車的控制主要涉及三個PID環的串聯使用,它們分別是直立環(平衡控制)、速度環(速度控制)、轉向環(方向控制)。三個控制效果合成,控制輪子運行。

float g_middleAngle = 1.0;//平衡角度
float g_kpBalance = -85800.0;
float g_kdBalance = -400;
static int ControlBalance(float angle, short gyro)
{
int outpwm = 0;
float angleBias = 0.0;
float gyroBias = 0.0;
float tempAngle = 0.0;
float tempGyro = 0.0;
tempAngle = 0 - angle;//極性控制
tempGyro = 0 - gyro;
angleBias = g_middleAngle - tempAngle;
gyroBias = 0 - tempGyro;
outpwm = (g_kpBalance / 100 * angleBias + g_kdBalance
* gyroBias / 100);
return outpwm;
}
速度環控制算法:速度環控制的目的是讓機器以恒定速度前進或后退,該恒定速度可以為0速度,即要讓平衡車靜止。速度環采用了PI環控制,只有比例與積分環節。
float g_kpSpeed = 95800.0;
float g_kiSpeed = 200;
static int ControlSpeed(long int left, long int right)
{
int outpwm = 0;
int speedBias = 0;
int speedBiasLowpass = 0;
static int speed_i = 0;
float a = 0.68;
static int speedBiasLast = 0;
speedBias = 0 - left - right;
speedBiasLowpass = (1 - a) * speedBias
+ a * speedBiasLast;
speedBiasLast = speedBiasLowpass;
speed_i += speedBiasLowpass;
speed_i = limit_data(speed_i, SPEED_H, SPEED_L);
outpwm = (g_kpSpeed * speedBiasLowpass / 100 +
gkiSpeed * speed_i / 100);
return outpwm;
}
轉向環控制算法:轉向環的目的是控制小車以恒定速度轉向。在本次場景為了控制小車平衡靜止,所以只做了限制轉向的操作。
static int ControlTurn(short gyro)
{
int outpwm;
outpwm = g_kpTurn * gyro;
return outpwm;
}
以上詳細代碼,請參考文章末尾的相關鏈接(Balance_car文件獲取路徑)。
總結
本文呈現了兩輪平衡小車的大致原理。簡單介紹了一下PID算法的效果:P比例參數,能夠快速讓系統達到穩定值,但是P太大容易超調,帶來振蕩;I積分參數,消除穩態誤差,讓系統達到穩定值;D積分參數,能消除振蕩,但是會使系統時效性變慢。開發者可以根據現場情況,合理調節PID三個參數。 本樣例是OpenHarmony知識體系工作組為廣大開發者分享的樣例。同時知識體系工作組結合日常生活,給開發者規劃了各種場景的Demo樣例,如智能家居場景、影音娛樂場景、運動健康場景等;歡迎廣大開發者一同參與OpenHarmony的開發,更加完善樣例,相互學習,相互進步。本文由電子發燒友社區發布,轉載請注明以上來源。如需社區合作及入群交流,請添加微信EEFans0806,或者發郵箱liuyong@huaqiu.com。
熱門推薦干貨好文
1、?24Bit ADC高精度低功耗MCU 醫療級別設備參考設計(附上高精確算法+電路原理圖)?
2、超強性能AI芯片,OpenHarmony多系統支持,可定制高性能AP(附10+開發Demo)
3、從零入門物聯網OH開源平臺,從簡單到高階項目,創客、電子愛好者都愛用!
4、低成本ESP32方案,支持OpenHarmony系統開發(附10+項目樣例Demo)
5、NO RTOS移植!32位、64線程開發板,超強實時性體驗!
6、四核64位,超強CPU ,看RK3568“競”開發板DEMO!
7、人工智能也能這么玩, 簡單快速入手,還能自定義AI運算
8、業界首款!支持富設備開發,OpenHarmony開發者都選它!
9、高性能雙核RISC-V,滿足大多數開發,這款國產MCU工程師都愛了!
原文標題:【精選好文】玩轉OpenHarmony PID:教你打造兩輪平衡車
文章出處:【微信公眾號:電子發燒友論壇】歡迎添加關注!文章轉載請注明出處。
-
電子技術
+關注
關注
18文章
923瀏覽量
57592 -
電子發燒友論壇
+關注
關注
5文章
198瀏覽量
1291
原文標題:【精選好文】玩轉OpenHarmony PID:教你打造兩輪平衡車
文章出處:【微信號:gh_9b9470648b3c,微信公眾號:電子發燒友論壇】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
杰發科技亮相2025年兩輪車智能化技術發展大會
武漢芯源半導體CW32L010在兩輪車儀表的應用介紹

武漢芯源半導體CW32L010在兩輪車儀表的應用介紹
兩輪電動車智能藍牙無鑰匙開鎖模組
Microchip推出電動兩輪車生態系統
九號公司與寶馬集團攜手合作,共創新型電動兩輪車
Qorvo助力電動兩輪車性能提升
兩輪電動車系統介紹與THVD8000在兩輪電動車上的應用

LTE-CAT1模組在兩輪車電池中的應用

安朔科技ble5.2藍牙模塊+兩輪車藍牙鑰匙方案

評論