Aquila Reloaded – Chapitre 8 : Pilotage de ventilateurs PWM et monitoring vitesse

Bonjour tout le monde !

Je continue encore et toujours mon projet « Aquila Reloaded ».

Dans notre montage, la LED de puissance nécessite beaucoup plus d’attention car elle est très sensible aux hautes températures. De surcroit, contrairement à notre lampe halogène ELC 250W, il est très compliqué de la remplacer.

Afin d’éviter de griller notre LED, nous allons la refroidir. Le constructeur de l’Aquila a déjà prévu un ventilateur dans le compartiment d’éclairage, mais ce dernier fonctionne en « mode bourrin », sans régulation. Je vais donc procéder à son remplacement par un modèle de type PC. Je prévois également un second ventilateur directement monté sur le radiateur.

Connectique des ventilateurs de PC

Il existe deux types de connexion pour les ventilateurs de PC : des connecteurs à 3 broches et des connecteurs à 4 broches.

Ventilateurs à 3 broches

Lorsque les connectiques se sont standardisées sur les cartes mères, les connecteurs de ventilateurs de PC disposaient de 3 broches « Molex type KK », avec un détrompeur. Deux broches fournissent une alimentation en 12V, et une troisième broche permet d’avoir le retour tachymétrique. Le capteur utilisé est de type « hall effect » et envoie des impulsions à chaque tour du rotor du moteur.

Voici les fonctions de chaque broche :

Ventilateurs à 4 broches

Lors de la sortie des Pentium IV, un nouveau connecteur est apparu, et dispose de 4 broches. Les trois premières broches sont identiques, la quatrième broche apporte la régulation électronique de la vitesse du ventilateur grâce à un signal PWM. Le signal PWM généré est normalisé à 25khz avec un léger seul de tolérance.

Voici les fonctions de chaque broche :

Compatibilité ascendante et descendante

Les connecteurs 3 et 4 broches sont compatibles entre eux : le détrompeur du connecteur 4 broches est dimensionné comme un connecteur 3 broches.

De ce fait, il est possible de brancher un ventilateur non-PWM (3 broches) sur un connecteur 4 broches.

Tout comme il est possible de brancher un ventilateur PWM (4 broches) sur un connecteur 3 broches. Dans ce cas, le ventilateur tournera à sa vitesse maximale.

Piloter un ventilateur de PC avec un Arduino

Partie hardware

Voici un schéma :

On commence par le PWM : vous l’aurez deviné si vous avez lu les chapitres précédents, il va falloir utiliser une broche compatible PWM (jusque là, c’est logique ^^). Selon la dernière norme, le signal PWM délivré au ventilateur est normalisé à 3,3V. On va ajouter une résistance R1 de 2,2kΩ ainsi qu’une diode zener D1 pour stabiliser la tension autour de 3,3V.

Pour le capteur de vitesse, il est nécessaire de capter chaque impulsion pour avoir un comptage précis. Nous allons utiliser une entrée de type « interrupt() ». On place également une résistance R2 de type « PULL UP » pour générer un signal compatible CMOS.

Partie logicielle

Comme vous l’avez compris, je n’aime pas réinventer la roue. Donc j’ai cherché une librairie toute faite, et j’en ai trouvée une : FanController. Vous pouvez l’installer directement depuis les menus de l’IDE Arduino.

Cette librairie prend en charge les ventilateurs à 3 broches (retour de vitesse uniquement) ainsi que les ventilateurs à 4 broches (retour de vitesse + régulation PWM).

Pour l’utiliser, vous pouvez consulter les 2 exemples « Monitor » et « MonitorAndControl », ils sont bien expliqués. Sinon, voici comment faire :

Tout d’abord il faut initialiser un objet, dans notre cas « fan ». Pour un ventilateur à 3 broches (sans PWM) :

FanController fan(SENSOR_PIN, SENSOR_THRESHOLD, PWM_PIN);

Pour un ventilateur à 4 broches (avec PWM) :

FanController fan(SENSOR_PIN, SENSOR_THRESHOLD);

Le paramètre SENSOR_THRESHOLD permet de personnaliser le temps (en ms) entre 2 lectures. Plus la valeur est élevée, plus la mesure sera précise.

Ensuite, il faut initialiser le contrôle

void setup(void) {
  fan.begin();
}

Pour récupérer le nombre de tours / minute (dans la variable rpms) :

unsigned int rpms = fan.getSpeed();

Pour configurer le rapport cyclique, entre 0 et 100% :

fan.setDutyCycle(rapport);

Et pour récupérer le rapport appliqué :

byte rapport = fan.setDutyCycle();

Et voila, vous savez comment faire pour piloter un ventilateur de PC avec un Arduino, on va ainsi pouvoir réguler le refroidissement de l’Aquila.

La suite au prochain épisode 😉

7 commentaires :

  1. Bonjour j’aimerai piloter un ventilo 4 fils avec un raspberry vous savez faire ?
    je cherche sans rien trouver.

  2. Bonjour,
    S’il a 4 fils, il s’agit vraisemblablement d’un ventilateur PWM. Il existe sur le Rpi une sortie PWM, mais je n’ai jamais tenté de m’en servir pour piloter un ventilateur…
    Certains ont essayé visiblement : https://blog.driftking.tw/en/2019/11/Using-Raspberry-Pi-to-Control-a-PWM-Fan-and-Monitor-its-Speed/
    Sinon, vous pouvez utiliser un Arduino Nano v3 (pas cher et encombrement réduit), et qui servirait de « driver » pour le ventilo du Rpi. Ensuite, il suffit via un script sur le Rpi d’envoyer des consignes de vitesse à l’Arduino via le port série/usb.
    C’est un peu plus « encombrant » que la 1ere solution, néanmoins un Arduino n’est pas censé planter, contrairement à un Rpi. De plus, si l’objectif est de refroidir le CPU, on peut prévoir un « watchdog » dans le code de l’Arduino qui mettrait les ventilos à fond si le Rpi n’envoie pas régulièrement de consignes de vitesse (signe que le Rpi est planté et n’execute plus son script de régulation)
    En espérant vous avoir aidé… 🙂

  3. Bonjour,
    Votre schéma m’intéresse beaucoup pour un raspberry pie, mais je bute sur la diode zener, je ne sais pas comment la choisir mis à par pour la tension Vz mais le reste je bute.

  4. « On place également une résistance R2 de type « PULL UP » pour générer un signal compatible CMOS »

    Ce commentaire est exact, attendu que la sortie tachymètre d’un ventilateur est en général du type collecteur ouvert.
    Par contre le schéma montre une résistance R2 PULL-DOWN, ce qui est une erreur.

  5. Bonjour,
    Comme indiqué il faut une Zener de 3,3V, n’importe quelle Zener peut faire l’affaire, il n’y a pas d’intensité.
    G-Rom

  6. Bonjour,
    Exact ! C’est bien une pull down qui a été mise sur le schéma, je ne note pour correction.
    Merci pour la remarque !

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *