MWC_v2.2 LOOP函数详解与代码解析

5星 · 超过95%的资源 需积分: 43 22 下载量 40 浏览量 更新于2024-09-09 1 收藏 216KB DOC 举报
MWC_v2.2代码解读主要关注的是LOOP()函数在一款无人飞行器控制程序中的实现与功能。该函数是整个控制系统的核心部分,负责处理遥控器输入并根据这些输入调整飞行器的姿态控制。以下是关于该函数的详细解析: 1. 变量定义: - `uint8_trcDelayCommand`:表示电机运行模式切换间隔,以50Hz的RC测量周期为单位。 - `uint8_trcSticks`:保存上一指令组合的杆位状态,用于组合控制策略。 - 一系列整数变量(如`terror`, `errorAngle`, `delta`, `PTerm`, `ITerm`, 等)用于计算PID(比例-积分-微分)控制算法中的误差、角速度差以及各阶段的积分和微分项。 2. PID控制器: - `LOOP()`函数利用PID算法来稳定飞行器的姿态。PID控制器是一种常见的闭环控制方法,通过比较设定的目标值(errorAngle)与实际值,调整电机的输出(throttle)以减小误差。它包括三个参数:比例P、积分I和微分D,分别对应于PTerm、ITerm和DTerm。 3. 滤波与延迟处理: - 在函数中,有对RC信号的实时处理,通过`computeRC()`函数对接收到的遥控器信号进行循环滤波,这有助于减少噪声影响,提高控制精度。滤波过程涉及取多组数据的平均值,确保在80毫秒的时间窗口内得到更稳定的信号。 4. 特殊遥控器支持: - MWC_v2.2代码还考虑到了特定类型的遥控器,如SPEKTRUM和OPENLRSv2MULTI。针对这些遥控器,有专门的读取函数,确保兼容性并获取正确的输入数据。 5. 定时器与状态管理: - `static uint32_trcTime`记录当前时间,`timestamp_fixated`可能用于固定时间相关的操作,如保持初始的油门值直到某个特定时间点。 6. 初始化与状态跟踪: - 函数中包含静态变量(如`lastGyro[]`, `delta1[]`, `delta2[]`),用于存储历史数据以便计算加速度和角速度的变化。另外,还有误差积分变量如`terrorGyroI[]`和`terrorAngleI[]`,用于更新PID控制器的积分项。 MWC_v2.2的LOOP()函数是一个复杂的控制逻辑核心,它结合了PID算法、信号处理技术以及对不同遥控器的支持,确保了飞行器在接收到遥控器指令后能准确、稳定地执行动作。理解并调试这样的代码对于维护和优化无人机性能至关重要。