Управление 4-пиновым PWM-вентилятором 25 кГц на Arduino Uno — Сборка, код и тесты
Компоненты и материалы
- Осевой вентилятор 12 ВDC с 4-пиновым PWM-разъёмом — 1 шт.
- Arduino UNO — 1 шт.
- USB-кабель (A — Mini-USB) — 1 шт.
- Перемычки (набор) — 1 комплект
Программное обеспечение
- Arduino IDE
О проекте
Проект посвящён управлению 4-пиновыми PWM-вентиляторами с помощью Arduino Uno. Автор использовал пять имевшихся вентиляторов и реализовал генерацию ШИМ-сигнала с частотой 25 кГц (регулируемой в диапазоне 125 Гц – 8 МГц) и переменным коэффициентом заполнения.
Схема построена на таймере 1 в режиме 10 (фазокорректный ШИМ) с использованием выводов OCR1A (Pin 9) и ICR1 (Pin 10). Для отладки применялся портативный осциллограф, что позволило точно контролировать форму сигнала.


Важные замечания
- Проверьте даташит вашего вентилятора. Управляющий провод может быть жёлтым (обычно это тахометрический выход). Убедитесь в допустимом диапазоне частот («центральная частота») для вашей модели.
- Необходим качественный источник питания (автор использовал преобразованный ATX-блок от старого ПК).
- Попытка управления двумя вентиляторами независимо через второй таймер не удалась. Разрешение второго таймера ниже (8 бит против 16 бит), что приводит к зашумлённым переходам и искажению формы сигнала.
Программный код
const byte OC1A_PIN = 9;
const byte OC1B_PIN = 10;
const word PWM_FREQ_HZ = 25000; // Частота ШИМ в Гц (текущее значение 25 кГц)
const word TCNT1_TOP = 16000000 / (2 * PWM_FREQ_HZ);
void setup() {
pinMode(OC1A_PIN, OUTPUT);
TCCR1A = 0; TCCR1B = 0; TCNT1 = 0;
// COM1A = 0b10 (очистка при совпадении, установка вниз)
// WGM = 0b1010 (фазокорректный ШИМ)
// CS = 0b001 (предделитель = 1)
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;
}
Схема подключения

Производственный процесс
- Управление яркостью LED с ШИМ через кнопку на Arduino Mega
- Управление потолочным вентилятором через Alexa: пошаговое руководство
- Часы реального времени на Arduino с расчётом времени намаза
- Умная копилка: управление монетоприёмником на Arduino Nano
- Управление светодиодом по Bluetooth с Arduino: простой DIY-гид
- Управление двумя шаговыми двигателями через джойстик на Arduino Nano — простой урок (Visuino)
- Вывод изображений на 1.17-дюймовый TFT LCD с Arduino UNO
- Мастерство 8×8 LED-матрицы с Arduino Uno: Пошаговое руководство
- Создание интерактивного 4x4x4 светодиодного куба на Arduino Uno и 1Sheeld
- ThimbleKrox: управление мышью с пальца на Arduino Micro и MPU-6050