回到TIME.c进入Accel_Calibration_Check();//加速度标定检测
定义:
uint8_t flight_direction=6;
uint8_t Accel_Calibration_Flag=0;//加速度计校准模式
uint8_t Accel_Calibration_Finished[6]={0,0,0,0,0,0};//对应面校准完成标志位
uint8_t Accel_Calibration_All_Finished=0;//6面校准全部校准完成标志位
uint16_t Accel_Calibration_Makesure_Cnt=0;
uint16_t Accel_flight_direction_cnt=0;
void Accel_Calibration_Check(void)
{
uint16_t i=0;
if(Throttle_Control==1000&&Yaw_Control>=80&&Roll_Control<=-40&&Pitch_Control>=40)
{
Accel_Calibration_Makesure_Cnt++;
}
if(Throttle_Control==1000
&&Yaw_Control>=80
&&Roll_Control<=-40
&&Pitch_Control>=40
&&Accel_Calibration_Makesure_Cnt>=200*3)//持续三秒
{
Bling_Mode=1;
Accel_Calibration_Flag=1;//加速度校准模式
Cal_Flag=0;
Bling_Set(&Light_1,1000,100,0.5,0,GPIOC,GPIO_Pin_4,1);
Bling_Set(&Light_2,1000,100,0.5,0,GPIOC,GPIO_Pin_5,1);
Bling_Set(&Light_3,1000,100,0.5,0,GPIOC,GPIO_Pin_10,1);
flight_direction=6;
Accel_Calibration_All_Finished=0;//全部校准完成标志位清零
Accel_Calibration_Makesure_Cnt=0;
for(i=0;i<6;i++)
{
Accel_Calibration_Finished[i]=0;//对应面标志位清零
acce_sample[i].x=0; //清空对应面的加速度计量
acce_sample[i].y=0; //清空对应面的加速度计量
acce_sample[i].z=0; //清空对应面的加速度计量
}
Page_Number=10;//OLED加速度计矫正页面
Reset_Mag_Calibartion(1);
}
if(Accel_Calibration_Flag==1)
{
if(Throttle_Control==1000&&Yaw_Control<=-80&&Roll_Control==0&&Pitch_Control==0)
{
Accel_flight_direction_cnt++;
if(Accel_flight_direction_cnt>=4*25)//100ms
flight_direction=0;
}
else if(Throttle_Control==1000&&Yaw_Control==0&&Roll_Control>=40&&Pitch_Control==0)
{
Accel_flight_direction_cnt++;
if(Accel_flight_direction_cnt>=4*25)//100ms
flight_direction=1;
}
else if(Throttle_Control==1000&&Yaw_Control==0&&Roll_Control<=-40&&Pitch_Control==0)
{
Accel_flight_direction_cnt++;
if(Accel_flight_direction_cnt>=4*25)//100ms
flight_direction=2;
}
else if(Throttle_Control==1000&&Yaw_Control==0&&Roll_Control==0&&Pitch_Control>=40)
{
Accel_flight_direction_cnt++;
if(Accel_flight_direction_cnt>=4*25)//100ms
flight_direction=3;
}
else if(Throttle_Control==1000&&Yaw_Control==0&&Roll_Control==0&&Pitch_Control<=-40)
{
Accel_flight_direction_cnt++;
if(Accel_flight_direction_cnt>=4*25)//100ms
flight_direction=4;
}
else if(Throttle_Control==1000&&Yaw_Control>80&&Roll_Control==0&&Pitch_Control==0)
{
Accel_flight_direction_cnt++;
if(Accel_flight_direction_cnt>=4*25)//100ms
flight_direction=5;
}
else
{
Accel_flight_direction_cnt/=2;
}
if(Accel_flight_direction_cnt>=200) Accel_flight_direction_cnt=0;
}
}
整个过程可以看做有三个部分组成
第一个if判断用来计数
if(Throttle_Control==1000&&Yaw_Control>=80&&Roll_Contro

本文介绍了一个无人机控制系统中的加速度计与磁力计校准流程,包括通过特定飞行姿态触发校准模式、使用指示灯提示当前校准状态、以及利用DMA进行数据传输等关键技术实现。
最低0.47元/天 解锁文章
5961

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



