趙保睿,李昆鵬,王昊,蘇明
(天津職業技術師范大學自動化與電氣工程學院,天津,300222)
關鍵字:STM32;自平衡自行車;PID
自行車動力平衡特性已經被世界各國學者研究了上百年,并且由于計算機科學和控制科學的發展,自行車機器人也吸引了越來越多的學者參與加入。中國雖然起步相對較晚,但近年來通過利用試驗結果來證明理論分析的準確性和控制算法的可行性,已經達到了良好的成效。例如張宏志、李健、祝洪宇實現了具有跟隨功能的自平衡自行車。其他兩輪平衡車的研究也有很多成果以供學習,袁鑫宏等提出了一種基于MPU6050六軸傳感器的平衡車姿態檢測及控制方案;黨新安等提出了一種單片機控制PID調節的自平衡方法;楊高對雙輪自平衡機器人控制系統進行了研究;王振運實現了一種基于RT-Thread和STM32的雙輪自平衡機器人;古訓,陳紅實現了基于Arduino單片機的自平衡車。
本設計在總結以上研究結果的基礎上,以STM32為主控芯片,以集成陀螺儀和加速度計的MPU6050為姿態傳感器,接收角度和角速度反饋,以PID算法來完成自行車直立平衡,并集成循跡避障、遠程操控功能,使其更加實用。
本設計的自平衡自行車物理結構設計模型如圖1物理模型所示。該模型由車架主體、動力能源、控制電路板,直流電機,舵機、避障,循跡等部分組成。車體使用UG NX模擬設計,由可控把手、置物車背、作為驅動輪的后輪、作為從動輪的前輪組成。動力能量源是一個12V電池,用于為舵機和直流電機供電。舵機位于車輛前部,用于控制車輛轉向與平衡。控制電路PCB板集主控、Bluetooth、驅動等模塊于一身。避障和跟蹤模塊安裝于車身。

圖1 物理模型
主控模塊使用的是STM32系列的C8T6單片機,該單片機是基于arm Cortex-M3內核的32位控制器,最大工作頻率為72Mhz;其內置20KSRAM和65KFLASH,集成了I2CSPIUSART等多種通訊接口;它包含多個定時器,可以輸出多個PWM信號。本設計中,采用SPI進行OLED屏幕顯示模塊通訊,采用I2C協議讀取MPU6050數據,采用串口通信方式接受藍牙模塊數據,并輸出PWM波形以控制電機和舵機。主控制器模塊電路如圖2主控制器模塊所示。

圖2 主控制器模塊
姿態處理模塊使用的是MPU6050。MPU6050是一個六軸運動處理組件,內有三軸陀螺儀和三軸加速度計。本設計將MPU6050通過SCL和SDA接口與STM32相連,其測量數據經內置AD轉換器轉換后,通過I2C總線接口即可與主控制器通訊,實現姿態檢測。檢測結果經過計算后通過單片機的PWM引腳產生脈寬調制信號使舵機轉動來達到平衡。姿態處理模塊電路如圖3姿態處理模塊所示。

圖3 姿態處理模塊
電機驅動模塊使用的是TB6612FNG。TB6612FNG是一種只需要一個外部濾波電容即可驅動電機的直流電機驅動器。模塊VM1連接電源電池,VCC連接內部5V供電后,即可通過PWMA、AN1、AN2控制電機及其轉速。電機驅動模塊電路如圖4電機驅動模塊所示。

圖4 電機驅動模塊
電源電路模塊由電源電池和穩壓電路組成。電源電池使用的是12V航模電池,可向電壓驅動模塊供電。穩壓電路可產生5V和3.3V兩個電壓,為主控制器模塊(STM32單片機)、姿態處理模塊(MPU6050)等模塊供電。電源電路模塊電路如圖5電源電路所示。

圖5 電源電路
藍牙串口模塊使用國產bk3231藍牙模塊。該模塊可以通過tx和rx兩根信號線使藍牙與主控制器模塊通訊,輸送指令以完成對自行車的遠程控制。藍牙串口模塊電路如圖6藍牙串口模塊所示。

圖6 藍牙串口模塊
屏幕顯示模塊使用0.96英寸,分辨率為128*64的OLED顯示屏。它以四線SPI方式與主控芯片進行通信,可以實時顯示電池電壓、自行車傾角、舵機角度等信息。
本設計將平衡程序分為2個部分,分別是角度測量與濾波部分和控制平衡部分。
3.1.1 角度測量與濾波
本設計采用了MPU6050對自行車進行姿態檢測,使用加速度計所測傾角與陀螺儀所測傾角兩者進行濾波融合的方法來計算角度。
首先利用加速度計測量。下面以X軸為例。
第一步,計算X軸方向上的加速度:

式中:β為自行車傾角,g 是重力加速度,a是自行車加速度,可由下式計算得出:

式中:d 為 MPU6050到自行車電機軸的距離,á為運行時角加速度,a0為運行時X軸方向線加速度,可由MPU6050測量得出。
第二步,利用a t an2 ( x , y )函數計算傾角:

式中,Accel_Z 為Z軸方向加速度,可近似為重力加速度g。
然后利用陀螺儀測量,同樣以X軸為例。
陀螺儀輸出的是角速度,需將輸出的原始數據轉換為單位是°/s的數據,可由下式得:

式中:k0與MPU6050初始化時的量程有關,本設計中為16.4。
從陀螺儀測量所得的角速度信息經積分后即可得到角度:

式中:Gyro 是先前經過計算轉化后的角速度,dt為采樣周期,本設計中為0.005s。
最后對加速度計所測傾角與陀螺儀所測傾角兩者進行一階互補濾波融合:

式中:angle1為融合后的角度,angle為加速度計所測量角度值,(G yro* dt )為陀螺儀所測量角度值,dt為采樣周期,本設計采用0.005s。k為濾波系數,本設計采用0.02。由此式可得出較為準確的自行車傾角。
3.1.2 平衡控制
平衡控制部分采用PID控制,通過直立環和速度環最終作用于舵機和電機,使自行車保持平衡。
直立環使用PD控制,方程如下所示:

式中:Gyro 為上文陀螺儀所測得角速度,Balance_Kp和Balance_Kd 分別為比例系數和微分系數。Bias為當前角度與機械中值的偏差,可由下式得出:

式中,angle1為計算得出的自行車傾角,x為設計的機械中值,于調試部分給出。
速度環采用PI控制,方程如下所示:

式中:Encoder為讀取的速度偏差經一階低通濾波后所得值,這樣可以降低速度值變化速率,防止直立環被速度環干擾,Encoder _ Integral 為Encoder在采樣周期內積分所得位移,Velocity _ Kp 和Velocity _ Ki 分別為比例系數和積分系數。
本設計中舵機采用PI控制:

式中:Encoder1可由(11)式得出,Encoder1 _Integral為Encoder1在采樣周期內的積分,Kp和Ki 分別為比例系數與積分系數。
同理,電機控制采用增量式PI控制:

式中:Bias1是速度偏差,由讀取編碼器的現速度與期望的Velocity 相減得來,Last_bias 是對上一次Bias1進行儲存所得的變量,Kp和Ki分別為比例系數和積分系數。
最后,根據計算所得出的Servo值和Motor值可由主控芯片輸出所需要PWM值控制舵機和電機使自行車保持平衡。
循跡模塊使用兩個TCRT5000光電傳感器并安裝于車身左右兩側。將左右兩個TCRT5000傳感器的輸出連接到主控的I0口后,通過讀取I0口的高低電平判斷自行車是否在黑線上運行,根據程序即可使自行車達到循跡前行的效果。程序設計大致如下:當左側TCRT5000傳感器檢測到黑線時,傳輸信號至主控芯片,主控芯片輸出PWM波控制舵機向左扭轉一定角度;當右側TCRT5000傳感器檢測到黑線時,傳輸信號至主控芯片,主控芯片輸出PWM波控制向右扭轉一定角度。程序掃描周期為50ms,舵機的左右方向通過更改PWM波的脈寬即可控制。
避障模塊使用E18-D80NK紅外光電感應器。將E18-D80NK傳感器的輸出連接到主控芯片的I0端口后,通過讀取I0端口的高低電平,判斷自行車前方是否有障礙物,根據程序即可完成避障。程序設計大致如下:若前方存在障礙,E18-D80NK紅外光電感應器輸出信號至主控芯片,主控芯片輸出PWM波控制舵機向左扭轉一定角度,以完成避障。程序掃描周期為50ms,舵機的左右方向通過更改PWM波的脈寬即可控制。
本設計可通過手機APP與自行車進行藍牙連接并通信。手機在Android操作系統下安裝后綴為apk的安裝包,打開軟件后可直接使用藍牙連接至自行車,在APP主頁即可查看自行車的傾斜角度和電源電壓,并可以操縱自行車進行轉向等操作。
直立環采用PD(比例微分)控制器。調試過程分為三個步驟:獲取自行車的機械中值,獲取Kp值的極性和大小,獲取Kd值的極性和大小。
首先,得到機械中值。將自行車置于地上,緩慢晃動自行車,記錄使自行車能近乎平衡的角度,一般在0°左右,可知機械中值為0。
然后調試kp值。根據自行車的PWM設置估計kp值在0~720區間中,設置kp=-200時,自行車往哪邊倒下,舵機會往相反方向轉動使自行車倒下,這說明kp值極性應為正。
Kp值太大易導致自行車產生低頻抖動。所以先設定kp=100,此時自行車有了平衡的跡象,但是響應不夠快;
設置kp=200,自行車響應加快,但自行車仍無法保持平衡;
設定kp=500時自行車的響應速度足夠快,但產生了低頻抖動。此現象表明kp值足夠大了,此時通過添加微分控制可減小低頻抖動。
最后調試Kd值。首先通過MPU6050所集成陀螺儀輸出的原始數據,估算出kd在0到2之間。然后設置kd=-0.5,這時拿起自行車并搖動,舵機將反向轉動,說明kd極性為正。
Kd值太大易導致自行車產生高頻抖動。設置kd=0.5,kp太大產生的低頻抖動基本消失。設置kd=1,自行車平衡性能已經達到預期效果。設置kd=1.5,自行車會產生高頻抖動現象。
在確定KP=500和Kd=1.5是P和D參數的最大值后,將系數都乘以0.6近似得到KP=300和Kd=1,即為最終確定的參數。這是因為之前獲得的參數是KP和KD的最大值。根據實際經驗,最大值乘以0.6后的參數性能最好。調整后,自行車運行平穩且無抖動,但直立時間短,說明需要對速度環進行調試。
速度環使用PI(比例積分)控制器。調試過程分為兩個步驟:獲取Kp值的極性和大小,獲取Ki值的極性和大小。
通過STM32定時器的編碼器接口方式將編碼器四倍放大,通過M測速法獲取自行車的速度信息,發現編碼器最大值在180左右。根據PWM輸出控制估算kp最大為80。先設定kp=-40,可觀察到自行車倒下時電機轉速變小,說明kp極性為正。
速度環中積分控制與比例控制極性相同。并且存在一種相應的比例可以描述PID變量在不同的系統間的關系。根據速度環kp的極性和大致范圍,最終確定kp=70,kd=0.5是速度控制環中kp、ki參數的最終值。
經過長時間的實驗和調試,自行車在開始運行約2s后即可自行平衡,在平整地面上已無法用肉眼直接觀察到可見的自行車傾角;給予一定干擾后自行車也可快速恢復平衡。