目的和范围
本文档介绍了Betaflight中的PWM(脉冲宽度调制)输出系统,该系统负责生成驱动电机和舵机的控制信号。该系统为基于定时器的PWM生成、电机端点计算和电机协议支持提供了硬件抽象。
PWM输出架构
PWM 输出系统围绕硬件抽象层构建,该抽象层管理定时器通道,并为电机控制提供统一的接口,而无需考虑底层电机协议。

核心数据结构封装pwmOutputPort_t了定时器硬件接口和将电机值转换为 PWM 脉冲宽度所需的缩放参数。
电机配置和终点
电机终点计算系统负责处理归一化电机值和 PWM 脉冲宽度之间的转换,支持标准飞行模式和 3D 飞行配置。
| 配置类型 | 参数 | 目的 |
|---|---|---|
| 标准航班 | mincommand,,maxthrottlemotorIdle | 正常前飞电机范围 |
| 3D飞行 | neutral3d,,,limit3d_lowlimit3d_highdeadband3d_* | 双向电机控制 |
| 输出限制 | outputLimit | 标尺最大电机输出 |

该analogInitEndpoints函数根据电机配置以及是否启用3D飞行模式来计算PWM脉冲宽度范围。在3D模式下,电机可以沿两个方向旋转,并具有中立中心点和死区以防止电机发生意外运动。
电机控制接口
PWM 输出系统提供了一组用于电机管理和状态查询的接口功能。

这些函数提供了对电机配置和状态信息的安全访问。边界检查机制pwmGetMotorIO可防止在请求无效电机索引时发生数组访问冲突。
硬件定时器集成
PWM 输出系统通过timerChannel_t结构和定时器配置功能与硬件定时器子系统集成。
| 成分 | 类型 | 目的 |
|---|---|---|
ccr | volatile timCCR_t * | 定时器捕获/比较寄存器指针 |
tim | TIM_TypeDef * | 定时器外围设备实例 |
pulseScale | float | 脉冲宽度计算的比例因子 |
pulseOffset | float | 脉冲定时偏移值 |
forceOverflow | bool | 定时器溢出控制标志 |
该pwmOutConfig函数配置用于 PWM 输出的定时器通道,并指定其频率、周期和初始脉冲宽度值。该motorPwmDevInit函数初始化电机设备子系统,并建立电机配置与 PWM 硬件之间的连接。
伺服支撑集成
PWM 输出系统还通过单独的配置结构和初始化路径提供伺服控制功能。

伺服控制使用相同的底层定时器硬件,但定时参数不同。伺服电机通常以 50-498Hz 的更新频率和 1000-2000μs 的脉冲宽度运行,而电机则使用更高频率的协议。
691



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



