一、本文适用场景PWM 是单片机、嵌入式、电机控制和电源控制中非常常见的技术。无论是 STM32、GD32、Arduino还是其他 MCU只要涉及 LED 调光、风扇调速、电机控制、蜂鸣器发声、舵机控制基本都会用到 PWM。很多初学者在学习 PWM 时经常会遇到这些问题PWM 到底是什么PWM 是不是在改变电压频率和周期是什么关系占空比是什么意思占空比越大输出就越强吗PWM 为什么可以控制 LED 亮度PWM 为什么可以控制风扇转速风扇为什么不会跟着每个脉冲一停一转PWM 如何控制直流电机GPIO 能不能直接驱动风扇或电机为什么有 PWM 波形但电机不转PWM 频率太低为什么会有噪声PWM 调试时应该先检查哪些地方本文将从 PWM 的基本概念开始依次介绍 PWM 的频率、周期、占空比、平均输出、电机和风扇调速原理、驱动电路、MOSFET、H 桥以及常见问题排查方法。二、什么是PWMPWM 的英文全称是Pulse Width Modulation中文一般称为脉冲宽度调制PWM 本质上是一种周期性高低电平信号。它不是输出一个连续变化的模拟电压而是通过快速切换高电平和低电平让负载在一段时间内感受到不同的平均电压、平均电流或平均功率。可以简单理解为PWM 快速开关 控制高电平持续时间例如 MCU 输出一个 5V PWM 信号高电平5V 低电平0V如果高电平时间比较短低电平时间比较长负载感受到的平均能量就小。如果高电平时间比较长低电平时间比较短负载感受到的平均能量就大。所以 PWM 的核心不是改变最高电压而是改变高电平在一个周期中所占的比例这个比例就是占空比。三、PWM波形由哪些部分组成一个典型 PWM 波形包含以下几个基本概念高电平时间 Ton 低电平时间 Toff 周期 T 频率 f 占空比 D其中T Ton Toff频率为f 1 / T占空比为D Ton / T × 100%例如一个 PWM 周期为 1ms高电平时间为 0.5ms则占空比 0.5ms / 1ms × 100% 50%如果高电平时间为 0.25ms则占空比为 25%。如果高电平时间为 0.75ms则占空比为 75%。图1 PWM 原理简介与应用示例PWM 通过高低电平快速切换工作。频率决定切换快慢占空比决定高电平持续时间占整个周期的比例。四、PWM是不是在改变电压严格来说PWM 并不是直接改变输出幅值。如果 MCU 的 IO 电平是 3.3V那么 PWM 高电平通常就是 3.3V低电平就是 0V。如果驱动电路接的是 12V 电源那么负载侧可能是在 12V 和 0V 之间快速切换。也就是说PWM 的幅值由供电电压决定占空比改变的是平均输出效果例如 5V PWM占空比近似平均电压25%约 1.25V50%约 2.5V75%约 3.75V100%约 5V这个平均电压只是近似理解实际负载效果还与负载类型、电感、电容、机械惯性、驱动方式有关。对于 LED、人眼看到的是亮度平均效果。对于风扇和电机机械系统会对快速变化进行平滑。对于电源电路电感和电容会进一步滤波。五、什么是PWM频率PWM 频率表示每秒钟重复多少个 PWM 周期单位是Hz例如1kHz 每秒 1000 个周期 20kHz 每秒 20000 个周期频率和周期关系为f 1 / T也就是频率越高周期越短 频率越低周期越长例如1kHz PWM 的周期为 1ms 20kHz PWM 的周期为 50us六、PWM频率影响什么PWM 频率主要影响输出平滑程度噪声和啸叫电机或风扇响应开关损耗驱动电路发热控制精度定时器分辨率。1. 频率太低如果 PWM 频率太低可能出现LED 低频闪烁人眼能看到亮灭变化风扇或电机出现噪声机械抖动明显控制不够平滑。例如几十 Hz 的 PWM 用于 LED 调光时可能肉眼可见闪烁。2. 频率太高频率太高也不一定越好。PWM 频率过高可能导致MOSFET 开关损耗增加驱动芯片发热电磁干扰增加定时器可用分辨率下降控制占空比不够细腻。所以 PWM 频率需要根据具体应用选择。例如LED 调光常用几百 Hz 到几十 kHz风扇 PWM 常见 20kHz 到 25kHz 左右蜂鸣器需要根据声音频率设置电机控制需要结合驱动器和电机特性选择。七、什么是占空比占空比英文为Duty Cycle表示高电平时间占整个周期的比例。公式为占空比 D Ton / T × 100%其中Ton高电平时间 TPWM周期例如Ton 0.2ms T 1ms则D 0.2 / 1 × 100% 20%占空比越大表示一个周期中高电平持续时间越长。八、占空比影响什么占空比主要影响平均输出强弱例如占空比 10%输出较弱 占空比 50%输出中等 占空比 90%输出较强在很多应用中可以这样理解占空比越大 → 平均电压越高 → 平均电流越大 → 平均功率越大但是这个关系不是所有场景都严格线性。因为实际负载可能受到电机反电动势风扇启动特性机械摩擦电源能力驱动电路损耗电感和电容滤波负载非线性特性等因素影响。所以可以记住占空比决定平均输出趋势但不一定等于最终效果完全线性变化。图2 PWM 频率与占空比解析频率决定 PWM 周期快慢占空比决定高电平持续时间比例。通常频率影响平滑度和噪声占空比影响平均输出强弱。九、PWM和定时器的关系在单片机中PWM 通常由定时器 Timer 产生。定时器 PWM 中常见几个关键寄存器PSC预分频器 ARR自动重装载寄存器 CNT计数器 CCR比较寄存器可以简单理解为ARR 决定周期 CCR 决定高电平持续时间 PSC 决定计数速度十、PWM频率怎么计算PWM 频率通常由定时器时钟、PSC 和 ARR 决定。常见公式为PWM频率 定时器时钟 / [(PSC 1) × (ARR 1)]其中PSC预分频值 ARR自动重装载值 定时器时钟Timer 输入时钟频率注意实际分频系数是 PSC 1 实际计数个数是 ARR 1这是初学者非常容易搞错的地方。十一、PWM占空比怎么计算在常见 PWM 模式下占空比由 CCR 和 ARR 决定。常见公式为占空比 CCR / (ARR 1) × 100%例如ARR 999 CCR 500则占空比 500 / 1000 × 100% 50%如果CCR 250则占空比 25%如果CCR 750则占空比 75%所以调频率改 PSC / ARR 调占空比改 CCR十二、为什么PWM可以调LED亮度LED 亮度与流过 LED 的平均电流有关。当 PWM 控制 LED 时高电平期间 LED 亮 低电平期间 LED 灭如果 PWM 频率足够高人眼无法分辨每一次亮灭只会看到平均亮度。例如占空比人眼感觉10%较暗50%中等亮度90%较亮这就是 PWM 调光的基本原理。需要注意如果 PWM 频率太低LED 会出现肉眼可见的闪烁。十三、PWM如何实现风扇调速风扇调速的核心是改变风扇获得的平均驱动功率单片机输出 PWM 信号通过 MOSFET、驱动管或者风扇内部控制电路让风扇电源快速“开”和“关”。当占空比较小时风扇得到的平均功率较小 转速较低当占空比较大时风扇得到的平均功率较大 转速较高例如占空比风扇状态20%低速50%中速80%高速但实际风扇转速不一定和占空比完全线性对应。因为风扇还受到启动转矩机械摩擦叶片惯性电机驱动方式供电电压风扇内部控制逻辑等因素影响。十四、风扇为什么不会跟着每个PWM脉冲停转这是很多初学者容易疑惑的问题。PWM 是快速开关信号那为什么风扇不会每个周期都停一下原因主要有三个1. 机械惯性风扇叶片和转子具有机械惯性。即使某一瞬间供电关闭风扇也不会立刻停止。2. 电机电感电机线圈具有电感特性。电流不会瞬间变为 0而是会有连续变化过程。3. 系统平滑效应风扇、电机、驱动电路和机械负载共同形成一个低通系统。PWM 快速切换后风扇感受到的更像是平均驱动功率而不是每个脉冲的瞬时状态。所以风扇感受到的是平均驱动 不是每个脉冲的瞬间开关十五、2线/3线风扇和4线PWM风扇区别风扇调速常见两类方式。1. 低边MOS控制普通风扇对于普通 2 线或 3 线风扇可以用 MOSFET 控制供电通断。基本结构是MCU PWM → MOSFET → 风扇 → 电源这种方式成本低、接线简单但需要注意MOSFET 选型电流能力续流保护PWM 频率风扇低占空比是否能启动供电和地线干扰。2. 4线PWM风扇4线风扇通常有红线电源 黑线GND 蓝线PWM控制 黄线TACH测速反馈4线风扇内部自带驱动控制电路。外部 PWM 通常只是控制输入信号不直接切断风扇主电源。优点是调速更平滑启动更可靠支持测速反馈更适合标准风扇控制。常见 4 线风扇 PWM 频率一般在 20kHz 到 28kHz 附近很多场景常用约 25kHz。具体应以风扇规格书为准。图3 PWM 风扇调速原理解析PWM 通过改变占空比改变风扇获得的平均驱动功率。由于风扇具有惯性、电机电感和机械系统平滑效应所以风扇不会跟随每个 PWM 脉冲瞬间停转。十六、PWM如何控制直流电机直流电机控制通常需要完整的驱动链路。典型控制链路如下MCU输出PWM ↓ 驱动芯片 / MOSFET / H桥 ↓ 直流电机 ↓ 机械负载MCU 产生 PWM 信号但 MCU 本身不能直接提供大电流。所以必须通过功率驱动电路放大控制能力。十七、为什么GPIO不能直接驱动电机GPIO 输出能力非常有限。一般 MCU GPIO 只能提供几 mA 到几十 mA 的电流具体要看芯片手册。而电机、风扇、继电器等负载通常需要更大的电流。如果直接用 GPIO 驱动电机可能导致GPIO 电流过大电压被拉低MCU 复位引脚损坏芯片发热电机无法启动反电动势损坏 MCU。所以大功率负载必须使用驱动电路。常见驱动方式包括三极管 MOSFET 电机驱动芯片 H桥驱动 专用风扇驱动芯片十八、什么是MOSFET驱动MOSFET 可以理解为一个由电压控制的大电流开关。MCU 通过 PWM 控制 MOSFET 的导通和关断MOSFET 再控制负载电流。例如低边开关结构电源正极 ↓ 风扇/电机 ↓ MOSFET ↓ GNDMCU 输出 PWM 到 MOSFET 栅极。当 MOSFET 导通时负载通电当 MOSFET 关闭时负载断电通过快速开关就可以实现 PWM 调速。需要注意MOSFET 要选逻辑电平型电流能力要足够导通电阻要低需要考虑散热感性负载需要续流路径栅极可能需要串联电阻地线布局要可靠。十九、为什么电机需要续流二极管电机和风扇属于感性负载。感性负载有一个特点电流不能瞬间变化当 MOSFET 关闭时电机线圈中的电流仍然想继续流动。如果没有合适的续流路径可能会产生较高的反向电压也就是反电动势。这个电压可能损坏MOSFET驱动芯片MCU其他电路。所以驱动感性负载时经常需要续流二极管 TVS管 RC吸收 专用驱动芯片内部保护具体方式取决于电机类型、驱动方式和电压电流等级。二十、什么是H桥H 桥是一种常见电机驱动电路。它通常由四个开关管组成可以改变电机两端电压极性。通过 H 桥可以实现正转反转制动调速。简化理解一组对角 MOSFET 导通 → 电机正转 另一组对角 MOSFET 导通 → 电机反转PWM 可以加在 H 桥的某些开关管上从而调节电机平均电压和速度。需要注意H 桥不能让上下桥臂同时导通否则会造成电源短路。这类问题称为直通所以实际 H 桥驱动通常需要死区时间和驱动保护。图4 PWM 与电机控制原理图解MCU 输出 PWM 后需要通过 MOSFET、驱动芯片或 H 桥放大驱动能力。PWM 控制的是平均能量驱动电路决定能不能安全带动负载。二十一、PWM有波形但电机不转的原因PWM 有波形不代表负载一定能工作。常见原因包括1. 驱动能力不足MCU GPIO 只能输出很小电流不能直接带电机。如果没有驱动电路电机可能完全不转。2. 占空比太小电机启动需要一定启动转矩。如果占空比太小平均功率不足电机可能起不来。解决方法启动时给较高占空比 转起来后再降低占空比3. 电源能力不足电机启动电流可能远大于正常工作电流。如果电源能力不足可能出现电压跌落MCU 复位电机不转驱动芯片保护。4. MOSFET没有完全导通如果 MOSFET 栅极驱动电压不够MOSFET 没有完全导通会导致压降大发热严重电机动力不足。5. 负载卡死或机械阻力太大电机或风扇被卡住也会导致不转或电流过大。二十二、PWM噪声大的原因PWM 噪声常见原因包括1. 频率落在人耳可闻范围人耳大约可以听到 20Hz 到 20kHz 的声音。如果 PWM 频率在这个范围内电机或风扇可能产生啸叫。解决方法通常是提高PWM频率到20kHz以上但也要考虑驱动损耗。2. 电机机械结构共振某些频率可能引起机械共振导致噪声明显。可以尝试调整 PWM 频率。3. 驱动电路开关过快或布局不好开关沿太快、走线不合理、地线回路过大都可能导致 EMI 和噪声。4. 占空比处于不稳定区间某些风扇或电机在低占空比下可能抖动、啸叫或启动困难。二十三、PWM调试时要看哪几个量调试 PWM 时不要只看代码应该重点看以下几个量频率 占空比 幅值 电流路径 负载状态1. 频率用示波器测量 PWM 周期计算频率是否正确。2. 占空比检查高电平时间是否符合预期。3. 幅值确认 PWM 高电平电压是否正确。例如 MCU 输出应该是 3.3V但实际只有 1V说明引脚或负载可能异常。4. 电流路径检查电机、电源、MOSFET、GND 是否形成完整回路。5. 负载状态确认风扇、电机、蜂鸣器或 LED 本身是否正常。二十四、PWM常见问题排查1. 没有PWM波形可能原因定时器时钟没开GPIO 没配置为复用功能定时器通道没启动PWM 模式没配置ARR / PSC 设置错误CCR 为 0高级定时器主输出没使能测错了引脚。2. 有波形但负载不动可能原因驱动电路没有工作MOSFET 接错电源电流不够占空比太小负载损坏负载启动转矩不够GPIO 直接拖负载导致输出能力不足。3. 风扇低占空比不启动可能原因风扇需要最低启动占空比启动转矩不足电源电压偏低风扇内部驱动限制。解决思路启动阶段先给较高占空比 稳定转动后再降低4. 驱动管发热可能原因MOSFET 导通电阻过大栅极驱动不足开关频率过高电流过大没有散热电路存在短路或负载异常。5. PWM有噪声可能原因频率在人耳可闻范围电机机械共振驱动电路布局不好电源滤波不足负载本身噪声大。图5 PWM 调试指南与常见问题排查PWM 调试时应先看波形再看驱动电路最后看负载。频率、占空比、幅值、电流路径和负载状态是最关键的 5 个排查点。二十五、PWM工程实践建议1. 不要直接用GPIO驱动大负载GPIO 只能输出小电流。驱动风扇、电机、继电器、大功率 LED 时必须使用MOSFET三极管驱动芯片H 桥专用电机控制器。2. 先低占空比测试再逐步增加调试时不要一上来就 100% 占空比。建议从较低占空比开始例如10% 20% 30%逐步观察负载、电流和发热情况。3. 注意电源和地线PWM 控制电机或风扇时电源和地线非常重要。常见问题包括电源电流不足GND 回路不可靠电机电流干扰 MCU电源纹波导致复位大电流地线和信号地没有合理处理。4. 使用示波器确认真实波形软件配置正确不等于引脚真的输出正确。建议用示波器确认频率占空比幅值上升沿下降沿是否有毛刺负载端波形是否正常。5. 感性负载要考虑保护风扇、电机、继电器等都属于感性负载。必须考虑续流二极管TVSMOSFET耐压驱动芯片保护电源滤波反电动势。二十六、STM32 HAL PWM输出示例下面代码仅作为理解思路不同芯片和工程配置可能不同。1. 启动PWMHAL_TIM_PWM_Start(htim3,TIM_CHANNEL_1);2. 设置占空比假设 ARR 999占空比范围希望使用 0% ~ 100%。voidPWM_SetDuty(uint16_tduty_percent){if(duty_percent100){duty_percent100;}uint32_tcompare(1000*duty_percent)/100;__HAL_TIM_SET_COMPARE(htim3,TIM_CHANNEL_1,compare);}如果PWM_SetDuty(50);则 CCR 大约为 500对应 50% 占空比。3. 设置不同占空比PWM_SetDuty(20);// 20% 占空比HAL_Delay(1000);PWM_SetDuty(50);// 50% 占空比HAL_Delay(1000);PWM_SetDuty(80);// 80% 占空比HAL_Delay(1000);实际项目中电机和风扇控制还需要增加限幅、启动策略、异常保护和闭环反馈。二十七、PWM学习重点总结学习 PWM可以先记住以下结论PWM 是脉冲宽度调制。PWM 本质是周期性的高低电平波形。PWM 不是直接改变电压幅值。PWM 通过改变高电平时间比例改变平均输出。频率表示每秒重复多少个周期。周期和频率关系为 f 1 / T。占空比表示高电平时间占整个周期的比例。占空比公式为 D Ton / T × 100%。频率主要影响平滑度、噪声和响应。占空比主要影响平均输出强弱。PWM 幅值由供电电压决定。LED 调光利用的是人眼视觉平均效果。风扇调速利用的是平均驱动功率和机械惯性。电机控制必须通过驱动电路。GPIO 不能直接驱动大功率负载。MOSFET 可以作为 PWM 控制的大电流开关。感性负载需要考虑续流保护。H 桥可以实现电机正转、反转、制动和调速。PWM 有波形不代表负载一定能工作。调试 PWM 要同时看波形、驱动、电源和负载。二十八、结语PWM 是嵌入式开发中非常基础但非常重要的控制方式。它看起来只是一个高低电平波形但实际可以用于LED调光 风扇调速 直流电机控制 蜂鸣器发声 舵机控制 开关电源 功率调节真正理解 PWM需要把下面几个概念串起来频率 周期 占空比 平均输出 驱动电路 负载特性可以用一句话总结PWM控制的是平均能量不是直接改变电压 占空比决定输出强弱频率决定切换快慢和平滑程度 真正带动负载还必须依靠可靠的驱动电路。所以在实际项目中调 PWM 不能只看软件配置还要结合示波器、电源、MOSFET、驱动芯片和负载一起分析。