Arduino Uno 控制 25kHz 4 针 PWM 风扇 - 硬件、代码与测试
元件与物料
| 元件 | 数量 | 备注 |
|---|---|---|
| 12V 直流轴流风扇 (4 针 PWM) | 1 | 需确认控制引脚颜色与频率范围 |
| Arduino UNO | 1 | 主控板 |
| USB-A 转 Mini-USB 线 | 1 | 供电与编程 |
| 杜邦线 (公对公) | 1 包 | 连接用 |
软件与在线服务
- Arduino IDE
项目简介
本项目演示如何使用 Arduino Uno 精确控制 4 针 PWM 风扇。通过定时器 1 的相位修正 PWM 模式 (模式 10),在引脚 9 (OC1A) 和引脚 10 (ICR1) 输出 25kHz PWM 信号,占空比可调。频率范围可扩展至 125Hz–8MHz。调试过程中使用手持示波器观察波形,确保频率与占空比准确。


重要提示:
- 务必查阅风扇数据手册,确认控制引脚 (通常为黄色,但可能标为转速信号线) 与可接受频率范围 (即“中心频率”)。
- 需优质电源 (如改装 ATX 电源)。
- 注意: 尝试用另一定时器独立控制两个风扇会失败,因为第二定时器分辨率较低 (8 位 vs 16 位),导致频率与占空比步进粗糙、波形畸变,且参数设置不直观。
代码
const byte OC1A_PIN = 9;
const byte OC1B_PIN = 10;
const word PWM_FREQ_HZ = 25000; // 目标频率 25kHz
const word TCNT1_TOP = 16000000 / (2 * PWM_FREQ_HZ);
void setup() {
pinMode(OC1A_PIN, OUTPUT);
TCCR1A = 0; TCCR1B = 0; TCNT1 = 0;
// COM1A=10 (上升沿清零/下降沿置位), WGM=1010 (相位修正 PWM), CS=001 (无分频)
TCCR1A |= (1 << COM1A1) | (1 << WGM11);
TCCR1B |= (1 << WGM13) | (1 << CS10);
ICR1 = TCNT1_TOP;
}
void loop() {
setPwmDuty(0); delay(5000);
setPwmDuty(25); delay(5000);
// setPwmDuty(50); delay(20000);
// setPwmDuty(75); delay(20000);
// setPwmDuty(100); delay(20000);
}
void setPwmDuty(byte duty) {
OCR1A = (word)(duty * TCNT1_TOP) / 100;
}
原理图

制造工艺
- Arduino Mega 按键 PWM 调光:三阶段渐变 LED 实战教程
- 用 Alexa 控制吊扇:分步指南
- 自制 Arduino 伊斯兰祷告时间实时时钟
- 智能存钱罐:Arduino Nano 控制硬币识别器实现余额显示
- Arduino + HC-05 蓝牙控制 LED:MIT App Inventor 手机 App 开发全攻略
- Arduino Nano + 摇杆控制双步进电机:Visuino 图形化教程
- Arduino UNO 驱动 1.17 英寸 TFT 屏显示图片 (SD 卡读取)
- Arduino Uno驱动MAX7219级联8×8 LED矩阵:从入门到动画显示
- 用 Arduino Uno 和 1Sheeld 构建 4x4x4 LED 立方体 - 互动音乐可视化项目
- ThimbleKrox:基于 Arduino Micro 与 MPU-6050 的指戴式鼠标控制器
- DIY Arduino 蟑螂控制系统 —— 30 美元以内自制指南
- 使用 Arduino Uno 和蓝牙实现遥控小车:分步指南