为什么我得到这个加速度计的错误灵敏度输出?



我正在使用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写传输是寄存器0x20,应该将传感器设置为正常模式,输出数据速率为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(数据表pg 49)和正常电源模式(数据表pg 47),根据数据表,灵敏度应该是15.63而不是3.9!

任何帮助将非常感激!

你正在使用正常模式,所以你的数据应该是10bit,你应该右移你的读取6(值左对齐)。

最新更新