MWCv2.2代码解析: LOOP()函数深度解读

5星 · 超过95%的资源 需积分: 47 115 下载量 156 浏览量 更新于2024-09-11 收藏 1.16MB DOC 举报
"MWC (MultiWii Control) 是一个开源的飞行控制系统,常用于无人机和多旋翼飞行器。本文主要对MWCv2.2版本中的代码进行解析,特别是`LOOP()`函数,它是MWC的核心循环,负责处理传感器数据、控制指令以及飞行稳定算法。" 在MWC代码中,`LOOP()`函数是整个系统运行的关键部分,它不断地执行,以实现对飞行器的实时控制。这个函数包含以下几个主要部分: 1. 变量声明: - `trcDelayCommand`:用于记录遥控器输入保持时间,以便执行命令或关闭电机。 - `trcSticks`:存储用于命令组合的摇杆位置。 - `axis`, `i`: 用于遍历不同轴的数据。 - `error`, `errorAngle`: 代表当前的控制误差和角度误差。 - `delta`, `deltaSum`: 计算误差变化和累计误差。 - `PTerm`, `ITerm`, `DTerm`: 分别代表比例、积分和微分控制器的输出。 - `PTermACC`, `ITermACC`, `PTermGYRO`, `ITermGYRO`: 用于积分和微分控制的累积变量。 - `lastGyro[]`: 存储上一次的陀螺仪数据。 - `delta1[]`, `delta2[]`: 用于计算速度变化。 - `errorGyroI[]`, `errorAngleI[]`: 积分误差。 - `trcTime`: 用于计时。 - `initialThrottleHold`: 初始油门保持值。 - `timestamp_fixated`: 用于特定时间戳。 2. 遥控器数据处理: - 通过`readSpektrum()`和`Read_OpenLRS_RC()`函数读取特定遥控器(如Spektrum和OpenLRSv2MULTI)的数据,确保及时更新遥控器输入。 3. 时间检查: - 检查是否超过50Hz周期的20ms,如果是,则执行`computeRC()`函数,该函数对遥控器信号进行滤波和平均,以提高输入稳定性。 4. 控制逻辑: - 在`LOOP()`函数中,会计算PID控制器的输出,这些输出用于调整飞行器的各个轴以达到稳定飞行。PID控制器的三个组成部分(比例、积分和微分)在误差计算和调整过程中起到关键作用。 5. 陀螺仪数据处理: - 使用当前陀螺仪数据与上一次数据的差值来计算旋转速率,并结合积分和微分项来校正飞行器姿态。 6. 其他功能: - 根据需要,函数还可能包含其他特定功能,例如电机控制、状态更新、故障检测等,但具体实现细节未在提供的内容中详细说明。 通过这样的循环,MWC能够实时处理传感器数据,不断调整飞行器的姿态和运动,以达到预定的飞行控制目标。这种实时性和准确性对于无人机和其他飞行器的安全和性能至关重要。理解并优化`LOOP()`函数是改进MWC性能和功能的关键。