Contrôle de ventilateur PWM 4 broches 25 kHz avec Arduino Uno
Composants et fournitures
| Ventilateur axial, 12 VDC | | × | 1 | |
| | × | 1 | |
| Câble USB-A vers Mini-USB | | × | 1 | |
| Câbles de raccordement (générique) | | × | 1 | |
Applications et services en ligne
À propos de ce projet
Je me suis posé des questions sur ce projet et sur la façon de contrôler mes ventilateurs PWM à 4 broches. J'en avais 5 qui traînaient et j'ai pensé que le mien allait aussi tenter le coup. Les valeurs de fréquence peuvent être ajustées entre 125 HZ - 8 MHZ ainsi qu'un cycle de service variable. Le circuit utilise le mode 10 PWM à correction de phase sur la minuterie 1 OCR1A (broche 9) et ICR1 (broche 10). Un débogage a été nécessaire pour comprendre cela et je possède un oscilloscope portable. Cela permet de voir les fréquences et les cycles d'utilisation beaucoup plus facilement et aucune devinette n'est nécessaire. Voici le lien :L'oscilloscope.
Je vous conseille fortement de consulter la fiche technique de votre ventilateur car la broche de commande dans mon cas était jaune (ce qui est normalement appelé fil de tachymètre). Assurez-vous également de trouver la plage de fréquence acceptable (OU "FRÉQUENCE DE CENTRAGE ") pour le ventilateur que vous avez choisi. Vous devrez peut-être modifier la fréquence du code pour l'adapter à vos besoins. Enfin, vous aurez besoin d'une bonne alimentation (le mien est un bloc d'alimentation ATX converti à partir d'un ancien PC).
REMARQUE :j'ai essayé d'utiliser une autre minuterie et de contrôler 2 ventilateurs indépendamment. Cela ne fonctionne pas. La raison en est que la résolution du 2ème temporisateur est plus faible (16 bits contre 8 bits). Cela signifie que les ajustements de fréquence et de service sont bruyants et que les formes d'onde sont de plus en plus déformées. Ce n'est pas non plus aussi simple lors de la saisie des valeurs.
Code
Le CodeArduino
Téléchargez ce fichier et exécutez-le sous l'IDE Arduino.octet const OC1A_PIN =9;octet const OC1B_PIN =10;mot const PWM_FREQ_HZ =25000; //Ajustez cette valeur pour ajuster la fréquence (Fréquence en HZ !) (Définir actuellement sur 25 kHZ) mot const TCNT1_TOP =16000000/(2*PWM_FREQ_HZ);void setup() { pinMode(OC1A_PIN, OUTPUT); // Effacement des registres de contrôle et de comptage de Timer1 TCCR1A =0 ; TCCR1B =0 ; TCNT1 =0 ; // Configurer la configuration Timer1 // COM1A(1:0) =0b10 (Sortie A claire montante/mettre en baisse) // COM1B(1:0) =0b00 (Sortie B fonctionnement normal) // WGM(13:10) =0b1010 (Phase correcte PWM) // ICNC1 =0b0 (Suppresseur de bruit de capture d'entrée désactivé) // ICES1 =0b0 (Sélection de bord de capture d'entrée désactivée) // CS (12:10) =0b001 (Sélection d'horloge d'entrée =horloge/1) TCCR1A | =(1 <
Schémas