MPU6050和STM32L152的微功耗三维无线鼠标设计
扫描二维码
随时随地手机看文章
摘要:利用运动传感芯片MPU6050和STM32L152,设计了一款运动感知及处理模块功耗仅为1.2 mA左右的低功耗三维鼠标。针对功耗问题,详细介绍了符合鼠标低功耗工作要求的STM32L152低功耗运行、睡眠模式配置,以及MPU6050加速度计单独循环、单轴加速度计工作模式的配置,给出了加速度计标定及基于加速度计的姿态角计算方法,实现了鼠标姿态的精确测量。
关键词:STM32L152;MPU6050;三维无线鼠标
引言
针对低功耗设计问题,大多数三维无线鼠标仅考虑无线模块的低功耗设计。本文在此基础上,进一步将鼠标处理器模块及惯性测量模块功耗考虑进来,实现一款功耗更低、性能更优的三维无线鼠标。
1 方案选择
系统主要由电源模块、运动感测追踪组件MPU6050模块、串口转无线WiFi模块和主控芯片STM32L152构成,系统功能框图如图1所示。这里WiFi模块只是用于远程传输测试,不在低功耗设计考虑之中,若考虑远程传输低功耗设计,则使用ZigBee无线传输。
2 硬件电路设计
2. 1 微控制器接口电路
主控芯片STM32L152与MPU6050的I2C和串口转WiFi模块的接口电路如图2所示。
2.2 运动感测追踪组件MPU6050电路
MPU6050硬件电路设计如图3所示,将其SCL、SDA端口连接4.7 kΩ上拉电阻(否则I2C总线不能通信),并与微处理器PB8、PB9引脚相连;AD0经4.7 kΩ电阻接地,读写器件地址为0xD0,若悬空或接高电平,地址为0xD2;滤波电容取值0.1μF,电荷泵电容取值10 μF,否则片上传感器不工作。
2.3 串口转WiFi模块电路
WiFi232-s是一款实现串口到WiFi数据包的双向透明转发,其内部完成协议转换。串口转WiFi模块电路如图4所示。通过串口或WiFi网络连接至电脑,可以对模块进行AT指令集设置其配置参数。其中9、10、12引脚接4.7 kΩ上拉电阻,5、6引脚接处理器串口引脚PD8、PD9。
3 软件设计
3.1 三维鼠标低功耗设计描述
使用MPU6050可以设计两种三维鼠标:基于加速度计或陀螺仪,这里主要讨论基于加速度计的三维鼠标设计。
三维鼠标低功耗设计中,主要实现在鼠标不工作时系统进入睡眠模式,达到功耗最低,并且能够及时从睡眠中唤醒,进入工作状态。因此,在微处理器STM32L152中设置一个3s定时器,用来扫描鼠标当前状态是否符合进入睡眠模式条件。每当定时溢出中断到来后,采集加速度计Z轴输出值并持续0.5s,采集的当前数据与上一时刻相减得到变化值,判断其是否大于所设的阈值,并对这些大于阈值的数据进行计数。若计数大于所设阈值,则鼠标仍然保持工作状态,等待下一次定时中断到来,此时STM32L152为低功耗运行模式,MPU6050工作模式为加速度计单独循环模式;若计数小于所设阈值,则鼠标进入睡眠模式,此时微处理器设置为低功耗睡眠模式,MPU6050的工作模式设置为加速度计Z轴工作,其余轴为Standby待机模式。
3.2 MPU6050低功耗设置
(1)MPU6050加速度计单独循环工作模式
三维鼠标的MPU6050模块中的三轴加速度计设置为循环工作模式,三轴陀螺仪设置为Standby待机模式,此时MPU6050电流消耗500μA。
MPU6050生产商已经给出了编程所需头文件mpu6050.h,其将编程中所用到的寄存器都做了定义,如MPU6050 DEFAULT ADDRESS,在头文件中对应地址为0xD0或0xD2。
(2)MPU6050其他工作模式配置
MPU6050睡眠模式:电源管理1寄存器PWR_MGMT_1设置为0x40。此时加速度和陀螺仪传感器都进入Standby待机模式,陀螺仪输出值为0,加速度传感器输出一个固定值,MPU 6050电流消耗为5μA。
MPU6050陀螺仪单独运行模式:电源管理1寄存器PWR_MGMT_1设置为0x0C,电源管理2寄存器PWR_MGMT_2设置为0x38。此时只有陀螺仪传感器工作,加速度计进入Standby待机模式,输出为一个固定值,MPU6050电流消耗为3.6 mA。
3.3 STM32L152低功耗设置
注意,一般睡眠函数放置在while循环最后执行,在其他任务跑完后进入睡眠模式,待中断到来时唤醒。
(3)STM32L152低功耗模式参数
低功耗睡眠模式:当静止不动时,三维鼠标会进入不工作状态。此时只有微处理器中的3 s定时扫描MPU6050加速度计Z轴动作的定时器在工作,在1.8 V或3 V电压下,微处理器功耗为6.1μA。
低功耗运行模式:三维鼠标进行旋转或位移动作时,进入工作状态,此时STM32L152处于低功耗运行模式,主频设置为16 MHz。关闭所有无关的外设,其电流消耗在500 μA左右。
3.4 鼠标工作状态及睡眠状态下的总功耗
鼠标正常工作状态:STM32L152工作在低功耗运行模式,MPU6050工作在加速度计单独循环模式,电流消耗在1.2 mA左右。[!--empirenews.page--]
鼠标睡眠状态:STM32L152工作在睡眠模式(定时器中断唤醒),MPU6050只有加速度计Z轴工作,电流消耗在200μA左右。
3.5 三维鼠标算法实现
三轴加速度计精度在出厂时便存在工艺误差,制成MPU6050模块后还存在安装误差等,所以大多数情况下加速度计所测得的值与真实值有所差别,需要进行加速度计标定过程。
(1)加速度计标定方法
标定模型:ai=Kiui+Bi,i=x、y、z,其中ai为加速度计真值,ki为测量斜率,ui为测量值,Bi为零偏。
取多个静态位置的加速度计测量值,当三轴加速度计静止时,有如下状态关系式:
g为当地重力加速度值。将标定模型代入状态关系式,并作相关变量代换,可得表达式:
其中,pi是与测量斜率ki和零偏bi有关的替换变量。
本文测量20组不同位置的加速度计测量值,并除以对应的系数转换成以g为单位,分别求取每组中各轴的均值和平方值,代入上式中求出最小二乘解,接着求出标定参数中的斜率和零偏。
(2)MPU6050加速度计不同量程标定及结果
MPU6050加速度计有4种量程,分别是±2g、±4g、±8g、±16g,并且传感器输出单位分别是1 6 384 LSB/g、8 192 LSB/g、4 096 LSB/g、2 048 LSB/g,表1给出了±2g、±4g量程标定结果,当地重力加速度取值为9.8。
当量程选取±2g时,通过下式计算加速度值:
ai=9.8 Kiui/16 384+Bi
当量程选取±4g时,通过下式计算加速度值:
ai=9.8 Kiui/8 192+Bi
(3)姿态角计算
俯仰角pitch和横滚角roll的计算公式:
pitch=arcsin(-ay),roll=arctan(-ax/az)
三轴加速度计只有在静止或匀速运动下,加速度测量合成矢量与重力矢量重合时,才能准确测量姿态角。在测量精度要求不高的情况下,可以通过放宽对合成矢量的要
求,获得姿态角连续测量。图5(a)、图5(b)以横滚角为例,给出了不同阈值情况下的计算结果,其中黑点和细线分别为满足于测量阈值条件时的横滚角度计算值,可见对于三维鼠标,使用0.15g的阈值,能够满足连续测量的要求。可靠性判定条件如下:
(4)三维鼠标在屏幕上坐标映射计算
三维鼠标在屏幕上坐标映射的两种计算方式为:
①旋转角度判定方向、角度变化映射成坐标位置:加速度传感器计算横滚、俯仰两个倾角θ、ψ,θ角变化表示鼠标在屏幕水平方向移动;ψ角变化表示在屏幕垂直方向移动。角度变化按一个比例系数转换为鼠标的位移。
②旋转角度判定方向、加速度积分映射光标位移:鼠标光标在屏幕移动方向的判断同上。对加速度计动作轴的输出值在时间轴上积分得到位移,从而得到屏幕映射坐标位置。
结语
从硬件选型到软件设计都充分考虑了功耗问题,兼顾了三维鼠标操作时的精度、稳定性,克服了传统鼠标在某些环境不能悬空操作及灵敏度不高的缺点,实现了一款低成本、低功耗、操作简单、稳定性高的三维鼠标。