当前位置:首页 > 嵌入式 > 嵌入式硬件
[导读]摘要:利用运动传感芯片MPU6050和STM32L152,设计了一款运动感知及处理模块功耗仅为1.2 mA左右的低功耗三维鼠标。针对功耗问题,详细介绍了符合鼠标低功耗工作要求的STM32L

摘要:利用运动传感芯片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)三维鼠标在屏幕上坐标映射计算

三维鼠标在屏幕上坐标映射的两种计算方式为:

①旋转角度判定方向、角度变化映射成坐标位置:加速度传感器计算横滚、俯仰两个倾角θ、ψ,θ角变化表示鼠标在屏幕水平方向移动;ψ角变化表示在屏幕垂直方向移动。角度变化按一个比例系数转换为鼠标的位移。

②旋转角度判定方向、加速度积分映射光标位移:鼠标光标在屏幕移动方向的判断同上。对加速度计动作轴的输出值在时间轴上积分得到位移,从而得到屏幕映射坐标位置。

结语

从硬件选型到软件设计都充分考虑了功耗问题,兼顾了三维鼠标操作时的精度、稳定性,克服了传统鼠标在某些环境不能悬空操作及灵敏度不高的缺点,实现了一款低成本、低功耗、操作简单、稳定性高的三维鼠标。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

使用MPU6050之前,建议先阅读一遍他的寄存器手册,这样初学者能够更进一步了解MPU6050的地址,能够更快速理解配置代码。

关键字: mpu6050 寄存器地址 配置代码

在嵌入式系统开发、调试和测试过程中,J-Link作为一种高效的调试工具,为开发者提供了极大的便利。然而,要想充分发挥J-Link的功能,首先需要正确安装其驱动程序。本文将详细介绍J-Link驱动的安装过程,并深入解析其中...

关键字: jlink 嵌入式系统 嵌入式开发

与谷歌的合作使 Nordic 能够在 nRF Connect SDK 中嵌入开发人员软件,以构建与安卓移动设备兼容的谷歌Find My Device和未知跟踪器警报服务

关键字: 谷歌 SoC 嵌入式开发

嵌入式开发作为当今电子工程和信息技术领域的核心分支,涵盖了广泛的软硬件技术和系统集成方法,用于构建高性能、低成本、低功耗、体积小巧且功能专一的嵌入式系统。这些系统无处不在,从微型传感器节点到复杂的工业控制设备,从日常使用...

关键字: 嵌入式开发 Python

嵌入式开发是当今信息技术领域不可或缺的一部分,它融合了硬件设计、软件开发和系统集成等多个学科,专门用于创建那些被嵌入到特定设备或系统中的专用计算机系统。嵌入式开发的主要过程包括利用分立元件或集成器件进行电路设计、结构设计...

关键字: 嵌入式开发 硬件设计 软件开发

嵌入式开发作为一种专业且技术密集型的领域,涵盖了从硬件底层驱动、中间件到应用层软件开发等多个层面的工作,其所需的工具种类繁多,各有针对性,旨在提升开发效率、保证代码质量以及简化调试过程。

关键字: 嵌入式开发 keil

嵌入式开发作为信息技术领域的重要分支,其涉及的语言种类繁多,各具特色。这些语言的选择取决于目标平台的特性、性能需求、开发者的熟练程度以及项目的具体要求。本文将详细介绍几种常见的嵌入式开发语言,包括C语言、C++、汇编语言...

关键字: 嵌入式开发 C语言

嵌入式开发是一项综合了硬件设计、软件编程以及系统整合的技术活动,其目的是为了创造出能够在特定环境中高效、稳定运行的嵌入式系统。这一流程涵盖了多个紧密关联且不可或缺的阶段,从最初的客户需求分析到最终的产品测试和交付,每个环...

关键字: 嵌入式开发 硬件设计

嵌入式开发作为一个融合了计算机软硬件和系统工程的综合性领域,其成功与否往往取决于三个核心要素的有效整合与协调。这三个要素分别是:硬件平台的选择与设计、软件开发及其优化、以及系统级的设计与集成。深入理解并熟练掌握这三个方面...

关键字: 嵌入式开发 ARM

嵌入式开发作为信息技术的关键支柱,在全球数字化转型浪潮中扮演着无可替代的角色。从传统的嵌入式微控制器到如今先进的片上系统(SoC),再到与云计算、人工智能深度融合的智能终端,嵌入式系统的演进与发展始终紧跟时代脉搏。本文将...

关键字: 嵌入式开发 智能应用
关闭
关闭