Contrôle de ventilateur PWM 4 broches 25 kHz avec Arduino Uno – Construction, code et test
Composants et fournitures
| Composant | Quantité |
|---|---|
| Ventilateur axial, 12 VDC (4 broches PWM) | 1 |
| Arduino UNO | 1 |
| Câble USB-A vers Mini-USB | 1 |
| Fils de connexion (standard) | 1 lot |
Applications et services en ligne
- Arduino IDE
À propos de ce projet
Je me demandais comment contrôler mes ventilateurs PWM 4 broches. J'en avais 5 sous la main et j'ai décidé d'essayer. Les valeurs de fréquence peuvent être ajustées entre 125 Hz et 8 MHz, avec un cycle de travail variable. Le circuit utilise le mode 10 PWM à correction de phase sur le timer 1 : OCR1A (broche 9) et ICR1 (broche 10). Un débogage a été nécessaire pour comprendre ce fonctionnement, et j'utilise un oscilloscope portable qui rend la visualisation des fréquences et cycles de travail beaucoup plus facile, sans approximation.
Important : Consultez la fiche technique de votre ventilateur car la broche de contrôle dans mon cas était jaune (normalement fil tachymétrique). Vérifiez aussi la plage de fréquence acceptable (ou « FRÉQUENCE DE CENTRAGE ») pour votre ventilateur. Vous devrez peut-être modifier la fréquence dans le code. Enfin, une bonne alimentation est nécessaire (j'utilise un bloc ATX converti d'un vieux PC).
NOTE : J'ai tenté d'utiliser un autre timer pour contrôler 2 ventilateurs indépendamment. Ça ne fonctionne pas. La raison : la résolution du 2e timer est plus faible (16 bits vs 8 bits), ce qui rend les pas d'ajustement de fréquence et de cycle de travail bruités et les formes d'onde de plus en plus déformées. Ce n'est pas non plus simple pour saisir les valeurs.
Code
Code Arduino
const byte OC1A_PIN = 9;
const byte OC1B_PIN = 10;
const word PWM_FREQ_HZ = 25000; // Ajuster cette valeur pour changer la fréquence (en Hz !) (Réglé sur 25 kHz)
const word TCNT1_TOP = 16000000 / (2 * PWM_FREQ_HZ);
void setup() {
pinMode(OC1A_PIN, OUTPUT);
// Réinitialiser les registres de contrôle et de comptage du Timer1
TCCR1A = 0;
TCCR1B = 0;
TCNT1 = 0;
// Configuration du Timer1
// COM1A(1:0) = 0b10 (Sortie A front montant clair/front descendant)
// COM1B(1:0) = 0b00 (Sortie B fonctionnement normal)
// WGM(13:10) = 0b1010 (PWM à correction de phase)
// ICNC1 = 0b0 (Annulation de bruit capture entrée désactivée)
// ICES1 = 0b0 (Sélection front capture entrée désactivée)
// CS(12:10) = 0b001 (Sélection horloge = horloge/1)
TCCR1A |= (1 << COM1A1) | (1 << WGM11);
TCCR1B |= (1 << WGM13) | (1 << CS10);
ICR1 = TCNT1_TOP;
}
void loop() {
setPwmDuty(0);
delay(5000);
setPwmDuty(25); // Modifier cette valeur 0-100 pour ajuster le cycle de travail
delay(5000);
// setPwmDuty(50);
// delay(20000);
// setPwmDuty(75);
// delay(20000);
// setPwmDuty(100);
// delay(20000);
}
void setPwmDuty(byte duty) {
OCR1A = (word)(duty * TCNT1_TOP) / 100;
}
Schéma électrique
Processus de fabrication
- Contrôler la Luminosité de LEDs par PWM avec un Bouton Poussoir sur Arduino Mega
- Contrôler votre ventilateur de plafond avec Alexa : Guide étape par étape
- Horloge Arduino temps réel pour les heures de prière islamiques
- Construire une Tirelire Intelligente : Contrôler un Accepteur de Pièces avec Arduino Nano
- Contrôler une LED par Bluetooth avec Arduino et MIT App Inventor
- Contrôler 2 moteurs pas-à-pas avec Arduino Nano et joystick – Tutoriel Visuino
- Afficher des images sur un écran TFT 1,17 pouces avec Arduino UNO
- Maîtriser une matrice LED 8×8 avec Arduino Uno : Guide pas à pas
- Construire un Cube LED 4x4x4 avec Arduino Uno et 1Sheeld – Projet LED Interactif