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.