资讯详情

PWM电感升压电路实战:从5V到12V风扇驱动全解析

📅 2026/10/6 1:29:53 | 华诺云谱 👁 阅读
PWM电感升压电路实战:从5V到12V风扇驱动全解析
不知道你是不是也有这样的经历手边一堆5V电源、USB充电头想驱动一个12V的电脑散热风扇结果接上之后扇叶纹丝不动。或者你早就听说过“电感升压电路”但一直没搞清楚PWM占空比和输出电压到底是什么关系。这篇文章就是从一个非常具体的小风扇DIY项目出发把PWM控制电感升压电路这件事从头到尾讲明白包括boost升压原理、器件选型、STM32CubeMX配置、现场调试和避坑经验。内容偏实操适合正在学STM32、或者有一定电子基础但想动手做开关电源类小项目的朋友纯硬件玩家也可以看里面同样给了NE555的模拟PWM方案不用敲一行代码就能跑起来。1. 先搞懂PWM凭什么能把电压“升”上去1.1 电感升压的本质是电感的“电流惯性”很多人第一次看到boost升压电路会觉得反直觉一个电感、一个MOS管、一个二极管、一个电容怎么就把5V变成12V了关键就藏在电感的特性里电感中的电流不能突变它会在你断开开关的瞬间拼命维持原来方向的电流。整个电源变换的过程可以拆成三步MOS管导通输入电压Vin通过电感和导通的MOS管直接到地电感两端加上正向电压电流线性上升电感内部储存磁场能量。MOS管关断电感为了维持原来的电流方向会产生一个反向电动势这就是我们常说的“反压”。这个电压不会小它等于Vin叠加电感上的感应电动势足以把电流压过二极管给输出电容和负载供电。下一个周期重复PWM每来一个周期电感就完成一次“储能—释放”的循环输出电容负责平滑电压最终负载上看到的就是稳定的直流高压。用一个生活化类比电感就像水锤效应里的管道你突然关掉阀门水不会立刻停下来反而会继续往前冲形成一股高压冲击。PWM就是那个反复开关阀门的控制器每关一次就把水“泵”高一点。1.2 PWM占空比怎么决定输出电压boost电路在连续导通模式下理想输出电压和占空比D的关系非常简单Vout Vin / (1 - D)如果输入5V想让输出12V理论上需要的占空比是D 1 - Vin / Vout 1 - 5/12 ≈ 0.583也就是PWM高电平时间占整个周期的58.3%左右。但这个公式是理想情况真实电路里有二极管压降、电感直流电阻、MOS管导通损耗实际需要的占空比会略高一点。如果肖特基二极管压降算0.4V那么D会更接近0.6。我把几个常用目标电压列在下面方便你心里有个数。注意这只是理论估算实际空载和带载会不一样。输入电压目标输出电压理论占空比D5V9V0.4445V12V0.5835V15V0.66712V24V0.5001.3 PWM频率不是随便选的很多人第一次写PWM程序直接把频率设成1kHz甚至50Hz然后发现电感吱吱叫、输出电压纹波大得离谱。开关电源的PWM频率直接影响电感电流纹波计算公式是ΔI Vin × D / (f × L)以5V输入、D0.6、电感100uH为例如果频率是25kHz那么电感电流纹波大约是ΔI 5 × 0.6 / (25000 × 0.0001) 1.2A这个纹波太大了如果负载只有0.2A电感电流会直接断续输出特性会很差。把频率提高到100kHz同样条件下纹波降到0.3A就合理很多。所以实际DIY我一般建议把开关频率放在50kHz到100kHz之间好处有两个一是电感可以选小一点二是避开人耳最敏感的20kHz到20kHz音频范围不容易啸叫。还要特别提醒一句舵机PWM那种“周期20ms、脉宽1到2ms”的信号是控制信号不是功率开关信号千万不要套到升压电路里不然MOS管会一直处于半开半关状态发热量非常吓人。1.4 STM32定时器PWM输出模式和四线风扇PWM调速的区别STM32F103的定时器PWM输出模式里ARR决定了PWM周期CCR决定了占空比频率公式是f 定时器时钟 / ((PSC 1) × (ARR 1))这个后面会详细算。但这里先强调一个大坑市面上常见的四线电脑风扇风扇本体的PWM调速信号通常是25kHz的方波但那个信号不是直接串在风扇电源线上斩波的而是给风扇内部的驱动芯片一个调速指令由芯片控制电机换相和功率管。我们这篇文章做的是外部功率变换用PWM控制升压电路给风扇供电如果你把风扇自己的PWM调速线直接拿去驱动MOS管很容易出问题。这两者的用途千万别搞混。2. 器件选型哪些东西能直接买到哪些要避坑2.1 核心器件清单下面是一份我实际做这个项目时用的物料清单全部都是常见器件电子市场或者各种开源硬件平台都能买到。器件型号/参数说明MOS管AO3400 或 IRLZ44N必须是逻辑电平MOSVgs阈值低电感100uH~220uH额定电流≥2A用功率电感别用色环电感肖特基二极管SS34 / SS54耐压40V左右正向压降低输出电容470uF/25V电解 10uF陶瓷电解滤低频陶瓷滤高频输入电容100uF/16V稳定输入电压降低电源波动栅极电阻10Ω~22Ω限制栅极充放电速度减少振铃下拉电阻10kΩ防止上电瞬间MOS管误导通负载12V直流无刷风扇参考电流0.1A~0.3A如果你手头有IRF540、IRF640这类经典MOS管我建议先放一边。这些管子Vgs阈值高3.3V或5V的PWM高电平根本不能把它们彻底打开管子会工作在放大区通态电阻巨大发热严重。选AO3400就是因为它Vgs(th)只有0.65V到1.45V3.3V逻辑电平就能可靠驱动。注意同型号SOT-23小封装散热能力有限如果电流超过1A尽量选更大封装的逻辑电平MOS。2.2 3.3V单片机为什么推不动普通MOS管这个问题在热词里反复出现PWM接MOS管发热。一个很常见的原因是大家以为“PWM高电平”就等于“MOS管完全导通”实际上普通增强型MOS管要完全导通Vgs通常需要10V左右。STM32F103的GPIO输出高电平只有3.3V勉强超过阈值但管子只是打开了很小一部分导通电阻可能有几百毫欧甚至几欧流过大电流时损耗全变成热量。解决思路有三条按优先级排换逻辑电平MOS。这是最简单的方案AO3400、IRLZ44N、IRLR2905都行。增加栅极驱动电路。用两个三极管搭推挽驱动或者直接用栅极驱动芯片把3.3V PWM转换成10V到12V的栅极驱动信号。做电平转换。如果信号路径较长或者要求高精度电平转换可以用专门的PWM电平转换电路但对这个DIY项目来说属于杀鸡用牛刀。我的建议是刚开始玩先选逻辑电平MOS等后面做更大功率项目再研究驱动芯片。栅极驱动问题不解决换再好的电感电容升压电路也很难稳定工作。2.3 电感饱和是一个常被忽略的坑电感选型时大家往往只关心电感量忽略了额定电流和饱和电流。电感一旦饱和感值会急剧下降电感电流变成“一根导线”直接烧穿MOS管。一般情况下电感额定电流至少要大于负载电流的两倍峰值电流要按“负载电流 一半的纹波电流”估算。举个例子风扇负载0.2A输入5V理想情况下输入平均电流大约是12×0.2/5≈0.48A但考虑效率折算实际输入电流可能在0.6A左右而开关管和电感上的峰值电流可能超过1A。所以我做这个项目直接选了220uH、2A额定电流的功率电感低频纹波小又有足够裕量不会因为过流而饱和。3. 两套PWM生成方案按你的条件选3.1 纯硬件方案NE555产生PWM不用写代码如果你不想碰单片机NE555是最快上手的办法。用NE555搭无稳态多谐振荡器输出一个固定频率的方波就可以当作PWM信号送给MOS管栅极。想要独立调节占空比需要在充放电回路上各加一个二极管让充电和放电走不同路径这样充电电阻和放电电阻可以分别调节。基础频率公式是f ≈ 1.44 / ((R1 2R2) × C)高电平时间约等于tH ≈ 0.693 × (R1 R2) × C低电平时间约等于tL ≈ 0.693 × R2 × C举个例子R1取1kΩR2用20kΩ电位器C取1nF中心频率大约35kHz占空比随电位器调节可以从很小做到很大。实测时注意频率会随着占空比微调而变化但对风扇这种负载而言并不敏感完全可以接受。这个方案最大的优点是调试方便拨动电位器就能看到风扇转速变化特别适合第一轮原理验证。缺点是没有闭环输出受输入电压和负载影响大后面如果想做稳定控制还是要上单片机。3.2 STM32F103定时器PWM输出最推荐的灵活方案用STM32做主控最大的好处是频率和占空比都能精确控制而且可以方便地增加反馈和保护逻辑。下面以STM32F103在CubeMX里配置TIM2_CH1输出25kHz PWM为例走一遍完整流程。在CubeMX里的配置步骤选择芯片型号STM32F103C8T6RCC打开HSE外部晶振。时钟树确认定时器时钟是72MHz。STM32F103的TIM2挂载在APB1上APB1本身可能是36MHz但定时器时钟会自动倍频到72MHz这个细节很多人容易看错。左边选择TIM2Channel1模式设为PWM Generation CH1。配置参数Prescaler设为71Counter Period设为39。这样PWM频率就是f 72MHz / ((711) × (391)) 72MHz / 2880 25kHz初始Pulse设为0这样刚上电时不会突然给风扇全速。生成工程代码后在main.c里启动PWM输出。HAL库代码其实非常简洁HAL_TIM_PWM_Start(htim2, TIM_CHANNEL_1); void set_duty(uint8_t duty) // duty 0~100 { uint32_t pulse (uint32_t)duty * (htim2.Init.Period 1) / 100; __HAL_TIM_SET_COMPARE(htim2, TIM_CHANNEL_1, pulse); }注意STM32的PWM占空比计算公式是CCR / (ARR 1)不是CCR / ARR因为计数器是从0开始计数的。我这里设置的ARR寄存器值是39实际周期是40个计数节拍所以100%占空比需要Pulse设为40而不是39。开机的软启动也很重要不要直接set_duty(60)会让输出电容和风扇瞬间承受冲击也容易诱发过压。我习惯用一个循环慢慢爬坡for (uint16_t i 0; i 30; i) { set_duty(i * 100 / 30); HAL_Delay(20); }这样从0到100%平滑过渡实测输出稳定很多。如果你做的是多路输出或者更复杂的波形可以用PWM加DMA直接批量更新比较寄存器让CPU在波形发送期间完全休息。CubeMX里可以勾选DMA请求代码里使用HAL_TIM_PWM_Start_DMA原理就是让DMA在更新事件触发时自动把脉冲值搬到CCR寄存器里。3.3 其他常见控制方式输入捕获、IR2104和仿真验证再补充几种热词里经常出现的方向方便你后面扩展。输入捕获测外部PWM信号比如外部给你一个可调PWM信号你想把它当成调速给定就可以用另一个定时器的输入捕获通道比如“PWM input on CH1”捕获周期和高电平时间然后映射成自己的PWM占空比。半桥驱动芯片如果以后用IR2104这类芯片驱动半桥或H桥电路本质思路也一样重点是处理好上管的自举电容和死区时间。单相H桥PWM整流器就是用这种思路把交流侧功率可控的底层思想和boost纯粹程度不一样但PWM开关的概念是相通的。Simulink辅助设计先搭一个boost模型跑仿真确认环路参数和拓扑工作点再把代码移植到STM32适合项目复杂度上来以后用。4. 小风扇DIY案例从面包板搭起来到转速可调4.1 接线顺序与检查细节下面的接线表以STM32PWM输出为例NE555方案只是把“PWM_IN”换成555的输出其余部分完全相同。连接点从哪来到哪去输入电源Vin5V/2A适配器正极电感一端、输入电容正极GND电源负极STM32/555的GND、MOS管源极、输入电容负极L电感另一端MOS管漏极、肖特基二极管阳极、开关节点D肖特基二极管阴极输出电容正极、风扇正极MOS栅极PWM输出经过10Ω电阻到MOS栅极同时在栅极和源极之间加10k下拉风扇输出正极/负极风扇红线接正极黑线接负极接线顺序建议先焊或插好输入电容、MOS、电感、二极管、输出电容这些是功率回路走线尽量短。再接入PWM信号和下拉电阻确认栅极不会悬空。输出端先接万用表或者假负载不要直接上风扇。上电前检查二极管方向阴极必须朝向输出反了会短路电解电容极性也必须确认反接会冒烟甚至爆开。我以前为了省事用面包板搭过这个电路发现高频开关电源在面包板上问题非常多跳线过长产生寄生电感接触电阻不稳定输出电压一抖一抖的。后来改成洞洞板焊接问题立刻少了大半。你如果只想快速验证原理面包板可以用但建议跳线越短越好想稳定带风扇直接上洞洞板。4.2 上电调试与波形观察记录上电调试我习惯分三步走。第一步先不给MOS管PWM信号测量输出端电压。D0时MOS管完全关断但输入会通过电感和二极管直接到输出所以输出电压约等于输入电压减去一个二极管压降大约4.6V左右这是正常现象不是故障。第二步给一个很小的固定占空比比如20%用万用表测输出电压。如果接线没问题输出会升到6V到7V左右。这时候可以用示波器看MOS管栅极波形确认PWM的幅值和边沿是否干净。没有示波器也没关系可以临时在输出端并一个电阻和电容做RC滤波用万用表量电压平均值也能观察到占空比变化带来的电压变化。第三步带上风扇负载。占空比从20%开始逐步增加记录输出电压和电流每次加5%左右观察风扇是否平稳加速。下面是一份我在5V输入、220uH电感、25kHz PWM条件下实测的记录不同器件参数会有差异但趋势是一致的。占空比D输出电压输出电流现象0%4.6V0A风扇不转20%6.3V约0.02A风扇轻微抖动不转30%7.8V约0.05A风扇开始缓慢转动40%9.2V约0.09A风扇明显转动58%11.9V约0.18A风扇接近额定转速70%14.2V约0.25A风扇高速偏危险看到70%占空比输出冲到14V就知道开环系统必须限制最大占空比。如果程序跑飞或者上位机误发一个100%占空比输出可能会冲到20V以上风扇会“飞车”电容也可能过压。所以我在程序里给set_duty函数加了一个上限防止占空比超过70%并且在输出端并了一个15V稳压管做硬性钳位保护。4.3 PWM调速与风扇的实际匹配用升压PWM同时调电压来调速有一个问题风扇启动时需要的电压比维持转动高不少。从表格也能看到20%占空比时虽然已经有6.3V输出但风扇只是轻微抖动因为电压不足以克服静摩擦和轴承阻力。实际使用中我建议把最低占空比设得稍微高一点比如30%起步让风扇能稳定转动然后在这个基础上调速。另外风扇本身是有最低启动电压的如果你把占空比调到很低风扇可能不转但一直处于堵转状态反而会烧电机。所以不只是“转速越低越好”要留一个合理的工作范围。还有一种更精细的做法是先用这个升压拓扑把输出电压稳定在12V左右再单独用一路低端MOS开关或者四线风扇的PWM引脚去调速这样电压不随风扇负载变化。本文的DIY案例属于最简单的“调压即调速”方案够用但你要清楚它的局限性后面需要更稳定输出时就要加闭环了。5. 常见问题与排查技巧实录5.1 问题速查表我把这个项目里能遇到的高频问题整理成了一张表排查时按顺序过一遍会快很多。现象可能原因排查与解决MOS管发热严重栅极驱动不足、频率太高、电感饱和、占空比过大用逻辑电平MOS降低频率或改用低栅电荷MOS换大电流电感限制最大占空比电感啸叫PWM频率落在音频范围、电感磁芯松动、纹波过大提升频率到50kHz以上换更大电感量固定电感线圈输出电压比预期低输入电压不足、二极管压降大、电感内阻大、MOS导通电阻大提高输入电源电流能力换肖特基二极管换低内阻电感适当提高占空比空载电压过高boost开环电路输出轻载时电压会上升接假负载或加电压反馈闭环带载后电压猛掉电感饱和、输入电源限流、输出电容不够换大饱和电流电感换大功率电源加大输出电容风扇不转或转速异常启动电压不足、占空比太低、风扇正负极接反提高最低占空比检查风扇供电线颜色输出超压导致风扇飞车占空比失控、程序跑飞、反馈失效加稳压管钳位、限制最大占空比、软启动5.2 PWM接MOS管发热的深度剖析这是热词里被反复问到的问题值得单独拿出来说。MOS管发热来源有三个导通损耗PI²×Rds(on)。栅极驱动电压不足时Rds(on)会大幅上升发热迅速。开关损耗P≈0.5×Vin×I×(trtF)×f。栅极电阻太大、驱动芯片驱动能力弱会导致开关边沿变慢开关损耗急剧增加。体二极管反向恢复损耗在boost拓扑里主要是二极管的恢复时间所以要用肖特基而不是普通整流管。排查的时候先看栅极波形。如果上升沿和下降沿都很缓那重点查栅极驱动链路的驱动能力和栅极电阻阻值。如果波形很陡但还是发热那重点查电感和二极管损耗。我个人的经验是栅极电阻不是越大越好也不是越小越好。太大开关变慢太小容易产生振铃和EMI。对于AO3400这种小管子10Ω左右通常比较合适对于大电流MOS可以结合推挽驱动把栅极电阻降到几欧。5.3 我踩过的坑与实际教训第一个坑用色环电感做升压。色环电感是小型固定电感额定电流通常只有几十毫安到几百毫安用于这个场景很容易饱和一接负载输出电压就狂掉我还以为是占空比算错了。后来换成220uH/2A的功率电感问题立刻消失。第二个坑用IRF640直接接STM32。脉宽没变但MOS管热到烫手输出电压很低。用万用表一量栅极电压只有3.3V而IRF640的Vgs(th)典型值2V到4V根本没完全导通。换了AO3400以后发热问题基本消失在0.2A负载下MOS管只是微温。第三个坑冷启动直接给定大占空比。有一次我在调试软件时把初始占空比从0改到80%一上电风扇像发疯一样高速转动输出电容吱的一声吓出一身汗。后来我给所有PWM输出统一加上软启动和限幅上电从0开始每20ms加1%稳得不能再稳。6. 更进一步闭环控制和故障保护怎么加6.1 电压闭环让输出电压真正“可设定”开环方案虽然能做出来但当输入电压波动或负载变化时输出电压会跟着跑风扇转速忽高忽低。一个很自然的升级就是加电压闭环用STM32的ADC采集输出电压可以通过分压电阻把12V降到3.3V以内。在代码里把实际电压和目标电压做差用简单的PI调节器计算新的占空比。限制占空比范围和每次调节步进防止环路振荡。ADC采样不需要很快1kHz左右就足够但要注意开关噪声会叠加在电压信号上建议取多个样本做移动平均或者在ADC引脚前加一个RC低通滤波截止频率放在几百赫兹。PI参数不需要特别精确先试P再试I。P太大容易震荡I太大会有超调这个具体数值和电感、电容、负载都有关多调几次就有手感了。6.2 PWM故障保护和拓展应用热词里出现的“PWM故障保护”在工业驱动里非常重要STM32F103的定时器本身支持刹车功能可以通过BKIN引脚紧急关断PWM输出。在DIY项目里你可以用一个比较器监测输出电流超过阈值后触发紧急关断或者直接把BKIN引脚接到一个硬件过压保护信号上。另外一个很实用的方向是温控风扇。热词里提到“STM32控制温度传感器DS18B20读温度输出PWM”其实就是把本文的PWM占空比和温度值关联起来。DS18B20用单总线协议读回温度然后把温度映射到占空比温度低于40°C占空比设为0风扇停转。温度在40°C到70°C之间占空比线性从20%升到80%。温度高于70°C占空比封顶在90%避免风扇超压。关键点是温度采样和PWM更新不要在同一个阻塞式延时循环里做建议用定时器中断做时间基准主循环只做状态管理这样风扇转速控制才平滑。6.3 多路PWM、DMA和仿真建模的扩展思路最后聊几个非常容易做上瘾的扩展方向。如果你觉得单路PWM不够可以用定时器的多个通道输出多路不同占空比的PWM配合DMA可以让CPU完全解放出来适合做呼吸灯、多路风扇组或者动画效果。如果可以接受电脑端建模推荐先在Simulink里把boost拓扑和PI控制器跑一遍观察启动冲击和负载突变下的响应心里有数以后再写STM32代码会少走很多弯路。如果之后涉及到H桥或者电机控制核心思想同样是“用一个高频开关信号控制功率管的导通时间”理解了电感升压再去理解其他开关变换器会轻松很多。这次DIY案例我前前后后做了三版第一版用面包板和NE555验证原理第二版换STM32和洞洞板解决散热和稳定性第三版加了电压闭环和过压保护才真正敢拿它去驱动风扇长时间运行。如果你也准备动手我建议按这个节奏来不要一上来就追求最高效率或者最强保护先让电路“跑起来”再逐步加东西。等你亲自测过栅极波形、听过电感啸叫、摸过MOS管温度很多之前觉得模糊的概念比如占空比、开关频率、电感饱和都会变成非常直接的体感记忆。
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑