研究了好多天,一直不清为啥错。地磁计(三轴磁力计)校准后获取三轴磁通量的值会一直周期性的混乱一下,找不到原因。各种状态机都试过了,最后发现校准值不要自更新,也就是新的校准值需要重新定义一个变量,如果用老的值校准后去自更新老的值会发生上述这个异常现象。
错误代码
void imu963ra_mag_demarcated()
{
//先减去X轴偏移量 mag_offset_x (零偏校准),消除传感器自身的系统误差
//再乘以X轴缩放系数 mag_scale_x (灵敏度校准),将数据归一化到标准范围
//校正后的结果重新存储回 imu963ra_mag_x 变量
imu963ra_mag_x = (int16)(((float)imu963ra_mag_x - mag_offset_x) * mag_scale_x);
imu963ra_mag_y = (int16)(((float)imu963ra_mag_y - mag_offset_y) * mag_scale_y);
imu963ra_mag_z = (int16)(((float)imu963ra_mag_z - mag_offset_z) * mag_scale_z);
}
正确代码
void imu963ra_mag_demarcated()
{
//先减去X轴偏移量 mag_offset_x (零偏校准),消除传感器自身的系统误差
//再乘以X轴缩放系数 mag_scale_x (灵敏度校准),将数据归一化到标准范围
//校正后的结果存储到新的定义的 imu963ra_mag_x1 变量
imu963ra_mag_x = (int16)(((float)imu963ra_mag_x - mag_offset_x) * mag_scale_x);
imu963ra_mag_y = (int16)(((float)imu963ra_mag_y - mag_offset_y) * mag_scale_y);
imu963ra_mag_z = (int16)(((float)imu963ra_mag_z - mag_offset_z) * mag_scale_z);
}
1万+

被折叠的 条评论
为什么被折叠?



