MPU6050和STM32L152的微功耗三维无线鼠标设计
- 工具
- STM32单片机参考设计
鼠标睡眠状态: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)三维鼠标在屏幕上坐标映射计算
三维鼠标在屏幕上坐标映射的两种计算方式为:
①旋转角度判定方向、角度变化映射成坐标位置:加速度传感器计算横滚、俯仰两个倾角θ、ψ,θ角变化表示鼠标在屏幕水平方向移动;ψ角变化表示在屏幕垂直方向移动。角度变化按一个比例系数转换为鼠标的位移。
②旋转角度判定方向、加速度积分映射光标位移:鼠标光标在屏幕移动方向的判断同上。对加速度计动作轴的输出值在时间轴上积分得到位移,从而得到屏幕映射坐标位置。
结语
从硬件选型到软件设计都充分考虑了功耗问题,兼顾了三维鼠标操作时的精度、稳定性,克服了传统鼠标在某些环境不能悬空操作及灵敏度不高的缺点,实现了一款低成本、低功耗、操作简单、稳定性高的三维鼠标。
- STM32单片机中文官网
- STM32单片机官方开发工具
- STM32单片机参考设计
- MPU6050使用I2C协议读出X轴原始数据的51单片机程序(12-01)
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)