基于STM32F103C8T6的两轮自平衡车系统设计
2021-01-28聂茹
聂茹
(华南理工大学广州学院 电子信息工程学院, 广东 广州 510800)
0 引言
当今社会,生活向着智能化、便捷化发展,两轮平衡车顺应时代潮流,成为适合多种场合使用的代步工具。两轮平衡车具有轻便、节能环保、高效、能耗低等特点,因此非常适合在空间狭窄、急转角度大的工作场合作业。两轮平衡车已经是国内外学者的热门研究对象[1-2]。两轮自平衡车系统集合电路设计、单片机、软件算法编程、自动控制理论等多门学科的知识,是研究控制算法和传感器测试的实验平台[3]。因此,对平衡车的控制难度大,控制算法复杂,对平衡车的研究具有理论研究意义和工程实践价值。本文在STM32F103-C8T6微控制器和MPU6050芯片的基础上,设计和实现两轮自平衡车系统。
1 系统总体方案设计
两轮平衡车硬件系统主要由以下四部分组成:中央控制单元STM32单片机、姿态传感器MPU6050、直流电机和H全桥电机驱动器。系统总体方案设计图,如图1所示。
系统通过卡尔曼滤波算法对陀螺仪和加速度计数据进行融合,通过计算得到车身姿态倾角、角速度的最优估计值。
图1 系统总体方案设计图
车身速度、最优姿态角两个信号将作为反馈量反馈回双闭环控制系统,从而产生两路PWM波驱动电机前后转动,维持车身的平衡与直立。硬件部分的工作主要分为以下几个部分。
(1) 主控制器电路。根据平衡车系统的要求,选用基于ARM Cortex-M 内核的STM32F103C8T6芯片作为主控制器。该芯片具有处理速度快、功率损耗低等优点,适合于双轮自平衡车系统测量状态多、实时性要求强和扩展功能多等控制要求。
(2) 姿态传感器电路。选用MPU6050作为传感器芯片,芯片集成三轴加速度计和三轴陀螺仪。该芯片体积小、功耗低、精度高,与主控制器芯片能够良好的通信以及传输数据。
(3) 电机驱动电路。通过大功率TB6612芯片的“H”桥电路,驱动直流电机,实现调速控制。
(4) 电源电路。采用12 V锂电池作为电力来源,电路中的传感器和控制芯片等都是3.3 V供电,所以选择通过二级降压的方法,把12 V电压通过开关电源降到5 V,然后再降到3.3 V,为传感器和控制芯片供电。
2 系统硬件设计
2.1 主控制器电路设计
本系统包括以STM32F103C8T6为核心的控制电路、复位电路和晶振电路,同时加入SWD接口和用户指示灯能够方便程序的调试。STM32F103C8T6芯片是由2.0 V-3.6 V的直流电压供电[4],ARM32位内核架构。主控电路的时钟电路采用8 MHz外部晶振作为时钟源,还包含32.768 KHz的RTC时钟,可以方便拓展电路。主控芯片采用低电平复位,当主控芯片的复位引脚NRST按下时,引脚接地,芯片复位。为了简化接口电路,采用SWD下载调试模式,SWD只需两个IO口即可实现在线仿真调试。3.3 V的用户指示灯用来指示电源状态,可以通过观察LED指示灯状态,清楚判别核心板上电是否正常,从而防止芯片烧毁。
2.2 电源电路设计
小车系统共使用两种电压,5 V和3.3 V,具体设计图,如图2—图4所示。
图2 5 V传感器供电电路图
图3 主控CPU供电电路图
图4 3.3 V传感器供电电路图
电源部分采用12 V锂电池作为输入,分三路稳压,其中7805芯片为5 V传感器供电,并为后级AMS1117芯片提供电源输入端。AMS1117是一个正向低压降稳压器,内部集成过热保护、限流电路,工作温度范围为-40 ℃—125 ℃。AMS117芯片有两个电压输出版本,固定输出版本和可调版本,本系统设计使用的是固定输出的3.3 V版本。因此,5 V电压经过AMS117芯片得到3.3 V的电压单独给主控CPU供电,另外一路经过AMS117芯片得到的3.3 V给传感器、电机驱动芯片供电。
2.3 电机驱动电路设计
系统选用信浓公司42 mm的步进电机,该电机的步距角为1.8°,选用东芝半导体公司生产的TB6612直流电机驱动芯片驱动电机。TB6612具有大电流MOSFET-H桥结构,双通道电路输出,因此可以同时驱动两个电机[5]。TB6612的外围电路简单,只要外接电源滤波电容即可驱动电机。电机驱动电路,如图5所示。
图5 电机驱动电路图
通过控制AIN1、AIN2、PWMA便可以控制电机的转动。
2.4 姿态传感电路设计
姿态传感电路包括MPU6050供电电路和滤波电路。MPU6050是一个六轴传感器芯片,集成有三轴加速度计,三轴陀螺仪体积小、成本和功耗低、精度高[6]。本设计方案中MPU6050与主控制芯片之间使用IIC协议交互通信、传输数据[7]。MPU6050姿态传感电路,如图6所示。
图6 MPU6050姿态传感电路图
2.5 液晶显示电路设计
对于平衡车系统来说,显示电路是需要的,可以显示车体倾角、当前运行速度和电池电量等信息,给驾驶人直观的车体状态当前信息,将极大的方便驾驶和维护方面的工作。设计中采用1.3寸OLED显示屏,集成有SSH1106驱动芯片,具有8 位并行数据接口,可直接与8位微处理器相连[8]。液晶显示电路图,如图7所示。
图7 液晶显示电路图
3 系统软件设计
本系统软件设计部分基于STM32单片机硬件平台,主要实现两轮自平衡车的直立平衡与简单行走,软件编程语言使用C语言,C语言简单、可读性强、容易修改。
3.1 软件流程图
该系统的软件流程图,如图8所示。
图8 软件流程图
为了保证稳定的控制周期,这里用了一个15 m/s的定时中断,确保稳定的控制周期。系统上电后,首先初始化各个功能模块和外设等,初始化中,为了防止初始过程中模块的写寄存器被中断打断,所以在为各个模块、外设等初始化前,要先关闭控制器的所有中断,之后开始对控制器内部的各个模块和外设进行初始化,一切就绪后,开始进行15 m/s的定时中断,结束初始化的过程。每经过15 m/s会自动跳转到定时中断函数里,进入中断函数后,首先读取MPU6050传感器的数据,获得数据后主控芯片将计算出车体的倾斜角度、角速度等姿态数据,再进行卡尔曼滤波得到精确的数值,根据精确的姿态数据输出合适的PWM信号从而控制电机的转动,保持车体的直立平衡、简单的直立行走。
3.2 姿态传感检测软件设计
姿态传感检测是两轮自平衡车系统的直立平衡中很重要的,因为系统是一个动态并且非线性的系统,需要不断地采集姿态的相关信息,及时调整姿态维持平衡。因此,系统选择MPU6050首先得到车体的倾斜角、角速度,再进行卡尔曼滤波融合得到更精确的信息。
3.3 卡尔曼滤波软件设计
卡尔曼滤波算法用在机器人智能控制、卫星导航和计算机图像处理领域中,MPU6050姿态传感器的陀螺仪测得的角速度通过数学积分运算得到的角度,总是会存在微小的偏差和漂移变化所造成的累积误差,并且误差会随时间的增加逐渐增大,到最后无法输出正确并且可以控制的角度信号,而使用卡尔曼滤波算法融合得到的角度值则非常稳定。卡尔曼滤波算法的作用是根据上一次状态预测出当前状态,再与实际测得的状态进行比较,从而修正预估的当前的状态。卡尔曼滤波的使用,能够有效防止噪点的出现,并将数据进行融合,从而纠正实际测量得到的曲线[9-10]。
3.4 PID软件设计
当双轮平衡车车体倾斜时,系统采用PID算法进行控制,通过对车体角度、车体角速度、车体速度和车体位置等数据进行融合,输出PWM信号驱动电机,从而能够保持车体的平衡。角度与角速度数据融合及输出控制结构框图,如图9所示。
图9 角度与角速度数据融合及输出控制框图
其中,Kd,Kp,Ksp,Kis是PID控制器的相关参数。
4 系统测试
根据MPU6050姿态传感器的摆放位置,将陀螺仪的x轴的数据作为角速度进行计算,加速度计的y轴的数据作为角度进行计算。主控制器单片机分别读取MPU6050陀螺仪的角速度值Gyro_x和加速度计的角度值Accle_y,将得到MPU6050传感器的10组数据,如表1所示。
表1 角速度、角度零点偏移
对10组数据进行平均值计算得到角速度、角度的零点偏移值大约是8LSB、1 100LSB。
以上10组数据可以通过转换成实际的角速度、角度,如式(1)和式(2)。
Gyro_x=(Gyro_x-8)/16.4
(1)
(2)
5 总结
本文提出了两轮自平衡车系统的一种设计方案,并设计了以STM32F103C8T6为核心的系统硬件电路和以PID控制器为核心的软件算法,成功组装成样机。样机经过多次测试,具有稳定、实时的角度和角速度信号,能够保持车体自我平衡以及简单的直立行走,因此,该系统具有较大的研究价值和实用意义。