应广PMS150C温控PWM风扇控制器:低成本4线风扇调速完整方案
基于低成本8位MCU、10K NTC热敏电阻和25kHz PWM输出,实现4线风扇智能调速,适用于电源、UPS、工控盒、LED驱动电源和小型散热模块。
很多散热产品并不需要复杂MCU,只需要根据温度自动调节风扇转速。本文给出一个可落地的PADAUK应广单片机温控PWM风扇方案:电路可画板,BOM可采购,代码可移植,参数可调试。

一、应用痛点:风扇全速运行不是最优解
在开关电源、UPS、LED电源、功放、网络设备和小型工控盒中,风扇常被设计成上电即转或温控开关式启停。这样虽然简单,但存在噪音大、风扇寿命短、低负载无效功耗高、灰尘堆积快等问题。
采用温控PWM调速后,设备可以在低温时低速或停转,在高温时自动加速,从而兼顾散热、噪音、寿命和成本。
二、方案规格
| 项目 | 推荐参数 |
|---|---|
| 主控MCU | PADAUK PMS150C-U06;开发阶段可用PFS154 |
| 输入电压 | 12V DC,给风扇供电 |
| MCU供电 | 5V,由78L05/ME6206-5.0等LDO产生 |
| 风扇类型 | 标准4线PWM风扇,12V供电,PWM控制脚 |
| PWM频率 | 约25kHz,符合常见PC风扇PWM控制习惯 |
| 温度检测 | 10K NTC,B=3950,配1K下拉电阻 |
| 默认阈值 | 低温40℃降速(滞回),高温50℃升速 |
| 典型应用 | 电源散热、UPS、小型工控盒、LED驱动电源、充电器、功放散热 |
三、芯片型号选择
1. 量产主推:PMS150C-U06
PMS150C-U06为SOT23-6封装的低成本8位OTP MCU,适合固定功能、大批量、成本敏感的控制场景。本方案只需要1路PWM输出和1路比较器输入,PMS150C资源足够。
2. 开发调试推荐:PFS154
PMS150C为OTP一次性烧录,程序写错后芯片无法擦除。开发阶段建议使用PFS154或仿真器调试温度阈值、PWM频率和风扇兼容性,确认无误后再切换PMS150C量产。
| 型号 | 建议用途 | 说明 |
|---|---|---|
| PMS150C-U06 | 量产降本 | SOT23-6,成本低,OTP |
| PFS154 | 开发验证 | 可重复烧录,更适合调试 |
| PMS152 / PMS154C | 功能扩展 | 需要更多IO、LED或TACH检测时可选 |
四、硬件电路设计
1. 系统连接框图
12V输入
├── 4线风扇 +12V 供电
└── LDO稳压到5V
├── PMS150C VDD
├── 10K NTC温度检测分压
└── PA3输出25kHz PWM → 风扇PWM控制脚
2. 电源电路
J1-1 +12V输入 ──┬── 风扇Pin2(+12V)
└── LDO输入
J1-2 GND ───────── 风扇Pin1(GND)、MCU GND
LDO输出:+5V → PMS150C VDD、NTC分压上端
推荐在LDO输入端放置1uF电容,输出端放置100nF电容,并在MCU VDD/GND旁边就近放置100nF去耦电容。
3. NTC温度检测电路
+5V
│
[TH1] 10K NTC,B=3950
│
├── T_OUT → PMS150C PA4 / Comparator+
│
[R1] 1K,1%
│
GND
温度升高时,NTC阻值下降,T_OUT电压发生变化。PMS150C使用内部比较器和16档内部参考电压判断温度区间。该方案不是高精度温度计,但足够实现风扇分段调速。
4. 4线风扇PWM接口:量产建议用开漏驱动
推荐开漏接口:
PMS150C PA3 ── 100Ω~1k ── 2N7002 Gate
2N7002 Source ─────────── GND
2N7002 Drain ──────────── 风扇PWM Pin4
Gate到GND:100k下拉,可选
风扇Pin1:GND
风扇Pin2:+12V
风扇Pin3:TACH,可预留
风扇Pin4:PWM控制输入
如果风扇内部没有PWM上拉,可在PWM线上增加4.7k~10k上拉到5V;多数标准4线风扇内部已有上拉,实际需按风扇规格书确认。
五、BOM清单
| 位号 | 名称 | 推荐参数/型号 | 数量 | 说明 |
|---|---|---|---|---|
| U1 | MCU | PMS150C-U06 | 1 | SOT23-6,量产主控 |
| U2 | LDO | 78L05 / ME6206-5.0 / HT7550-5.0 | 1 | 12V转5V |
| Q1 | MOS管 | 2N7002 | 1 | PWM开漏驱动,推荐增加 |
| TH1 | NTC | 10K,B=3950 | 1 | 贴近散热片或发热源 |
| R1 | 分压电阻 | 1K,1% | 1 | NTC下拉 |
| Rg | 栅极电阻 | 100Ω~1K | 1 | PA3到2N7002 Gate |
| Rpd | 下拉电阻 | 100K | 1 | Gate下拉,防止上电误动作 |
| C1 | 输入电容 | 1uF/25V | 1 | LDO输入滤波 |
| C2 | 输出电容 | 100nF | 1 | LDO输出滤波 |
| C3 | NTC滤波 | 10nF~100nF | 可选 | T_OUT抗干扰 |
| J1 | 电源接口 | 2Pin 2.54mm | 1 | 12V输入 |
| J2 | 风扇接口 | 4Pin 2.54mm | 1 | 接4线风扇 |
| TVS1 | TVS管 | SMBJ12A等 | 可选 | 12V输入浪涌保护 |
六、控制逻辑与参数
采用双阈值滞回控制,避免风扇在临界温度附近频繁启停。
温度 ≥ 50℃:PWM占空比逐步增加
40℃ ≤ 温度 < 50℃:保持当前转速(死区)
温度 < 40℃:PWM占空比缓慢降低
升速阈值:50℃ // TRIGGER_HIGH = 0x06
降速阈值:40℃ // TRIGGER_LOW = 0x04
滞回死区:10℃ // 防止临界点抖动
温度越高:每个控制周期增加的占空比越多
控制周期:约164ms
PWM范围:0~255
| 应用场景 | 降速阈值(滞回) | 升速阈值 | 说明 |
|---|---|---|---|
| 静音优先设备 | 35℃ | 45℃ | 提前低速散热,温度波动小 |
| 普通电源散热 | 40℃ | 50℃ | 推荐默认参数 |
| 高温容忍设备 | 45℃ | 55℃ | 降低风扇运行时间和噪声 |
七、参考代码
1. NTC阈值定义(含滞回)
// 比较器内部参考电压 16 档(0x00~0x0F)
// 0x00~0x03 对应 40℃ 以下阈值(本方案未使用)
#define NTC_1K_TRIGGER_35C 0x02
#define NTC_1K_TRIGGER_40C 0x04
#define NTC_1K_TRIGGER_45C 0x05
#define NTC_1K_TRIGGER_50C 0x06
#define NTC_1K_TRIGGER_55C 0x07
#define NTC_1K_TRIGGER_59C 0x08
#define NTC_1K_TRIGGER_64C 0x09
#define NTC_1K_TRIGGER_68C 0x0A
#define NTC_1K_TRIGGER_72C 0x0B
#define NTC_1K_TRIGGER_76C 0x0C
#define NTC_1K_TRIGGER_80C 0x0D
#define NTC_1K_TRIGGER_84C 0x0E
#define NTC_1K_TRIGGER_88C 0x0F
// 滞回控制:升速阈值 50℃,降速阈值 40℃(10℃ 死区)
#define TRIGGER_LOW NTC_1K_TRIGGER_40C // 降速阈值(滞回)
#define TRIGGER_HIGH NTC_1K_TRIGGER_50C // 升速阈值
2. 风扇控制主逻辑(含滞回)
#include
#include
#define FAN_BIT 3 // PA3输出PWM
#define NTC_BIT 4 // PA4接NTC分压
// 启动占空比:部分风扇需要较高占空比才能克服惯性启动
// 启动后可将占空比降至 FAN_MIN_RUN_PWM 维持运转
#define FAN_MIN_START_PWM 80 // 启动瞬间占空比
#define FAN_MIN_RUN_PWM 25 // 启动后最低维持占空比
#define FAN_MAX_PWM 255
static uint8_t fan_pwm = 0;
static void set_fan_pwm(uint8_t duty)
{
if (duty == 0) {
TM2C = 0x00;
PA &= ~(1 << FAN_BIT);
return;
}
if (duty < FAN_MIN_RUN_PWM) {
duty = FAN_MIN_RUN_PWM;
}
TM2B = duty;
TM2C = (uint8_t)(TM2C_MODE_PWM | TM2C_OUT_PA3 | TM2C_CLK_IHRC);
}
void fan_control_tick(void)
{
uint8_t t;
// 温度低于降速阈值(40℃),缓慢降速
GPCS = (uint8_t)(GPCS_COMP_RANGE4 | (TRIGGER_LOW & 0x0F));
if (fan_pwm > 0 &&
(GPCC & (1 << GPCC_COMP_RESULT_BIT)) == GPCC_COMP_RESULT_NEGATIVE) {
fan_pwm--;
if (fan_pwm < FAN_MIN_RUN_PWM && fan_pwm > 0) {
fan_pwm = FAN_MIN_RUN_PWM; // 不低于维持占空比
}
}
// 温度高于升速阈值(50℃),逐步升速;温度越高升速越快
for (t = TRIGGER_HIGH; t <= 0x0F; t++) {
GPCS = (uint8_t)(GPCS_COMP_RANGE4 | t);
if (fan_pwm < FAN_MAX_PWM &&
(GPCC & (1 << GPCC_COMP_RESULT_BIT)) == GPCC_COMP_RESULT_POSITIVE) {
fan_pwm++;
} else {
break;
}
}
set_fan_pwm(fan_pwm);
}
3. 初始化参考
void main(void)
{
// 关闭未用IO输入,降低功耗
PADIER = 0x00;
// PA3为输出
PAC = (1 << FAN_BIT);
// 8位PWM,周期 = 256个时钟步
// 频率 = 12.8MHz / 2 / 256 = 25kHz
TM2B = 0;
TM2S = (uint8_t)(TM2S_SCALE_DIV2);
TM2C = (uint8_t)(TM2C_MODE_PWM | TM2C_OUT_PA3 | TM2C_CLK_IHRC);
// 比较器:+端接PA4,-端接内部参考
GPCC = (uint8_t)(GPCC_COMP_ENABLE |
GPCC_COMP_MINUS_VINT_R |
GPCC_COMP_PLUS_PA4);
// T16约164ms中断一次:12.8MHz/64/32768 ≈ 6.1Hz,周期164ms
// 如需327ms周期,可将分频改为 T16M_CLK_DIV128
T16M = (uint8_t)(T16M_CLK_IHRC |
T16M_CLK_DIV64 |
T16M_INTSRC_15BIT);
T16C = 0;
INTEN = INTEN_T16;
INTRQ = 0;
__engint();
while (1) {
__stopexe();
}
}
void interrupt(void) __interrupt(0)
{
if (INTRQ & INTRQ_T16) {
fan_control_tick();
INTRQ &= ~INTRQ_T16;
}
}
八、调试步骤
- 测电源:确认12V输入、5V LDO输出正常,MCU VDD脚旁边有100nF去耦。
- 测NTC分压:室温下T_OUT稳定;加热NTC后T_OUT应变化。若不变化,检查NTC、1K电阻和焊点。
- 测PWM:示波器测PA3或2N7002 Drain,频率应接近25kHz,占空比随温度升高而增大。
- 接风扇:确认4线风扇线序,先低压限流测试,防止接反。
- 调阈值:根据实际散热片温度,调整TRIGGER_LOW和TRIGGER_HIGH。
- 调最低占空比:不同风扇启动占空比不同,若低速不启动,提高FAN_MIN_START_PWM;若启动后抖动,调整FAN_MIN_RUN_PWM。
九、原方案不足与优化建议
不足1:PWM接口兼容性
MCU直接推挽输出PWM可能不符合部分4线风扇规范。优化:增加2N7002开漏驱动,并预留4.7k~10k上拉位置。
不足2:无风扇堵转检测
基础方案未使用TACH反馈。优化:将TACH接入MCU输入脚,检测一定周期内是否有脉冲,无脉冲则全速重启或报警。
不足3:NTC精度依赖器件
阈值受NTC B值、电阻误差和安装位置影响。优化:量产前做温箱测试,按实测结果修正阈值表。
不足4:OTP烧录风险
PMS150C一次性烧录,调试成本高。优化:开发用PFS154,量产前冻结版本和校验码。
不足5:保护电路偏少
电源类产品干扰较强。优化:输入加TVS、反接保护、LDO前后滤波,PWM和NTC走线远离开关节点。
不足6:无异常安全策略
NTC开路/短路时可能误判。优化:增加极端档位判断,异常时默认风扇全速,保护设备。
十、量产落地注意事项
- NTC位置:应贴近散热片、MOSFET、变压器或整流器等主要热源,不要放在风扇出风口。
- PWM走线:远离高压开关节点,必要时串100Ω~1K电阻降低尖峰。
- 风扇兼容:至少测试3~5款不同品牌4线风扇,确认最低启动占空比和25kHz兼容性。
- 温箱验证:在40℃、45℃、50℃、55℃、60℃点验证转速变化。
- 烧录流程:OTP量产前必须做空片检查、烧录校验、功能抽检,避免批量报废。
- EMC测试:电源产品建议做EFT、ESD和浪涌测试,必要时增加TVS和RC滤波。
十一、FAQ
PMS150C可以直接接4线风扇PWM脚吗?
实验阶段可以尝试直接输出5V PWM,但量产更推荐2N7002开漏接口,符合更多4线风扇的控制习惯。
这个方案能显示准确温度吗?
不能。本方案定位是低成本温控风扇,不是温度计。它只判断温度区间并调节转速。
如果风扇低占空比不转怎么办?
增加启动占空比,例如设置FAN_MIN_START_PWM为80~100,并在启动后再降到FAN_MIN_RUN_PWM维持转速。
可以控制2线风扇吗?
可以改成MOSFET低边PWM控制2线风扇,但噪声、启动、EMI和寿命表现通常不如标准4线PWM风扇。
为什么要用滞回控制?
滞回(升速50℃/降速40℃)在阈值之间设置了10℃死区,防止风扇在临界温度附近频繁启停或转速抖动,延长风扇寿命并降低噪声波动。
十二、总结
基于PADAUK应广PMS150C的温控PWM风扇控制器,使用低成本MCU、10K NTC、1K分压电阻和25kHz PWM输出,就能完成风扇智能调速。该方案非常适合电源、UPS、工控、小家电和LED驱动电源等成本敏感产品。
为了真正量产落地,建议在基础方案上增加开漏PWM接口、NTC异常保护、风扇TACH堵转检测、输入保护和温箱校准。这样既能保持应广MCU的成本优势,也能提升整机可靠性。
