ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

三线/四线PWM风扇原理与调速实战:从接线到驱动与故障排查

三线/四线PWM风扇原理与调速实战:从接线到驱动与故障排查 如果你在嵌入式项目里用过四线PWM风扇大概率经历过这种尴尬PWM控制线明明接上了占空比也改了风扇转速纹丝不动或者好不容易调低了转速FG测速读数又跳得像抽风再或者有人教你“用PWM斩12V电源线”去给三线风扇调速结果外挂的MOS管烫得能煎鸡蛋。这些坑我都踩过帮别人排查到最后发现绝大多数问题不是焊点松了而是对三线风扇和四线风扇内部的电路原理理解有偏差。下面就从电路原理讲起把三线和四线PWM风扇从内部结构到接线再到驱动和选型实战的完整链条拆一遍给准备自己做散热控制、改3D打印、做电源老化或嵌入式温控的朋友一条可以直接参考的路线。1. 风扇上多出来的那根线四线风扇到底多做了什么事1.1 双线风扇和三线风扇的底子先说最基础的。一颗双线风扇只有电源正极和负极上电就转转速取决于供电电压。12V供电就全速跑5V供电就慢一些没有控制信号也没有反馈信号。很多便宜的机箱风扇、路由器散热风扇都是这种结构简单粗暴但做不了精确温控。三线风扇在双线基础上增加了第三根线一般叫FGFrequency Generator频率发生器或TachTachometer转速计。风扇内部有一个霍尔传感器或者反电动势检测电路转子每转一圈会输出若干个脉冲常见的是每圈两个脉冲。这样外部主控就能通过读取FG信号的脉冲频率推算出风扇当前的真实转速。这里要注意一个关键点三线风扇的第三根线只是“测速输出”它不会参与调速。你想让三线风扇转得慢一点要么降低供电电压要么在电源线上串联电阻或者用外部电路做PWM斩波。它自己不具备调速能力调速能力完全取决于外部电路怎么做。从内部电路看三线风扇已经不是一台普通直流电机而是一台单相无刷直流电机加驱动电路。无刷电机不能像有刷电机那样直接通直流电就转它需要根据转子位置不断切换定子绕组的通电方向这个换相动作由内部的霍尔传感器和驱动开关管完成。驱动开关管可以理解成几个MOS管组成的桥式电路霍尔传感器负责感知转子位置驱动芯片根据霍尔信号决定哪一路绕组通电、哪一路断开。FG信号通常就是从霍尔信号或者驱动芯片内部的状态信号分出来的目的是让外部知道转子的转动情况。1.2 第四根线的加入把调速逻辑“搬”进了电机四线风扇在三线基础上加了第四根线一般叫PWM控制线颜色按Intel的ATX规范通常是蓝色或黄色不同厂商可能有差异。有了这根线之后风扇内部就集成了完整的PWM调速逻辑外部主控只需要给一根逻辑电平信号风扇自己就会根据占空比调整内部功率管的导通时间从而改变绕组电流平均值最终改变转速。这件事的本质是四线风扇把“外部调速电路”整个搬进了电机内部。电机、驱动芯片、功率管、PWM逻辑控制、霍尔换相、测速输出全部集成在一个四线封装里。对外看起来它就是一个“你给我占空比信号我就给你转速和FG反馈”的黑盒子。这也是三线和四线在选型上的分水岭三线风扇需要你自己设计调速电路四线风扇只需你输出一路PWM。很多工程师第一次用四线风扇时还在习惯性地给电源线上串MOS管做外部斩波这其实是完全多余的而且会带来后面要讲的一堆发热和干扰问题。四线风扇的PWM输入只是一个逻辑信号几乎不消耗电流它的功率开关路径完全在风扇内部。另外提醒一句接线上的基础问题四线插头虽然设计上防呆但很多人飞线或转接时会把正负极接反。四线风扇内部有驱动芯片和霍尔传感器反接轻则不转重则直接烧掉驱动芯片或内部稳压电路。上电前用万用表确认供电引脚和接地引脚永远比事后闻焦糊味更划算。2. 调速的本质PWM控制的不是电压而是功率管的开关时间2.1 线性调压在无刷风扇上为什么难用如果只想要一个简单的调速方案很容易想到线性调压用可调电阻或线性稳压器把12V降成6V风扇就慢一半。这个思路在纯阻性负载上没问题但放到无刷风扇上就很不合适。无刷风扇的输入电流是脉动的而且启动瞬间电流往往是额定电流的2到3倍。线性调压器或调整管在压差大的时候功耗等于压差乘以电流。以一颗12V额定0.3A的风扇为例把电压从12V降到6V调整管上承担的压差是6V功耗就是6V×0.3A1.8W风扇本身功耗才3.6W等于调整管上白白浪费了一半功率。这个热量落在小封装器件上散热都来不及。更麻烦的是低压启动问题。无刷电机换相依赖反电动势或霍尔信号判断转子位置电压被压到很低时绕组电流小、转矩不足风扇可能转不起来或者在某个位置卡住。这也是为什么很多线性调速器调到最低档风扇会出现“嗡嗡响但不转”的现象。PWM调速通过快速开关供电来等效降电压但每一次开关都是满电压、满电流的脉冲启动转矩远大于线性降压低速性能和启动可靠性都好很多。2.2 四线风扇内部的PWM链路与绕组电流四线风扇的PWM信号进入驱动芯片后芯片根据占空比控制功率管的导通和关断。注意这里真正的开关动作发生在风扇内部。你输入的PWM频率是多少芯片就按这个频率去切换功率管。25kHz的信号输入内部功率管就以25kHz的频率开关。功率管导通时绕组两端电压等于供电电压功率管关断时绕组电流通过续流回路继续流动。绕组本身是电感电感对电流变化有阻碍作用所以绕组里的电流不是被直接切开而是变成带有三角纹波的连续电流。电流平均值约等于占空比乘以额定电流纹波大小取决于供电电压、绕组电感和开关频率。频率越高纹波越小但开关损耗越大频率太低纹波明显就会产生可听的啸叫。这里有个非常容易混淆的点PWM信号线上几乎不流过大电流。它只是逻辑控制线发送的是“指令”不是“电力”。很多新手把四线风扇的PWM信号想象成“我要用这个脉冲去切断电源”其实完全不是。这就像你给一个变频空调设定温度你只是给了个逻辑指令真正去切压缩机大电流的是空调内部的变频模块。2.3 为什么默认都选20~25kHz人耳听觉上限大约在20kHz。PWM频率低于20kHz时风扇绕组在开关过程中产生的电磁啸叫会被耳朵捕捉到声音类似“滋滋”或“嘶嘶”的连续高频音非常恼人。把PWM频率调到20kHz以上人耳基本听不见噪音问题就解决了。为什么又不建议用100kHz甚至更高因为功率管每次开关都有损耗频率越高开关损耗占比越大驱动芯片发热越严重。而且多数风扇驱动芯片的PWM输入响应带宽有限频率太高反而会导致最小脉宽无法识别占空比精度下降。20kHz到25kHz是风扇驱动最通用的区间各家芯片都按这个范围优化过所以我做项目时默认都是25kHz规避啸叫的同时也避开芯片响应盲区。举个例子12V风扇25kHz占空比50%等效平均电压是6V但请注意这不是平滑的6V直流而是0V和12V交替出现的方波电压由绕组电感负责平滑。占空比越低平均电压越低转速也越低但占空比和转速并不是线性关系。因为电机存在静摩擦、启动转矩、驱动芯片内部死区等因素低占空比区域比如低于20%转速会掉得比占空比更快甚至停转。后面做软件调速曲线时必须避开这个区域。2.4 三线风扇外接MOS调速为什么容易发热网上经常有人问“PWM接MOS管发热怎么办”这类问题十有八九是给三线风扇或水泵做外部斩波调速时出现的。三线风扇没有内部PWM调速逻辑要调速只能自己串功率管把电源线当成斩波对象。这个方案本身没有问题但它是一个完整的功率电路设计得处理好三件事。第一MOS管的栅极驱动。单片机的GPIO引脚驱动能力很有限PWM信号直接接栅极栅极电容充放电流不足管子会长期工作在放大区而不是完全导通这就像水管阀门只开了一半水流量不足但阀门本体却被水流冲击发热。第二续流问题。风扇是感性负载功率管关断瞬间会产生反电动势没有续流二极管的话电压尖峰可能直接击穿MOS管就算没击穿每次开关都在高压下导通损耗也会急剧增加。第三频率选择。如果开关频率太高而栅极驱动跟不上开关损耗会非常大如果太低又会有啸叫。所以三线风扇外接MOS调速不是“接一根线”那么简单它需要栅极驱动器、续流二极管、合理的PCB布线、散热设计整套下来成本和调试时间都不低。这也是为什么四线风扇出现之后绝大多数嵌入式散热方案都转向四线——内部驱动芯片已经把功率开关、续流、逻辑处理全部优化好了你只需要一条PWM逻辑线剩下的事情交给芯片。省下的板子面积和调试时间足够你重新评估选型好几次。3. FG转速信号它是开关输出不是电压输出3.1 开漏输出与上拉电阻FG引脚和三线风扇的测速引脚一样内部是一个集电极开路或漏极开路结构。意思是FG引脚内部本质上是一个开关开关接通时把引脚拉到低电平开关断开时引脚悬空。注意悬空不等于输出高电平它只是没有驱动能力的高阻态必须由外部电路负责把引脚“拉”到高电平。这个外部电路通常就是一个上拉电阻从FG引脚接到MCU的电源电压3.3V或5V。内部开关断开时上拉电阻把FG拉到高电平内部开关导通时FG被拉到低电平。这样FG引脚上就产生了可被MCU识别的高低电平脉冲。上拉电阻的阻值一般取4.7kΩ到10kΩ。阻值太小比如1kΩ工作电流偏大内部输出管功耗增加阻值太大比如100kΩ边沿信号变缓容易受干扰MCU在高速采样时可能读到不确定的电平。我常用的配置是10kΩ上拉到5V或3.3V大多数风扇的FG输出都支持这个负载不会出问题。还要注意上拉电压不能乱接。很多风扇规格书里明确写FG引脚的最高耐压值有些只能承受5V甚至只能承受3.3V。如果直接把FG上拉到12V内部输出管可能被击穿。所以拿到一颗不熟悉的风扇先查规格书确认FG耐压再决定上拉到哪个电平。3.2 转速怎么从FG频率算出来FG信号是频率信号不是转速本身。换算关系取决于风扇每转输出多少个脉冲。绝大多数三线、四线风扇是每转2个脉冲但也有一些是每转1个或4个规格书上一般会写“2 pulses per revolution”之类的话。换算公式很简单转速rpm 60 × FG频率Hz ÷ 每转脉冲数。以每转2脉冲为例如果FG信号是100Hz转速就是60×100÷23000rpm。MCU端可以用外部中断对FG的上升沿或下降沿计数开一个1秒的定时窗口1秒内数到100个脉冲转速就是3000rpm。低转速时要注意一个问题如果风扇转速只有500rpm每转2个脉冲FG频率只有16.7Hz周期约60ms。1秒的计数窗口只能数到16到17个脉冲分辨率很差想要更精确就得把计数窗口拉长到2秒甚至3秒或者用输入捕获方式测量两次上升沿之间的时间间隔再换算成转速。如果做堵转检测可以用“超过X毫秒没有FG脉冲”来判断这个阈值要按最低工作转速来设置太低容易误报太高又失去保护意义。3.3 接线时最容易搞混的PWM与FG四线风扇的四根线分别是VCC、GND、PWM、FG不同厂商的引脚顺序有差别。原装插头一般有防呆设计不会插反但一旦需要飞线或者转接PWM和FG接反是最常见的事故之一。接反后的典型症状是风扇全速运转不受控同时测速读数异常或永远为0。原因也好理解PWM引脚接到FG位置后它被内部电路处理为“转速反馈”而真实PWM引脚悬空被风扇内部上拉到高电平风扇识别为占空比100%自然全速狂转。排查时先量一下风扇端PWM引脚对地电压如果固定高电平或固定低电平不变基本可以断定PWM和FG接反了。另外还有一个很隐蔽的问题共地。MCU板和风扇电源如果使用两路独立的电源PWM信号和FG信号都以GND为参考两边GND必须连在一起。如果不共地PWM信号和FG信号的电平基准不一致风扇可能完全不受控FG读数也可能乱跳。我在多电源系统里排查过类似问题最后发现就是两个GND之间隔着几毫伏甚至几伏的压差导致逻辑电平判定错乱。处理办法很简单把两个电源的负极连起来问题立刻消失。4. 四线风扇驱动的六个真实故障与排查链路4.1 满速狂转不受控PWM线悬空就是“全速”设计现象代码里占空比已经改成20%风扇还是全速运转完全无视PWM信号。排查链路先用示波器或万用表频率档量风扇PWM引脚确认是否有方波信号、占空比是否随代码变化。如果完全没有波形检查主控初始化代码是否真正执行了PWM输出比如复用引脚是否被其他外设占用。如果波形正常再确认PWM信号是否真的送到了风扇端接触不良或线缆断头会导致信号丢失。最容易解释不通的其实是这一条PWM引脚悬空时很多四线风扇内部设计为默认全速运转。这不是bug而是刻意的安全策略——控制信号丢失时保证散热不失效。所以插上快门线但单片机还没初始化PWM引脚时风扇全速是正常现象。只要初始化完成并输出有效占空比转速就会跟着变。如果确认信号已经送到但风扇依然全速那就要看PWM高电平阈值是否匹配后面电平匹配章节会细讲。4.2 转速忽高忽低先查上拉再查PWM频率现象风扇能转但FG读数剧烈跳动比如2000rpm、4000rpm、1500rpm来回跳完全不是一个稳定值。排查链路第一步查FG上拉电阻。FG是开漏输出没有上拉电阻时引脚处于高阻态电平很容易受干扰边沿抖动会让MCU误计数。补上一个4.7kΩ到10kΩ的上拉电阻大概率恢复稳定。第二步查PWM信号是否和FG线平行走线太长串扰严重时会给FG信号叠加毛刺可以试着把FG线远离PWM线或者在FG引脚加一个100pF到1nF的小电容滤波。第三步查PWM频率是否过低低于芯片允许的最低频率时调速逻辑会进入不稳定状态FG读数自然跟着乱。还要注意占空比过低的情况。占空比低于10%时风扇可能处于“将转未转”的临界状态FG脉冲时有时无。此时提高占空比下限或者在软件里对FG读数做滤波处理都能减轻症状。4.3 啸叫异常PWM频率掉进听觉区间现象风扇能转转速也受控但发出连续的“滋滋”或“嘶嘶”高频音听感很像老式变压器或开关电源的啸叫。排查链路先听声音频率如果啸叫在几kHz到十几kHzPWM频率大概率在听觉范围内。用示波器量PWM波形确认实际频率和程序里配置的是否一致。很多翻车案例是例程里直接给了TIM_Period和Prescaler值没有经过换算实际频率只有1kHz左右自然啸叫明显。把PWM频率调到20kHz到25kHz啸叫基本消失。这里补一个换算示例STM32F103定时器时钟72MHz想要25kHz PWM只需要满足72MHz ÷分频1÷自动重装载值1 25kHz。常见配置是分频71自动重装载值39得到正好25kHz。后面STM32章节还会展开讲。4.4 外挂MOS管发热三线风扇调速不是一个“简易方案”现象用单片机PWM驱动一个MOS管MOS管串联在风扇供电回路上风扇能转但MOS管温度几十秒内飙升到烫手。排查链路先查MOS管选型。是不是用了Vgs(th)偏高的普通MOS管而MCU输出只有3.3V栅极驱动电压不足以让管子完全导通如果管子工作在放大区就相当于线性调压发热是必然的。再查PWM频率频率太高而栅极驱动能力不足开关损耗会显著增加。然后查续流风扇是感性负载功率管关断瞬间会产生反电动势没有续流二极管回路时管子反复承受高压尖峰损耗和损坏风险都非常高。结论很明确给三线风扇做PWM调速本质上是在做一个微型功率变换器。栅极驱动、续流、散热、EMC每一项都要处理。如果你不是想专门研究功率电子最简单的办法就是把三线风扇换成四线风扇让内部驱动芯片去处理这些问题。我见过太多人在这个所谓“简易调速”上折腾好几天最后换四线风扇半小时就搞定了。4.5 FG读数永远为0小心第四根线不是PWM而是RD现象风扇转得好好的但主控读不到任何FG脉冲FG引脚量到的电平始终固定在高电平或低电平。排查链路先确认风扇规格书里第四根线到底是不是PWM。很多人买的拆机风扇第四根线不一定是PWM可能是RDRotation Detection旋转检测/故障指示。RD信号是开漏输出风扇正常旋转时输出高电平停转或故障时输出低电平它是一个状态信号不是频率信号。如果你把RD当PWM用会发现“PWM”引脚要么一直高要么一直低转速完全无法控制把PWM当RD用晒到的信号是稳定方波却测不出转速变化。再查FG引脚的电气连接。如果FG通过上拉电阻接到高电平但示波器看到引脚恒为高说明内部输出管没有拉低的能力可能是接错引脚或者传感器损坏。如果引脚恒为低可能是内部输出管一直导通或者外部把它误接到地线。最后看MCU引脚配置如果MCU把FG输入引脚配成了带上拉或下拉的模式和外部上拉电阻叠加电平可能被拉到错误状态很容易造成读数错误。4.6 一颗四线风扇调速失效的完整排查过程用一个实际案例串一遍。现象是一颗12V四线风扇主控输出占空比50%风扇满速3000rpm不变。第一步用示波器量风扇PWM引脚看到有0到3.3V的方波频率1kHz。有波形说明主控PWM输出正常但1kHz偏低不过理论上前端驱动芯片应该还是能给一点转速变化不至于完全无效。第二步量风扇PWM引脚到主控引脚之间的连续性发现中间转接排线有一根线断头PWM信号根本没送到风扇。重新接好线后风速有变化但50%占空比时转速还是偏高约2500rpm。第三步查规格书发现这颗风扇的PWM高电平阈值是2.5V3.3V输出能识别但风扇的PWM占空比与转速映射曲线是非线性的50%占空比对应转速是额定转速的80%而不是50%。第四步在软件里做占空比映射补偿把期望转速先换算成目标PWM占空比再根据风扇曲线修正一次转速才稳定在1500rpm。这个案例说明一个道理排查风扇问题不能只看“线有没有接对”要从信号存在性、信号质量、阈值匹配、非线性映射几个层面逐层排查。很多看起来像硬件的问题其实是软件映射没考虑风扇的物理特性。5. 选型实战双线、三线、四线和服务器风扇怎么选5.1 一张表看懂三种风扇的差异选型之前先对三种常见风扇做一次横向对比看得更清楚。类型调速方式测速反馈内部集成度相对成本低转速平稳性典型场景双线无或手动调压无最低最低不支持低速基础排风、对噪音无要求三线外部调压或斩波FG有测速输出适中差需外部电路支持需要转速监测但成本敏感四线内部PWM逻辑FG集成PWM控制稍高好闭环温控、PC散热、3D打印、电源从表格看四线风扇确实在控制能力上最完整但也要承认不是所有项目都需要四线。选型本质是“够用就好”而不是“参数最强就好”。5.2 选型时最容易被忽略的四个硬指标第一供电电压。常见有5V、12V、24V接错电压轻则转速不对重则烧驱动芯片。确认风扇额定电压再选择供电线路。第二PWM高电平阈值。这个指标最容易忽略。风扇的PWM输入识别高电平的阈值从1.5V到4V都有。主控输出3.3V系统遇到阈值4V的老款风扇就可能出现“占空比调了但转速不变”的问题。买风扇前先看规格书或者用示波器实测波形边沿是否被正常识别。第三FG输出类型和最大耐压。确认FG是不是开漏输出上拉电压范围是多少。有的风扇FG只能上拉到3.3V上拉到5V或12V就可能烧内部输出管。第四启动电流和最大电流。风扇启动瞬间电流往往是额定电流的2到3倍。12V大风量风扇额定电流可能就有0.5A以上启动电流超过1A。如果供电设计没有余量就会出现启动瞬间电压跌落、主控复位的问题。5.3 什么时候果断选三线三线风扇并没有被淘汰以下场景选三线反而更合理。项目MCU没有多余定时器资源。PWM调速至少需要一个可用定时器有些低成本项目资源已经耗尽此时用三线风扇配合固定电压切换实现“高/中/低”三档调速就够了。不需要精确测速或者转速可以通过其他方式间接获得比如设备本身有温度传感器温度能反映散热效果。风扇长期以固定转速运转不需要动态调速。这时候三线风扇便宜、驱动简单、不用处理PWM信号是最务实的选择。如果确实需要调速又只有三线风扇可以考虑外部PWM斩波方案但前面说过的MOS管选型、栅极驱动、续流、EMC问题都要逐一解决。我的经验是三线风扇省下的几分钱成本很容易被外部调速电路的时间和板子面积吞掉。5.4 四线风扇在闭环温控里的价值四线风扇最大的价值不是“能调速”而是“能反馈”。闭环系统的价值在于反馈——MCU输出PWM设定转速同时通过FG读取实际转速。风扇老化后轴承摩擦力增大、供电电压波动、环境温度变化实际转速都会偏移设定值闭环会纠正这些偏移让转速保持稳定。在3D打印、电源老化、功放散热、服务器主板这类对温度稳定性有要求的场景闭环温控几乎是刚需。开环方案的逻辑是“温度高了就加大占空比”但占空比和转速、转速和风量、风量和温降这三层关系都受外部环境影响开环很难做到精准控制。闭环方案直接把“转速”作为控制目标只要FG反馈准确温度控制就稳定很多。四线风扇还有一个容易被忽视的好处能检测堵转。如果风扇卡住或停转FG不再输出脉冲MCU可以在数秒内检测到异常并触发报警。这个功能在工业设备和医疗设备里很重要一颗风扇故障导致设备过热损坏损失远大于风扇本身的几块钱差价。5.5 服务器风扇便宜大碗但用起来要命拆机服务器风扇是很多DIY玩家和工程师会心动的选项风量大、便宜、24V或12V规格都有。但它的坑也不少。第一噪音巨大。服务器风扇额定转速动辄8000rpm以上全力运转时噪音非常可观放在桌面环境下几乎无法忍受。第二电流大启动电流经常超过1A对供电设计是个考验。第三拆机风扇的线序不统一第四根线可能是PWM也可能是FG还可能是RD甚至温控信号接线前必须查清楚。第四对PWM占空比和频率的容忍范围更窄有些服务器风扇占空比低于10%直接停转恢复需要更高的占空比才能重新启动调曲线时要格外小心。除非你真的需要大风量且能接受噪音、电流、线序复杂度否则普通四线风扇更合适。我见过不少工程样机因采用拆机服务器风扇后期在EMC测试和噪音测试里反复不过关最后换回普通四线风扇才收场。6. MCU端PWM输出实操以STM32定时器为例6.1 从25kHz往回推定时器参数前面提到四线风扇PWM频率建议选20到25kHz。这里以STM32F103为例演示怎么从目标频率反推定时器参数。STM32F103的定时器时钟来自APB1通常配置为72MHz。PWM频率公式是PWM频率 定时器时钟 ÷预分频PSC1÷自动重装载值ARR1想要25kHz可以取PSC71ARR39代入公式72MHz ÷72÷4025kHz刚好满足。占空比由捕获比较寄存器CCR决定CCR的取值范围是0到ARR。CCR20时占空比是20÷4050%。CCR10时占空比25%CCR30时占空比75%。如果想做1%步进的精细调速ARR太小会导致1%对应不到一个计数单位。可以把ARR加大到99PSC设为28这样72MHz÷29÷10024.8kHz也接近常用频率此时CCR从0到99对应0%到100%步进1%。HAL库初始化代码大致如下TIM_HandleTypeDef htim2; htim2.Instance TIM2; htim2.Init.Prescaler 71; // 分频后计数器时钟1MHz htim2.Init.Period 39; // 计数值0~39共40个计数 htim2.Init.CounterMode TIM_COUNTERMODE_UP; htim2.Init.ClockDivision TIM_CLOCKDIVISION_DIV1; if (HAL_TIM_PWM_Init(htim2) ! HAL_OK) { Error_Handler(); } TIM_OC_InitTypeDef sConfigOC {0}; sConfigOC.OCMode TIM_OCMODE_PWM1; sConfigOC.Pulse 20; // CCR20占空比50% sConfigOC.OCPolarity TIM_OCPOLARITY_HIGH; sConfigOC.OCFastMode TIM_OCFAST_DISABLE; if (HAL_TIM_PWM_ConfigChannel(htim2, sConfigOC, TIM_CHANNEL_1) ! HAL_OK) { Error_Handler(); } HAL_TIM_PWM_Start(htim2, TIM_CHANNEL_1); // 运行中修改占空比 __HAL_TIM_SET_COMPARE(htim2, TIM_CHANNEL_1, 10); // 占空比25%注意CubeMX配置时只要把Prescaler、Counter Period、Pulse填对通道模式选PWM Generation CH1其他选项用默认值就行。关键是理解PSC、ARR、CCR三个寄存器和频率、占空比之间的关系否则后面调任何定时器芯片都会卡住。6.2 3.3V MCU驱动12V四线风扇的电平匹配多数四线风扇的PWM输入高电平阈值在2.5V以下3.3V MCU直接输出是能识别的。但总有个别风扇需要更高的高电平或者MCU引脚驱动能力较弱波形边沿变缓导致风扇对占空比判读不准表现就是“能全速、能停转、但中间档位转速乱跳”。稳妥起见可以用一个简单的电平转换电路。电路思路是这样MCU引脚接到2N7002的栅极源极接地漏极通过一个10kΩ电阻上拉到5V或12V把漏极信号接到风扇PWM输入。当MCU输出高电平时MOS管导通漏极被拉到低电平当MCU输出低电平时MOS管截止漏极被上拉到高电平。这样电平幅度从3.3V转换成了系统高电平但占空比逻辑是反相的软件里要做一次取反即期望20%实际输出80%。如果不想自己做电平转换也有现成的电平转换芯片比如单通道的74LVC1T45接法更简单。不过对大多数项目2N7002加一个上拉电阻的方案已经足够可靠成本也很低。初次调试时先别急着接风扇用示波器确认转换后的波形占空比正确再接到风扇上可以省掉很多排查时间。6.3 调速曲线做得像“开关”三招解决有些朋友做完温控后反馈风扇要么不转要么突然全速完全不像一个平滑的调速系统。这通常是三个问题导致的。第一用了0%占空比。很多风扇在0%占空比时完全停转但要从停转状态重新启动需要给一个比较大的占空比比如30%以上否则会卡住不转。所以冷启动时可以先输出100%占空比跑0.5秒确保转起来再平滑过渡到目标占空比。第二温度阈值来回跳变。如果代码逻辑是“温度超过50℃就给60%占空比低于50℃就给20%占空比”那么温度在50℃附近波动时风扇转速会在20%和60%之间来回跳听起来就像喘气。解决方案是加滞回比如温度超过55℃才升高转速低于45℃才降低转速中间留出10℃的死区风扇转速就不会在临界点反复横跳。第三占空比和温度用线性映射但风扇本身的转速-占空比曲线不是线性的。正确的做法是先标定一次测出几个关键点的真实转速然后做分段线性映射让温度变化和转速变化保持近似线性关系。这套逻辑用伪代码表示就是if (temperature 40) duty 20; else if (temperature 60) duty 20 (temperature - 40) * 3; // 40℃~60℃线性映射到20%~80% else duty 100; // 启动时先全速0.5秒保证转起来 pwm_start(); set_duty(100); delay_ms(500); set_duty(duty);这套逻辑看起来简单但能解决大部分“开关式”温控的体验问题。四线风扇有了FG反馈之后还可以进一步做闭环PID让实际转速精确跟踪目标转速但那就需要更复杂的控制了。7. 一句实话能选四线就不要在三线上折腾我在自己的项目里早期为了省成本用过双线和三线方案。尤其是三线风扇外接MOS调速那一段经历栅极驱动不足、管子发热、续流炸管、EMC过不了每一个坑都踩得很扎实。后来统一换成四线PWM风扇后整个散热子系统从“功率电路设计”退化成了“写一个定时器输出PWM读一个外部中断计频率”研发效率提升非常明显。如果你问我选型建议一句实话就是能用四线就不要去折腾三线的外部调速电路。如果重来一遍我会给自己列这几条操作纪律选风扇之前先查规格书或示波器抓一下波形确认第四根线到底是PWM还是RD上电前先初始化好PWM引脚避免悬空导致全速狂转调速曲线里留出最低占空比和启动占空比不要直接写0%有条件就选带FG的四线风扇闭环反馈多花的几块钱很快就从调试时间上赚回来了。最后分享一个排查小技巧手头没有示波器时可以用一个LED串联1kΩ限流电阻接在FG输出和地之间风扇转起来LED会闪烁闪烁频率大致反映转速区间。当然要精确测转速还是示波器或频率计更靠谱。但很多时候快速判断“风扇有没有转、转速大概在不在预期范围”这个LED方案真的够用。
返回列表