Problème Regulation PWM moteur

Bonjour tout le monde, j'essaie de réaliser un système de ventilation additionnel pour mon ordinateur portable. Pour cela j'utilise une arduino UNO, un capteur de température LM35, un mofset IRF520N pour piloter un petit ventilateur (2 fils pour l'instant).

J'essaie d'utiliser la fonction PWM, mais le ventilateur est loin de tourner à fond quand je le bloque à 255. J'ai vu qu'il pourrait s'agir de la fréquence utilisé par la carte ?

Voici le code que j'ai fait :

#include <LiquidCrystal.h>

LiquidCrystal lcd(7,6,5,4,3,2);
int tempPin = A0;   //  LM35
int fan = 11;       //  ventilateur
int led = 8;        // led 
int temp;
int tempMin = 25;   // the temperature to start the fan
int tempMax = 60;   // the maximum temperature when fan is at 100%
int fanSpeed;
int fanLCD;

void setup() {
  pinMode(fan, OUTPUT);
  pinMode(led, OUTPUT);
  pinMode(tempPin, INPUT);
  lcd.begin(16,2);  
}

void loop() {  
   temp = readTemp();     // acquisition température
   if(temp  < tempMin) { // si temp est plus petite que la temp mini 
      fanSpeed = 0; // ventil arret 
      digitalWrite(fan, LOW); 
   } 
   if((temp  >= tempMin) && (temp <= tempMax)) { // si la température est plus haute que tempMin 
      fanSpeed = map(temp, tempMin, tempMax, 70, 255); // vitesse du ventil 
      fanLCD = map(temp, tempMin, tempMax, 0, 100); // vitesse de la ventil sur le lcd 
      analogWrite(fan, fanSpeed); // fait tourner la ventil à la vitesse fanSpeed 
   } 
   if(temp  > tempMax) {        // si la temperature est supérieur à la tempMax
     digitalWrite(led, HIGH);  // allumé la led 
   } else {                    //sinon éteindre led
     digitalWrite(led, LOW); 
   }
   
   lcd.print("TEMP: ");
   lcd.print(temp);      // affiche la temperature
   lcd.print("C ");
   lcd.setCursor(0,1);   // ligne suivante de l'affichage
   lcd.print("FANS: ");
   lcd.print(fanLCD);    // affiche la vitesse de la ventil
   lcd.print("%");
   delay(200);
   lcd.clear();   
}

int readTemp() {  // acquisition et convertion de la temperature en celsuis
  temp = analogRead(tempPin);
  return temp * 0.48828125;
}

Ici : arduino-pilotage-de-ventilateurs

  1. Le code

Bonjour,

Le IRF520 est limite pour être piloté par une sortie CMOS. Peut être que laa tension de gate n'est pas suffisante pour l'intensité demandée.
Il aurait mieux valu utiliser un IRL250.

J'avais trouvé cette page hbachetti, mais je n'ai pas bien compris comment je devais modifier mon code ?

qu'elle est la différence entre ces deux composants kamill ?

Tout dépend si ton ventilo fait du bruit à 500Hz ou pas.
Si c'est le cas, changer la fréquence PWM : 31KHz

IRL au lieu de IRF : tension de commande plus faible, plus adaptée au 5V.

Pour une intensité de 1A par exemple on voit qu'il faut une tension gate de 4.2V pour l'IRF520 alors que pour l'IRL520 il suffit de 2.5V
IRFL520.png

IRFL520.png

Je n'ai pas vraiment la même courbe pour l'IRF520 (Vishay) :

Un IRF520 sera tout de même capable de passer 2A en étant commandé en 5V.

Merci pour vos infos très utiles si je comprends bien il faut que j'insère c'est deux lignes de codes
TCCR2B &= B11111000;
TCCR2B |= (0 << CS22) | (0 << CS21) | (1 << CS20);

dans mon programme ?

Si hugo9501 avait un peu plus d'informations à donner sur son ventilateur ?
Référence, tension, courant ?

Merci pour vos infos très utiles si je comprends bien il faut que j'insère c'est deux lignes de codes

Comme dit plus haut :

Tout dépend si ton ventilo fait du bruit à 500Hz ou pas.

Certains ventilateurs fonctionnent bien, sans siffler, à 500Hz.
Il faut écouter s'il siffle à différentes valeurs de PWM.

Alors oui il fait du bruit, de plus c'est un arctic F8 avec trois fils (deux pour l'alim et un pour le retour de vitesse du ventil) et voici les spécifications DC12V 0.11A

Donc il lui faut un PWM 30KHz :

Dans le setup :

TCCR2B &= B11111000;
TCCR2B |= (0 << CS22) | (0 << CS21) | (1 << CS20);

12V 0.11A
Je ne m'attendais pas à des ampères, maximum 200mA.

C'est étrange qu'il ne tourne pas à fond avec PWM 100% sous 12V.

Afin d'éliminer le doute, as-tu un MOSFET IRL sous la main ?
Un IRL520, IRLZ44, etc.

Nan je n'ai pas de mosfet irl sous la main. après j'ai peut être mal câblé

Tout dépend du câblage : breadboard, fils DUPONT, breadboard, etc. peuvent entraîner des résistances série importantes.
Mais par rapport aux 120Ω du ventilateur, il faudrait vraiment de très mauvais contacts, ou des fils très fins.
Essaie de câbler propre avec du fil de 0.5mm2 minimum.
Sinon, essaie de mesurer la tension entre drain et source, moteur à fond. Elle doit être la plus faible possible.