这款方案最打动人的不是“能用”,也不是“开源”,而是“2块钱的元器件成本,还能把功能做全”。如果只把它当成一个普通的风扇调速模块,你大概率会错过它真正的价值:从原理图选型、PCB布局到成本控制,整套流程本身就是一堂非常好的低成本嵌入式硬件设计课。这篇文章是该系列的第 3 篇,前两篇已经把需求和原理图方案基本定下来了,这一篇我们完整走一遍 PCB 设计阶段的决策过程、关键步骤和验证方法。如果你正准备做类似的小型硬件开源项目,或者想弄清楚“为什么别人的板子能那么便宜”,这篇内容值得收藏。
1. 一个“2块钱包”的风扇控制器,PCB 到底在设计什么
风扇控制器这种产品看起来很简单:一个 MCU 输出 PWM,一个 MOS 管负责驱动风扇,再加一两个按键和 LED,电路图半小时就能画完。但真正做过的人知道,麻烦全在后面。
第一是成本问题。2 块钱的元器件预算,意味着主控要便宜、MOS 管要便宜、阻容要便宜,连 PCB 面积都要控制在很小的尺寸。省成本不能靠找最便宜的料,而是靠选型时算清楚每一分钱花在哪里。
第二是信号问题。PWM 信号本身不复杂,但风扇是感性负载,MOS 管开关瞬间会产生很大的电流变化,如果 PCB 布局走线不合理,轻则转速波形难看,重则干扰温度采样、导致按键失灵,甚至让 MCU 复位。
第三是散热问题。这个项目里 MOS 管要持续流过几安培的电流,铜箔宽度、过孔数量、敷铜面积,都会直接影响长期可靠性。
第四是可制造性问题。个人开源项目大多没有量产条件,板子通常是手焊或者小批量贴片。焊盘大小、元件封装、丝印位置、测试点,都要考虑手工焊接的体验。
所以说到底,PCB 设计在这个项目里承担的职责不是“把网表变成板子”,而是要在成本、性能、可制造性三者之间做出取舍。这块板子能不能稳定跑起来,有一半的答案在原理图里,另一半就在 PCB 上。
2. 硬件方案回顾与 PCB 设计边界
做 PCB 设计之前,先要把上一阶段确定的硬件方案梳理清楚。这不是废话,因为后面所有的布局布线决策都取决于你选了什么主控、什么功率器件、什么供电方案。
从功能需求看,这款风扇控制器需要具备:
- 至少 1 路 PWM 输出,频率建议 25kHz 左右;
- 驱动能力覆盖常见 12V 电脑风扇,峰值电流至少 2A;
- 温度采集接口,支持 NTC 热敏电阻;
- 手动/自动模式切换;
- 低成本的显示方案,比如 LED 指示灯或 OLED 小屏;
- 供电输入兼容 5V 或 12V 环境。
围绕这些功能,BOM 成本大致可以压到下面这个量级:
| 功能模块 | 器件 | 参考型号 | 数量 | 成本量级 |
|---|---|---|---|---|
| 主控 | 8位或 Cortex-M0 内核 MCU | STC8G1K08 / GD32E230 / STM32C011 | 1 | 1 元左右 |
| PWM 功率输出 | N-MOSFET | AO3400A 等低压逻辑电平 MOS | 1 | 0.2 元左右 |
| 温度采样 | NTC 热敏电阻 + 电阻 | 10k NTC + 10k 分压电阻 | 1+1 | 0.1 元左右 |
| 供电 | 低压差 LDO 或小 DC-DC | 根据输入电压选择 | 1 | 0.2 元左右 |
| 按键/指示 | 轻触按键 + LED + 限流电阻 | 2 个按键 + 2 个 LED | 若干 | 0.2 元左右 |
| 接插件 | 排针/接线端子 | 2.54mm 排针或 XH2.54 | 若干 | 0.3 元左右 |
这么算下来,单纯元器件成本确实可以控制在 2 元附近,前提是你没有算 PCB 打样费、焊接费用和运费。这也是为什么标题里说“2 块钱”——它指的是 BOM 物料成本,而不是整个项目的落地成本。
这里还需要明确一个设计边界:显示方案不同,成本差异会非常大。如果只用一个 LED 表示工作状态,电路和 PCB 都非常简单;如果要上 OLED 显示屏,成本会立刻增加 10 元以上,而且 PCB 面积、接插件数量、MCU 引脚资源都要重新考虑。我看到的开源方案通常会把 PCB 上预留扩展焊位,默认版本不带屏幕,但留出 I2C 或 SPI 接口,让用户自己焊屏。这个思路很适合低成本项目,PCB 阶段也建议按“兼容显示扩展”来做。
3. 原理图设计要点:低成本的秘密都在这里
原理图阶段看似简单,其实决定了 PCB 阶段的大部分问题。这里挑几个关键电路逐个说明。
3.1 主控最小系统
低成本方案里,主控选择可以走两条路线:一是 8 位 MCU,比如 STC8G、STM8 这类,价格很低,开发环境也简单;二是 Cortex-M0 内核 MCU,比如 GD32E230、STM32C0 系列,性能更强,适合后期扩展 PID、曲线拟合等功能。
无论选哪一颗,最小系统都要包含电源去耦电容、复位电路、调试接口。特别要注意的是,如果这颗 MCU 是 QFN 封装或者引脚很密的 TSSOP 封装,PCB 设计时焊盘间距、过孔位置都需要提前规划,不然量产焊接良率会很受影响。
去耦电容不要只画一个 100nF。MCU 供电引脚旁边放一个 1uF~10uF 的电解或陶瓷电容,加上 100nF 高频去耦电容,是小系统稳定工作的基础。这部分成本不超过 0.05 元,完全没有必要省。
3.2 PWM 功率输出电路
功率输出级是整块板子的核心,也是最容易出问题的地方。
常见做法是 MCU 的 PWM 引脚直接驱动 N-MOSFET,用逻辑电平 MOS 管(Vgs(th) 比较低的那种),这样不需要额外的栅极驱动芯片。例如 AO3400A 这类,Vgs 在 4.5V 时导通电阻很低,3.3V 驱动也能凑合,但如果 MCU 的 IO 电压只有 3.3V,需要仔细看一下数据手册里的导通电阻曲线,确保在低 Vgs 下流过 2A 电流时压降可以接受。
栅极串联一个 10Ω~47Ω 的电阻,可以减缓 MOS 管的开关速度,降低 EMI 和电压尖峰。这个电阻的成本可以忽略,但对波形质量影响很大。
风扇电机是感性负载,MOS 管关断瞬间会产生反向电动势。如果风扇是两线制的,需要在电机两端并联一个续流二极管;如果风扇是四线 PWM 调速的,则不需要在板子上额外加续流二极管,但要在接口附近预留位置。
值得注意的是,很多电脑风扇的额定电流只有 0.1A~0.5A,启动瞬间电流会高一些,2A 的驱动能力已经留出了足够余量。如果你打算用来驱动更大功率的直流电机或水泵,MOS 管的封装和 PCB 走线就要重新评估了。
3.3 温度采样电路
NTC 热敏电阻最常见的是 10k 阻值,B 值 3435 或 3950。电路形式上就是一个分压器:供电电压通过固定电阻和 NTC 串联,中间节点接到 MCU 的 ADC 引脚。
这个电路本身没有任何难度,但 PCB 布局时要考虑一个重要问题:NTC 放在哪里。如果是板载温度采样,NTC 应该放在靠近发热源的位置,比如 MOS 管旁边,或者板子边缘以便接触被测对象。如果你想把 NTC 外置,就需要在板子上留一个 2pin 连接器,这个时候 PCB 布局反而简单了,把 NTC 放在接插件旁边即可。
ADC 参考电压 Vref 如果是 MCU 的电源电压,那么 VCC 的稳定性会直接影响温度读数。所以在供电设计时,不要偷懒直接把 VCC 给 ADC 做参考,有条件的话用内部参考电压或者单独的分压稳压,能明显提高温度测量精度。
3.4 供电方案
供电部分的选择,直接影响整块板子的发热和效率。
如果输入只有 5V,而且负载只有 MCU 和风扇,用一颗 LDO 是最简单的做法。但大多数机箱风扇是 12V 供电,如果 MCU 需要 3.3V,用 LDO 从 12V 降到 3.3V,压差接近 9V,即使电流只有 20mA,功耗也有 0.18W,虽然不高,但白白浪费。
更合理的设计是:12V 直接给风扇供电,3.3V 供电再单独由 LDO 或小 DC-DC 从 12V 降压。对于电池供电或输入电压比较高的场景,用 DC-DC 更划算。参考搜索里提到的“升压降压电路 PWM”相关讨论,这类小功率 DC-DC 的 PCB 布局其实比很多人以为的敏感,反馈电阻采样点的位置会影响输出电压纹波,后续章节会专门讲到。
3.5 显示与输入
按键是机械触点,按下和释放瞬间会有抖动,硬件上可以加 RC 滤波,但大多数情况在固件里做软件消抖就够了,PCB 上把按键焊盘布置在板边,方便外壳开孔。
LED 指示灯要串限流电阻,电流控制在 2mA~5mA 即可,不必太大。如果选用 0603 封装的 LED,手焊接起来略费眼睛,但成本更低。
显示接口建议采用标准 I2C 的 OLED 屏连接器,比如 4pin 的 1.27mm 或 2.54mm 排针。这样默认不焊屏幕,板子依然能通过串口或者 LED 工作;后续加屏幕,直接插上模块就能用,固件也只需要适配 I2C。
3.6 原理图检查清单
在进入 PCB 阶段之前,强烈建议做一次系统性的原理图检查:
- 每个电源引脚都有去耦电容;
- MOS 管栅极有串联电阻,源极接地可靠;
- NTC 分压点没有接错,ADC 引脚不超过 MCU 耐压;
- PWM 引脚和风扇驱动级匹配,不会倒灌电流;
- 接插件引脚定义清晰,反接时有保护或有明确标识;
- 所有器件都有采购渠道,封装与实物一致。
这些检查看起来琐碎,但每条都对应一个实际的“翻车”场景。比如接插件反插,轻则无法工作,重则烧毁 MOS 管或 MCU 引脚。
4. PCB 布局:把电流路径画在脑子里
原理图只是“电路逻辑”,PCB 布局才是把逻辑变成物理世界的第一步。很多新手只看连通性,根本不在意电流方向,结果做出来的板子功能时好时坏,这就是布局出了问题。
4.1 板框与尺寸
低成本板子的第一原则是面积越小越好。PCB 打样价格通常按照面积和拼板数量计算,面积减半,成本几乎减半。2 块钱成本目标的板子,尺寸一般控制在 20mm x 20mm 到 30mm x 30mm 之间,具体取决于你想塞多少个接插件。
常见做法是画成矩形,四角加 2.2mm 或 3mm 的安装孔,方便用铜柱固定在外壳里。如果是嵌入到机箱内部使用,甚至可以不要安装孔,直接用排针固定在主板上,这样面积还能再小一点。
PCB 板厚默认 1.6mm,除非有特殊需求,否则不用改。板材用 FR-4,2 层板,铜厚 1oz。这些参数都是常规工艺,嘉立创、捷配这一类的打样工厂都能直接生产,不会产生额外费用。
4.2 布局分区:功率区与控制区
整个板子要分成两个明显的区域:功率区和控制区。
功率区包括:电源输入接插件、MOS 管、续流二极管(如果有)、风扇接插件。这一部分的电流大、dv/dt 高,布线要短粗。
控制区包括:MCU、晶振、去耦电容、按键、LED、NTC 分压电路。这一部分是弱信号,布线要远离功率区的开关节点。
两个区域的“分界线”就是 MCU 的 PWM 输出引脚到 MOS 管栅极的那根走线。这根走线是信号的桥梁,布局时尽量让它短,并且不要和温度采样的模拟信号平行走长距离。
在这个板子上,因为功率不大,不需要像开关电源那样做严格的“热回路”分区,但养成这个习惯,以后做大功率 PCB 会少踩很多坑。
4.3 关键器件位置
- MCU 放在板子中心偏一侧,引脚朝外,方便布线;
- 去耦电容尽可能靠近 MCU 电源引脚,中间不要有其它走线穿过;
- MOS 管放在功率输入和风扇接口之间,源极朝地,漏极朝风扇;
- NTC 电阻如果外置,放在接插件旁边;如果内置,放在 MOS 管附近,但同时要通过走线远离数字信号的干扰;
- 按键放在板边,LED 放在按键旁边,方便外壳开孔和指示;
- 调试接口(SWD 或串口)放在板子一侧边缘,短排针露出即可。
其中最容易忽略的是去耦电容的位置。很多人原理图画得没有问题,但因为布局时电容离 MCU 太远,导致效果很差。去耦电容的物理位置比容值选取更重要,这是一个经常被低估的经验值。
5. PCB 布线:这只是 2 层板,但别小看它
2 层板的布线自由度不如 4 层板,但只要设计合理,应付这个项目绰绰有余。布线时重点把握以下几个方面。
5.1 PWM 信号走线
PWM 信号从 MCU 出来到 MOS 管栅极,走线宽度不需要特别宽,10mil 就够。但这条线要尽量短、尽量直,不要绕圈,不要穿过有干扰的区域。
更重要的规则是:PWM 走线不要和温度采样 ADC 走线平行。数字信号边沿跳变会产生耦合噪声,如果 ADC 线正好平行走了 2cm,温度读数就会抖动,甚至在 PWM 占空比变化时出现明显毛刺。如果无法避免平行,就要拉开距离,或者在地线之间插入一根地线隔离。
5.2 功率回路与铜箔宽度
风扇电流从电源接口流入,经过 MOS 管,再经过风扇回到电源地,这是一个闭合回路。PCB 设计的关键是让这个回路的面积尽量小。
MOS 管的源极到地、电源地到风扇接口的地,这两段是功率地回路的核心。铜箔宽度的估算很简单:1oz 铜厚下,1mm 线宽大约能承受 1A~2A 的电流(具体还取决于温升和环境),考虑到过孔和接插件的损耗,建议功率走线至少做到 1mm~1.5mm 宽,必要时在铺铜区域整片连接。
如果使用过孔换层,不要只打一个过孔。功率路径上的过孔至少打两个,最好呈阵列排列,否则单孔过流能力有限,还可能成为热瓶颈。
5.3 地线处理
2 层板的地的设计直接决定了 EMC 表现。这块小板的功率电流不大,地线可以不用做太复杂的隔离。推荐的做法是:
- 底层大面积铺地,作为公共参考地;
- 顶层功率区和控制区的地通过短而宽的走线连接到底层地平面;
- 不要在功率地和控制地之间做“单点接地”的割裂设计,除非是更大的系统、更敏感的模拟电路。
很多新手听到“单点接地”就到处割地,结果把地平面割得支离破碎,反而增加了回路面积,干扰更严重。对这个项目来说,完整的底层地平面就是最好的参考设计。
5.4 EMC:MOS 管开关边沿
MOS 管每秒钟开关 25000 次,每次开关都会产生高频噪声。减缓开关边沿的一个常见方法就是增大栅极串联电阻,从 10Ω 改到 33Ω 或 47Ω,MOS 管开关损耗略增,但噪声明显下降。对风扇控制器这类负载,这个折中是值得做的。
续流二极管要靠近电机接口放置,越近越好。如果留的位置太远,续流路径变长,关断尖峰还是会通过走线辐射出去。
5.5 敷铜与测试点
板子画完之后,在顶层空余区域也要敷铜,敷铜接地。顶层敷铜会降低布线难度,也能提高 EMC 性能。注意敷铜不要形成“死铜”——那些孤岛状的铜皮,既没有电气连接,还可能成为天线,建议手动删除或调整走线把它们连上地。
测试点虽然是可选项,但对调试很重要。至少留出以下测试点:GND、VCC、PWM 输出、ADC 温度点、MOS 管栅极。用普通的 1.27mm 或 2.54mm 排针孔代替专用测试点即可,成本为零,调试时万用表和示波器探头都有地方放。
6. 从 PCB 到生产文件:导出的不只是 Gerber
画完 PCB 不等于事情结束了,生产文件的导出和检查同样重要。这里以主流免费 EDA 软件为例,流程大致如下。
首先是 DRC。DRC 是 Design Rule Check 的缩写,它会按照你设置的线宽、间距、过孔尺寸等规则检查整个板子。导出 Gerber 前必须跑一遍 DRC,把所有错误清零。常见的错误包括:
| 错误类型 | 典型原因 | 处理方式 |
|---|---|---|
| clearance violation | 两条走线间距小于规则设定 | 调整走线或修改间距规则 |
| unconnected pin | 引脚没有连接到任何网络 | 回到原理图检查电气连接 |
| missing solder mask | 焊盘被大面积绿油覆盖 | 重新设置阻焊开窗区域 |
| stubs | 过孔或走线分支过长 | 删除短桩或调整走线走向 |
DRC 通过之后,再执行“生成 Gerber”操作。输出的文件包括:顶层线路层、底层线路层、顶层阻焊层、底层阻焊层、顶层丝印层、钻孔文件、板框层。把这些文件打包压缩,上传到打样工厂的网站,就能看到 3D 预览图。
这里要注意的坑是:丝印层不要写太多文字。MCU 型号、版本号、电源电压标注这些是必要的,但任何过小的文字在 PCB 生产时都可能因为工艺精度问题变得模糊。丝印文字高度一般建议不小于 0.8mm,线宽不小于 0.15mm。
板子的版本信息非常建议写在丝印上。开源项目迭代快,板子版本写清楚,后期反馈问题时,大家才知道你说的是哪一版。
7. BOM 成本审计:2 块钱到底怎么省的
很多人看到“2 块钱全功能”这个标题,第一反应是“这怎么可能”。实际上,低成本硬件项目的核心逻辑不是把每个器件买到最便宜,而是从系统层面减少器件数量、降低工艺要求。
先说数量。如果一颗 MCU 内部已经有高速 PWM 和 ADC,就不需要额外买 PWM 芯片和 ADC 芯片;如果 MOS 管可以直接用 MCU 的 PWM 驱动,就不需要栅极驱动芯片;如果可以用软件消抖,就不需要按键的 RC 滤波电路。每减少一个器件,省下的不只是一颗料的钱,还有 PCB 面积、焊接工时和潜在的故障点。
然后是封装选择。0603 电阻电容比 0805 便宜且占面积小,但也更难手焊;贴片 LED 比直插 LED 贵一点点,但省掉了人工插件成本。对个人玩家来说,选择自己能焊接的封装等级很重要。
下面是一份参考级物料清单,价格按常见电商零售价估算:
| 类别 | 器件 | 封装 | 数量 | 估算成本(元) |
|---|---|---|---|---|
| 主控 | Cortex-M0 MCU | TSSOP20 或 SOP8 | 1 | 1.0~1.5 |
| MOS | N-MOSFET | SOT-23 | 1 | 0.1~0.2 |
| 电阻 | 0603 10k / 10Ω / 47Ω | 0603 | 6~8 | 0.1 |
| 电容 | 0603 100nF / 10uF | 0603 | 3~4 | 0.1 |
| NTC | 10k 热敏电阻 | 0603 | 1 | 0.1 |
| LED | 0603 灯珠 | 0603 | 2 | 0.1 |
| 按键 | 轻触开关 | 4pin SMD | 2 | 0.2 |
| 接插件 | 排针或 XH2.54 | 直插 | 3~4 | 0.3 |
合计大约 2 元出头。注意这只是元器件成本,没有包括 PCB 板费、焊接费和快递费。但即使加上这些摊薄成本,做 10 块板子,平均每块的成本也远低于买一个成品控制器。
需要特别提醒的是,BOM 成本审计不能只看采购价。如果为了省 0.1 元选了非常规封装,焊接时报废几块板子,成本反而更高。开源项目的初衷本来就是让更多人能自己复现,“能买到、能焊上”比“绝对低价”更重要。
8. 焊接、烧录与验证调试
PCB 打样回来之后,进入实际焊接和调试阶段。焊接顺序建议从电源到信号:先焊电源部分的电容和 LDO,再焊 MCU 最小系统,然后是 MOS 管和接插件,最后焊按键、LED 和显示接口。
焊完先不要急着插风扇。第一步用万用表量电源对地阻抗,确认没有短路;第二步上电量各电源电压是否正常;第三步用示波器看 PWM 输出波形。
下面是 PWM 初始化代码的一个参考示例,以 STM32 的 HAL 库为例,重点展示如何把定时器配到 25kHz 左右。实际芯片不同,寄存器会不一样,思路是通用的:
/* 文件路径:src/pwm.c * 以 STM32 Cortex-M0 内核 MCU 为例,定时器时钟 64MHz */ #include "pwm.h" #include "stm32f0xx_hal.h" TIM_HandleTypeDef htim2; TIM_OC_InitTypeDef sConfigOC; void FAN_PWM_Init(void) { GPIO_InitTypeDef GPIO_InitStruct = {0}; __HAL_RCC_TIM2_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); /* PA0 复用为 TIM2_CH1 */ GPIO_InitStruct.Pin = GPIO_PIN_0; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); /* 64MHz / 64 = 1MHz;1MHz / 40 = 25kHz */ htim2.Instance = TIM2; htim2.Init.Prescaler = 64 - 1; htim2.Init.CounterMode = TIM_COUNTERMODE_UP; htim2.Init.Period = 40 - 1; htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; HAL_TIM_PWM_Init(&htim2); sConfigOC.OCMode = TIM_OCMODE_PWM1; sConfigOC.Pulse = 20; /* 初始占空比 = 20/39 ≈ 51% */ sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1); HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1); } void FAN_PWM_SetDuty(uint16_t percent) { if (percent > 100) percent = 100; if (percent < 10) percent = 10; /* 低于10%可能无法启动风扇 */ __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, (uint32_t)(percent * 39 / 100)); }这段代码里的几个细节值得注意。PWM 频率选择 25kHz,是因为这个频率超过了人耳可听范围,能有效避免风扇电机发出高频啸叫。占空比下限设置在 10%,是为了保证风扇有足够的启动电流,许多风扇在占空比过低时无法启动。如果需要风扇完全停转,应直接切断输出或使用独立的开关控制,而不是把占空比设到 0%。
温度到占空比的映射,推荐用分段线性插值,不要写一堆 if-else 嵌套:
/* 文件路径:src/control.c * 温度-占空比映射,分段线性 */ int16_t temp_to_duty(int16_t temp) { if (temp <= 35) { return 10; /* 低速 */ } else if (temp < 60) { return 10 + (temp - 35) * 70 / (60 - 35); /* 线性段 */ } else { return 100; /* 高温满转 */ } }固件编译完成后,烧录命令可以参考 ST-Link 搭配 STM32CubeProgrammer 的命令行方式:
STM32_Programmer_CLI -c port=SWD mode=HOTPLUG \ -w build/fan_controller.hex -v -rst烧录成功后,用示波器探头接在 MOS 管漏极,观察 PWM 波形。正常波形应该方波干净、边沿没有严重过冲;转风扇时用万用表量风扇电源电压,确认占空比变化会引起有效电压变化。
如果没有示波器,也可以用逻辑分析仪看 PWM 引脚,甚至用一个 LED 串联电阻接到 PWM 输出,通过肉眼观察亮度变化来粗略判断占空比是否在调整。当然,做嵌入式开发,示波器是迟早要添置的工具,尤其涉及 MOSFET 开关电路时,没有示波器很难定位振铃和尖峰问题。
9. 常见问题与排查方法
PCB 调试阶段会遇到的问题,很多有很强的规律性,下面这张表直接按现象排查:
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
| 上电后 MCU 不工作 | 电源电压异常或去耦电容虚焊 | 万用表测量 VCC/GND;检查复位引脚 | 补焊去耦电容;确认 LDO 输出正常 |
| PWM 无输出 | 定时器未启动或引脚复用错误 | 示波器测量 MCU PWM 引脚;核对 GPIO 配置 | 检查初始化代码;确认引脚映射 |
| MOS 管发热严重 | 栅极驱动电压不足或开关频率过高 | 示波器看 Vgs 波形是否完整;测导通压降 | 换用逻辑电平 MOS;调大栅极电阻 |
| 风扇有啸叫 | PWM 频率刚好落在可听范围 | 改变频率到 25kHz 以上 | 调整定时器分频系数 |
| 温度读数跳变 | ADC 走线受 PWM 干扰 | 万用表量 NTC 分压点是否稳定 | 调整 ADC 采样时序;走线加地线隔离 |
| 按键偶尔失灵 | 没有软件消抖或接触不良 | 示波器抓按键引脚波形 | 增加延时消抖;检查按键封装 |
| 12V 供电时 MCU 烧毁 | LDO 输入电压超过极限 | 查看 LDO 数据手册耐压 | 更换耐压更高的 LDO 或加预降压 |
| 风扇不转 | MOS 管未导通或 PWM 占空比过低 | 测 MOS 管漏极电压 | 提高最小占空比;检查风扇供电 |
最值得说的是 MOS 管发热问题。风扇电流不大,MOS 管发热通常不是导通损耗导致的,而是“开关损耗”。MOS 管在开通和关断的过渡过程中,电压和电流同时非零,瞬时功耗比导通时高很多。如果你的 PWM 频率从 25kHz 改成 100kHz,开关损耗会明显上升。解决办法不是换更大电流的管子,而是降低 PWM 频率或者增大栅极电阻,让开关过程不要那么“暴力”。
10. 最佳实践与工程建议
这块板子虽然小,但已经是完整的嵌入式硬件产品。把它当成一个正经项目来做,而不是“画完了能跑就行”,会更快提升你的硬件设计能力。
第一,给板子做版本管理。PCB 丝印上写 V1.0、V1.1,同时把开源工程放进 Git 仓库,每次改版都打 Tag。对开源项目来说,别人拿到你的仓库时,能清楚知道自己下载的是哪个版本,反馈问题时也不容易混乱。
第二,保留调试接口。SWD 或串口调试口不要省。很多个人项目为了省面积把调试口去掉,结果固件刷不了、问题难定位,返工成本远大于那几颗排针的钱。调试接口选 2.54mm 间距、5pin~6pin,成本不超过 0.1 元,价值非常高。
第三,焊接时备好助焊剂和万用表。SOT-23 封装的小 MOS 管和 0603 电阻,新手手焊容易虚焊。焊完每颗器件都用万用表通断档或者对准原理图检查一遍,特别是电源网络的短路检查,必须在通电前做。
第四,注意输入反接保护。如果这个控制器是用于 DIY 机箱或 3D 打印机的,使用者有可能把 12V 电源接反。最少在电源入口串联一个肖特基二极管,或者使用 P-MOS 防反接电路。如果追求 2 块钱成本,一个二极管是最低限度保护。
第五,这是 12V 直流低压项目,不是 220V 市电项目。画板时不需要考虑爬电距离,但也不要看到“风扇”两个字就拿到 220V 交流风扇上使用。MOS 管、稳压器件、电容耐压值全都是按 12V 设计的。
第六,对外开源时把制造文件也一并放出来。Gerber 文件、BOM 列表、贴片坐标文件、固件源码、使用说明,一个都不能少。很多人做开源项目只放原理图,别人想复现还要自己画板子,门槛一下就高了。真正的开源硬件项目,“可复现性”比“代码美观”重要得多。
11. 总结与后续学习方向
这篇文章围绕 PWM 风扇控制器的 PCB 设计,从方案选型、原理图要点、PCB 布局布线、生产文件导出,到焊接调试和常见问题排查,算是一条完整的链路。如果你照着这个思路做了一块自己的板子,得到的绝不仅仅是一个能控制风扇转速的小模块,更是一套“低成本硬件设计”的方法论——如何控制 BOM、如何做布局取舍、如何在信号质量和成本之间找平衡。
做完这块板子之后,值得继续深入的方向有这么几个:
一是把控制算法做精细。目前用的是线性温控曲线,进阶可以做 PID 闭环、温度变化率预测、多风扇同步控制。这些算法在依赖 PWM 的项目里非常通用,换到其它电机控制场景也是同一套思路。
二是往更高功率的电机控制扩展。PWM 控制直流电机、水泵、散热风扇的原理一致,但功率变大后,MOS 管的选型、PCB 的热设计、栅极驱动的方式都会变化。你可以对比这颗 2 块钱的小板子和一个 500W 电机驱动器之间的设计差异,理解会深刻很多。
三是结合无线模块做远程监控。在 PCB 上预留串口或者 I2C 接口,接入 ESP8266、ESP32 之类的 WiFi 模块,风扇控制器的数据就能上报到上位机或云端。这也是很多开源项目从“能用”走向“好用”的关键一步。
如果后续有时间,我打算把固件部分的实现细节、开源的完整仓库链接以及实际使用中的波形图再整理一篇,方便大家直接对照复现。这篇文章可以先收藏,等你开始画板子的时候,再翻出来对照检查一遍,一定比闷头画完再改版要省事得多。