一.    器件简介:
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. 第二阶段Sprint2

    昨天:讨论冲刺阶段,目标,任务认领 今天:查看资料,开始视频录制部分的代码实现 遇到的问题:不能暂停后继续录制,只能直接结束

  2. VANET

    VANET知识 VANET与普通网络相比,与IOV的区别: VANET中Greedy Routing:基于距离(GPSR):基于速度和角度:基于道路层(TDR): Repair Strategy:Fa ...

  3. caffe添加自己的数据输入层

    整体思路: 阅读caffe数据输入层各个类之间的继承关系,确定当前类需要继承的父类以及所需参数的设置. 编写zzq_data.cpp 在layer_factory.cpp中完成注册: 在caffe.p ...

  4. “吃神么,买神么”的第一个Sprint计划(第二天)

    “吃神么,买神么”项目Sprint计划 ——5.22(第二天)立会内容与进度 团队组员各自任务: 冯美欣:logo的设计.搜索框的制作,"登陆/注册"的文字链接: 吴舒婷:导航条. ...

  5. 404 Note Found Team's First Blood

    团队构成: 队员学号姓名队长标注: 031602114--胡绪佩(队长) 031602113--何宇恒 081600410--胡青元 031602627--刘恺琳 031602525--刘一好 031 ...

  6. 数据库:XML,解析Dom4J

    package com.itheima.util; import java.io.FileOutputStream; import java.net.URL; import org.dom4j.Doc ...

  7. express框架结合ejs模板引擎使用

    我们在项目里建立一个views文件夹(必须),如果你不想使用views文件夹的话需要调用app.set("views","自定义文件夹名"),然后在里面建立一个 ...

  8. angularJS1笔记-(5)-过滤器练习

    html: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

  9. DispatcherServlet的作用

    DispatcherServlet是前端控制器设计模式的实现,提供Spring Web MVC的集中访问点,而且负责职责的分派,而且与Spring IoC容器无缝集成,从而可以获得Spring的所有好 ...

  10. MiniUI框架合并单元格

    在项目中遇到合并单元格的问题,所以总结一下. 用的是miniUI框架,所以只谈miniUI中的单元格合并. (1)必须添加onLoad="onLoad" (2)需要在JS中进行单元 ...