PWM输出原理详解:呼吸灯与电机调速的实现方式
一、前言在嵌入式开发里定时器 PWM 绝对是日常使用频率最高的外设功能之一。小到开发板上的 LED 呼吸效果大到直流电机调速、舵机角度控制、简易 DCDC 调压凡是需要连续可调模拟量控制的场景基本都会用到 PWM。很多刚接触 STM32 的朋友会形成一个误区认为 PWM 能够直接输出连续变化的模拟电压。实际并不是这样。PWM 从头到尾都只是高低电平交替的数字方波不存在中间电压。我们看到 LED 明暗变化、电机转速快慢本质是依靠负载特性、人眼视觉暂留或者机械惯性对高频方波做 “平均等效” 得到的效果。本文从 PWM 底层原理、关键参数、定时器硬件运行逻辑入手结合呼吸灯、直流电机调速两个最经典工程案例讲清楚实际开发该如何配置、如何避坑最后附上可直接编译运行的 STM32 示例代码。二、PWM 核心基础原理2.1 什么是 PWMPWM 全称脉冲宽度调制Pulse Width Modulation。核心规则信号周期保持不变只调整一个周期内高电平持续的时间脉宽。普通 GPIO 只有全开、全关两种状态只能控制设备启动或者停止。而 PWM 依靠高速反复通断利用平均效应实现无级调节这也是它在控制领域被广泛使用的根本原因。2.2 PWM 关键工程参数所有单片机定时器配置 PWM都围绕下面几个参数展开弄懂之后不管换 STM32 哪个型号配置思路不会变。周期一次完整高电平 低电平的总时长。PWM 标准设计思路周期固定只修改脉宽。频率周期的倒数代表每秒产生多少组脉冲波形。频率选择没有统一标准需要结合负载特性决定。脉宽单个周期中高电平持续时间是我们程序中动态调整的对象。占空比高电平时长 / 完整周期时长通常使用百分比表示。2.3 等效平均电压负载最终响应的是一个周期内的平均电压公式举个例子3.3V 单片机系统占空比 0%平均电压 0VLED 熄灭、电机停转占空比 50%平均电压 1.65V占空比 100%持续高电平满功率输出。依靠连续修改占空比就能等效实现 0~3.3V 电压连续调节。三、STM32 定时器生成 PWM 硬件机制3.1 定时器计数逻辑STM32 硬件 PWM 依托通用定时器 / 高级定时器实现。定时器从 0 开始向上不断计数不断和捕获比较寄存器 CCR 做对比CNT计数值 CCR输出指定电平CNT计数值 ≥ CCR电平翻转CNT 计数达到 ARR 自动重装载值计数器清零重新开始新一轮计数循环产生稳定方波。3.2 两个核心寄存器分工ARR自动重装载寄存器决定 PWM 周期、输出频率工程上配置完成后一般固定不变CCR捕获比较寄存器决定脉宽、占空比程序运行时动态修改 CCR 数值就能实时调节输出效果。工程经验固定 ARR 调整 CCR不要运行过程中频繁修改 ARR波形容易紊乱。3.3 PWM 模式 1 与模式 2 区别向上计数PWM 模式 1CNT CCR 时输出有效电平高电平常用在呼吸灯、电机调速PWM 模式 2CNT CCR 时输出无效电平低电平适合需要反向逻辑的场景。日常开发绝大多数场景直接选用 PWM 模式 1 即可。四、实战场景一呼吸灯原理与实现逻辑4.1 呼吸灯实现本质单纯调用 HAL_Delay 切换 IO 电平得到的只是闪烁不是呼吸效果。 呼吸灯平滑明暗渐变核心思路持续缓慢修改 PWM 对应的 CCR 数值连续改变占空比LED 平均电压平滑变化肉眼看到明暗渐变。执行流程CCR 数值从小到大增加 → 占空比上升 → LED 由暗逐渐变亮CCR 到达最大值后数值逐步减小 → 占空比下降 → LED 由亮慢慢变暗循环往复形成持续呼吸效果。4.2 实际配置要点LED 属于纯电阻负载没有惯性频率太低会肉眼看到明显频闪。 推荐 PWM 频率区间1kHz ~ 5kHz。同时调整 CCR 的步长不能太大步长过大会出现亮度阶梯跳动步长过小明暗变化速度太慢。4.3 硬件注意事项单片机 IO 口驱动电流有限如果是大功率 LED不能直接用 IO 驱动需要增加三极管或者 MOS 管扩流。普通开发板板载小 LED 可以直接驱动。五、实战场景二直流电机调速原理与实现逻辑5.1 调速底层逻辑直流电机转速和两端平均电压正相关和 LED 调光原理相通。 电机属于机械惯性负载转子惯性相当于天然的低通滤波器对方波有平滑作用对波形的敏感程度比 LED 低很多。5.2 PWM 频率选型重点电机频率不能直接照搬 LED 参数频率直接影响运行噪音200Hz ~ 1kHz低速扭矩充足但运行时会产生刺耳啸叫8kHz ~ 20kHz超出人耳听觉范围运行安静是小型直流电机首选区间。注意频率也不要无限制拉高过高的频率会增大定时器中断、MOS 管开关损耗。5.3 开发常见问题低速抖动无法启动占空比太低平均电压不足以克服静摩擦力代码中需要设置最小启动占空比启停冲击过大不要直接从 0% 跳转到 100% 占空比需要做软启动缓慢增加占空比单片机 IO 不能直接驱动电机电机启动电流大必须搭配 DRV8833、L298N 这类驱动芯片。六、呼吸灯 VS 直流电机调速对比汇总表格对比项LED 呼吸灯直流电机调速推荐 PWM 频率1kHz~5kHz8kHz~20kHz负载类型纯电阻负载无惯性机械惯性负载自带滤波效果控制逻辑循环增减占空比往复变化稳态固定占空比按需变速设计目标调节等效电压控制亮度调节等效电压控制转速驱动需求小功率 LED 可直驱必须使用专用电机驱动芯片七、通用工程避坑总结优先使用定时器硬件 PWM。软件延时模拟 PWM 极度占用 CPU一旦系统中存在中断波形很容易失真只适合临时验证区分有效电平硬件电路加上下拉电阻时注意 PWM 极性配置感性负载电机需要增加续流二极管防止反向电动势击穿芯片占空比不要频繁突变大功率负载容易产生冲击电流调试阶段优先使用示波器观测 PWM 波形确认频率、占空比和预期一致再接入负载。八、STM32 HAL 库 呼吸灯完整示例代码平台说明STM32F103C8T6TIM1_CH1 (PA8) 输出 PWM开发板 LED 外接 PA8 配置定时器 72MHz 时钟预分频 PSC71ARR999PWM 频率 1kHz 编译环境STM32CubeMX 生成工程HAL 库。运行#include main.h #include tim.h // CCR最大值对应ARR数值 #define PWM_MAX_CCR 999 // 亮度变化步长 #define STEP 5 // 延时参数控制呼吸快慢 #define BREATH_DELAY 10 // 全局变量 uint16_t ccr_val 0; uint8_t dir 1; // 1递增0递减 int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_TIM1_Init(); // 启动TIM1 CH1 PWM输出 HAL_TIM_PWM_Start(htim1, TIM_CHANNEL_1); while (1) { if(dir 1) { ccr_val STEP; if(ccr_val PWM_MAX_CCR) { dir 0; } } else { ccr_val - STEP; if(ccr_val 0) { dir 1; } } // 更新比较值实时改变占空比 __HAL_TIM_SET_COMPARE(htim1, TIM_CHANNEL_1, ccr_val); HAL_Delay(BREATH_DELAY); } }关键配置补充CubeMX 参数TIM1 时钟72MHzPrescaler (PSC)71 → 定时器计数时钟 72M/(711)1MHzCounter Period(ARR)999PWM 频率 1M/(9991) 1000HzPWM 模式PWM Generation CH1 → PWM 模式 1代码扩展改造思路如果想要移植到电机调速调整 PSC、ARR 参数把 PWM 频率提升至 10kHz 左右删除来回增减的 dir 逻辑外部直接固定 / 修改 ccr_val 即可稳定控制转速额外增加 GPIO 控制电机正反转。九、PWM的输出与作用1. 如果要实现PWM信号输出如何输出呢可以直接通过芯片内部模块输出PWM信号前提是这个I/O口要有集成的pwm控制器只需要通过对应的寄存器即可这种自带有PWM输出的功能模块在程序设计更简便同时数据更精确。但是如果IC内部没有PWM功能模块或者要求不是很高的话可以利用I/O口设置一些参数来输出PWM信号因为PWM 信号其实就是一高一低的一系列电平组合在一起。具体方法是给I/O加一个定时器对于你要求输出的 PWM信号频率与你的定时器一致用定时器中断来计数但是这种方法一般不采用除非对于精度、频率等要求不是很高可以这样实现。2. PWM信号应用PWM信号把模拟信号转化为数字电路所需要的编码现在基本是采用数字电路因此在很多场合都采用PWM信号。 我们经常见到的就是交流调光电路也可以说是无级调速高电平占多一点也就是占空比大一点亮度就亮一点占空比小一点亮度就没有那么亮前提是PWM的频率要大于我们人眼识别频率要不然会出现闪烁现象。 除了在调光电路应用还有在直流斩波电路、蜂鸣器驱动、电机驱动、逆变电路、加湿机雾化量等都会有应用。十、全文总结PWM 的本质就是固定周期、可变脉宽的数字方波依靠占空比调整得到等效平均电压。呼吸灯和电机调速底层原理完全一致只是频率选择、负载特性、控制逻辑有明显区别。实际项目开发不要停留在直接复制代码的层面搞懂 ARR、CCR、频率、占空比之间的换算关系遇到灯光、电机、电源类 PWM 需求就能灵活调整参数解决频闪、噪音、低速无力等各类现场问题。

相关新闻

动态范围全解析:从传感器原理到HDR实战应用

动态范围全解析:从传感器原理到HDR实战应用

1. 动态范围到底是什么?聊摄影、音频、视频,甚至是你手机屏幕的好坏,总绕不开一个词——“动态范围”。听起来挺玄乎,但说白了,它衡量的就是一个设备或系统能同时记录或呈现的最亮和最暗细节的能力。你可以把它想象成一…

2026/8/5 8:44:57 阅读更多 →
Cesium for Unity Credits显示异常:Play模式下的UI初始化与Canvas渲染问题解决

Cesium for Unity Credits显示异常:Play模式下的UI初始化与Canvas渲染问题解决

1. 项目概述:一个看似微小却影响深远的“顽疾” 如果你正在使用Cesium for Unity开发一个需要发布到WebGL或PC/Mobile平台的3D地理空间应用,那么你很可能在Play模式下遇到过这个令人头疼的问题:Cesium Credits(版权信息&#xff0…

2026/8/4 8:20:26 阅读更多 →
AI应用工程化:从框架搭建到业务落地的Harness实践指南

AI应用工程化:从框架搭建到业务落地的Harness实践指南

1. 项目概述:从“搭轨道”到“摆寿司”的工程哲学最近在跟几个做AI应用开发的朋友聊天,发现大家聊到“Harness”这个词时,总有种微妙的错位感。有人觉得Harness就是个框架,把大模型、Agent、Workflow这些组件像乐高一样拼起来就完…

2026/8/4 8:20:26 阅读更多 →

最新新闻

158、YOLOv8改进实战:SlimNeck轻量级Neck设计——深度可分离卷积与通道剪枝

158、YOLOv8改进实战:SlimNeck轻量级Neck设计——深度可分离卷积与通道剪枝

158、YOLOv8改进实战:SlimNeck轻量级Neck设计——深度可分离卷积与通道剪枝 从一次线上事故说起 去年有个项目,模型在1080Ti上跑得挺欢,一上Jetson Orin就卡成PPT。客户那边摄像头是30fps的流,我们模型推理只能跑到12fps,还时不时掉帧。排查了一圈,发现瓶颈不在Backbon…

2026/8/5 9:54:15 阅读更多 →
大模型评测的潜规则:如何理性看待Benchmark榜单与模型能力

大模型评测的潜规则:如何理性看待Benchmark榜单与模型能力

1. 项目概述:当“高考状元”遇上大模型最近几个月,大模型圈子里隔三差五就能看到新的“状元”诞生。某某模型在某个权威评测集上超越了GPT-4,某某国产模型在某个榜单上登顶全球第一。这些消息看得人眼花缭乱,兴奋之余,…

2026/8/5 9:54:15 阅读更多 →
MerchantOps-KBQA 实践(十二):RAG 评估集、expected_source 与 Bad Case

MerchantOps-KBQA 实践(十二):RAG 评估集、expected_source 与 Bad Case

RAG 评估不应只看“回答读起来像不像”。对于商户运营知识库,更先要确认系统是否进入正确领域、是否引用正确版本、是否在知识不足时拒答。 一、评估数据项目维护 10 条评估问题、5 个 Bad Case 和 5 份 Runbook,五个知识领域各有可验证样本。每条问题记…

2026/8/5 9:54:15 阅读更多 →
Camera HAL— 多摄 Zoom 切换端到端调用流程

Camera HAL— 多摄 Zoom 切换端到端调用流程

Camera HAL —— 多摄 Zoom 切换端到端调用流程(CHI-CDK → CAMX → KMD) 0. 一句话结论(先看这个) zoom 切换的本质 =「CHI 的 multicamera 模块根据 zoom ratio 选出要用的物理相机 + 算出每路 crop,把结果塞进 InputMetadataOpticalZoom 这个 vendor tag;CAMX 的 QSA…

2026/8/5 9:54:14 阅读更多 →
ContextMenuManager:重新定义Windows右键菜单的智能管理体验

ContextMenuManager:重新定义Windows右键菜单的智能管理体验

ContextMenuManager:重新定义Windows右键菜单的智能管理体验 【免费下载链接】ContextMenuManager 🖱️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager 你是否曾为Windows右键菜单的杂乱无章而…

2026/8/5 9:54:14 阅读更多 →
AMD Ryzen硬件调试终极指南:解锁处理器隐藏潜能的完整教程

AMD Ryzen硬件调试终极指南:解锁处理器隐藏潜能的完整教程

AMD Ryzen硬件调试终极指南:解锁处理器隐藏潜能的完整教程 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https:…

2026/8/5 9:53:14 阅读更多 →

日新闻

Java缓存框架:JetCache

Java缓存框架:JetCache

TOC 一、简介 JetCache 是一个 Java 缓存抽象框架,为不同的缓存解决方案提供了统一的使用方式。 它提供的注解比 Spring Cache 更加强大。 JetCache 的注解支持原生 TTL、两级缓存以及在分布式环境中的自动刷新功能,同时你也可以通过代码直接操作 Cach…

2026/8/5 0:00:43 阅读更多 →
AD 铺铜设置十字连接,过孔全连接,新版AD的简单设置

AD 铺铜设置十字连接,过孔全连接,新版AD的简单设置

需求:通孔焊盘 十字花;过孔 Via 实心直连;贴片焊盘按需设置 AD 测试版本AD24 很多工程师踩坑:全部统一十字,导致接地过孔阻抗高、大电流发热! 一、快捷键打开规则 PCB 界面按下:D R 展开…

2026/8/5 0:00:43 阅读更多 →
AI素描转换技术深度拆解(2024最新论文+工业级落地代码):从Stable Diffusion ControlNet到LoRA微调全链路解析

AI素描转换技术深度拆解(2024最新论文+工业级落地代码):从Stable Diffusion ControlNet到LoRA微调全链路解析

更多请点击: https://kaifayun.com 第一章:AI生成素描效果 AI生成素描效果是计算机视觉与风格迁移技术融合的典型应用,其核心在于将彩色照片或RGB图像转换为具有手绘质感、明暗对比强烈、边缘清晰的单色素描图像。该过程通常依赖于深度学习模…

2026/8/5 0:00:43 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/4 13:24:41 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/4 11:41:39 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/4 5:26:40 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/4 13:38:24 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/4 11:09:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/4 13:38:40 阅读更多 →