本部分主要是对IMU测量模块测量的值进行后续处理,同时在飞行过程中不断对数据进行更新,然后进行姿态解算,便于后续丢进PID中进行进一步处理。根据所处位置及函数调用情况不难发现此部分算是对底层的进一步封装,便于在任务调度器中进行调用
#include "Ano_FlightDataCal.h"
#include "Ano_Imu.h"
#include "Drv_icm20602.h"
#include "Ano_MagProcess.h"
#include "Drv_spl06.h"
#include "Drv_ak8975.h"
#include "Ano_MotionCal.h"
#include "Drv_vl53l0x.h"
#include "Drv_led.h"
#include "Ano_OF.h"
u16 test_time_cnt;
//传感器数据获取函数
void Fc_Sensor_Get()//1ms
{
static u8 cnt;
if(flag.start_ok)
{
/*读取陀螺仪加速度计数据*/
Drv_Icm20602_Read();
//定期进行以下两个传感器数据的获取
cnt ++;
cnt %= 20;
if(cnt==0)
{
/*读取电子罗盘磁力计数据*/
Drv_AK8975_Read();
/*读取气压计数据*/
baro_height = (s32)Drv_Spl0601_Read();
}
}
test_time_cnt++;
}
extern s32 sensor_val_ref[];
static u8 reset_imu_f;
//传感器更新函数
void IMU_Update_Task(u8 dT_ms)
{
////////////////////////////////////////////////////////////////////////
/*如果准备飞行,复位重力复位标记和磁力计复位标记*/
if(flag.fly_ready )
{
imu_state.G_reset = imu_state.M_reset