戴慶
摘 要:本項目代碼基于C語言開發(fā),選用宏晶科技有限公司的8位單片機STC8A8K64S4A12作為主控制器,采用重力加速度陀螺儀傳感器MPU-6050獲取重力加速度和角度數(shù)據(jù),通過互補濾波對獲取的數(shù)據(jù)進行數(shù)據(jù)融合從而得到小車姿態(tài)。經(jīng)過PID算法處理后,系統(tǒng)輸出PWM(脈沖寬度調(diào)制)控制信號到電機驅(qū)動芯片BTN7971B,以控制小車的兩個電機的正反轉(zhuǎn)和轉(zhuǎn)速,使小車保持平衡狀態(tài)。同時,使用旋轉(zhuǎn)編碼器獲取小車的速度信息,通過PID算法將PWM輸出并加以融合,從而實現(xiàn)小車的速度與方向控制。
關(guān)鍵詞:STC8A8K64S4A12;角度檢測;PID算法;互補濾波
中圖分類號:TP368.1;TP242 文獻標識碼:A 文章編號:1003-5168(2021)09-0015-03
Abstract: The code of this project is developed based on C language, the 8-bit single-chip microcomputer STC8A8K64S4A12 from STC MCU Limited is selected as the main controller, and the gravity acceleration gyroscope sensor MPU-6050 is used to obtain the gravity acceleration and angle data, and the obtained data is fused through complementary filtering to obtain the car attitude. After PID algorithm processing, the system outputs PWM (Pulse Width Modulation) control signal to the motor drive chip BTN7971B, in order to control the forward and reverse rotation and speed of the two motors of the trolley, so that the trolley maintains a balanced state. At the same time, the rotary encoder is used to obtain the speed information of the trolley, and the PWM output is combined through the PID algorithm to realize the speed and direction control of the trolley.
Keywords: STC8A8K64S4A12;angle detection;PID algorithm;complementary filtering
近年來,隨著科學技術(shù)的發(fā)展,兩輪平衡車逐漸進入人們的視野,以小米科技有限責任公司的產(chǎn)品為代表,作為一種短途的交通工具,具有極高的趣味性和便利性。平衡車研究始于日本,高速發(fā)展于美國,國內(nèi)研究始于中國科學技術(shù)大學、西安交通大學等科研單位,然后研究成果逐漸被科技公司應用于日常生活中,作為短途的交通工具、物品運輸載體和智能機器人等,而這都取決于其獨特的驅(qū)動方式,能夠使產(chǎn)品體積小巧,運動也更加靈活和便捷,其能夠在狹窄的環(huán)境中運行。
兩輪平衡車狀態(tài)不穩(wěn)定,人們需要通過一些外部的力使其平衡。車輛模型的直立需要不停地調(diào)節(jié)電機的轉(zhuǎn)動,使本身穩(wěn)定在一個狀態(tài);調(diào)節(jié)車輛模型的速度時,人們需要改變車輛模型的傾角,傾倒時,車輛模型需要一個同方向的加速度來保持穩(wěn)定,傾角越大,加速度也越大,從而完成速度的控制。本研究涉及傳感器的采集、數(shù)據(jù)的處理、角度的計算和電機的控制等內(nèi)容,從兩個方面闡述了兩輪平衡車設(shè)計,希望能給相關(guān)人員提供參考。
1 硬件系統(tǒng)的組成
小車硬件電路分為主控板和驅(qū)動電路版,上面分別集成了各個模塊,通過接口和尼龍柱連接,安裝效果如圖1所示。小車的供電可以選擇電池或者超級電容,超級電容具有快速充放電的特性,使用超級電容時,要配備單獨的穩(wěn)壓模塊將快速下降的電壓穩(wěn)定在某一值。
設(shè)計車輛模型的電路時,人們需要根據(jù)接口和處理數(shù)據(jù)量選擇合適的單片機,并逐步設(shè)計其他模塊,形成完整的系統(tǒng)。系統(tǒng)的輸入與輸出包括五部分。一是I2C數(shù)字接口(2路IO模擬I2C數(shù)字接口),用于連接MPU-6050模塊;二是PWM接口,控制車模電機雙方向運行,這里使用的是H橋驅(qū)動,所以需要4路;三是串行通信接口SCI(UART,即通用異步收發(fā)器),用于程序的下載和調(diào)試以及藍牙遙控;四是外部中斷,用于編碼器測速;五是IO接口,連接一些IO設(shè)備,如超聲波、紅外傳感器等。
控制電路劃分為6個子模塊。一是單片機最小系統(tǒng),即STC8A8K64S4A12;二是MPU-6050六軸傳感器,獲取小車角度值;三是速度檢測,使用外部編碼器獲取脈沖頻率;四是電機驅(qū)動,直流電機驅(qū)動電路;五是電源及其穩(wěn)壓電路;六是設(shè)置與調(diào)試,內(nèi)容包括顯示車模狀態(tài)、快速調(diào)試及程序下載。
2 主要電路模塊設(shè)計和分析
2.1 電源模塊
使用兩節(jié)18650鋰電池串聯(lián)供電時,人們需要將驅(qū)動電路板上安裝電容穩(wěn)壓模塊的接口短接起來,無須其他的外圍電路,而且更換方便;使用超級電容供電時,人們需要在驅(qū)動板上焊接4個規(guī)格為2.7 V 60 F 1840的法拉電容,此外還有均壓芯片和大功率MOS(場效應)管,以防電容偏差和日積月累形成的電壓不均衡問題。
2.2 穩(wěn)壓模塊
穩(wěn)壓模塊有超級電容穩(wěn)壓、3.3 V穩(wěn)壓和5 V穩(wěn)壓。超級電容穩(wěn)壓采用的是全集成升壓轉(zhuǎn)化器TPS61088,具有2.7~12 V的寬輸入電壓范圍和10 A開關(guān)電流能力,并且能夠提供高達12.6 V的輸出電壓;5 V穩(wěn)壓采用的是線性穩(wěn)壓芯片LM2940-5.0,3.3 V穩(wěn)壓采用的是線性穩(wěn)壓芯片LM2937-3.3,兩款芯片都具有低壓差、損耗小和電路簡單的優(yōu)點。
使用電池供電時直接以電池的7.4 V電壓驅(qū)動直流電機,5 V和3.3 V穩(wěn)壓后再提供給各個模塊;使用超級電容供電時則需要將TPS61088升壓轉(zhuǎn)換器升壓,以12 V電壓驅(qū)動直流電機,再將12 V電壓穩(wěn)壓到5 V和3.3 V提供給各個模塊。供電電路結(jié)構(gòu)如圖2所示。
2.3 電機驅(qū)動模塊
電機驅(qū)動的基本原理是H橋驅(qū)動,由于小車有兩組電機,所以系統(tǒng)需要兩路H橋驅(qū)動電路。硬件方面,系統(tǒng)采用兩個MOS芯片BTN7971B來構(gòu)成一路H橋驅(qū)動器,其有著大電流、高驅(qū)動的優(yōu)點,輸入電壓為5~25 V,最大驅(qū)動電流達68 A;另外,使用SN74LS244DW光耦隔離芯片保護單片機,以免燒毀。
2.4 六軸傳感器模塊
MPU-6050芯片集成了三軸加速度和三軸陀螺儀,并且可利用自帶的數(shù)字運動處理器(DMP)硬件加速引擎,通過主IIC接口,向應用端輸出姿態(tài)解算后的數(shù)據(jù);InvenSense公司提供了該模塊運動處理資料庫,人們能夠非常方便地實現(xiàn)姿態(tài)解算,獲得角度值,降低了運動處理運算對單片機的負荷,同時大大降低了開發(fā)難度。另外,該模塊具有體積小、自帶溫度傳感器和兼容3.3 V/5.0 V等特點。
2.5 調(diào)試模塊
為了方便調(diào)試,硬件上還增加了按鍵、OLED顯示屏和藍牙接口;按鍵和OLED顯示屏能夠方便地修改參數(shù),查看小車的狀態(tài)和傳感器獲取的值;藍牙能夠與上位機軟件連接,將參數(shù)上傳到計算機進行實時顯示,方便分析與調(diào)試,同時也能遙控小車。
2.6 軟件設(shè)計
系統(tǒng)總體軟件設(shè)計思路如下:首先是各個模塊的初始化,保證每個模塊都處在正常的工作狀態(tài),初始化完成后,每10 ms進入定時器中斷程序,通過IIC通信協(xié)議獲取MPU-6050姿態(tài)檢測數(shù)據(jù)和電磁傳感器數(shù)據(jù),傳給單片機處理融合,通過調(diào)節(jié)PWM輸出來改變電機的運行狀態(tài),使小車實現(xiàn)直立前進、后退和轉(zhuǎn)彎;將編碼器的A相接STC單片機的INT0口,B相接任意IO口,通過判斷觸發(fā)中斷時B相的高低電平,得到電機正反轉(zhuǎn),對觸發(fā)中斷進行加減處理,得到電機速度;當小車的傾斜角度過大時,程序會將PWM輸出降為0,從而讓電機停轉(zhuǎn),保護硬件。
2.7 PID控制算法
在過程控制中,按偏差的比例(P)、積分(I)和微分(D)進行控制的PID控制算法是工程中應用最廣泛的自動控制算法,具有原理簡單、穩(wěn)定性好、控制參數(shù)相互獨立、參數(shù)調(diào)整方便等特點。角度環(huán)是平衡小車最重要的控制閉環(huán),一般使用PD(比例/微分)控制器,具體代碼如下:
void AngleControl(void)
{
float fDelta,fValue;
fDelta = CAR_ANGLE_SET - g_fCarAngle;
fValue = CAR_ANGLE_SPEED_SET - g_fGyroAngleSpeed;
g_fAngleControlOut = fDelta * g_tAnglePID.P + fValue *g_tAnglePID.D;
}
CAR_ANGLE_SET為人們期待的角度值,在頭文件中設(shè)為常數(shù)0;CAR_ANGLE_SPEED_SET為人們期待的角速度值,在頭文件中設(shè)為常數(shù)0。下面進行PD控制器計算,然后賦值給全局變量g_fAngleControlOut。fDelta是角度偏差,f_Value是角速度(陀螺儀)偏差,g_fCarAngle是傳感器測量的角度,g_fGyroAngleSpeed是傳感器測得的加速度。
平衡小車速度環(huán)使用速度控制最常用的PI控制器,具體代碼如下:
void SpeedControl(void)
{
float fDelta;
float fP, fI;
g_fCarSpeed = (float)(g_iLeftMotorPulseSigma +
g_iRightMotorPulseSigma ) * 0.5f;
g_iLeftMotorPulseSigma = g_iRightMotorPulseSigma = 0;
g_fCarSpeed = (float)(g_fCarSpeedOld * 0.2f + g_fCarSpeed *0.8f) ;
g_fCarSpeedOld = g_fCarSpeed;
fDelta = CAR_SPEED_SET;
fDelta -= g_fCarSpeed;
fP = fDelta * g_tSpeedPID.P;
fI = fDelta * g_tSpeedPID.I;
g_fCarPosition += fI;
g_fCarPosition += g_fUltraSpeed;
if((int)g_fCarPosition > SPEED_CONTROL_OUT_MAX)
= SPEED_CONTROL_OUT_MAX;
if((int)g_fCarPosition < SPEED_CONTROL_OUT_MIN)
= SPEED_CONTROL_OUT_MIN;
g_fCarPosition += g_fBluetoothSpeed;
g_fSpeedControlOut = fP + g_fCarPosition;
}
CAR_SPEED_SET是設(shè)定速度期望值,然后減去速度采集值,得到速度誤差,賦值給fDelta;之后進行速度環(huán)PI控制器運算,速度誤差fDelta乘以速度環(huán)P值,速度誤差fDelta乘以速度環(huán)I值再累加起來。對積分設(shè)置上限,不然積分一直增大,容易發(fā)生振蕩。最后,速度環(huán)PI控制器計算結(jié)束,將P值和I值疊加,得到速度環(huán)PWM輸出值,賦值給全局變量g_fSpeedControlOut。
3 結(jié)論
雙輪平衡車系統(tǒng)設(shè)計采用8位STC8A8K64S4A12單片機作為控制核心,結(jié)合互補濾波和PID控制算法,實現(xiàn)了直立和移動。系統(tǒng)具有良好的外部擴展性,能夠連接OLED顯示屏和藍牙等外部模塊,實現(xiàn)實時顯示數(shù)據(jù)、方便調(diào)試和遙控的功能。后期產(chǎn)品拓展性及應用也較好,例如,可根據(jù)其核心原理,設(shè)計載人兩輪車或者巡邏機器人。本次設(shè)計的不足之處在于沒有制作外殼和車架,相關(guān)部件直接安裝在印制電路板(PCB)上,外觀和實用性不佳。另外,本設(shè)計可以采用模糊控制、神經(jīng)網(wǎng)絡(luò)等先進的控制算法,輔以攝像頭實現(xiàn)自動循跡的功能。
參考文獻:
[1]林豪,王新雨,徐玥.基于高性能單片機的智能物流小車研究與設(shè)計[J].河南科技,2020(5):24-28.
[2]李姿景,張具琴,于俊杰,等.基于單片機的兩輪平衡車設(shè)計[J].電子測量技術(shù),2020(23):1-5.
[3]潘二偉.基于STM32的兩輪自平衡車設(shè)計與實現(xiàn)[D].哈爾濱:黑龍江大學,2018:16.
[4]袁瑞豪,王一豪,孫振涵.基于K66單片機的恩智浦智能小車制作[J].無線互聯(lián)科技,2019(11):122-124.
[5]林楓,蔡延光.雙輪自平衡車的雙閉環(huán)式PID控制系統(tǒng)設(shè)計與實現(xiàn)[J].工業(yè)控制計算機,2017(6):73.