一.    器件简介:
1.    BMC 156是一款整合三轴地磁传感器与三轴(12bit)加速度传感器于一体的传感器,以BMC 150 电子罗盘模块为基础, 并与Bosch Sensortec 2x2平方毫米的加速度传感器引脚兼容。智能手机开发商可轻松将现有加速度传感器的设计升级为功能齐全的电子罗盘设计,或将电子罗盘方案简化为仅有加速度传感器的方案

2.    测量参数指标:
Acceleration ranges ±2g/±4g/±8g/±16g
Magnetic  ranges±1300µT (x, y-axis), ±2500µT (z-axis),Magnetic field resolution of ~0.3µT

二.    重要寄存器描述:
1.    加速度模块Accelerometer field data
(1)    芯片ID寄存器R0:CHIPID register ,value 0xfa

(2)  X轴加速度数据12bit
r0x02:ACCD_X_LSB acc_x_lsb[3:0]    bit4--bit7
r0x03:ACCD_X_MSB acc_x_msb[11:4]   bit0--bit7

(3) Y轴加速度数据12bit
r0x04:ACCD_Y_LSB acc_y_lsb[3:0]    bit4--bit7
r0x05:ACCD_Y_MSB acc_y_msb[11:4]   bit0--bit7

(4) Z轴加速度数据12bit
r0x06:ACCD_Z_LSB acc_z_lsb[3:0]    bit4--bit7
r0x07:ACCD_Z_MSB acc_z_msb[11:4]   bit0--bit7

2.    地磁模块Magnetic field data
(1)    芯片ID寄存器r0x40:CHIPID register ,value 0x32
This number can only be read if the power control bit (register 0x4B bit0) is enabled.

(2)  X轴地磁数据13bit
r0x42:data_X_LSB axis_x_lsb[4:0]    bit3--bit7
r0x43:data_X_MSB axis_x_msb[12:5]   bit0--bit7

(3) Y轴地磁数据13bit
r0x44:data_Y_LSB axis_y_lsb[4:0]    bit3--bit7
r0x45:data_Y_MSB axis_y_msb[12:5]   bit0--bit7

(4)  Z轴地磁数据15bit
r0x46:data_Z_LSB axis_z_lsb[6:0]    bit1--bit7
r0x47:data_Z_MSB axis_z_msb[14:7]   bit0--bit7

三.    调试注意事项:
1.    BMC 156虽然在硬件上将三轴地磁传感器与三轴(12bit)加速度传感器整合于一体,但实际操作时我们需要将其视为两个独立工作的设备,这两个设备的设备ID是不一样的(加速度模块的设备ID为0xFA,地磁模块的设备ID为0x32),其I2C设备地址也是独立的(加速度模块的I2C地址为0x10,地磁模块的I2C设备地址为0x12)。

2.    上电后,加速度检测模块将直接进入正常工作模块(After power-up  the accelerometer part of  BMC156  is in normal mode )。

3.    上电后,地磁检测模块则直接进入挂起(suspend mode)模式(Suspend  mode  is  the  default  power  mode  of  BMC156  magnetometer  part  after  the  chip  is powered.)。在这个模式下,除了工作模式控制寄存器(R0x4B)及少部分寄存器可以读写外,大部分(包括地磁数据寄存器,甚至是设备ID寄存器)均无法存取。如果需要正常使用地磁检测功能,需要先将设备从suspend mode--sleep mode-normal/forced mode。

如图所示:

4.    建议地磁检测模块使用强制转换(工作)模式forced mode,在需要检测地磁数据时先写入强制转换命令,延时一段时间后即可读取地磁数据。转换完成后地磁模块自动进入sleep mode。使用这样的工作方式系统功耗较低。

四.    数据读取参考代码:
1.    3轴加速度数据读取参考代码:

x =( i2c_read_byte(0x02) &0xf0) >>4 ;
        x = x|(( i2c_read_byte(0x03) &0xff)<<4);//12bit
        if(x>(0xfff/2))
        {
            x = -(0xfff-x);
        }
        x = (x*9.8)/(0xfff/2/2); //当量程为±2g时,转换为g/s的加速度换算公式

y =( i2c_read_byte(0x04) &0xf0) >>4 ;
        y = y|(( i2c_read_byte(0x05) &0xff)<<4);
        if(y>(0xfff/2))
        {
            y = -(0xfff-y);
        }
        y = (y*9.8)/(0xfff/2/2); //当量程为±2g时,转换为g/s的加速度换算公式

z =( i2c_read_byte(0x06) &0xf0) >>4 ;
        z = z|(( i2c_read_byte(0x07) &0xff)<<4);
        if(z>(0xfff/2))
        {
            z = -(0xfff-z);
        }
        z = (z*9.8)/(0xfff/2/2); //当量程为±2g时,转换为g/s的加速度换算公式

2.    地磁数据读取参考代码:
注意:在读取数据前,必须确保地磁模块处于非suspend状态:
//0x4b bit0:power control bit 1:sleep mode;0:suspend mode
        i2c_write_byte(0x4b,0x01);//from suspend mode to sleep mode

//bit3-bit5:out put data rate,0-10hz;1-2hz;2-6hz;3-8hz;4-15hz;5-20hz;6-25hz;7-30hz;
     //bit1-bit2:operation mode: 0-nomal mode;1-forced mode;3-sleep mode;
        i2c_write_byte (0x4c,0x02);

DelayMs(BMI156_CONVERSION_TIME);//wait data convert finish

x =( i2c_read_byte (0x42) &0xf8) >>3 ;
        x = x|(( i2c_read_byte (0x43) &0xff)<<5);

y =( i2c_read_byte (0x44) &0xf8) >>3 ;
        y = y|(( i2c_read_byte (0x45) &0xff)<<5);

z =( i2c_read_byte (0x46) &0xfe) >>1 ;
        z = z|(( i2c_read_byte (0x47) &0xff)<<7);

博世传感器调试笔记(三)加速度及地磁传感器BMC156的更多相关文章

  1. 博世传感器调试笔记(一)----加速度传感器BMA253

    公司是bosch的代理商,最近一段时间一直在公司开发的传感器demo板上调试bosch sensor器件.涉及到的器件有7,8款,类型包括重力加速度.地磁.陀螺仪.温度.湿度.大气压力传感器等.在调试 ...

  2. 博世传感器调试笔记(二)加速度及陀螺仪传感器BMI160

    一.功能参数简介bosch Sensortec公司推出的最新BMI160惯性测量单元将最顶尖的16位3轴超低重力加速度计和超低功耗3轴陀螺仪集成于单一封装.MI160采用14管脚LGA封装,尺寸为2. ...

  3. Android指南针之加速度传感器地磁传感器-android学习之旅(67)

    由于andorid不推荐用传统的方向传感器,推荐用加速度传感器和地磁传感器来构造得到方向传感器的数据,其实主要是z轴的旋转角度 具体代码示例 代码如下 public class MainActivit ...

  4. JavaScript特效(调试笔记)

    JavaScript特效 一.在网页上显示当前的时间日期,例如:“2016年3月26日 星期六”. js源代码: function getTime() { var today = new Date() ...

  5. Android的重力传感器(3轴加速度传感器)简单实例

    重力感应主要是依靠手机的加速度传感器(accelerometer)来实现 在Android的开发中一共有八种传感器但是不一定每一款真机都支持这些传感器.因为很多功能用户根本不care的所以可能开发商会 ...

  6. VSTO学习笔记(三) 开发Office 2010 64位COM加载项

    原文:VSTO学习笔记(三) 开发Office 2010 64位COM加载项 一.加载项简介 Office提供了多种用于扩展Office应用程序功能的模式,常见的有: 1.Office 自动化程序(A ...

  7. Learning ROS for Robotics Programming Second Edition学习笔记(三) 补充 hector_slam

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...

  8. Learning ROS for Robotics Programming Second Edition学习笔记(三) indigo rplidar rviz slam

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...

  9. 响应式编程笔记三:一个简单的HTTP服务器

    # 响应式编程笔记三:一个简单的HTTP服务器 本文我们将继续前面的学习,但将更多的注意力放在用例和编写实际能用的代码上面,而非基本的APIs学习. 我们会看到Reactive是一个有用的抽象 - 对 ...

随机推荐

  1. C++:类中的赋值函数

    先来看一个例子: #include<iostream> #include<string> using namespace std; class Student{ public: ...

  2. 四则运算<C++>

    代码: #include<iostream> #define N 30 using namespace std; void main() { cout<<"***** ...

  3. bata4

    目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员:恺琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示组 ...

  4. 15_常用API_第15天(Object、String、StringBuffer、用户登陆注册)_讲义

    今日内容介绍 1.Object 2.String 3.StringBuilder 01API概念 A:API(Application Programming Interface) 应用程序编程接口 B ...

  5. iOS- CALayer绘图,如何绘制渐变效果图

    1.渐变效果 —> 色彩空间 首先:自定义一个渐变视图,在自定义视图中重写drawRect #import "ViewController.h" #import " ...

  6. 初期测评 A 排序

    https://vjudge.net/contest/240302#problem/A 输入一行数字,如果我们把这行数字中的‘5’都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以‘0 ...

  7. jenkins构建启动失败

    有一个项目,在启动的时候读取了环境变量,第一次写了一个启动脚本如下 #!/bin/bash --login jarFile=$ pid=`ps -ef | grep $jarFile | grep ' ...

  8. 关于es6箭头函数

    1  基本用法 ES6 允许使用 “ 箭头 ” (=>)定义函数. var f = v => v; //上面的箭头函数等同于: var f = function(v) { return v ...

  9. SpringBoot(十三)_springboot上传Excel并读取excel中的数据

    今天工作中,发现同事在整理数据,通过excel上传到数据库.所以现在写了篇利用springboot读取excel中的数据的demo.至于数据的进一步处理,大家肯定有不同的应用场景,自行修改 pom文件 ...

  10. javascript 进阶篇1 正则表达式,cookie管理,userData

    首先,什么事正则表达式呢,其实引入概念很多时候并不能帮我们明白它到底是什么,所以我先简单描述下,正则表达式,其实就是一个记录字符串规则则的字符串,等我们看完这一部分,也就能明白它到底是什么了. 基本语 ...