MMA8451重力加速度计通过写内部校准寄存器进行校准

|版权声明:本文为博主原创文章,未经博主允许不得转载。

AN4069应用笔记中提到MMA8451的三个轴重力校准有两种方法,

第一种方法是简易校准,将贴有MMA8451的设备整体,Z轴正面朝上放在校准平面上。此时X轴,Y轴,Z轴的重力加速度理论值分别为0,0,1g。

第二种方法是精确校准,校准MMA8451对应的设备整体的6个面(立方体),详见AN4069 3.2章。

两种方法分别可以算出X, Y, Z轴的偏差。

MMA8451的偏差可以写在偏差寄存器中,之后再从MMA8451读出的加速度值都是自动去除偏差寄存器中的偏差的(User offset correction registers)。

写偏差寄存器需要注意下面几个细节,

1. 偏差寄存器分辨率是2mg,这个与加速度检测值寄存器不同(检测值寄存器我用的±2g的配置,分辨率是0.25mg)。

2. 偏差寄存器复位值是0,掉电会复位。这里要注意,如果想要重新校准偏差寄存器,建议的流程是,

清零偏差寄存器->读取偏差->重新写偏差寄存器。这里划个重点,不清零偏差寄存器去读的偏差是个错误的偏差!

另外一个坑是,不要认为复位MCU就可以清零偏差寄存器!除了强制写0清除,只有重新上电MMA8451,才会清零偏差寄存器。在线DEBUG的时候要特别注意。

原文地址:https://www.cnblogs.com/projectsugar/p/8719719.html

时间: 2024-11-10 07:37:03

MMA8451重力加速度计通过写内部校准寄存器进行校准的相关文章

关于nRF24L01读内部任何寄存器值为08H的经历和解决办法

某次设计需要使用nRF24L01实现数据的双向通信,将原本在51单片机上运行成功的程序移植到STM8单片机上时,出现无法运行的问题.尝试读取nRF24L01内部的寄存器以查看模块工作状态时,发现无论哪个寄存器读出值均为0x08.现具体描述此次经历以及最后的解决方法. 原设计平台为IAP15W4K58S4,开发环境Keil uVision4,设定的工作频率22.1184MHz:移植的目标平台为STM8S105K4T6,开发环境IAR for STM8,使用HSE:8MHz,CPU时钟不分频.设计同

USRP内部的寄存器

usrp_regs.hpp #ifndef INCLUDED_USRP2_REGS_HPP #define INCLUDED_USRP2_REGS_HPP //////////////////////////////////////////////////////////////////////// // Define slave bases //////////////////////////////////////////////////////////////////////// #def

重力感应游戏可行性办法研究_完结

重力感应游戏可行性办法研究 一.手机中的重力感应组件 很多人都知道手机有重力感应这个功能,但是重力感应具体是什么,却并不是很了解.重力感应组件不是摄像头,人们知道有多少万像素,不是触摸屏,人们了解是电容屏还是电阻屏,重力感应就像笼罩着迷雾的山谷,让人难以一探究竟.下文将对重力感应组件进行详细描述. 组件1:加速计 要了解加速计,首先得了解加速计是什么.实质上加速计就是用来检测手机受到的加速度的大小和方向的电子元件,而手机静置的时候是只受到重力加速度的 .所以很多人把加速计功能又叫做重力感应功能.

汇编语言--寄存器(cpu工作原理)

本文地址:http://www.cnblogs.com/archimedes/p/assembly-register.html,转载请注明源地址. 本文主要将介绍的是8086 CPU中的寄存器, 寄存器就是个存储信息的单元或者说是器件又或者说是容器而已,就比如内存也是一个存储介质或者说是存储单元而已,其实寄存器从理解上来说和内存差不多, 只不过寄存器(这里讨论的寄存器都是 CPU 中的寄存器,不包括外设上的寄存器)位于CPU内部,寄存器是 CPU 中的稀有资源,而对于一个汇编程序员来说,CPU

stm32寄存器版学习笔记07 ADC

STM32F103RCT有3个ADC,12位主逼近型模拟数字转换器,有18个通道,可测量16个外部和2个内部信号源.各通道的A/D转换可以单次.连续.扫描或间断模式执行. 1.通道选择 stm32把ADC转换分成2个通道组:规则通道组相当于正常运行的程序:注入通道组相当于中断.程序初始化阶段设置好不同的转换组,系统运行中不用变更循环转换的配置,从而达到任务互不干扰和快速切换. 有16个多路通道.可以把转换组织成两组:规则组和注入组.在任意多个通道上以任意顺序进行的一系列转换构成成组转换.例如,可

自己动手写CPU之第九阶段(4)——加载存储指令实现思路

将陆续上传新书<自己动手写CPU>,今天是第40篇,我尽量每周四篇,但是最近已经很久没有实现这个目标了,一直都有事,不好意思哈. 开展晒书评送书活动,在亚马逊.京东.当当三大图书网站上,发表<自己动手写CPU>书评的前十名读者,均可获赠<步步惊芯--软核处理器内部设计分析>一书,大家踊跃参与吧!活动时间:2014-9-11至2014-10-30 9.2 加载存储指令实现思路 9.2.1 实现思路 本节介绍除ll.sc之外的加载存储指令的实现思路,ll.sc指令的实现思路

自己动手写CPU之第八阶段(3)——转移指令实现过程1

将陆续上传本人写的新书<自己动手写CPU>,今天是第35篇,我尽量每周四篇 开展晒书评送书活动,在亚马逊.京东.当当三大图书网站上,发表<自己动手写CPU>书评的前十名读者,均可获赠<步步惊芯--软核处理器内部设计分析>一书,大家踊跃参与吧!活动时间:2014-9-11至2014-10-20 转移指令的实现过程比较长,分两次介绍,今天是第一次 8.4 修改OpenMIPS以实现转移指令 8.4.1 修改取指阶段的PC模块 参考图8-6可知,PC模块需要增加接口,增加的接

转载:NOR Flash擦写和原理分析

1. NOR FLASH 的简单介绍 NOR FLASH 是很常见的一种存储芯片,数据掉电不会丢失.NOR FLASH支持Execute On Chip,即程序可以直接在FLASH片内执行(这意味着存储在NOR FLASH上的程序不需要复制到RAM就可以直接运行).这点和NAND FLASH不一样.因此,在嵌入式系统中,NOR FLASH很适合作为启动程序的存储介质.NOR FLASH的读取和RAM很类似(只要能够提供数据的地址,数据总线就能够正确的给出数据),但不可以直接进行写操作.对NOR

Kernel 2.4.0 之 head.S 为何用两次 jmp 刷新 EIP 寄存器

在arch\i386\kernel\head.S文件中,自line 100开始有这么几行:     movl %cr0,%eax     orl $0x80000000,%eax     movl %eax,%cr0      /* ..and set paging (PG) bit */     jmp 1f          /* flush the prefetch-queue */ 1:     movl $1f,%eax     jmp *%eax       /* make sure