二、Crazepony1无人机源码分析-(3)100Hz循环

1.程序源码

        if(loop100HzCnt>=10)												//10ms
        {
            loop100HzCnt=0;

            realExecPrd[1]=micros()-startTime[1];
            startTime[1]=micros();
					
						LoopTime = realExecPrd[1];

            IMUSO3Thread();   //姿态解算,获得姿态角(弧度与度的表示)  注:yaw角度存在累计误差

            accUpdated=1;

            //气压读取
						if(okFbm320)
						{
							updateFBM320();		//在20ms中用到
						}

            //imu校准
            if(imuCaliFlag)					//当校验标志位置1时,会执行检验
            {
                if(IMU_Calibrate())	//获取加速度与角速度的偏置
                {
                    imuCaliFlag=0;
                    gParamsSaveEEPROMRequset=1;	//请求记录到EEPROM
                    imu.caliPass=1;
                }
            }

            CtrlAttiRate();
            CtrlMotor();

            execTime[1]=micros()-startTime[1];
						
						ExecuteTime = execTime[1];
        }

2.整体流程图

在这里插入图片描述

2.软件姿态解算

在这里插入图片描述

3.气压计处理

在这里插入图片描述
okFbm320标志位在气压计初始化时会置1。

4.IMU校准

在这里插入图片描述
imuCaliFlag标志位在遥控器发送校验命令时置1

5.角速度环与电机输出值的分配

在这里插入图片描述
1)角速度的给定值pitch_angle_PID.Output,roll_angle_PID.Output来源于角度环(CtrlAttiAng函数)的输出; -RC_DATA.YAW来源于遥控器(RCDataProcess函数);
2)控制模式(altCtrlMode):爬升(CLIMB_RATE),手控(MANUAL),着陆(LANDING);
3)当遥控器的油门值(RC_DATA.THROTTLE)首次大于600后,进入爬升模式,使能高度悬停,油门输入值就会来源于高度悬停函数的输出;
4)待机或着陆后会进入手控模式(MANUAL);

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值