为什么我得到这个加速度计的错误灵敏度输出?
Why am I getting the wrong sensitivity output for this accelerometer?
我将 LSM303AGR 加速度计 (Datasheet) 与 STM32 I2C Hal 库一起使用,但我无法确定灵敏度。
这是我设置配置寄存器的代码:
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 是根据数据 sheet 的灵敏度):
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 灵敏度时(数据 sheet 第 13 页)我在 z 轴上得到大约 1000mg,这是正确的!问题是,我的寄存器设置为 +/-8G(datasheet pg 49)和正常功率模式(datasheet pg 47)并且根据 datasheet 灵敏度应该是是 15.63 而不是 3.9!
如有任何帮助,我们将不胜感激!
您使用的是正常模式,因此您的数据应该是 10 位,并且您应该将读数右移 6(值左对齐)。
我将 LSM303AGR 加速度计 (Datasheet) 与 STM32 I2C Hal 库一起使用,但我无法确定灵敏度。
这是我设置配置寄存器的代码:
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 是根据数据 sheet 的灵敏度):
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 灵敏度时(数据 sheet 第 13 页)我在 z 轴上得到大约 1000mg,这是正确的!问题是,我的寄存器设置为 +/-8G(datasheet pg 49)和正常功率模式(datasheet pg 47)并且根据 datasheet 灵敏度应该是是 15.63 而不是 3.9!
如有任何帮助,我们将不胜感激!
您使用的是正常模式,因此您的数据应该是 10 位,并且您应该将读数右移 6(值左对齐)。