STM32 PWM 输出:占空比、频率与死区时间的工程配置

举报
yd_223794387 发表于 2026/11/08 00:07:25 2026/11/08
【摘要】 在 STM32 上做电机调速、舵机控制或者 LED 调光,绕不开 PWM。PWM 看起来只是“定时器输出方波”,但工程上真正容易踩坑的从来不是“能不能输出”,而是频率算错、占空比跳变、互补输出没有死区导致上下管直通。这篇文章把这三个量一次讲清楚。一、三个基本量:频率、占空比、极性PWM 输出由定时器产生,三个寄存器决定一切:PSC(预分频)、ARR(自动重装载)、CCR(比较值)。输出频率 ...

在 STM32 上做电机调速、舵机控制或者 LED 调光,绕不开 PWM。PWM 看起来只是“定时器输出方波”,但工程上真正容易踩坑的从来不是“能不能输出”,而是频率算错、占空比跳变、互补输出没有死区导致上下管直通。这篇文章把这三个量一次讲清楚。

一、三个基本量:频率、占空比、极性

PWM 输出由定时器产生,三个寄存器决定一切:PSC(预分频)、ARR(自动重装载)、CCR(比较值)。

输出频率 = 定时器时钟 / ((PSC + 1) × (ARR + 1))。比如定时器时钟 72MHz,想得到 20kHz 的 PWM(高于人耳听觉,电机驱动常用),可以取 PSC = 71、ARR = 49:72MHz / (72 × 50) = 20kHz。

占空比 = CCR / (ARR + 1)。CCR 写 25,ARR 是 49,占空比就是 50%。注意分母是 ARR + 1,不是 ARR,差这 1 在小 ARR 时误差很明显。

极性决定有效电平是高还是低。OCxM 选 PWM 模式 1 时,CNT 小于 CCR 输出有效电平;模式 2 则相反。驱动共阳 LED 和驱动 N 沟道 MOS 管,极性要求正好相反,选错模式会出现“占空比越大灯越暗”这种反直觉现象,先确认硬件再选模式。

二、频率与分辨率的取舍

ARR 越大,占空比的调节步进越细,但频率越低;频率越高,ARR 越小,分辨率越差。20kHz 下 ARR = 49,占空比只能以 2% 为步进调节;如果应用要求 0.1% 的精细调节,就得降低频率或者提高定时器时钟。工程上先定频率下限(比如避开音频、满足电机电感续流),再看 ARR 够不够分分辨率,不够就换更高主频的定时器(高级定时器 TIM1/TIM8 挂在 APB2 上,时钟往往是 APB1 定时器的两倍)。

三、死区时间:互补输出的保命配置

用高级定时器做半桥、全桥驱动时,同一桥臂的上下管必须互补导通,中间留一段“两个都关断”的死区时间,否则上下管同时导通就是电源短路。死区由 BDTR 寄存器的 DTG 位段配置,单位不是纳秒而是定时器时钟周期,具体换算要查手册的死区时间表——DTG 不同取值区间的步进是不一样的,直接按“写多少就是多少纳秒”去算一定会错。

死区设太小等于没设,设太大则输出波形失真、有效占空比被吃掉一部分。经验值是按开关管的开通/关断时间(td(on)、td(off))留 1.5~2 倍余量,板子回来后用示波器实测上下管栅极波形确认没有交叠,再定最终值。

四、四个常见坑

第一,改 ARR 忘同步改 CCR。运行时想改频率直接写 ARR,CCR 还是旧值,占空比会跟着变。正确做法是按比例同步更新 CCR,或者先关输出、改完再开。

第二,CCR 写得比 ARR 大。CCR 超过 ARR 后输出恒为有效电平,PWM 退化成直流电平,电机全速、灯全亮,还以为是驱动写错了。写 CCR 前先钳位到 ARR。

第三,重映射后引脚没输出。TIM3_CH1 默认在 PA6,重映射到 PB4 后如果只改了 AF 配置、没开 GPIOB 时钟和复用功能,引脚就是死的。用示波器量不到波形时,先查 RCC 时钟开了没有,再查引脚复用对不对。

第四,PWM 模式下用 update 事件触发 DMA 搬运 CCR。想做呼吸灯、波形渐变时,把 DMA 目标设为 CCR 寄存器、触发源选定时器更新事件,可以不占用 CPU 实现占空比连续变化;但要注意 DMA 传输完成后的循环模式配置,否则只渐变一次就停住。

五、上板前的检查清单

频率是否符合要求(示波器实测,不是算出来就行);占空比 0% 和 100% 两个端点是否正常;互补输出死区是否实测无交叠;极性与硬件驱动是否一致;ARR/CCR 更新是否同步。五项都过,PWM 这一块才算真正调通。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。