047、PWM信号生成与电机控制基础
一、一次炸机事故的教训
去年做四轴飞控调试,电机在解锁瞬间突然满速旋转,桨叶直接打穿了测试台的泡沫板。检查代码发现是PWM初始化时,定时器输出通道的极性配置错了——默认高电平有效,但电调期望的是低电平有效。这个低级错误让我意识到,PWM信号生成看似简单,但细节决定成败。
很多初学者以为PWM就是调占空比,但在飞控系统中,PWM直接驱动电机,任何时序偏差都会导致飞行器失控。今天这篇笔记,就从底层寄存器操作讲起,把PWM生成和电机控制的关键点掰开揉碎。
二、PWM信号的核心参数
飞控常用的PWM频率是50Hz(周期20ms),对应航模电调的标准协议。但注意,现代无刷电机电调(如BLHeli_S)支持更高频率,比如8kHz甚至16kHz,能减少电机噪音和延迟。
占空比范围通常为1ms-2ms(对应5%-10%),但不同电调有差异。我踩过的坑:某品牌电调实际有效范围是1.1ms-1.9ms,超出会进入校准模式。别这样写:直接写死1ms和2ms的边界值。应该通过电调校准流程动态获取。
死区时间(Dead Time)是另一个关键参数。H桥驱动中,上下桥臂切换需要死区防止直通。STM32的TIM_BDTR寄存器可以设置,一般取0.5μs-2μs。如果电机发热严重,检查死区是否过小。
三、STM32定时器配置实战
以STM32F407为例,TIM1是高级定时器,支持互补输出和刹车功能。配置代码片段如下: