【发布时间】:2021-11-26 05:45:58
【问题描述】:
我正在使用带有 STM32 I2C Hal 库的 LSM303AGR 加速度计 (Datasheet),但我无法确定灵敏度。
这是我设置配置寄存器的代码:
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(数据表第 49 页)和正常电源模式(数据表第 47 页),根据数据表,灵敏度应该是 15.63 而不是 3.9!
任何帮助将不胜感激!
【问题讨论】:
标签: stm32 accelerometer sensors