硬件PWM:定时器自动翻转引脚,CPU不费心

短文标题: 硬件PWM:定时器自动翻转引脚,CPU不费心

你有没有想过一个问题:用软件延时翻转GPIO,CPU被占死,其他事做不了。用定时器中断翻转GPIO,中断频繁进出,CPU负载还是高。硬件PWM:配置好,它就自己在后台翻转引脚,CPU占用率≈0。硬件PWM的核心原理 通用定时器的PWM模式本质是比较输出

  1. 计数器从0向上计数(或向下/中央对齐)
  2. 计数值 < CCR(捕获/比较寄存器)→ 输出高电平
  3. 计数值 ≥ CCR → 输出低电平
  4. 计数值 = ARR(自动重装载寄存器)→ 归零,重复

整个过程硬件完成,不需要软件干预。占空比和周期的配置

  • 周期:ARR决定。PWM频率 = 定时器时钟 / (PSC+1) / (ARR+1)
  • 占空比:CCR决定。占空比 = CCR / (ARR+1) × 100%

示例:ARR=999,CCR=500 → 占空比50%。CCR=200 → 20%。代码示例,CubeMX配置:

  • 定时器时钟:72MHz
  • 预分频器(PSC):71 → 计数时钟1MHz(周期1μs)
  • ARR:999 → 周期1ms → PWM频率1kHz
  • CCR:500 → 占空比50%

启动PWM:

HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);

运行时改变占空比:

__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, 300); // 动态调为30%

关键:硬件自动更新输出,改CCR即可,无需重启定时器。

硬件PWM vs 软件模拟

硬件PWM是电机控制、LED调光、开关电源的首选方案。高级功能:互补输出与死区 高级定时器(TIM1/TIM8)支持互补PWM (CHx和CHxN),用于驱动H桥上下桥臂。通过死区时间配置,防止上下管同时导通。

// 设置死区时间(BDTR寄存器)

htim1.Init.BreakDeadTime = 100; // 100个时钟周期

刹车输入(BKIN):外部故障信号触发时,硬件自动关闭PWM输出,保护电路。多通道独立PWM,通用定时器(TIM2~TIM5)通常有4个独立的比较通道,可同时输出4路不同占空比的PWM(周期相同,占空比独立),适合RGB灯控、多轴电机驱动。

这个故事的启示, 硬件能做的事,别让软件做。定时器、PWM、DMA都是"硬件加速器"------配置好,启动,然后忘记。把CPU从"苦力"变成"指挥官"。

需要输出PWM?别再自己翻转GPIO了。翻开定时器章节,配好PWM模式。启动后,它就自己在后台干活,CPU去忙更重要的事。选硬件PWM,效率和性能都提高一截。


(本文灵感源于于振南《新概念ARM32单片机》教程第6.7节"通用定时器硬件PWM原理与其优势"。)

觉得有用?点赞、转发,让更多人看懂"硬件PWM"如何解放CPU

相关推荐
2CM_Embed7 小时前
Altium Designer 原理图与 PCB 快速相互定位:Cross Probe 交叉探针
嵌入式硬件·pcb·altium designer·c2000
恒锐丰-罗生8 小时前
宽压大电流同步降压优选|CN3906 DC-DC 电源芯片,车载 / 工控 / IoT 全能供电方案
嵌入式硬件·硬件工程
happygrilclh11 小时前
STM32,串口单字节中断接受,每次上电后,会收到一个0x00的解决办法。
单片机·嵌入式硬件
智闲电子设计12 小时前
STM32 独立看门狗 IWDG 实战:系统跑飞,它来兜底复位
stm32·单片机·嵌入式硬件
zcmodeltech14 小时前
智能制造教学实训沙盘模型多系统协同控制系统设计:基于STM32与Modbus RTU的工业机器人-智慧工厂-数字孪生全场景联动方案
数据库·stm32·嵌入式硬件·机器人·制造·多分类
程序员与背包客_CoderZ14 小时前
Linux D-Bus通信协议详解:从入门到C/C++编码实战
linux·服务器·c语言·c++·嵌入式硬件·嵌入式软件·dbus
嵌入式阿蔡15 小时前
HAL库 vs LL库 vs 寄存器:到底用哪个?
c语言·stm32·单片机·嵌入式硬件·嵌入式实时数据库
天空'之城17 小时前
单片机基础核心知识点汇总(三)
单片机·嵌入式硬件
嵌入式阿蔡17 小时前
CAN总线入门:从协议帧到STM32实战
c语言·stm32·单片机·嵌入式硬件·嵌入式实时数据库
恒锐丰科技韩生18 小时前
率能 SS8847E|2.7~15V 双通道 H 桥电机驱动 ETSSOP16 散热封装 家电 / 打印 / 舞台灯光专用
嵌入式硬件·硬件工程