基于PID的蓝牙平衡车系统的设计*
2020-08-11王晶
王 晶
(中国大唐集团科学技术研究院有限公司华东电力试验研究院 合肥 230022)
1 引言
进入21世纪以来,随着世界多个国家对平衡车的不断探索开发,平衡车项目早已为全球机器人控制领域的研究热点[1]。平衡车作为科技与载具结合的标志性产物,它是人工智能与自动控制融合更进一步的突破,是载人工具未来重点发展的方向[2]。本设计首先建立平衡车的数学模型,以STM32系统单片机为主控芯片,硬件系统包括MPU6050陀螺仪加速度计、BT06蓝牙模块、霍尔编码器、TB6612FNG电机驱动和OLED显示屏[14~16]。软件系统结合PID控制算法实现了平衡车直立控制、速度控制、转向控制、蓝牙APP遥控、数据显示等功能[13]。实验结果验证了平衡车系统的稳定性和快速性。
2 平衡车模型建立
根据平衡车的运行特点,平衡车可以简化为底部可以运动的一阶倒立摆模型[3],如图1所示。车体的重心高度为L,质量为m,倾角为θ。
对模型进行受力分析[4,11],可以得到平衡车车轮加速度 a(t)和外力干扰加速度 x(t)之间的运动方程:
图1 平衡车等效模型
当平衡车倾角θ很小时,式(1)等效为
当平衡车处于平衡状态时,即a(t)=0,式(2)化简为
因此得到系统的传递函数为
其中系统传递函数的一个极点位于虚轴的右半平面(S平面),导致系统发散不稳定。因此,通过自动控制理论系统校正的相关知识,对系统引入PD控制器(比例、微分控制)[4]。校正过后的系统框如图2所示。
图2 引入PD控制之后的系统框图
此时,系统的传递函数为
当k1>g,k2>0时,系统传递函数的两个极点都位于虚轴左半平面(校正后为二阶欠阻尼系统)。其中k1、k2为PD控制器的比例系数和微分系数。比例系数决定平衡车能否回到平衡位置,微分系数相当于额外阻尼力,能够有效抑制由比例控制引起的震荡。
3 平衡车硬件系统设计
系统以STM32F103C8T6微控制器为主控核心,系统主要包括:显示屏模块、蓝牙遥控模块、姿态解算模块、电机驱动模块、电机模块、电机测速模块及电源模块,如图3所示。
图3 系统硬件结构
3.1 电源模块
整个设计的电源模块需实现将12V直流电源稳 压 到 5V 和 3.3V 两 路[6],选 用 LM2596T-5和AMS1117-3.3两款降压芯片。两款降压芯片加上电容、电感构成LC滤波电路,起到抑制干扰信号的作用。电路原理如图4所示。
3.2 姿态解算模块
选择MPU6050模块作为姿态解算系统的传感器模块,用来测量系统的角速度和角加速度。MPU-6050集成了3轴陀螺仪、3轴加速度计和一个数字运动处理器DMP。通过MPU6050获得欧拉角和四元数[5]实现姿态解算。
图5是MPU6050传感器电路原理图,本设计采用 I/O 口 模 拟 I2C(PB11:SDA、PB10:SCL)与MPU6050通信获取数据,再利用滤波算法得到欧拉角和四元数,解算出当前平衡车的倾角进行控制。
3.3 显示模块
0.96寸OLED显示区域是128*64的密集点阵,有自发光、支持3V~5V直流电压、低功耗0.06W~0.08W、可视角度大于160°、采用SPI或I2C通信方式等优点。图6是OLED模块的接线图,本设计采用 I/O 模拟 SPI(PC15:RST、PC14:DC、PB12:SCL、PB13:SDA)通信方式控制OLED显示角度、速度、PID参数等信息。
图4 电源模块电路
图5 MPU6050姿态解算电路
图6 OLED模块接线电路
3.4 电机驱动模块
图7 TB6612FNG电机驱动电路
TB6612FNG是一款直流电机驱动芯片[6],内部设计有双路MOSFET-H桥结构,即可同时控制2个电机。图7是TB6612FNG电机驱动电路图,本设计采用STM32F103C8T6的TIMER4产生两路(PB8、PB9)PWM波控制电机调速,PB4、PB5和PB6、PB7两组四个通用GPIO产生电机控制电平[7]。
3.5 蓝牙模块
BT06蓝牙模块遵循V3.0蓝牙规范,默认连接密码:1234。本模块支持UART接口和SPP蓝牙串口协议,具有低成本、低功耗、数据传输稳定快速等优点。支持AT指令集,默认波特率9600,接口兼容3.3V/5V TTL电平,通信成功时LED指示灯常亮。
图8 蓝牙模块接线电路
图8是BT06蓝牙从机模块的接线图,本设计采用STM32F103C8T6的USART2与蓝牙BT06模块进 行 串 口 通 信(PA2:USART2_TX,PA3:USART2_RX),配置成从机模式接收移动设备串口发送APP的蓝牙信号[12]。
4 平衡车软件系统设计
系统的软件程序采用模块化的设计思想,主要分为平衡车直立控制、平衡车速度控制、平衡车转向控制、蓝牙遥控、数据显示。本设计使用到STM32F103C8T6的外设有Timer1、Timer2、Timer3、Timer4、USART1、USART2、I/O模拟I2C、I/O模拟SPI和多个通用GPIO。
4.1 软件系统主流程
系统的主流程如图9所示。首先对各个模块外设的初始化、通过MPU6050进行姿态解算获得角度,角加速度信息、通过霍尔编码器测取速度信息、通过OLED显示各项实时数据和接收蓝牙信号并处理。其中为了达到精确控制的目的,初始化应按照系统时钟配置→延时函数(Systick定时器配置)→LED和按键GPIO配置→OLED通信配置→USART1和USART2初始化→Timer4 PWM模式配置和Timer2、Timer3编码器模式配置→模拟I2C配置→MPU6050通信配置→Timer1 5ms定时器中断配置的顺序进行。
4.2 控制算法设计
1)直立控制算法
直立控制就是通过两个电机正反转动来维持平衡车的平衡,在第2节对平衡车进行数学建模得到的直立公式,经过线性化化处理得到直立的PD控制算法[8]:
图9 主程序流程图
图10 平衡车直立PD控制框图
2)速度控制算法
速度控制就是通过改变平衡车的倾角来改变速度,实质上还是通过对电机的控制来实现速度控制。给定速度后,为了获得向前的加速度,平衡车会向前倾斜。因此,车轮需要反转,由于直立的负反馈控制,车模会加速倒下。因此,利用串级PID控制的思想,将速度PI控制器的输出用作直立PD控制器的输入,起到速度控制的结果仅改变直立控制的目标值的效果[9]。串级控制器如图11所示。
图11 串级PID控制器框图
为了消除系统静态误差和增强控制效果,速度控制使用PI控制器。得到控制器算法:
(1)直立PD控制:
(2)速度PI控制:
(3)串级PID控制:
3)转向控制算法
转向控制就是通过对电机的差速控制来实现平衡车方向的控制。对于直立控制和速度控制而言,转向控制就是普通的控制系统,对系统响应要求不高,采用PD控制器就可以实现[10]。转向控制的作用就是在平衡车运行过程中,保持速度为设定值,如:Z轴目标角速度位零,那么小车直线行驶,得到转向PD控制器算法:
5 系统调试
对PID算法参数整定后,采集MPU6050姿态解算模块的角度数据和霍尔编码器输出的速度数据,如图12、13所示。
图12 编码器输出波形
图13 平衡车倾角波形
由图12、13可知,系统能够在1.5s时间内完成控制目标,满足稳、快、准的控制要求。
6 结语
设计实现了一款基于PID算法的蓝牙平衡车系统,通过MPU6050姿态解算系统获得平衡车的角度值,采用PID控制算法实现直立控制、速度控制和转向控制,并增加蓝牙APP遥控设计功能。实验结果表明系统能够实现平衡车的自平衡与蓝牙遥控功能并具有响应速度快、灵敏度高、抗干扰能力强的优点。