内置滤波器
UI滤波器(是一种低通滤波器)
/**
* @brief 设置陀螺仪 UI滤波的带宽和阶数
* @param bandwidth: 低通滤波带宽值(0-7),数字越大,滤波效果越好
* @param order: 滤波阶数(1-3),阶数越高,滤波效果越好
* @return 无
*/
void icm42688_set_gyro_ui_filter(uint8_t bandwidth, uint8_t order) {
uint8_t reg_val ;
// 确保带宽值在有效范围内(0-7)
if (bandwidth > 7) {
bandwidth = 7; // 如果超出范围,设置为最大值
}
// 确保阶数在有效范围内(1-3)
if (order < 1 || order > 3) {
order = 3; // 如果超出范围,设置为默认值 3 阶
}
// 选择寄存器 Bank 0
icm42688_write_reg(ICM42688_REG_BANK_SEL, 0x00);
// 配置陀螺仪 UI滤波带宽
reg_val = icm42688_read_reg(ICM42688_GYRO_ACCEL_CONFIG0);
reg_val &= ~(0x0F); // 清除低 4 位(低通滤波配置位) 80页
reg_val |= (bandwidth & 0x0F); // 设置低通滤波带宽
icm42688_write_reg(ICM42688_GYRO_ACCEL_CONFIG0, reg_val);
// 配置陀螺仪 UI滤波阶数
reg_val = icm42688_read_reg(ICM42688_GYRO_CONFIG1);
reg_val &= ~(0x0C); // 清除阶数配置位(bit 3:2)
reg_val |= ((order - 1) << 2); // 设置阶数(1阶=00