戴庆
摘 要:本项目代码基于C语言开发,选用宏晶科技有限公司的8位单片机STC8A8K64S4A12作为主控制器,采用重力加速度陀螺仪传感器MPU-6050获取重力加速度和角度数据,通过互补滤波对获取的数据进行数据融合从而得到小车姿态。经过PID算法处理后,系统输出PWM(脉冲宽度调制)控制信号到电机驱动芯片BTN7971B,以控制小车的两个电机的正反转和转速,使小车保持平衡状态。同时,使用旋转编码器获取小车的速度信息,通过PID算法将PWM输出并加以融合,从而实现小车的速度与方向控制。
关键词: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
近年来,随着科学技术的发展,两轮平衡车逐渐进入人们的视野,以小米科技有限责任公司的产品为代表,作为一种短途的交通工具,具有极高的趣味性和便利性。平衡车研究始于日本,高速发展于美国,国内研究始于中国科学技术大学、西安交通大学等科研单位,然后研究成果逐渐被科技公司应用于日常生活中,作为短途的交通工具、物品运输载体和智能机器人等,而这都取决于其独特的驱动方式,能够使产品体积小巧,运动也更加灵活和便捷,其能够在狭窄的环境中运行。
两轮平衡车状态不稳定,人们需要通过一些外部的力使其平衡。车辆模型的直立需要不停地调节电机的转动,使本身稳定在一个状态;调节车辆模型的速度时,人们需要改变车辆模型的倾角,倾倒时,车辆模型需要一个同方向的加速度来保持稳定,倾角越大,加速度也越大,从而完成速度的控制。本研究涉及传感器的采集、数据的处理、角度的计算和电机的控制等内容,从两个方面阐述了两轮平衡车设计,希望能给相关人员提供参考。
1 硬件系统的组成
小车硬件电路分为主控板和驱动电路版,上面分别集成了各个模块,通过接口和尼龙柱连接,安装效果如图1所示。小车的供电可以选择电池或者超级电容,超级电容具有快速充放电的特性,使用超级电容时,要配备单独的稳压模块将快速下降的电压稳定在某一值。
设计车辆模型的電路时,人们需要根据接口和处理数据量选择合适的单片机,并逐步设计其他模块,形成完整的系统。系统的输入与输出包括五部分。一是I2C数字接口(2路IO模拟I2C数字接口),用于连接MPU-6050模块;二是PWM接口,控制车模电机双方向运行,这里使用的是H桥驱动,所以需要4路;三是串行通信接口SCI(UART,即通用异步收发器),用于程序的下载和调试以及蓝牙遥控;四是外部中断,用于编码器测速;五是IO接口,连接一些IO设备,如超声波、红外传感器等。
控制电路划分为6个子模块。一是单片机最小系统,即STC8A8K64S4A12;二是MPU-6050六轴传感器,获取小车角度值;三是速度检测,使用外部编码器获取脉冲频率;四是电机驱动,直流电机驱动电路;五是电源及其稳压电路;六是设置与调试,内容包括显示车模状态、快速调试及程序下载。
2 主要电路模块设计和分析
2.1 电源模块
使用两节18650锂电池串联供电时,人们需要将驱动电路板上安装电容稳压模块的接口短接起来,无须其他的外围电路,而且更换方便;使用超级电容供电时,人们需要在驱动板上焊接4个规格为2.7 V 60 F 1840的法拉电容,此外还有均压芯片和大功率MOS(场效应)管,以防电容偏差和日积月累形成的电压不均衡问题。
2.2 稳压模块
稳压模块有超级电容稳压、3.3 V稳压和5 V稳压。超级电容稳压采用的是全集成升压转化器TPS61088,具有2.7~12 V的宽输入电压范围和10 A开关电流能力,并且能够提供高达12.6 V的输出电压;5 V稳压采用的是线性稳压芯片LM2940-5.0,3.3 V稳压采用的是线性稳压芯片LM2937-3.3,两款芯片都具有低压差、损耗小和电路简单的优点。
使用电池供电时直接以电池的7.4 V电压驱动直流电机,5 V和3.3 V稳压后再提供给各个模块;使用超级电容供电时则需要将TPS61088升压转换器升压,以12 V电压驱动直流电机,再将12 V电压稳压到5 V和3.3 V提供给各个模块。供电电路结构如图2所示。
2.3 电机驱动模块
电机驱动的基本原理是H桥驱动,由于小车有两组电机,所以系统需要两路H桥驱动电路。硬件方面,系统采用两个MOS芯片BTN7971B来构成一路H桥驱动器,其有着大电流、高驱动的优点,输入电压为5~25 V,最大驱动电流达68 A;另外,使用SN74LS244DW光耦隔离芯片保护单片机,以免烧毁。
2.4 六轴传感器模块
MPU-6050芯片集成了三轴加速度和三轴陀螺仪,并且可利用自带的数字运动处理器(DMP)硬件加速引擎,通过主IIC接口,向应用端输出姿态解算后的数据;InvenSense公司提供了该模块运动处理资料库,人们能够非常方便地实现姿态解算,获得角度值,降低了运动处理运算对单片机的负荷,同时大大降低了开发难度。另外,该模块具有体积小、自带温度传感器和兼容3.3 V/5.0 V等特点。
2.5 调试模块
为了方便调试,硬件上还增加了按键、OLED显示屏和蓝牙接口;按键和OLED显示屏能够方便地修改参数,查看小车的状态和传感器获取的值;蓝牙能够与上位机软件连接,将参数上传到计算机进行实时显示,方便分析与调试,同时也能遥控小车。
2.6 软件设计
系统总体软件设计思路如下:首先是各个模块的初始化,保证每个模块都处在正常的工作状态,初始化完成后,每10 ms进入定时器中断程序,通过IIC通信协议获取MPU-6050姿态检测数据和电磁传感器数据,传给单片机处理融合,通过调节PWM输出来改变电机的运行状态,使小车实现直立前进、后退和转弯;将编码器的A相接STC单片机的INT0口,B相接任意IO口,通过判断触发中断时B相的高低电平,得到电机正反转,对触发中断进行加减处理,得到电机速度;当小车的倾斜角度过大时,程序会将PWM输出降为0,从而让电机停转,保护硬件。
2.7 PID控制算法
在过程控制中,按偏差的比例(P)、积分(I)和微分(D)进行控制的PID控制算法是工程中应用最广泛的自动控制算法,具有原理简单、稳定性好、控制参数相互独立、参数调整方便等特点。角度环是平衡小车最重要的控制闭环,一般使用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为人们期待的角度值,在头文件中设为常数0;CAR_ANGLE_SPEED_SET为人们期待的角速度值,在头文件中设为常数0。下面进行PD控制器计算,然后赋值给全局变量g_fAngleControlOut。fDelta是角度偏差,f_Value是角速度(陀螺仪)偏差,g_fCarAngle是传感器测量的角度,g_fGyroAngleSpeed是传感器测得的加速度。
平衡小车速度环使用速度控制最常用的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是設定速度期望值,然后减去速度采集值,得到速度误差,赋值给fDelta;之后进行速度环PI控制器运算,速度误差fDelta乘以速度环P值,速度误差fDelta乘以速度环I值再累加起来。对积分设置上限,不然积分一直增大,容易发生振荡。最后,速度环PI控制器计算结束,将P值和I值叠加,得到速度环PWM输出值,赋值给全局变量g_fSpeedControlOut。
3 结论
双轮平衡车系统设计采用8位STC8A8K64S4A12单片机作为控制核心,结合互补滤波和PID控制算法,实现了直立和移动。系统具有良好的外部扩展性,能够连接OLED显示屏和蓝牙等外部模块,实现实时显示数据、方便调试和遥控的功能。后期产品拓展性及应用也较好,例如,可根据其核心原理,设计载人两轮车或者巡逻机器人。本次设计的不足之处在于没有制作外壳和车架,相关部件直接安装在印制电路板(PCB)上,外观和实用性不佳。另外,本设计可以采用模糊控制、神经网络等先进的控制算法,辅以摄像头实现自动循迹的功能。
参考文献:
[1]林豪,王新雨,徐玥.基于高性能单片机的智能物流小车研究与设计[J].河南科技,2020(5):24-28.
[2]李姿景,张具琴,于俊杰,等.基于单片机的两轮平衡车设计[J].电子测量技术,2020(23):1-5.
[3]潘二伟.基于STM32的两轮自平衡车设计与实现[D].哈尔滨:黑龙江大学,2018:16.
[4]袁瑞豪,王一豪,孙振涵.基于K66单片机的恩智浦智能小车制作[J].无线互联科技,2019(11):122-124.
[5]林枫,蔡延光.双轮自平衡车的双闭环式PID控制系统设计与实现[J].工业控制计算机,2017(6):73.