最近遇到需要调试博世的一款IMU芯片,调好了留个纪念~
首先CUBEMX配置I2C,这里不多做赘述,参数默认即可。
然后要关注一下硬件IMU来判断一下I2C地址:
根据数据手册可以得知加速度计和陀螺仪的地址是不一样的,根据硬件接法的不同有两种情况,此处大家根据硬件选择。
这个芯片我们需要的数据就是三个方向的加速度和角加速度,我们首先来看加速度:
他这个加速度是一个s16的值,由两个u8拼凑而成,同时还有一个寄存器用来控制加速度的范围:
所以我们要做的就是读寄存器,然后拼接值,再根据范围确定这个值,同时这个加速度值还有一个计算方式:
这边不多做赘述,我们直接上代码:
//开始之前首先要对芯片进行复位操作
void imu_init(void) {
i2c_txbuf[0] = 0x7E;
i2c_txbuf[1] = 0xB6;
HAL_I2C_Master_Transmit(&hi2c1, 0x30, i2c_txbuf, 2, 1000);
HAL_Delay(10);
i2c_txbuf[0] = 0x7D;
i2c_txbuf[1] = 0x04;
HAL_I2C_Master_Transmit(&hi2c1, 0x30, i2c_txbuf, 2, 1000);
HAL_Delay(10);
i2c_txb