博世傳感器調試筆記(三)加速度及地磁傳感器BMC156
一. 器件簡介:
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