25 kHz 4-pins PWM-ventilatorbesturing met Arduino Uno – Bouw, Code & Test
Onderdelen en benodigdheden
- Axiale ventilator, 12 VDC (1×)
- Arduino UNO (1×)
- USB-A naar Mini-USB kabel (1×)
- Draadjes (standaard) (1 set)
Apps en online diensten
- Arduino IDE
Over dit project
Ik wilde mijn 4-pins PWM-ventilatoren besturen en had er vijf liggen. De frequentie is instelbaar tussen 125 Hz en 8 MHz, met variabele duty cycle. De schakeling gebruikt Timer 1 in fase-correcte PWM-modus (mode 10) op OCR1A (pin 9) en ICR1 (pin 10). Een handoscilloscoop was onmisbaar om frequentie en duty cycle te verifiëren.
Belangrijk: Raadpleeg de datasheet van uw ventilator. De besturingsdraad was in mijn geval geel (normaal de tachodraad). Controleer de acceptabele frequentierange ("centering frequency"). U moet wellicht de code aanpassen. Een goede voeding is essentieel (ik gebruik een omgebouwde ATX-voeding).
Let op: Het besturen van twee ventilatoren onafhankelijk met een tweede timer werkt niet. De resolutie van de tweede timer is lager (8-bit vs 16-bit), wat leidt tot ruis en vervormde golven. Het is ook minder intuïtief bij het invoeren van waarden.
Code
De code configureert Timer 1 voor 25 kHz fase-correcte PWM op pin 9 (OC1A). De duty cycle wordt in de loop aangepast via setPwmDuty() (0–100%).
const byte OC1A_PIN = 9;
const byte OC1B_PIN = 10;
const word PWM_FREQ_HZ = 25000; // Frequentie in Hz (hier 25 kHz)
const word TCNT1_TOP = 16000000 / (2 * PWM_FREQ_HZ);
void setup() {
pinMode(OC1A_PIN, OUTPUT);
TCCR1A = 0; TCCR1B = 0; TCNT1 = 0;
// COM1A1=1, WGM11=1 → fase-correcte PWM, clear op match
TCCR1A |= (1 << COM1A1) | (1 << WGM11);
// WGM13=1, CS10=1 → geen prescaler
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;
}
Schema
Tip: Gebruik altijd een flyback-diode over de ventilator-aansluitingen als u de voeding rechtstreeks schakelt. Voor 4-pins ventilatoren is de PWM-in hoogimpedant, dus een directe verbinding met de Arduino werkt prima.
Productieproces
- LED helderheid regelen met PWM via drukknop op Arduino Mega
- Je plafondventilator bedienen met Alexa: Stap-voor-stap handleiding
- Bouw een Arduino Real-Time Clock voor Islamitische Gebedstijden
- Slimme spaarpot bouwen: Muntenacceptor besturen met Arduino Nano
- Een LED bedienen via Bluetooth met Arduino – Eenvoudige DIY Handleiding
- Twee Stappenmotors Sturen met Arduino Nano & Joystick – Simpele Tutorial
- Afbeeldingen Weergeven op een 1,17-inch TFT LCD met Arduino UNO
- Een 8×8 LED-matrix beheersen met Arduino Uno: Stap-voor-stap handleiding
- Bouw een 4x4x4 LED-kubus met Arduino Uno & 1Sheeld – Interactief LED-project
- ThimbleKrox: Vingergemonteerde Muizenbesturing met Arduino Micro & MPU-6050
- DIY Arduino Kakerlakbesturingssysteem – Bouw voor minder dan $30