戴慶



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