首页 > 解决方案 > 为什么我得到这个加速度计的错误灵敏度输出?

问题描述

我正在使用带有 STM32 I2C Hal 库的 LSM303AGR 加速度计(数据表),但我无法确定灵敏度。

这是我设置配置寄存器的代码:

void LSM303AGR_Init() {

uint8_t Data[2] = {0};
Data[0]= 0x20;
Data[1]= 0x57;                                                                                                                                                                      //ODR @100Hz                                                                                                //Accelerometer Control Register 1 and Data
HAL_I2C_Master_Transmit(&hi2c1,0x19<<1,Data,2,50);
Data[0]= 0x23;
Data[1]= 0x20;                                                                                                                                                                      //+/-8G and in normal mode
HAL_I2C_Master_Transmit(&hi2c1,0x19<<1,Data,2,50);}
                                                                                            

第一次 I2C 写传输是寄存器 0x​​20,应该将传感器设置为正常模式并输出 100Hz 的数据速率,第二次 I2C 写传输应该将比例设置为 +/-8G。

此外,这是我读取 XYZ 16 位值并转换为 mg 的代码(15.63 是数据表中的灵敏度):

void LSM303AGR_AccReadXYZ(float* pData) {

HAL_I2C_Master_Transmit(&hi2c1,(0x19<<1)|0x01,&accXYZregAutoRead ,1,50);
HAL_I2C_Master_Receive(&hi2c1,(0x19<<1)|0x01, buffer,6,50); 
for(int i=0; i<3; i++) {
pData[i]=(float)((int16_t)((uint16_t)buffer[2*i+1] << 8) | buffer[2*i]) / 15.63;} //Readings in mg                               
}

我知道我正在写入这些寄存器并通过调试从正确的寄存器中读取。但是,通过上面的设置,我在桌面上使用 15.63 的灵敏度得到大约 250mg 的输出值(对于 z 轴,当然其他的大约为零)但是当我将 15.63 更改为 3.9 灵敏度时(数据表第 13 页)我在 z 轴上得到大约 1000mg 这是正确的!问题是,我的寄存器设置为 +/-8G(数据表第 49 页)和正常电源模式(数据表第 47 页),根据数据表,灵敏度应该是 15.63 而不是 3.9!

任何帮助将非常感激!

标签: stm32accelerometersensors

解决方案


您使用的是普通模式,因此您的数据应该是 10 位,并且您应该将读取数右移 6(值左对齐)。


推荐阅读