这两天看了论坛里的关于MPU6050的帖子,自己回家照葫芦画瓢的也做了一些实验,关于如何和实际的姿态矫正联系起来还不太清楚,今天在看手册时,发现了"LSB/g"这个单位,不知道什么意思,后来经过多处查询,知道了这个单位的含义,在这里就作为学习笔记记录下来吧。 以MPU6050加速度测量值为例:当测量范围是±2g时,测量精度是16384LSB/g,这个参数的含义简单说就是当测量的加速值是1g(重力加速度)时,那么加速度的输出就是16384,这也就是为什么在程序中需要对加速度的原始数据除以16384。那么为什么是16384呢,我们计算一下:16384*2=32768,32768*2=65536=2^16,MPU6050的ADC是16位的,所以不管测量范围多大,最终的输出范围都不会超过65535,所以测量范围越大,精度就越低。下面计算一下测量范围是±16g时的精度:16*2/65536=0.00048828125,然后取倒数1/0.00048828125=2048,和手册上完全一样。LSB/g是针对数字输出的传感器而言的 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的加速度换算公式 加速度传感器ADXL345量程为+/2g,输出的位数为10位(2的10次方共1024个LSB)对应满量程,那么灵敏度就为4g/1024LSB=3.9mv/g,取倒数为256LSB/g 程序中为12位,4/2^12,,求导数为1024LBS/g,,为0x800/2.. |