Bonjour.
On parle aujourd'hui de moteurs à courant continu.
On va décrire un peu leurs caractéristiques, voir comment les
commander avec des transistors ou avec des ponts en H, parler
du PWM, que vous connaissez probablement, et détailler un
petit peu le PFM, que personne ne connaît, et que j'aime beaucoup.
On dira aussi quelques mots des Servo de télécommandes.
Alors, des moteurs, vous en avez deux catégories.
Vous avez les moteurs utilisés par l'industrie, vous avez ceux
utilisés par les jouets, ceux-ci coûtent 40 francs,
ceux-ci coûtent 40 centimes, et il n'y a pas grand chose entre eux-deux.
Notre but n'est pas de vous préparer à faire des
projets industriels sérieux, il faut apprendre beaucoup plus de choses,
et ça, bien comprendre les bons moteurs avec leurs constantes
de vitesse, leurs constantes de couple, être capable de calculer.
La compréhension générale du moteur avec son
principe, vous la trouvez facilement sur le net.
Cette courbe, ici, est quand même intéressante à connaître.
Quand le moteur est bloqué, vitesse nulle, vous
avez le courant maximum, et le couple maximum.
Si maintenant, vous lâchez l'effort, et bien, le moteur va tourner plus vite,
réduire son couple, réduire son courant, et, théoriquement, pour un moteur parfait,
vous avez la vitesse roue libre, dans laquelle vous n'avez aucune
consommation, le moteur tourne à la vitesse maximale sans chute de tension.
Alors, évidemment, les moteurs que l'on va utiliser, ont du
frottement, à cause des balais, ils ont de mauvaises carac...
Alors, j'ai de mauvaises caractéristiques magnétiques, ça veut simplement
dire que cette courbe théorique du moteur va être un petit peu différente.
Mais, ce qui nous gêne beaucoup, ce sont les frottements, qui font qu'au
démarrage, le moteur va avoir besoin d'une tension non négligeable
pour démarrer et se rapprocher de la courbe idéale.
De même, si vous augmentez la tension, et bien,
il va y avoir réchauffement et perte des caractéristiques.
Alors, tous les moteurs ont une tension nominale, qui est bien
définie, pour les moteurs industriels, en liaison avec la durée de vie.
Quand on joue avec ces moteurs bon marché, et
bien, souvent, on ne connaît pas très bien leurs caractéristiques.
On travaille à la tension qui nous arrange, en fonction de
la puissance nécessaire et de la vitesse de rotation nécessaire.
Si on a besoin de beaucoup plus de puissance, on n'hésite pas à échauffer le
moteur en le sur-alimentant, et en réduisant nettement sa durée de vie.
Il y a peu d'applications
non-industrielles qui insistent pour avoir des
durées de vie de 100 000 heures, par exemple.
Si on a 10 heures, des fois, on est déjà content.
Bien.
Alors, le paramètre qui est important, c'est la
résistance de la bobine, puisque la résistance de la
bobine va vous définir le courant de court-circuit, le courant bloqué,
en fait, donc, les caractéristiques des amplificateurs
de sortie.
Ce qui nous intéresse aussi, cette tension de
démarrage, et, je dirais que c'est la première
chose à vérifier si vous ne connaissez pas
le moteur, à quelle tension est-ce qu'il démarre?
Ensuite, si vous mettez la tension que vous avez envie, avec laquelle vous avez
envie de travailler, vous le bloquez, est-ce que l'échauffement est rapide?
Auquel cas,
c'est certainement le signe qu'il est survolté.
Pour commander un moteur, si c'est en tout-ou-rien unidirectionnel,
vous utilisez un transistor, qui commande les bobines
via les balais, et c'est essentiel de mettre une diode de récupération.
Qu'est-ce qu'il se passe au moment où vous coupez le courant?
La bobine,
l'inertie des électrons dans la bobine, va faire monter la tension ici, c'est
le principe des bobines de Ruhmkorff qui
permettent de générer des très hautes tensions.
Et ce n'est pas favorable, dans le fond, pour les transistors, que la
tension tout à coup, monte à 20-50 Volts, même pendant un instant très faible.
Donc, ce qu'on fait, c'est que ce courant qui tend à aller vers le transistor,
on le court-circuite par une diode, dite diode
de roue libre, diode de protection. Alors, cette diode,
on peut aussi la mettre (oh, je l'ai tournée à l'envers, j'ai
été distrait), on peut aussi la mettre du côté du transistor, et
l'intérêt de cette solution, c'est que les transistors
de puissance contiennent cette diode et vous n'avez pas de souci de câblage.
Maintenant, si vous travaillez avec des moteurs à faible consommation, est-ce que
vous pouvez les brancher directement sur votre processeur, sans amplificateur?
Oui, partiellement à vos risques
et périls. Ce sont de très petits moteurs qui ont une
inductance très faible et surtout une résistance de 30 Ohm.
C'est connu que sur les sorties d'un microcontrôleur,
on peut demander 30 mA, et mon expérience montre que si
c'est en dessus de 30 Ohm, on n'a pas de problèmes, même avec les
surtensions qui sont dégagées au niveau de la commutation.
Voilà ce que j'ai observé.
La tension ne descend pas à 0, ne monte pas
à 5 Volts à cause de la résistance interne des amplis.
Donc, là c'est avec une période de 1 ms, le
courant continue un petit peu à monter, pour se stabiliser plus
loin, et voilà ce qui me semble réaliste. Alors, faites attention, les
moteurs dits solaires ont une résistance plus élevée, et sont parfois
utilisables aussi pour éviter de gaspiller des piles ou du courant.
Mais leur résistance est quand même rarement supérieure à 30 Ohm.
Bien, le PWM,
donc, vous connaissez le principe, on fait des impulsions de largeur variable, avec
une fréquence qui est connue. C'est dans les
500 Hertz pour avoir quelque chose qui ne charge
pas trop le processeur et puis, qui est acceptable.
Industriellement, on demande du 20 kHz, voir plus, pour qu'il n'y ait pas
un effet audible. Alors, c'est clair qu'autour de 5 à 10
kHz, le moteur chante et c'est relativement désagréable.
Alors, le PWM, tel qu'il est proposé par Arduino, avec
l'analogWrite, c'est parfait pour des LED, c'est bon pour
les bons moteurs. Le problème, pour les mauvais
moteurs, je l'explique tout à l'heure.
Et l'autre problème avec Arduino, c'est que ce PWM est disponible sur
un certain nombre de pins, un peu plus si vous achetez un processeur plus
performant, un peu plus si vous avez une routine qui simule les canaux PWM en
baissant un petit peu la fréquence, mais c'est quand même assez limitatif.
Mais c'est relativement
bien documenté, et c'est pour ça que tout le monde le fait.
Alors, un des problèmes apporté par le
PWM, si vous n'avez pas suffisamment de canaux,
il faut d'abord que j'explique dans le
fond, comment on commande les moteurs en bi-directionnel.
Donc, vous avez des motor driver, on va
un peu s'amuser à mettre des transistors, quatre transistors
pour commander un moteur dans les deux sens.
Ces motor driver ont une tension d'entrée qui est celle du processeur.
Ils ont parfois une entrée spécifique de puissance, avec une tension plus
élevée, pour commander les moteurs.
Il y en a qui sont dans des grands boîtiers avec plusieurs pin
de contrôle, même s'il n'y a qu'un moteur qui va être connecté là-dessus.
Il y en a qui sont dans des tout petits boîtiers avec naturellement du
courant nettement plus faible, mais par contre, des tensions beaucoup plus basses.
Celui-ci travaille encore à 2 Volts.
Bien, la question importante maintenant c'est: on a deux
entrées, on a deux sorties, je peux faire la table de vérité,
0, 0, tout naturellement, le moteur sera arrêté.
0,1 il tourne dans un sens, 1,0 il tourne dans l'autre sens.
1,1, quelle est la fonctionnalité?
Là, il faut savoir que un moteur
courant continu, vous pouvez facilement faire l'expérience.
Il a un mode court-circuité et il a un mode roue libre.
Si vous reliez l'entrée et les deux pin d'un moteur ensemble, vous voyez que vous
avez relativement de la peine à tourner
l'axe parce que dès que vous tournez l'axe,
vous générez une force, quant à elle,
électromotrice qui va générer un couple de freinage,
et effectivement, si vous tournez à la
vitesse prévue par le moteur, vous avez une
génératrice qui vous transforme le couple que vous avez fourni en courant.
Par contre, si maintenant vous laissez les deux pin ouvertes, et bien, il
n'y a pas de courant qui peut s'établir, votre moteur va tourner librement.
Alors, cette fonction de moteur libre, vous la trouvez dans certains
circuits, et d'autres circuits, on vous bloque, pour cette combinaison un,
et voilà, il faut vivre avec.
Donc, quelle est la conséquence importante?
Si vous ne travaillez jamais avec cette combinaison, et bien
vous ne verrez pas la différence entre les deux interfaces.
Mais maintenant, si vous voulez faire du PWM bi-directionnel, aller
dans les deux sens, vous avez la solution facile, qui est de
dire, j'envoie mon PWM sur un canal pour
aller dans un sens, j'envoie le PWM sur l'autre
canal pour aller dans l'autre sens, et je me pose toujours un In qui est à zéro.
Donc, la routine pour aller dans un sens,
d'un côté on met la vitesse PWM, de l'autre
côté on met zéro, et puis pour reculer, on permute les deux, mais ça veut dire qu'il
vous faut deux canons PWM, et on vient de voir qu'ils sont plutôt rares.
Si j'ai deux moteurs, ça fait quatre canons PWM, qui sont
répartis à travers la carte, ok, ça peut être une solution.
Alors, une solution qui semble avoir été prévue
puisque les deux pin PWN, trois et quatre, sont côte à côte avec des pin
de réserve à côté, c'est de dire: j'utilise qu'un seul canal PWM, et
maintenant je fais une astuce pour tourner dans l'autre sens, je mets un
un de l'autre côté, et j'inverse la valeur PWM.
Donc là, je veux les 25% PWM, ok, c'est clair.
On aura, 25% du temps, le courant qui passe comme ça.
Maintenant, j'aimerais toujours 25% de PWM, c'est le
zéro qui va être actif qui va faire passer le courant dans
l'autre sens. Donc, mon moteur tournera avec 25%
de PWM, en ayant écrit que sur l'autre
pin maintenant, j'ai du HIGH, et sur ma pin
PWM j'ai 256 moins la vitesse.
Alors, pourquoi est-ce que c'est lié à ce qu'on vient de dire avant?
Si j'ai du PWM 25%, dans le cas où,
justement, j'ai la roue libre, et bien,
j'ai 25% on et puis, puisque j'aurai zéro, de chaque
côté je suis bloqué. Donc, j'aurai 75% bloqué.
Si maintenant je demande moins 25%, donc dans l'autre sens,
j'ai 25% on, donc
je suis à zéro ici, et j'ai 75% avec
l'état en un, donc 75% roue libre.
Alors, le moteur qui alterne des phases
d'activité et de blocage, ou d'activité et de roue
libre, ne va naturellement pas tourner à la même vitesse moyenne.
Donc, votre go maintenant, pour le même PWM, il n'aura
pas du tout la même vitesse en avant, ou en arrière, à vous de le compenser.
Vous avez économisé quelque part, vous perdez ailleurs.
Alors évidemment, moi mon approche c'est de dire: tant
pis pour ces PWM, je vais les programmer moi-même, je
vais pouvoir les avoir sur les pin que je veux,
et programmer le PWM peut se faire de différentes façons.
Il y a la méthode naïve, je dirais, où on fait un certain délai à
l'état un, ensuite, un autre délai à l'état zéro.
Si la somme des délais, on aura toujours la même fréquence, donc délai, délai
complémentaire, et vous pouvez programmer votre PWM et jouer avec ça, et vous
aurez évidemment, déjà, peine à faire autre chose en même temps, parce que c'est
des programmes, dès que vous avez des
délais, c'est des programmes qui sont bloquants.
Alors, cherchons une solution non bloquante.
C'est-à-dire qu'on va appeler une procédure PWM toutes
les 100 microsecondes, mais on va la quitter le
plus rapidement possible, pour avoir encore 90 microsecondes
à faire régulièrement, donc aucune des tâches ne sera bloquée.
Et en fait, plus de 10,
20 microsecondes, dans le cas pire. Alors,
là, je dessine un escalier avec peut-être 16, mais je prends
l'exemple avec 32, pas, donc je définis une
valeur maximum, qui est ici 32, on va voir pourquoi.
Pourquoi? Parce que ça ne sert à rien d'avoir
une finesse de pas de 256, alors qu'on ne
se rend pas du tout compte d'un changement de vitesse de quelques pour cent.
Donc, avec 1/32ème, on a 3% de
différence de vitesse entre chaque pas, c'est bien assez pour toutes
les applications que je connais. Alors, on fixe un maximum de 32 pas.
Vous voulez absolument travailler avec 256?
Vous n'avez qu'à diviser par 8 chaque fois, vous réfléchissez
256, vous divisez par 8, et vous utilisez ma routine simplifiée.
Alors, la routine Do PWM, qui, comme c'est une routine, il y a un paramètre local
que j'ai appelé ici pp, et puis, dans
le programme principal, on aura la variable PWM.
Il y a un
petit byte i qui va être utilisé pour faire un compteur.
Le terme de "volatile", je l'explique un petit peu plus loin.
Alors, j'incrémente le compteur i, je fais mes hémi tranches d'escalier, si i est
égal à maximum PWM, je suis arrivé en haut, je remets à zéro.
Mais i égale max PWM, i égale zéro,
si c'est identique, vous vous souvenez, égal égal.
Et puis, maintenant, je fais encore une autre comparaison, c'est de dire, si
i est inférieur à pp, donc dans toutes ces
zones, j'active le PWM, et puis ici, naturellement, je ne vais pas
l'activer, else (LedOff). Alors, voilà ma routine PWM, qui
utilise très peu d'instructions, très peu de microsecondes, beaucoup moins
que le digitalWrite. Dans le programme principal, je peux
tester avec PWM égale sept, je dois insérer cette routine
Do PWM, dans une boucle qui se répète pour les 100 microsecondes, mais il
me reste ici 90 microsecondes, pour faire
autre chose. Alors, maintenant, j'ai
cette routine. Il faut naturellement la tester, avec la
valeur zéro, la valeur un, la valeur 31, la valeur
32, pour vérifier, parce que c'est souvent dans des
conditions limites que l'on a les erreurs.
Bien. Alors parlons du PFM maintenant.
le PFM, ce qu'on veut c'est que, en moyenne, le
processeur ait une quantité d'énergie dont on a défini le pourcentage.
Cette quantité d'énergie va fixer la vitesse.
Alors, avec le PWM, on fait des
impulsions plus ou moins longues, avec le PFM,
on fait des impulsions plus ou moins rapprochées.
Alors, ici, il y a une impulsion de temps en temps.
Là, il y a, parfois, plusieurs impulsions qui se suivent, donc en fait, si on
observe à l'oscilloscope, c'est que les creux, la quantité de creux,
diminuent, et on est de nouveau dans une période donnée.
Alors, l'intérêt de ça pour des mauvais moteurs, je vous
rappelle ce problème qu'on avait avec la tension de démarrage, avec
le PWM, tant que vous êtes dans cette zone, le moteur
ne démarre pas, et un moteur bon marché, surtout les moteurs.
pager de 4-6 mm, ont besoin de 30 à 40% de PWM pour démarrer.
Donc l'idée, c'est de dire: mais, on fait démarrer le moteur
avec une tension suffisante, mais on l'arrête tout de suite.
Donc, on envoie au moteur Des impulsions qui suffisent à le faire
démarrer mais qui ne vont pas le lancer, il va s’arrêter tout de suite après.
Alors c’est évident que si les impulsions
de démarrage se rapprochent et bien le moteur va prendre de plus en plus de
vitesse. Donc, voilà le
grand principe, dans le fond, du PFM. L’ennui du
PFM, c’est que, si vous voulez avoir, ici,
quelque chose qui tourne très lentement, étant donné que
cette impulsion dure, au minimum, 2, 4, 8 millisecondes, pour des gros
moteurs, cette impulsion, dans le fond, si vous voulez qu’elle se produise une fois
sur 10, donc vous aurez 10 pourcent de PFM, et bien ça vous donne
une période de 40 millisecondes, donc vous aurez du rafraîchissement à 25 Hertz.
Et maintenant, si vous voulez 1 pourcent, vous aurez du rafraîchissement à 2,5 Hertz
donc c’est 2 et demi fois par seconde que le moteur va faire un petit crochet.
Mais évidemment, vous n’avez pas de limites, si vous
voulez qu’il fasse une petite impulsion tous les jours
et bien il fera, il avancera une petit peu
tous les jours, et c'est pas incompatible avec ce
concept de PFM alors que vous n’avez aucun espoir avec le PWM de faire tourner des
moteurs extrêmement lentement. Avoir, voilà pour vous
convaincre, le robot reçoit des impulsions
de 1 par rapport à 256, il accélère avec
10, et le mouvement est beaucoup plus régulier, et, dès que vous mettez
la vitesse maximum, naturellement, il part.
Bien.
Comment faire une routine PFM?
On va un petit peu s’inspirer de ce que
l’on a dit tout à l’heure mais notre escalier
n’aura pas des marches régulières, on va ajouter la
valeur « pfm » pour définir la hauteur des marches.
Donc si « pfm » est lent, vous aurez
quelque chose qui mettra longtemps à monter.
Si le « pfm » augmente, la rampe est plus grande, et
chaque fois que vous arrivez au maximum, de 255, mais vous pouvez très
bien définir d’autres valeurs, qui vont définir la résolution, dans le
fond, du « pfm », et bien vous remettez à 0 et vous recommencez.
Donc voilà,
on n’arrive pas à simuler ces cas parce on ne change pas de
valeur « pfm » sans arrêt, enfin, à chaque cycle, on exécute en général
plusieurs cycles puisqu’on a, ici, quelques
dixièmes, centièmes de secondes, mais si on
avait changé à chaque cycle, et bien, on verrait les impulsions qui se rapprochent.
Alors, il nous faut avoir une variable globale qui est
la valeur du « pfm », on va décider 200 comme premier
test, et on a choisi une valeur de 255 comme maximum.
On doit définir une variable locale
« int pfm » qui vaut 0. Donc là, je suis dans un programme.
Et puis maintenant, je peux définir la durée des
impulsions avec ce « DelPfm » que je fixe à 4 millisecondes.
J’aime pas tellement avoir des chiffres dans les programmes.
Et maintenant, je pars dans ma boucle de test, je fais mon délai de 4
millisecondes, j’incrémente le compteur de
la valeur du « pfm ». Je regarde
si cela dépasse 255, si oui, je
remets à 0, et là, il y a avantage à faire un « et logique
» plutôt que de forcer un 0, et dans ce cas-là, et bien, j’active l’impulsion
qui va, le coup suivant, être remise,
nécessairement à 0. Voilà la routine PFM, j’en
ai fait une procédure, j’ai appelé cette procédure
1000 fois avec la valeur 1 pour avoir le déplacement lent.
Et puis, ensuite, j’ai changé la valeur « pfm » et j’ai modifié
le nombre de fois, la durée, dans le fond, d’avance sur rebords, et j’aurais
très bien pu faire d’autres choses en même temps, surveiller
les moustaches, par exemple, et agir et modifier la vitesse.
Bien, deux mots à propos du PPM que vous trouvez dans les cerveaux de télécommande.
« Pulse Position Modulation », en fait ce terme de position
se réfère à la possibilité d’avoir d’autres cerveaux qui vont se superposer
dans cette trame de 20 millisecondes. Et puis la position de ces impulsions
supplémentaires, va permettre de transmettre l’information.
Alors au niveau de chaque impulsion, vous savez que vous avez une impulsion entre 1
et 2 millisecondes, que la période de répétition est autour de 20 millisecondes.
Et maintenant, c’est trivial
de programmer, d’ajuster votre durée
d’impulsion aux angles qui vous intéressent.
Alors, j’ai dit que c’est délicat à programmer parce que, en fait, si, là,
vous êtes dans une procédure bloquante, ce que je viens d’évoquer, et puis,
évidemment, si vous voulez maintenant avoir plusieurs cerveaux,
faire une procédure dans laquelle vous répétez pour chaque
cerveau, une précision de, mettons, 10 microsecondes pour avoir
1 degré de précision, c’est relativement délicat à programmer,
surtout si vous voulez faire d’autres choses en parallèle.
Alors, il existe une librairie « Arduino » qui
utilise le « timer 1 », donc, je n’ai pas
testé mais je pense que ça ne vaut pas
la peine d'essayer de faire mieux pour commander plusieurs cerveaux.
Bien, alors voilà, nous avons un petit peu parlé de
PWM, de PFM, mis en évidence la différence, un petit
mieux compris ce qu’on peut faire avec des moteurs, et
puis, mentionné les cerveaux qui sont tellement faciles à utiliser,
qu’il n’y a pas grand-chose à en dire.