LOCODUINO

Aide
Forum de discussion
Dépôt GIT Locoduino
Flux RSS

mardi 19 mars 2024

Visiteurs connectés : 92

La PWM : Qu’est-ce que c’est ? (4)

Monter en fréquence

.
Par : Jean-Luc

DIFFICULTÉ :

Dans « La PWM : Qu’est-ce que c’est ? (2) », nous avons vu comment piloter un moteur en PWM à l’aide d’un transistor MOS canal N, l’IRF540N, transistor nécessaire car, du fait d’un courant de sortie insuffisant l’Arduino ne peut pas directement piloter un moteur. Augmenter la fréquence de la PWM comme vu dans « La PWM : Qu’est-ce que c’est ? (3) » va nous amener à revoir le schéma de cette partie puissance.

<

En effet, dans le montage à base d’IRF540N, nous ne nous sommes pas occupé du temps de réponse du transistor, notamment la façon dont le signal sur sa grille évolue dans le temps. Ce signal doit changer le plus rapidement possible afin que le transistor MOS s’ouvre et se ferme le plus rapidement possible. De cette manière, le signal de la PWM est reproduit le plus fidèlement possible aux bornes du moteur.

Le montage simple ne permet pas une fréquence élevée

Pour limiter le courant tiré de la broche de l’Arduino, nous avons mis une résistance de 270Ω. La grille du transistor MOS présente une capacité assez importante, un tour dans la datasheet de l’IRF540N nous apprend que cette capacité est de 2nF. La constante de temps RC [1] est donc de 500ns. Il faut également prendre en compte le fait que l’Arduino, si il doit fournir un courant important sur une sortie, et 19 mA est un courant important pour un Arduino, ne pourra pas établir une tension de 5V aussi rapidement [2], ce qui conduit à un signal d’entrée qui monte, et qui descend, de manière plus paresseuse.

Or, dans cette phase de commutation, la résistance équivalente du MOSFET est importante et cela entraîne une dissipation thermique également plus importante. Le MOSFET chauffe. Et quand un MOSFET chauffe sa résistance augmente et fait chuter la tension aux bornes du moteur.

Avec la fréquence de PWM de base de l’Arduino, 490Hz, voir « La PWM : Qu’est-ce que c’est ? (3) », ce phénomène n’est pas visible car ramené à la période correspondante de 2ms, la phase de commutation représente une durée négligeable.

Avec une PWM à la fréquence la plus élevée, 31,373kHz, soit une période d’environ 32µs. La durée de la phase de commutation n’est plus du tout négligeable, les PWM de faible valeur ne conduisent plus à une commutation complète du MOSFET comme vous pouvez le voir dans la photo ci-dessous et il chauffe.

JPEG - 103.2 kio

Atteindre une fréquence plus élevée

Nous allons revoir le schéma pour faire en sorte que le signal sur la grille monte et descende de manière plus vigoureuse. Pour cela, il nous faut un étage d’amplification entre l’Arduino et le MOSFET. Nous allons construire cet étage au moyen de transistors bipolaires. Le moyen classique d’amplifier, moyen que vous trouverez sur beaucoup de sites dédiés à l’Arduino, est d’utiliser un simple transistor bipolaire NPN en commutation. Le schéma est très simple :

Montage 1
Montage 1

Lorsque la PWM est à 0, T4 est bloqué et la grille du MOSFET T1 se charge via R3 et R5. Lorsque la PWM est à 5V, T4 est passant et la grille du MOSFET se décharge via T4. R5 limite le courant afin d’épargner T4 lors de la décharge.

Mais ce montage se révèle ici insuffisant. En effet, la résistance de tirage R3 à +5V doit être faible si on veut que la grille du transistor NMOS T5 se charge rapidement lorsque T4 est bloqué (PWM = 0), disons une trentaine d’Ohms. Lorsque T4 est passant, il va devoir tirer au moins 150mA pour que la tension sur la grille de T5 descende bien en dessous de 2V, tension de seuil minimum pour que T5 se bloque, autant que la locomotive. Le comportement est meilleur que la solution précédente mais n’est pas bon pour autant comme en atteste la mesure ci-dessous :

JPEG - 119 kio

Il nous faut donc un montage plus efficace qui charge et décharge activement la grille du MOSFET. Pour cela il est nécessaire de remplacer la résistance R3 par un transistor. Cela donne le montage ci-dessous :

Montage 2
Montage 2

Considérons tout d’abord le cas où la PWM est à 0. Le transistor T4 est bloqué. La résistance R2 polarise le transistor T2 qui charge puis maintient la grille de T1 à 11,3V (12V moins le seuil de 0,7V du transistor T2) car T2 se bloque dès que VBE devient inférieure à 0,7V. La diode D1 est polarisée en inverse et n’a donc aucune influence. Le schéma équivalent est le suivant :

Montage 2
Montage 2
Charge de la grille du MOSFET

Notez que la grille de T1 est à 11,3V. Il est en effet préférable de ne pas utiliser le 5V pour rendre passant T1 car avec la perte de 0,7V on serait à 4,3V, ce qui est un peu juste par rapport à la tension requise de 4V.

Considérons maintenant le cas où la PWM est à 5V. Le transistor T4 est saturé. Par conséquent il tire la base de T2 à la masse et le bloque. Simultanément, il décharge la grille de T1 via D1 et R1. La tension finale sur la grille de T1 s’établit à 0,7V à cause du seuil de D1. Le schéma équivalent est le suivant :

Montage 2
Montage 2
Décharge de la grille du MOSFET

Vous avez peut être noté que T1 est passant, le moteur est alimenté, lorsque la PWM est à 0 et qu’il est bloqué, le moteur n’est pas alimenté, lorsque la PWM est à 5V. C’était d’ailleurs également le cas pour le montage précédent. C’est l’inverse de ce que nous avons considéré jusqu’à maintenant. Nous pourrions ajouter un transistor pour faire en sorte que la PWM soit comme on en a l’habitude mais ce n’est pas nécessaire car il est possible d’inverser la PWM de l’Arduino. Ceci est traité plus bas dans le paragraphe « Inverser la PWM ».

Notez enfin la résistance R4 qui, tant que la PWM n’est pas active sur la broche de l’Arduino, conduit au blocage de T1. Sans cette résistance, le moteur partirait à fond tant que l’Arduino n’a pas fini de s’initialiser, ce qui serait assez désagréable.

Les temps de commutation sont bien meilleurs comme en atteste la photo ci-dessous et le MOSFET reste froid.

JPEG - 86.4 kio

Inverser la PWM

Inverser la PWM signifie qu’une PWM à 0 conduit à un signal à 5V et une PWM à 255 conduit à un signal à 0V. Une PWM à 64, par exemple, conduit elle à un signal à 0V pendant 1/4 de la période et à 5V pendant 3/4 de la période.

Deux bits d’un des registres de contrôle des timers permettent, par chaque sortie PWM, de spécifier si la PWM est inversée ou non. Ceci est décrit dans l’article « Les Timers (IV) ». Mais il y existe un petit problème, la fonction analogWrite(...) réserve un traitement spécial aux valeurs 0 et 255. Si on passe un 0 comme valeur de PWM à analogWrite, un digitalWrite(..., LOW) est effectué. Si on passe 255, un digitalWrite(..., HIGH) est effectué. Bien entendu si on veut inverser la PWM, il faudrait faire l’inverse. On ne peut donc pas utiliser analogWrite avec une PWM inversée. Je vous propose donc une version remaniée d’analogWrite que j’ai appelée pwmWrite et qui tient compte de l’inversion de la PWM.

Les deux fonctions setPWMPolarity et pwmWrite ont donc été ajoutées à la bibliothèque PWMFreq que vous pouvez télécharger ci-dessous.

Bibliothèque PWMFreq

Et sans inverser ?

Il est également possible de réaliser le même type de montage sans inverser la PWM en substituant un MOSFET canal P au MOSFET canal N. On économise même une résistance puisque T4 sera bloqué quand le signal de PWM flotte lors du démarrage de l’Arduino. Le schéma est le suivant :

Montage 3
Montage 3
Montage similaire avec un PMOS au lieu d’un NMOS

Dans un prochain article nous attaquerons le problème de la synchronisation des PWM entre les cantons qui pourront donc être commandés par des Arduino séparés.

[1c’est à dire le temps nécessaire pour que le signal arrive à 63% de sa valeur maximum

[2En tirant 20mA sur une broche établie à HIGH, la tension n’est pas de 5V mais reste inférieure à 4,4V

16 Messages

Réagissez à « La PWM : Qu’est-ce que c’est ? (4) »

Qui êtes-vous ?
Votre message

Pour créer des paragraphes, laissez simplement des lignes vides.

Lien hypertexte

(Si votre message se réfère à un article publié sur le Web, ou à une page fournissant plus d’informations, vous pouvez indiquer ci-après le titre de la page et son adresse.)

Rubrique « Projets »

LaBox, Une Centrale DCC polyvalente et abordable (1)

LaBox, Une Centrale DCC polyvalente et abordable (2)

LaBox, Une Centrale DCC polyvalente et abordable (3)

Comment piloter trains et accessoires en DCC avec un Arduino (1)

Comment piloter trains et accessoires en DCC avec un Arduino (2)

Comment piloter trains et accessoires en DCC avec un Arduino (3)

Comment piloter trains et accessoires en DCC avec un Arduino (4)

SGDD : Système de Gestion DD (1)

SGDD : Système de Gestion DD (2)

SGDD : Système de Gestion DD (3)

Mise en oeuvre du Bus CAN entre modules Arduino (1)

Mise en oeuvre du Bus CAN entre modules Arduino (2)

Un gestionnaire en C++ pour votre réseau (1)

Un gestionnaire en C++ pour votre réseau (2)

Un gestionnaire en C++ pour votre réseau (3)

Un gestionnaire en C++ pour votre réseau (4)

Réalisation de centrales DCC avec le logiciel libre DCC++ (1)

Réalisation de centrales DCC avec le logiciel libre DCC++ (2)

Réalisation de centrales DCC avec le logiciel libre DCC++ (3)

Contrôleur à télécommande infrarouge pour centrale DCC++

Gestion d’une gare cachée (1)

Gestion d’une gare cachée (2)

Gestion d’une gare cachée (3)

La carte Satellite V1 (1)

La carte Satellite V1 (2)

La carte Satellite V1 (3)

La carte Satellite V1 (4)

La carte Satellite V1 (5)

Chenillard de DEL

Enseigne de magasin

Feux tricolores

Multi-animations lumineuses

L’Arduino et le système de commande numérique DCC

Un décodeur d’accessoire DCC versatile basé sur Arduino

Un moniteur de signaux DCC

Une barrière infrarouge

Un capteur RFID

Un TCO xpressnet

Une animation sonore

L’Arduino au coeur des systèmes de pilotage analogiques ou numériques

Calcul de la vitesse d’un train miniature avec l’Arduino

La génèse d’un réseau 100% Arduino

Une horloge à échelle H0

Simulateur de soudure à arc

Un automatisme de Passage à Niveau

Automatisation du pont FLEISCHMANN 6152 (HO) avec un ESP32 (1)

Identifier et localiser vos trains avec le RFID/NFC et un bus CAN.

Etude d’un passage à niveau multivoies

La rétro-signalisation sur Arduino

Décodeur pour aiguillage à solénoïdes sur Arduino

Un décodeur DCC pour les signaux à deux ou trois feux sur Arduino NANO/UNO

Etude d’un passage à niveau universel

Réalisation pratique d’un système de mesure de vitesse à l’échelle N

Une Passerelle entre le bus S88 et le bus CAN pour la rétro signalisation

Un décodeur DCC pour 16 feux tricolores

Block Automatique Lumineux avec la carte shield "Arduino 4 relays"

Réalisation d’un affichage de gare ARRIVEE DEPART

Ménage à trois (Ordinateur, Arduino, réseau)

Réalisation d’un va-et-vient automatique et réaliste

Souris et centrale sans fil

Communications entre JMRI et Arduino

Annonces en gare avec la RFID

Une croix de pharmacie animée avec Arduino UNO

Réalisation d’un wagon de mesure (distance et vitesse)

Passage à niveau géré par Arduino (1)

Passage à niveau géré par Arduino (2)

Passage à niveau géré par Arduino (3)

Passage à niveau géré par Arduino (4)

Passage à niveau géré par Arduino (5)

Une manette simple et autonome pour LaBox

Éclairer le réseau (1)

Éclairer le réseau (2)

Block Automatique Lumineux à 8 cantons analogiques

Un décodeur DCC pour les plaques tournantes Fleischmann et Roco

Éclairer le réseau (3)

Éclairer le réseau (4)

Éclairer le réseau (5)

JMRI pour Ma première centrale DCC

Rocrail pour Ma première centrale DCC

CDM-Rail pour Ma première centrale DCC (1)

CDM-Rail pour Ma première centrale DCC (2)

Banc de test pour les décodeurs DCC

Ma première manette pour les aiguillages DCC

Mon premier décodeur pour les aiguillages DCC

Boitier 3D pour la station DCC minimale

Va-et-vient pour deux trains

Un programme pour régler facilement les servos moteurs avec un ESP32

Affichage publicitaire avec Arduino (1)

Affichage publicitaire avec Arduino (2)

TCO Web interactif avec des ESP32 et des ESP8266 (1)

TCO Web interactif avec des ESP32 et des ESP8266 (2)

TCO Web interactif avec des ESP32 et des ESP8266 (3)

TCO Web interactif avec des ESP32 et des ESP8266 (4)

TCO Web interactif avec des ESP32 et des ESP8266 (5)

Les derniers articles

LaBox, Une Centrale DCC polyvalente et abordable (3)


Thierry

LaBox, Une Centrale DCC polyvalente et abordable (1)


Thierry

LaBox, Une Centrale DCC polyvalente et abordable (2)


Dominique, msport, Thierry

Un programme pour régler facilement les servos moteurs avec un ESP32


bobyAndCo

TCO Web interactif avec des ESP32 et des ESP8266 (5)


utpeca

TCO Web interactif avec des ESP32 et des ESP8266 (4)


utpeca

TCO Web interactif avec des ESP32 et des ESP8266 (3)


utpeca

TCO Web interactif avec des ESP32 et des ESP8266 (2)


utpeca

TCO Web interactif avec des ESP32 et des ESP8266 (1)


utpeca

Affichage publicitaire avec Arduino (2)


catplus, Christian

Les articles les plus lus

Réalisation de centrales DCC avec le logiciel libre DCC++ (3)

La PWM : Qu’est-ce que c’est ? (1)

Comment piloter trains et accessoires en DCC avec un Arduino (1)

Mon premier décodeur pour les aiguillages DCC

Chenillard de DEL

Mise en oeuvre du Bus CAN entre modules Arduino (2)

La rétro-signalisation sur Arduino

La PWM : Qu’est-ce que c’est ? (2)

Un TCO xpressnet

Réalisation d’un va-et-vient automatique et réaliste