Vous êtes sur la page 1sur 2

Contrôler la vitesse d'un ventilateur PC par PWM

Contrôlez la vitesse d'un ventilateur d'ordinateur de 12 volts à l'aide d'un


rapport cyclique PWM

Description du projet

Ce projet permet de contrôler la vitesse de rotation de la turbine d'un ventilateur


d'ordinateur, ceci est utile si vous souhaitez tester un ventilateur mais que vous n'avez pas
d'ordinateur pour le connecter.

Les ventilateurs utilisés dans un ordinateur comme ventilateurs de boîtier ou comme


ventilateurs de processeur nécessitent une alimentation CC de 12 volts et sont contrôlés par
un signal PWM de 25 kHz. La raison d'un signal de 25 KHz est d'éliminer, ou du moins de
réduire, le bruit PWM et de ne laisser que le bruit du vent et des roulements, car cette
fréquence est en dehors de la plage auditive humaine (20 Hz - 20 kHz). J'ai testé avec un
oscilloscope et le signal généré par l'Arduino dans ce projet est bien de 25 kHz.

Le contrôle de la vitesse du ventilateur fonctionne en réglant la largeur des impulsions dans


le signal PWM, où un rapport cyclique de 0 % signifie que le ventilateur fonctionne à
vitesse minimale et un rapport cyclique de 100 % signifie qu'il fonctionne à pleine vitesse.

Ceci est le schéma, la broche 1 du ventilateur est connectée à la masse, la broche 2 est
connectée à l'alimentation +12 V et la broche 4 est connectée à la broche numérique 11 de
l'Arduino. Généralement, la broche 1 de la plupart des ventilateurs est marquée d'un gros «
1 » sur le connecteur.
int icr, frecuency, duty_cycle;
void setup() {
Serial.begin(9600);
pinMode(11, OUTPUT);

// Timer/Counter 1 initialization
TCCR1A = 0xA2;
TCCR1B = 0x19;
TCNT1H = 0x00;
TCNT1L = 0x00;

duty_cycle = 20; // Change this value to the desired duty cycle (0-100 %)
icr = 639; // icr and frecuency values are set to generate a 25 kHZ signal
frecuency = 16000000 / (1 + icr);

ICR1H = icr >> 8;


ICR1L = icr & 0x00ff;
// Sets the duty cycle with the value entered in line 12
OCR1A = icr * (duty_cycle / 100.0);
}

void loop() {
// Prints the current duty cycle on the serial monitor every second
Serial.print(" Duty cycle (%) = "); Serial.println(duty_cycle);
delay(1000);
}

Vous aimerez peut-être aussi