公司是bosch的代理商,最近一段时间一直在公司开发的传感器demo板上调试bosch sensor器件。涉及到的器件有7,8款,类型包括重力加速度、地磁、陀螺仪、温度、湿度、大气压力传感器等。在调试的过程中做了一些笔记,在此将其简单分享出来。
BMA253是3轴12 bit加速度传感器,支持I2C/SPI两种通讯方式,其i2c设备地址0x18。
关键寄存器
R0:CHIPID register ,值为 0xfa
X轴加速度数据12bit
r0x02:ACCD_X_LSB acc_x_lsb[3:0] bit4--bit7
r0x03:ACCD_X_MSB acc_x_msb[11:4] bit0--bit7
Y轴加速度数据12bit
r0x04:ACCD_Y_LSB acc_y_lsb[3:0] bit4--bit7
r0x05:ACCD_Y_MSB acc_y_msb[11:4] bit0--bit7
Z轴加速度数据12bit
r0x06:ACCD_Z_LSB acc_z_lsb[3:0] bit4--bit7
r0x07:ACCD_Z_MSB acc_z_msb[11:4] bit0--bit7
测量范围:
Register 0x0F (PMU_RANGE)
The register allows the selection of the accelerometer g-range.
range<3:0>:Selection of accelerometer g-range:
?0011b ? ? ±2g range; ?0101b ? ? ±4g range; ?1000b ? ? ±8g range;
?1100b ? ? ±16g range; all other settings ? reserved (do not use)
带宽(数据输出频率)
Register 0x10 (PMU_BW)
The register allows the selection of the acceleration data filter bandwidth.
bw<4:0>:Selection of data filter bandwidth:
?00xxxb ? ? 7.81 Hz,
?01000b ? ? 7.81 Hz, ?01001b ? ? 15.63 Hz,
?01010b ? ? 31.25 Hz, ?01011b ? ? 62.5 Hz, ?01100b ? ? 125 Hz,
?01101b ? ? 250 Hz,
?01110b ? ? 500 Hz, ?01111b ? ? 1000 Hz,
?1xxxxb ? ? 1000 Hz
寄存器参考配置:
0x0F------0x03 (PMU_RANGE检测范围±2g)
0x10------0x0A (PMU_BW滤波带宽 31.25HZ)
3轴加速度数据读取参考代码:
x =( i2c_read_byte(0x02) &0xf0) >>4 ;
x = x|(( i2c_read_byte(0x03) &0xff)<<4);
if(x>0x7ff)
{
x = -(0xfff-x);
}
x = (x*9.8)/(0x800/2); //当量程为±2g时,转换为g/s的加速度换算公式
y =( i2c_read_byte(0x04) &0xf0) >>4 ;
y = y|(( i2c_read_byte(0x05) &0xff)<<4);
if(y>0x7ff)
{
y = -(0xfff-y);
}
y = (y*9.8)/(0x800/2); //当量程为±2g时,转换为g/s的加速度换算公式
z =( i2c_read_byte(0x06) &0xf0) >>4 ;
z = z|(( i2c_read_byte(0x07) &0xff)<<4);
if(z>0x7ff)
{
z = -(0xfff-z);
}
z = (z*9.8)/(0x800/2); //当量程为±2g时,转换为g/s的加速度换算公式
注意:传感器的精确度跟环境温度等有密切的关系,如果希望获取准确的数据,需要进行温度补偿等操作,在此并未涉及。