[ Arduino 601] Le moteur à courant continu

Nul doute que vous connaissez l’existence des moteurs car il en existe toute une panoplie ! Le premier qui vous viendra certainement à l’esprit sera le moteur de voiture, ou peut-être celui présent dans une perceuse électrique. Voilà deux exemples d’objets dans lesquels on peut trouver un moteur. Bien entendu, ces deux moteurs sont de type différent, il serait en effet peu probable de faire avancer votre voiture avec un moteur de perceuse électrique… et puis l’utilisation d’une perceuse intégrant un moteur de voiture de plusieurs centaines de kilos serait fastidieuse 😛 . Voyons donc comment fonctionne le moteur électrique le plus répandu : le moteur à courant continu…

Un moteur, ça fait quoi au juste ?

Commençons en douceur par l’explication de ce à quoi sert un moteur et son fonctionnement.

Ce chapitre n’est pas un des plus simples car il va faire apparaître des notions de mécanique qui sont indispensables pour comprendre le mouvement. Il prend en général plusieurs heures de cours pour être bien expliqué. Nous allons donc vous faire ici uniquement une introduction à la mécanique du moteur. Cependant, cette introduction présente des notions très importantes pour bien comprendre la suite, ne la négligez donc pas !

Prenons un moteur électrique des plus basiques qui soient :

Un moteur classique à courant continu

Vous avez devant vos yeux un moteur électrique tel que l’on peut en trouver dans les engins de modélisme ou dans les voitures téléguidées. Mais sachez qu’il en existe de toute sorte, allant du miniature au gigantesque, adaptés à d’autres types d’applications. Nous nous contenterons ici des moteurs électriques « basiques ».

Transformation de l’énergie électrique en énergie mécanique

Un moteur ça fait quoi ? Ça tourne ! On dit qu’un moteur est un composant de conversion d’énergie électrique en énergie mécanique. Les moteurs à courant continu (ce terme deviendra plus clair par la suite) transforment l’énergie électrique en énergie mécanique de rotation, pour être précis. Mais ils peuvent également servir de générateur d’électricité en convertissant une énergie mécanique de rotation en énergie électrique. C’est le cas par exemple de la dynamo sur votre vélo !

Ce dernier point n’est pas à négliger, car même si dans la plupart des applications votre moteur servira à générer un mouvement, il sera possible qu’il soit actionné « à l’envers » et génère alors du courant. Il faudra donc protéger votre circuit pour ne pas l’abîmer à cause de cette « injection » d’énergie non désirée. On va revenir dessus plus loin. 😉

Principe de fonctionnement du moteur à courant continu

Du vocabulaire

Éclaté d'un MCC

Tout d’abord, nous allons prendre une bonne habitude. Le moteur à courant continu s’appelle aussi « Machine à Courant Continu », que j’abrégerais en MCC. Le moteur à courant continu est composé de deux parties principales : le rotor (partie qui tourne) et le stator (partie qui ne tourne pas, statique). En électrotechnique le stator s’appelle aussi inducteur et le rotor s’appelle l’induit. Sur l’image à droite, vous pouvez observer au milieu – entouré par les aimants bleu et rouge qui constituent le stator – le rotor composé de fils de cuivre enroulés sur un support lui même monté sur un axe. Cet axe, c’est l’arbre de sortie du moteur. C’est lui qui va transmettre le mouvement à l’ensemble mécanique (pignons, chaîne, actionneur…) qui lui est associé en aval. Dans le cas d’un robot sur roues par exemple, on va mettre la roue sur cet axe, bien souvent par l’intermédiaire d’un réducteur qui diminue la vitesse de rotation tout en augmentant le couple. On verra tout à l’heure pour éclaircir ces termes qui doivent, pour l’instant, ne pas vous dire grand chose.

De nouvelles bases sur l’électricité

Vous le savez peut-être, lorsque un courant circule dans un fil il génère un champ magnétique. Plus le courant qui circulera dans le fil sera grand, plus l’intensité du champs magnétique sera élevée. Lorsqu’on enroule du fil électrique sur lui même, on forme une bobine. Un des avantages de la bobine est que l’on « cumule » ce champ magnétique. Donc plus on a de tours de fil (des spires) et plus le champ magnétique sera élevé pour un courant donné.

bobine de cuivre - champ magnétique généré représenté par les lignes bleues

En somme, on retiendra que lorsque l’on crée une bobine de fil électrique, en général du cuivre, on additionne les champs magnétiques créés par chaque spire de la bobine. Ainsi, vous comprendrez aisément que plus la bobine contient de spires et plus le champ magnétique qu’elle induit est important. Je ne vous ai pas trop perdu, ça va pour le moment ? 🙂 Bon, continuons.

Le magnétisme

Oui, parlons-en. Ce sera bref, rassurez-vous. Je vais faire appel à votre expérience… avec les aimants. Vous avez tous déjà eu l’occasion d’avoir deux aimants dans la main et d’observer la résistance qu’ils émettent lorsque l’on veut les rapprocher l’un de l’autre, ou au contraire lorsqu’ils s’attirent soudainement dès qu’on les met un peu trop près. Ce phénomène est dû au champ magnétique que génèrent les aimants. Voilà un aimant permanent le plus simple soit-il :


Aimant permanent

Il possède un pôle Nord et un pôle Sud. Cet aimant génère un champ magnétique permanent, c’est à dire que le champ magnétique est toujours présent. C’est quelque chose de totalement invisible mais qui permet de faire des choses intéressantes.


Champ magnétique généré par un aimant permanent

Notez bien que j’ai ajouté des flèches représentatives du sens de parcours du champ magnétique, c’est important pour la suite. Bon, pour terminer mon explication sur le champ magnétique, je vous propose d’imaginer qu’il s’agisse d’un flux invisible, un peu comme le courant. Pour se rapprocher de l’analogie avec l’eau, on peut imaginer aussi que l’aimant est une fontaine qui propulse de l’eau (champ magnétique) et qui la récupère à l’opposé de là où il l’a éjectée. Tout ça, pour en arriver à vous dire qu’approcher deux aimants avec le même pôle, ils se repoussent mutuellement (les deux fontaines éjectent de l’eau l’une contre l’autre, ce qui a pour effet de les repousser). Et on le comprend bien lorsque l’on regarde le sens du champ magnétique :


Deux aimants permanents qui se repoussent mutuellement car leur champ magnétique est opposé

En revanche, deux aimants orientés dans le même sens se rapprocheront car leur champ magnétique ira dans le sens opposé. La première « fontaine » va aspirer ce que l’autre éjecte, et l’autre va aspirer ce que la première éjecte.


Résultat de la mise en « série » de deux aimants permanents identiques

Par conséquent, le champ magnétique global sera plus intense. On peut alors schématiser le résultat sous la forme d’un seul aimant plus puissant.


Schématisation du résultat précédent

Ça nous amène où tout ça ? Je comprends mieux comment fonctionne les aimants, mais pour un moteur électrique, c’est pareil ? 🙄

Eh oui, sans quoi mes explications n’auraient eu aucun sens si je vous avais dit qu’un moteur fonctionnait complètement différemment. 😛 Décomposons notre explication en deux parties.

Le stator

Le stator, je l’ai dit au début, est une partie immobile du moteur. Sur l’image, il se trouve sur les côtés contre le châssis. Il forme un aimant avec ses pôles Nord et Sud. Cet ensemble aimant+châssis constitue donc le stator :


Stator d’une MCC

Il n’y a pas plus de choses à dire, l’essentiel du phénomène de rotation créé par un moteur électrique va se jouer dans le rotor.

Le rotor et la mise en mouvement

Le rotor, je le rappelle, est situé au centre du stator. Pour faire très simple, je vous donnerai les explications ensuite, le rotor est la pièce maîtresse qui va recevoir un courant continu et va induire un champ magnétique variable pour mettre en rotation l’arbre du rotor. Si l’on veut, oui, il s’auto-met en rotation. 🙄

Waaho ! Avec du courant continu il arrive à créer un champ magnétique variable ? o_O

Surprenant n’est-ce pas ? Eh bien, pour comprendre ce qu’il se passe, je vous propose de regarder comment est constitué un rotor de MCC (j’abrège) :

Il s’agit bien d’un schéma de principe, normalement un moteur à courant continu est constitué de trois bobines sur son rotor. Autrement on pourrait obtenir un équilibre qui empêcherait la rotation de l’arbre du moteur, mais surtout le moteur tournerait dans un sens aléatoire. Ce qui n’est pas très adapté quand on veut faire avancer son robot. :mrgreen:

Voilà donc le rotor de notre moteur. Bien, passons à la prati…

Eh oh, attends !! 😯 C’est quoi ces deux bobines, comment on les alimente ? o_O

Ha, j’oubliais presque ! Merci de me l’avoir rappelé. Il y a en effet un élément dont nous n’avons pas encore évoqué l’existence, il s’agit du collecteur. Comme son nom le suggère, c’est un élément du moteur qui se situe sur l’arbre de rotation (ou l’axe du moteur si vous préférez) et qui a pour objectif de récupérer le courant afin de l’amener jusqu’aux bobines. On peut faire le schéma complet du moteur avec les bobines et le collecteur :

Dites-vous bien qu’il ne s’agit là que d’un schéma de principe simplifié, car je le disais, les moteurs n’ayant que deux bobines n’existent pas.

Le collecteur est représenté ici sur la partie droite de l’image. Il est situé sur l’arbre du moteur (son axe). Ce collecteur est constitué de deux pastilles métalliques auxquelles sont reliées les extrémités des bobines. Le contact électrique entre la pile qui alimente le moteur et les bobines se fait par le collecteur et par des éléments « spéciaux » que l’on appelle les charbons. Ces deux éléments servent à amener le courant dans les bobines en faisant un simple contact électrique de toucher. C’est à dire que les charbons frottent sur les pastilles métalliques lorsque le moteur tourne.

Et y tourne comment ce moteur, on le saura un jour ? 😡

Ça vient, patience. :mrgreen: Prenons la configuration du moteur tel qu’il est sur l’image précédente. Faites bien attention au sens des bobines, car si elles sont bobinées dans un sens opposé ou bien si le courant circule dans un sens opposé, le moteur ne tournera pas. J’ai donc pris le soin de mettre un point bleu et rouge, pour indiquer le sens des bobines (vous allez comprendre). Nous y voilà. 😉 Sur le schéma précédent, le pôle positif de la pile est relié, via le collecteur, à l’entrée bleue des deux bobines. Leur sortie, en rouge, est donc reliée, toujours via le collecteur, à la borne négative de la pile. Vous admettrez donc, avec ce que l’on a vu plus haut, qu’il y a un courant qui parcourt chaque bobine et que cela génère un champ magnétique. Ce champ est orienté selon le sens du courant qui circule dans la bobine. Dans un premier temps, on va se retrouver avec un champ magnétique tel que celui-ci :

Ce champ va être opposé aux deux aimants permanents du stator du moteur, cela va donc mettre en mouvement l’axe du rotor. Et ce mouvement est défini par le fait que deux aimants orientés par leurs pôles opposés (face nord de l’un face au nord du deuxième, idem pour le sud) se repoussent. Par conséquent, l’axe du moteur, je le disais, va se mettre à tourner jusqu’à ce que les aimants permanents du stator se retrouvent face à chacun de leur complément créé par le champ magnétique des bobines :

ATTENDEEEEZ ! Ce n’est pas fini ! Non, car dans cette configuration, si rien ne se passe, eh bien… rien ne se passera. :mrgreen: Et oui, puisque le moteur est arrivé dans une phase de stabilité. En effet, chaque aimant est face au champ magnétique opposé, donc ils s’attirent mutuellement ce qui a pour effet de régir cette situation d’équilibre. L’élément qui va s’opposer à cet équilibre est le branchement des bobines du rotor. Vous ne l’avez peut-être pas remarqué, mais les bobines ne sont plus connectées comme à la situation précédente. Le point rouge des bobines est maintenant relié au pôle positif de la pile et le point bleu au pôle négatif. Le champ magnétique généré par les bobines change alors d’orientation et l’on se retrouve avec des champs opposés. Le moteur est à nouveau en situation de déséquilibre (car les champs magnétiques se repoussent) et cela entraîne un mouvement de rotation de l’axe du moteur. Vous l’aurez compris, ces situations se répètent indéfiniment car le moteur n’est jamais dans une configuration équilibrée. C’est cette situation de déséquilibre qui fait que le moteur tourne.

Alors attention, je le répète une dernière fois, un moteur n’ayant que deux bobines comme sur mes schémas ne peut pas fonctionner, car c’est un modèle simplifié qui engendrerait immédiatement une situation équilibrée à la mise sous tension.

Pour vous prouver que ce que je dis est vrai, voilà des photos du rotor d’un moteur à courant continu que j’avais démonté il y a bien, bieen, bieeeeeen longtemps : :mrgreen:


Vous voyez ? Trois bobines et trois pastilles reliées à chacune, sur le collecteur. Bon, je ne vous refais pas les explications, vous êtes capables de comprendre comment cela fonctionne. 😉

La mécanique liée au moteur

A présent, nous allons détailler quelques notions de mécanique liées aux moteurs.

Le couple

Le couple est une notion un peu dure à comprendre, mais on va y arriver ! Partons de son unité. L’unité du couple est le Newton-Mètre (Nm), attention j’ai bien dit Newton-Mètre et non pas Newton par mètre ! Cette unité nous informe de deux choses : le couple est à la fois lié à une distance (le mètre) mais aussi à une force (le Newton). Maintenant je rajoute une information : le couple s’exprime par rapport à un axe. On peut en conclure que le couple est la capacité du moteur à faire tourner quelque chose sur son axe. Plus le couple est élevé et plus le moteur sera capable de mettre en mouvement quelque chose de lourd. Exemple : Vous avez peut-être déjà essayé de dévisser un écrou sur une roue de voiture. Vous avez probablement remarqué que plus vous avez une clef avec un bras long (un effet de levier important) et plus il était facile de faire bouger l’écrou (pour le premier tour, quand il est bien vissé/coincé). Ce phénomène s’explique simplement par le fait que vous avez plus de couple avec un levier long qu’avec un levier court. Et c’est logique ! Si l’on considère que le couple s’exprime en Newton-mètre, le Newton se sera la force de vos muscles (considérée fixe dans notre cas d’étude, sauf si vous vous appelez Hulk) et le mètre sera la longueur du levier. Plus votre levier est grand, plus la distance est élevée, et plus le couple augmente. Ce qui nous permet d’introduire la formule suivante :

\(C = F \times r\)

Avec :

  • \(C\) : le couple, en Newton-mètre
  • \(F\) : la force exercée, en Newton
  • \(r\) : le rayon de l’action (la longueur du levier si vous préférez), en mètre

On pourra également se souvenir que plus la force exercée sur l’axe de rotation d’un moteur est grande, plus il faudra un couple élevé. Et plus le couple du moteur sera élevé, moins votre futur robot aura de difficultés à supporter de lourdes charges. Cela dit, tout n’est pas parfait car plus la charge est lourde, plus la consommation électrique du moteur va augmenter. On va voir la relation qui recoupe ces deux informations.

Dans le système international, l’expression du couple se fait en N.m (Newton mètre), mais le commun des mortels arrive mieux à interpréter des kilos plutôt que des Newtons, donc les constructeurs prennent des raccourcis. Pour passer des Newtons en kilos, il suffit simplement de les multiplier par la constante gravitationnelle ‘g’ (qui vaut environ 9.81). Soit \(9.81 N \simeq 1 kg\). Il en équivaut alors la même formule introduisant les mètres : \(9.81 N.m = 1 kg.m\).

La vitesse de rotation

La vitesse de rotation est mesurée par rapport à l’axe de rotation du moteur. Imaginons que le moteur entraîne son axe, lorsqu’il est alimenté par un courant, ce dernier va avoir une vitesse de rotation. Il peut tourner lentement ou rapidement. On mesure une vitesse de rotation en mesurant l’angle en radians parcourus par cet axe pendant une seconde. C’est à dire que le moteur est en fonctionnement, que son axe tourne et que l’on mesure jusqu’où va l’axe de rotation, à partir d’un point de départ fixe, en une seconde. Regardez plutôt l’image suivante pour mieux visualiser ce que je veux vous dire (Comprenez que le truc gris et rond c’est le moteur que j’ai dessiné. 🙄 On le voit de face et le cercle au milieu c’est son axe) :

Marquage de l’axe du moteur par un point jaune (gauche). Au bout d’une seconde (droite), mesure de l’angle \(\alpha\) entre la position de départ et d’arrivée du point jaune. On obtient alors la vitesse de rotation de l’axe du moteur. Cette mesure est exprimée en angle par seconde.

Savez-vous pourquoi l’on mesure ainsi la vitesse de rotation de l’axe du moteur ? Eh bien car cette mesure est indépendante du diamètre de cet axe. Et oui, car un point éloigné du centre de l’axe du moteur a une distance beaucoup plus grande à parcourir que son homologue proche du centre de l’axe. Du coup, pour aller parcourir une distance plus grande en un temps donné il est obligé d’aller plus vite :

En prenant la mesure à partir d’un point de départ fixe, la distance parcourue par le point jaune et vert est nulle (gauche). En faisant tourner l’axe du moteur pendant une seconde, on s’aperçoit que la distance parcourue par chaque point est différente (droite). La distance parcourue par le point vert est quasiment 20 fois plus grande que celle parcourue par le point jaune ! Et c’est pourquoi le point vert aura été plus rapide que le point jaune car la distance qu’il parcourt en un même temps est beaucoup plus grande.

En mécanique, comme on aime les choses marrantes on exprime la vitesse de rotation en radians par seconde \(rad/s\) et son symbole est le caractère grec \(\omega\), prononcez ‘oméga’. Pour rappel, 360 est aux degrés ce que 2 pi est aux radians (autrement dit, une vitesse de 2pi/secondes équivaut à dire « l’axe fait un tour par seconde »). Cela se traduit par \(360\)°\(= 2\pi\) radian. Malheureusement, la vitesse de rotation angulaire n’est pas donnée avec les caractéristiques du moteur. En revanche, on trouve une vitesse en tour/minutes (\(tr/mn\)). Vous allez voir que pour passer de cette unité aux rad/s, c’est assez facile. En effet, on sait qu’un tour correspond à une rotation de l’axe sur 360°. Soit 1tr = 360°. Et dans une minute il y a 60 secondes. Donc l’axe tourne \(\frac 1 {60}\) de tour par seconde, s’il fait un tour par minute. On peut alors établir la relation suivante :

\(1 tr/mn = 360 \times \frac 1 {60} = 6 {^{\circ}}/s\)

Hors, on sait que \(360 {^{\circ}} = 2\pi rad\), ce qui donne une nouvelle relation :

\(1 tr/mn = 2\pi \times \frac 1 {60} = \frac \pi {30} rad/s\)

On peut finalement donner la formule qui convertit un radian par seconde en tours par minutes :

\(1 rad/s = \frac 1 {\frac \pi {30}} = \frac {30} {\pi} \approx 9,55 tr/mn\)

Et je fais comment si je veux savoir à quelle vitesse ira mon robot ?

Eh bien comme je vous l’expliquais précédemment, pour répondre à cette question il faut connaitre le diamètre de la roue. Prenons l’exemple d’une roue ayant 5cm de diamètre (soit 0.05 mètres) et un moteur qui tourne à 20 rad/s. Le périmètre de la roue vaut donc 15.7 cm (0.157 m) d’après la formule du périmètre d’un cercle qui est \(P = 2 \times \pi \times r\), avec \(r\) le rayon du cercle. Cela signifie qu’en faisant tourner la roue sur une surface plane et en lui faisant faire un tour sur elle-même, la roue aura parcouru 0,157m sur cette surface. On admet que le moteur tourne à 20 rad/s ce qui représente donc 3.18 tours de l’axe du moteur par seconde (d’après la dernière formule que je vous ai donnée). On peut donc calculer la distance parcourue en une seconde grâce à la formule :

\(V = \frac d t\)

Avec :

  • \(V\) : la vitesse en mètre par seconde (m/s)
  • \(d\) : la distance en mètre (m)
  • \(t\) : le temps en secondes (s)

On va donc adapter cette formule avec la distance qu’a parcouru la roue en faisant un tour sur elle-même (\(d_{roue}\)) et le nombre de tours par seconde de l’axe du moteur (\(t_{tour}\)) : \(V = \frac{d_{roue}}{t_{tour}}\) On sait que \(d_{roue} = 0.157m\) et que \(t_{tour} = 3,18trs/s = \frac 1 {3,18} trs.s\) \(V = \frac {0,157} {\frac 1 {3,18}} = 0,157 \times 3,18\) \(V = 0,5 m/s\) Le robot parcourt donc une distance de 50 centimètres en une seconde (ce qui équivaut à 1800 mètres par heure). Vous avez maintenant toutes les cartes en main pour pouvoir faire avancer votre robot à la vitesse que vous voulez !

Les réducteurs

Un moteur électrique est bien souvent très rapide en rotation. Hors si vous avez besoin de faire un robot qui ne va pas trop vite, il va falloir faire en sorte de réduire sa vitesse de rotation. On peut très bien mettre un « frein » qui va empêcher le moteur de tourner vite, ou bien le piloter (on va voir ça toute à l’heure). Cela dit, même si on réduit sa vitesse de rotation, le moteur ne va pas pouvoir supporter des charges lourdes. Autrement dit, votre robot ne pourra même pas se supporter lui-même ! Nous avons donc besoin de couple. Et pour avoir du couple, tout en réduisant la vitesse de rotation, on va utiliser ce que l’on appelle un réducteur. Un réducteur est un ensemble composé d’engrenages qui permet de réduire la vitesse de rotation de l’axe du moteur tout en augmentant le couple de sortie. Sur l’image suivante, extraite du site de l’Académie d’Aix Marseille, on peut observer un ensemble moteur + réducteur + roue :

La règle qui régit son fonctionnement indique qu’entre deux engrenages la puissance est conservée (aux pertes près qui sont dues au frottement des engrenages entre eux). Et comme la puissance mécanique est dépendante du couple et de la vitesse (partie suivante), on peut facilement passer de l’un à l’autre. Reprenons notre roue faisant 5cm de diamètre. Mettez en contact contre elle une grande roue de 10cm de diamètre (deux fois plus grande). Lorsque la petite roue fait un tour, elle va entrainer la deuxième roue plus grande qui va faire… un demi-tour. Oui car le périmètre de la grande roue est deux fois plus grand que celui de la petite. Lorsque la petite parcourt 0,157m en faisant un tour sur elle-même, la grande parcourt elle aussi cette distance mais en ne faisant qu’un demi-tour sur elle-même.

Deux roues en contact, la petite entraine la grande dont le diamètre est deux fois plus grand que la petite (gauche). Le point vert et jaune sert à repérer la rotation de chaque roue. Lorsque la petite roue fait un demi tour, la grande roue fait un quart de tour (droite). Si elle fait un tour complet, la grande roue ne fera qu’un demi-tour.
Ce que l’on ne voit pas sur mon dessin, c’est le couple. Hors, ce que vous ne savez peut-être pas, c’est que l’axe de la grande roue bénéficie en fait de deux fois plus de couple que celui de la petite. Car les réducteurs ont pour propriété, je le disais, de modifier le couple de sortie et la vitesse. Et ce selon la relation suivante qui donne le rapport de réduction :

\(R = \frac{\omega_{entree}}{\omega_{sortie}} = \frac{C_{sortie}}{C_{entree}}\)

Avec :

  • \(R\) : le rapport de réduction du réducteur
  • \(\omega_{entree}\) : la vitesse de rotation de l’axe du moteur en entrée du réducteur
  • \(\omega_{sortie}\) : la vitesse de rotation de l’axe du moteur en sortie du réducteur
  • \(C_{sortie}\) : couple exercé par l’axe de sortie du réducteur
  • \(C_{entree}\) : couple exercé par l’axe du moteur, en entrée du réducteur

Un réducteur s’apparente donc à un système qui modifie deux grandeurs qui sont liées : le couple et la vitesse. On peut schématiser le fonctionnement d’un réducteur de la manière suivante :

C’est quoi ça, les pertes mécaniques ? 🙄

Justement, venons-en à un autre point que je voudrais aborder.

La puissance et le rendement

Dans un moteur, on trouve deux puissances distinctes :

  • La première est la puissance électrique. Elle représente la quantité d’énergie électrique dépensée pour faire tourner l’axe du moteur. Elle représente aussi la quantité d’énergie électrique induite lorsque le moteur tourne en générateur, c’est à dire que le moteur transforme une énergie mécanique de rotation en une énergie électrique. Elle se calcule simplement à partir de la formule suivante :
    Puissance = Tension x Courant
    \(P_{elec} = U \times I\)

    Selon les conventions, la tension est exprimée en Volt et le courant en Ampère. Quant à la puissance, elle est exprimée en Watt (W).

  • La seconde est la puissance mécanique. Elle correspond au couple du moteur multiplié par sa vitesse angulaire :
    \(P_{meca} = C \times \omega\)

    Le couple doit être exprimé en Newton-Mètre (Nm) et la vitesse en radians par seconde (rad/s). Pour la puissance mécanique, il s’agit encore de Watt.

Une puissance (mécanique ou électrique) s’exprime habituellement en Watts (symbole W). On retrouve cependant d’autres unités telle que le Cheval Vapeur (CV), avec 1 CV qui vaut (arrondi) 735,5 W.

Mais comme dans tout système, la perfection n’existe pas, on va voir la différence qu’il y a entre la puissance mécanique et électrique, alors que à priori elles devraient être équivalentes. Lorsque le moteur est en fonctionnement, il génère des pertes. Ces pertes sont dues à différents phénomènes électriques ou thermiques (échauffement) ou tels que les frottements mécaniques (air, pièces en contact, magnétique). Il y a donc une différence entre la puissance (électrique) en entrée du moteur et la puissance (mécanique) en sa sortie. Cette différence s’exprime avec la notion de rendement. Le rendement est une caractéristique intrinsèque à chaque moteur et permet de définir l’écart entre la puissance d’entrée du moteur et sa puissance de sortie. Il s’exprime sans unité. Il permet également de savoir quel est le pourcentage de pertes provoquées par le moteur. Le rendement se note avec la lettre grecque eta (\(\eta\)) et se calcule grâce à la formule suivante :

\(\eta = \frac{P_{sortie}}{P_{entree}}\)

Dans le cas du moteur, on aurait alors les puissances électrique et mécanique telles quelles :

\(\eta = \frac{P_{meca}}{P_{elec}}\)

Et dans le cas où le moteur est utilisé en générateur électrique (on fait tourner l’axe à la main par exemple), la formule reste la même mais la place des puissances électrique et mécanique est inversée :

\(\eta = \frac{P_{elec}}{P_{meca}}\)

Attention, le rendement est une valeur sans unité, on peut en revanche l’exprimer sous forme de pourcentage.

Si l’on prend un exemple : un moteur de puissance électrique 100W, ayant une puissance mécanique de 84W aura un rendement de : \(\eta = \frac{P_{meca}}{P_{elec}}\) \(\eta = \frac{P_{84}}{P_{100}}\) \(\eta = 0,84\) Ce qui correspond à 84%. Sachez toutefois que le rendement ne pourra dépasser les 100% (ou 1), car il n’existe pas de systèmes capables de fournir plus d’énergie qu’ils n’en reçoivent. Cela dit, si un jour vous parvenez à en trouver un, vous pourrez devenir le Roi du Monde !! :Pirate:

Les moteurs électriques ont habituellement un bon rendement, entre 80% (0.8) et 95% (0.95). Cela signifie que pour 100W électriques injectés en entrée, on obtiendra en sortie 80 à 95W de puissance mécanique. Tandis qu’un moteur à explosion de voiture dépasse à peine les 30% de rendement !

Quelques relations

Une toute dernière chose avant de commencer la suite, il y a deux relations à connaitre vis-à-vis des moteurs.

Lien entre vitesse et tension

Dans un moteur CC, quelque soit sa taille et sa puissance, il faut savoir que la tension à ses bornes et la vitesse de sortie sont liées. Plus la tension sera élevée et plus la vitesse sera grande. Nous verrons cet aspect dans la prochaine partie. Faites attention à bien rester dans les plages de tension d’alimentation de votre moteur et ne pas les dépasser. Il pourrait griller ! En effet, vous pouvez dépasser de manière temporaire la tension maximale autorisée pour donner un coup de fouet à votre moteur, mais ne restez jamais dans une plage trop élevée ! Une deuxième conséquence de cette relation concerne le moment du démarrage du moteur. En effet, la relation entre tension et vitesse n’est pas tout à fait linéaire pour les tensions faibles, elle est plutôt « écrasée » à cet endroit. Du coup, cela signifie que le moteur n’arrivera pas à tourner pour une tension trop basse. C’est un peu comme si vous aviez une tension de seuil de démarrage. En dessous de cette tension, le moteur est à l’arrêt, et au dessus il tourne correctement avec une relation de type « 100 trs/min/volts » (autrement dit, le moteur tournera à 100 tours par minutes pour 1 volt, puis 200 tours par minutes pour 2 volts et etc etc… bien entendu le 100 est pris comme un exemple purement arbitraire, chaque moteur a sa caractéristique propre).

Lien entre courant et couple

Comme nous venons de le voir, la vitesse est une sorte d’image de la tension. Passons maintenant à une petite observation : Lorsque l’on freine l’axe du moteur, par exemple avec le doigt, on sent que le moteur insiste et essaye de repousser cette force exercée sur son axe. Cela est du au courant qui le traverse et qui augmente car le moteur, pour continuer de tourner à la même vitesse, doit fournir plus de couple. Hors, le couple et le courant sont liés : si l’un des deux augmente alors l’autre également. Autrement dit, pour avoir plus de couple le moteur consomme plus de courant. Si votre alimentation est en mesure de le fournir, il pourra éventuellement bouger, sinon, comme il ne peut pas consommer plus que ce qu’on lui donne, il restera bloqué et consommera le maximum de courant fourni.

Si vous faites circuler trop de courant dans un moteur pour trop longtemps, il va chauffer. Les moteurs sont des composants sans protection. Même s’ils chauffent ils ne feront rien pour s’arrêter, bien au contraire. Cela peut mener à une surchauffe et une destruction du moteur (les bobines à l’intérieur sont détruites). Attention donc à ne pas trop le faire forcer sur de longues périodes continues.

Alimenter un moteur

Bon, et si nous voyions un peu comment cela se passe dans la pratique ? Je vais vous montrer comment alimenter les moteurs électriques à courant continu. Vous allez voir que ce n’est pas aussi simple que ça en a l’air, du moins lorsque l’on veut faire quelque chose de propre. Vous allez comprendre de quoi je parle…

Connecter un moteur sur une source d’énergie : la pile

Faisons l’expérience la plus simple qui soit : celle de connecter un moteur aux bornes d’une pile de 9V :


C’est beau, ça tourne.

C’est tout ? o_O

Ben oui, quoi de plus ? Le moteur est connecté, son axe tourne, la pile débite du courant… Ha ! Voilà ce qui nous intéresse dans l’immédiat : la pile débite du courant. Oui et pas des moindres car les moteurs électriques sont bien généralement de véritables gloutons énergétiques. Si vous avez la chance de posséder un ampèremètre, vous pouvez mesurer le courant de consommation de votre moteur. En général, pour un petit moteur de lecteur CD on avoisine la centaine de milliampères. Pour un moteur un peu plus gros, tel qu’un moteur de modélisme, on trouve plusieurs centaines de milliampères de consommation. Pour des moteurs encore plus gros, on peut se retrouver avec des valeurs dépassant largement l’ampère voire la dizaine d’ampères. Revenons à notre moteur. Lui ne consomme pas plus de 100mA à vide. Mais pour une simple pile c’est beaucoup. Et je vous garantis qu’elle ne tiendra pas longtemps comme ça ! De plus, la vitesse n’est pas réglable, le moteur tourne toujours à son maximum (si c’est un moteur fait pour tourner à 9V). Enfin, pour allumer ou arrêter le moteur, vous êtes obligé de le connecter ou le déconnecter de la pile. En somme, utiliser un moteur dans cette configuration, par exemple pour faire avancer votre petit robot mobile, n’est pas la solution la plus adaptée.

Avec la carte Arduino

Vous vous doutez bien que l’on va utiliser la carte Arduino pour faire ce que je viens d’énoncer, à savoir commander le moteur à l’allumage et à l’extinction et faire varier sa vitesse.

Ne faites surtout pas le montage qui suit, je vous expliquerai pourquoi !

Admettons que l’on essaie de brancher le moteur sur une sortie de l’Arduino :

Avec le programme adéquat, le moteur va tourner à la vitesse que l’on souhaite, si l’on veut, réglable par potentiomètre et s’arrêter ou démarrer quand on le lui demande. C’est mieux. C’est la carte Arduino qui pilote le moteur. Malheureux ! Vous ne croyez tout de même pas que l’on va se contenter de faire ça ?! Non, oulaaaa. C’est hyper ultra dangereux… pour votre carte Arduino ! Il est en effet impensable de réaliser ce montage car les moteurs à courant continu sont de véritables sources de parasites qui pourraient endommager, au point de vue matériel, votre carte Arduino ! Oubliez donc tout de suite cette idée de connecter directement le moteur sur une sortie de votre Arduino. Les moteurs, quand ils tournent, génèrent tout un tas de parasites qui peuvent être des surtensions très grandes par rapport à leur tension d’alimentation. De plus, le courant qu’ils demandent est bien trop grand par rapport à ce que peut fournir une sortie numérique d’une carte Arduino (environ 40 mA). Ce sont deux bonnes raisons de ne pas faire le montage précédent.

Mais alors, on fait comment si on peut pas piloter un moteur avec notre carte Arduino ?

Je n’ai pas dis que l’on ne pouvait pas piloter un moteur avec une carte Arduino. J’ai bien précisé dans cette configuration. Autrement dit, il faut faire quelque chose de plus pour pouvoir mener à terme cet objectif.

Une question de puissance : le transistor

Souvenez-vous, nous avons parlé d’un composant qui pourrait convenir dans ce chapitre. Il s’agit du transistor. Si vous vous souvenez de ce que je vous avais expliqué, vous devriez comprendre pourquoi je vous en parle ici. Car, à priori, on ne veut pas allumer un afficheur 7 segments. :mrgreen: En fait, le transistor (bipolaire) est comme un interrupteur que l’on commande par un courant. Tout comme on avait fait avec les afficheurs 7 segments, on peut allumer, saturer ou bloquer un transistor pour qu’il laisse passer le courant ou non. Nous avions alors commandé chaque transistor pour allumer ou éteindre les afficheurs correspondants. Essayons de faire de même avec notre moteur :

Ici, le transistor est commandé par une sortie de la carte Arduino via la résistance sur la base. Lorsque l’état de la sortie est au niveau 0, le transistor est bloqué et le courant ne le traverse pas. Le moteur ne tourne pas. Lorsque la sortie vaut 1, le transistor est commandé et devient saturé, c’est-à-dire qu’il laisse passer le courant et le moteur se met à tourner. Le problème, c’est que tout n’est pas parfait et ce transistor cumule des inconvénients qu’il est bon de citer pour éviter d’avoir de mauvaises surprises :

  • parcouru par un grand courant, il chauffe et peut être amené à griller s’il n’est pas refroidi
  • il est en plus sensible aux parasites et risque d’être endommagé
  • enfin, il n’aime pas les « hautes » tensions

Pour répondre à ces trois contraintes, trois solutions. La première consisterait à mettre un transistor qui accepte un courant assez élevé par rapport à la consommation réelle du moteur, ou bien d’adjoindre un dissipateur sur le transistor pour qu’il refroidisse. La deuxième solution concernant les parasites serait de mettre un condensateur de filtrage. On en a déjà parlé avec les boutons poussoirs. Pour le dernier problème, on va voir que l’on a besoin d’une diode.

Le « bon » transistor

Comme je viens de vous l’expliquer, il nous faut un transistor comme « interface » de puissance. C’est lui qui nous sert d’interrupteur pour laisser passer ou non le courant. Pour l’instant, nous avons beaucoup parlé des transistors « bipolaires ». Ils sont sympas, pas chers, mais il y a un problème : ils ne sont pas vraiment faits pour faire de la commutation, mais plutôt pour faire de l’amplification de courant. Le courant qu’il laisse passer est proportionnel au courant traversant sa base. Pour les petits montages comme celui des 7 segments ce n’est pas vraiment un problème, car les courants sont faibles. Mais pour des montages avec un moteur, où les courants sont bien plus élevés, votre transistor bipolaire va commencer à consommer. On retrouvera jusqu’à plusieurs volts de perdus entre son émetteur et son collecteur, autant de volts qui ne profiteront pas à notre moteur.

Mais alors on fait comment pour pas perdre tout ça ?

Eh bien c’est facile ! On change de transistor ! L’électronique de puissance a donné naissance à d’autres transistors, bien plus optimaux pour les questions de fonctionnement à fort courant et en régime saturé/bloqué. Ce sont les transistors MOSFET (appelés aussi « transistor à effet de champ »). Leur symbole est le suivant :

Symbole du transistor MOSFET (canal N)

Il ressemble évidemment à un bipolaire, cela reste un transistor. Par contre il est fait pour faire de l’amplification de tension. Autrement dit, sa broche de commande (que l’on appelle « Gate ») doit recevoir une commande, une tension, donc plus besoin de résistance entre Arduino et le transistor. Son fonctionnement est simple : une différence de potentiel sur la gate et il commute (laisse passer le courant entre D (Drain) et S (Source)) sinon il bloque le courant. Facile non ? Un inconvénient cependant : ils coûtent plus chers que leurs homologues bipolaires (de un à plusieurs euros selon le modèle, le courant qu’il peut laisser passer et la tension qu’il peut bloquer). Mais en contrepartie, ils n’auront qu’une faible chute de tension lorsqu’ils laissent passer le courant pour le moteur, et ça ce n’est pas négligeable. Il existe deux types de MOSFET, le canal N et le canal P. Ils font la même chose, mais le comportement est inversé (quand un est passant l’autre est bloquant et vice versa). Voici un schéma d’exemple de branchement (avec une résistance de pull-down, comme ça si le signal n’est pas défini sur la broche Arduino, le transistor sera par défaut bloqué et donc le moteur ne tournera pas) :

Schéma simple de branchement

Protégeons l’ensemble : la diode de roue libre

Une diode, qu’est-ce que c’est ? Nous en avons déjà parlé à vrai dire, il s’agissait des diodes électroluminescentes (LED) mais le principe de fonctionnement reste le même sans la lumière. Une diode, dont voici le symbole :

…est un composant électronique qui ne laisse passer le courant que dans un sens (cf. ce chapitre). Vos souvenirs sont-ils à nouveau en place ? Alors, on continue ! Reprenons le schéma précédent avec le transistor piloté par l’Arduino et qui commande à son tour le moteur. Saturons le transistor en lui appliquant une tension sur sa base. Le moteur commence à tourner puis parvient à sa vitesse de rotation maximale. Il tourne, il tourne et là… je décide de couper l’alimentation du moteur en bloquant le transistor. Soit. Que va-t-il se passer ?

Le moteur va continuer de tourner à cause de son inertie !

Très bien. Et que cela va t-il engendrer ? Une tension aux bornes du moteur. En effet, je l’ai dit plus tôt, un moteur est aussi un générateur électrique car il est capable de convertir de l’énergie mécanique en énergie électrique même si son rôle principal est de faire l’inverse. Et cette tension est très dangereuse pour le transistor, d’autant plus qu’elle est très haute et peut atteindre plusieurs centaines de Volts (phénomène physique lié aux bobines internes du moteur qui vont se charger). En fait, le moteur va générer une tension à ses bornes et un courant, mais comme le transistor bloque la route au courant, cette tension ne peut pas rester la même et est obligée d’augmenter pour conserver la relation de la loi d’Ohm. Le moteur arrive à un phénomène de charge. Il va, précisément, se charger en tension. Je ne m’étends pas plus sur le sujet, il y a bien d’autres informations plus complètes que vous pourrez trouver sur internet. La question : comment faire pour que le moteur se décharge et n’atteigne pas des tensions de plusieurs centaines de Volts à ses bornes (ce qui forcerait alors le passage au travers du transistor et détruirait ce dernier) ? La réponse : par l’utilisation d’une diode. Vous vous en doutiez, n’est-ce pas ? 😉 Il est assez simple de comprendre comment on va utiliser cette diode, je vous donne le schéma. Les explications le suivent :

Reprenons au moment où le moteur tourne. Plus de courant ne circule dans le transistor et la seule raison pour laquelle le moteur continue de tourner est qu’il possède une inertie mécanique. Il génère donc cette fameuse tension qui est orientée vers l’entrée du transistor. Comme le transistor est bloqué, le courant en sortie du moteur va donc aller traverser la diode pour revenir dans le moteur. C’est bien, car la tension induite (celle qui est générée par le moteur) restera proche de la tension d’alimentation du moteur et n’ira pas virevolter au voisinage des centaines de Volts. Mais ça ne s’arrête pas là. Pour ceux qui l’auraient remarqué, la tension induite par le moteur est opposée à celle que fournit l’alimentation de ce dernier. Or, étant donné que maintenant on fait un bouclage de la tension induite sur son entrée (vous me suivez toujours ?), eh bien cela alimente le moteur. Les deux tensions s’opposent et cela a pour effet de ralentir le moteur. La diode de roue libre, c’est comme ça qu’on l’appelle, sert donc à deux choses : d’une part elle protège le transistor de la surtension induite par le moteur, d’autre part elle permet au moteur de « s’auto-freiner ».

Et on met quoi comme diode ? o_O

Excellente question, j’allais presque oublier ! La diode que nous mettrons sera une diode Schottky. Ne vous laissez pas impressionner par ce nom barbare qui signifie simplement que la diode est capable de basculer (passer de l’état bloquant à passant) de manière très rapide. Dès lors qu’il y a une surtension engendrée par le moteur lorsque l’on le coupe de l’alimentation, la diode va l’absorber aussitôt avant que le transistor ait le temps d’avoir des dommages. On pourra également rajouter aux bornes de la diode un condensateur de déparasitage pour protéger le transistor et la diode contre les parasites. Au final, le schéma ressemble à ça :

Schéma du montage complet du moteur CC
Montage complet du moteur CC

Sa valeur devra être comprise entre 1nF et 100nF environ. Le but étant de supprimer les petits parasites (pics de tension). Bon, nous allons pouvoir attaquer les choses sérieuses ! :Pirate:

Piloter un moteur

Les montages de cette partie sont importants à connaître. Vous n’êtes pas obligé de les mettre en œuvre, mais si vous le voulez (et en avez les moyens), vous le pouvez. Je dis ça car la partie suivante vous montrera l’existence de shields dédiés aux moteurs à courant continu, vous évitant ainsi quelques maux de têtes pour la réalisation des schémas de cette page. :mrgreen:

Faire varier la vitesse : la PWM

Maintenant que nous avons les bases fondamentales pour faire tourner notre moteur sans tout faire griller ( 🙄 ), nous allons pouvoir acquérir d’autres connaissances. À commencer par quelque chose de facile : le réglage de la vitesse de rotation du moteur. Comme nous l’expliquions dans le premier morceau de ce chapitre, un moteur à courant continu possède une relation directe entre sa tension d’alimentation et sa vitesse de rotation. En effet, plus la tension à ses bornes est élevée et plus son axe tournera rapidement (dans la limite de ses caractéristiques évidemment). Cependant le microcontrôleur d’Arduino n’est capable de produire que des tensions de 0 ou 5V. En revanche, il peut « simuler » des tensions variables comprises entre 0 et 5V. Encore un petit rappel de cours nécessaire sur la PWM que nous avons déjà rencontrée ici pour vous rafraichir la mémoire. Nous sommes en mesure de produire à l’aide de notre microcontrôleur un signal carré dont le rapport cyclique est variable. Et grâce à cela, nous obtenons une tension moyenne (comprise entre 0 et 5V) en sortie de la carte Arduino. Il faut juste bien penser à utiliser les sorties adéquates, à savoir : 3, 5, 6, 9, 10 ou 11 (sur une duemilanove/UNO). Je résume : en utilisant la PWM, on va générer une tension par impulsions plus ou moins grandes. Ce signal va commander le transistor qui va à son tour commander le moteur. Le moteur va donc être alimenté par intermittences à cause des impulsions de la PWM. Ce qui aura pour effet de modifier la vitesse de rotation du moteur.

Mais, si le moteur est coupé par intermittences, il va être en rotation, puis va s’arrêter, puis va recommencer, etc. Ce sera pas beau et ça ne tournera pas moins vite. Je comprends pas trop ton histoire. o_O

Non, puisque le moteur garde une inertie de rotation et comme la PWM est un signal qui va trop vite pour que le moteur ait le temps de s’arrêter puis de redémarrer, on va ne voir qu’un moteur qui tourne à une vitesse réduite. Finalement, nous allons donc pouvoir modifier la vitesse de rotation de notre moteur en modifiant le rapport cyclique de la PWM. Plus il est faible (un état BAS plus long qu’un état HAUT), plus le moteur ira doucement. Inversement, plus le rapport cyclique sera élevé (état HAUT plus long que l’état BAS), plus le moteur ira vite. Tout cela couplé à un transistor pour faire passer de la puissance (et utiliser la tension d’utilisation adaptée au moteur) et nous pouvons faire tourner le moteur à la vitesse que nous voulons. Génial non ? Pour l’instant je ne vous ferai pas de démo (vous pouvez facilement imaginer le résultat), mais cela arrivera très prochainement lors de l’utilisation de l’Arduino dans la prochaine sous-partie. Le montage va être le même que tout à l’heure avec le « nouveau » transistor et sa résistance de base :

Schéma du montage complet du moteur CC
Montage complet du moteur CC

Maintenant que le moteur tourne à une vitesse réglable, il pourra être intéressant de le faire tourner aussi dans l’autre sens (si jamais on veut faire une marche arrière, par exemple, sur votre robot), voire même d’être capable de freiner le moteur. C’est ce que nous allons tout de suite étudier dans le morceau suivant en parlant d’un composant très fréquent dans le monde de la robotique : le pont en H.

Tourner dans les deux sens : le pont en H

Faire tourner un moteur c’est bien. Tourner à la bonne vitesse c’est mieux. Aller dans les deux sens c’est l’idéal. C’est donc ce que nous allons maintenant chercher à faire !

Découverte du pont en H

Tout d’abord une question très simple : pourquoi le moteur tourne dans un seul sens ? Réponse évidente : parce que le courant ne va que dans un seul sens ! Pour pouvoir aller vers l’avant ET vers l’arrière il nous faut donc un dispositif qui serait capable de faire passer le courant dans le moteur dans un sens ou dans l’autre. Vous pouvez faire l’expérience en reprenant le premier montage de ce chapitre où il n’y avait que le moteur connecté sur une pile de 9V. Essayez d’inverser les deux bornes du moteur (ça ne risque rien 😉 ) pour observer ce qu’il se passe : le moteur change de sens de rotation. C’est dû au champ magnétique créé par les bobines internes du moteur qui est alors opposé. Reprenons notre dispositif de base avec un transistor (que nous symboliserons ici par un interrupteur). Si ce dernier est activé le moteur tourne, sinon le moteur est arrêté. Jusque là rien de nouveau. Rajoutons un deuxième transistor « de l’autre côté » du moteur. Rien ne va changer, mais il va falloir commander les deux transistors pour faire tourner le moteur. Ce n’est pas bon. Essayons avec quatre transistors, soyons fou !

Le pont en H

Eh bien, cela change tout ! Car à présent nous allons piloter le moteur dans les deux sens de rotation. Pour comprendre le fonctionnement de ce pont en H (appelé ainsi par sa forme), imaginons que je ferme les transistors 1 et 4 en laissant ouverts le 2 et le 3. Le courant passe de la gauche vers la droite.

Fonctionnement dans le sens horaire

Si en revanche je fais le contraire (2 et 3 fermés et 1 et 4 ouverts), le courant ira dans l’autre sens ! C’est génial non ?

Fonctionnement dans le sens anti-horaire

Et ce n’est pas tout !

Allons plus loin avec le pont en H

Comme vous l’aurez sûrement remarqué, les transistors fonctionnent deux par deux. En effet, si on en ferme juste un seul et laisse ouvert les trois autres le courant n’a nulle part où aller et rien ne se passe, le moteur est en roue libre. Maintenant, que se passe-t-il lorsqu’on décide de fermer 1 & 2 en laissant 3 et 4 ouverts ? Cette action va créer ce que l’on appelle un frein magnétique. Je vous ai expliqué plus tôt comment cela fonctionnait lorsque l’on mettait une diode de roue libre aux bornes du moteur. Le moteur se retrouve alors court-circuité. En tournant à cause de son inertie, le courant généré va revenir dans le moteur et va le freiner. Attention cependant, c’est différent d’un phénomène de roue libre où le moteur est libre de tourner.

Freinage avec 1 & 2
Freinage avec 3 & 4
Ne fermez jamais 1 & 3 et/ou 2 & 4 ensembles, cela ferait un court-circuit de l’alimentation et vos transistors risqueraient de griller immédiatement si l’alimentation est capable de fournir un courant plus fort que ce qu’ils ne peuvent admettre.

Les protections nécessaires

Les diodes de roue libre

Comme nous l’avons vu plus haut, pour protéger un transistor des parasites ou lors du freinage électronique du moteur, nous plaçons une diode. Dans le cas présent, cette diode devra être en parallèle aux bornes du transistor (regardez le schéma qui suit). Ici nous avons quatre transistors, nous utiliserons donc quatre diodes que nous placerons sur chaque transistor. Ainsi, le courant trouvera toujours un moyen de passer sans risquer de forcer le passage dans les transistors en les grillant. Comme vu précédemment, des diodes de type Shottky sont recommandées pour leurs caractéristiques de tension de seuil faible et commutation rapide.

Pont en H avec ses diodes de protection

Un peu de découplage

Lorsque nous utilisons le moteur avec une PWM, nous générons une fréquence parasite. De plus, le moteur qui tourne génère lui même des parasites. Pour ces deux raisons, il est souvent utile d’ajouter des condensateurs de filtrage aux bornes du moteur. Comme sur le montage suivant, on peut en placer un en parallèle des deux broches du moteur, et deux autres plus petits entre une broche et la carcasse du moteur.

Ensuite, lorsque le moteur démarre il fera un appel de courant. Pour éviter d’avoir à faire transiter ce courant depuis la source de tension principale (une batterie par exemple), il est de bon usage de mettre un gros condensateur polarisé aux bornes de l’alimentation de puissance du pont en H. Ainsi, au moment du départ l’énergie sera en partie fournie par ce condensateur plutôt qu’en totalité par la batterie (ce qui évitera un échauffement abusif des conducteurs mais aussi une éventuelle baisse de la tension due à l’appel de courant).

Des solutions intégrées : L293, L298…

Afin d’éviter de vous torturer avec les branchements des transistors et leur logique de contrôle, des composants « clés en main » ont été développés et produits. Nous allons maintenant étudier deux d’entre eux que nous retrouvons dans quasiment tous les shields moteurs Arduino : le L293(D) et son grand frère, plus costaud, le L298.

Le L293(D)

Tout d’abord, voici un lien vers la datasheet du composant. Les premières données nous apprennent que ce composant est un « quadruple demi-pont en H ». Autrement formulé, c’est un double pont en H (car oui, 4 fois un demi ça fait 2 !). Ce composant est fait pour fonctionner avec des tensions de 4.5V à 36V et sera capable de délivrer 600 mA par canaux (dans notre cas cela fera 1,2A par moteur puisque nous utiliserons les demi-ponts par paire pour tourner dans les deux sens). Un courant de pic peut être toléré allant jusqu’à 1,2A par canaux (donc 2,4A dans notre cas). Enfin, ce composant existe en deux versions, le L293 et le L293D. La seule différence (non négligeable) entre les deux est que le L293D intègre déjà les diodes en parallèle des transistors. Un souci de moins à se préoccuper ! En revanche, cela implique donc des concessions sur les caractéristiques (le courant max passe à 1A par canaux et 2A pic pour la version sans les diodes). Le branchement de ce composant est assez simple (page 2 de la datasheet), mais nous allons le voir ensemble maintenant. Ce composant a 16 broches et fonctionne selon un système de symétrie assez simple.

Le L293

De chaque côté les broches du milieu (4, 5, 12 et 13) servent à relier la masse mais aussi à dissiper la chaleur. On trouve les entrées d’activation des ponts (enable) sur les broches 1 et 9. Un état HAUT sur ces broches et les ponts seront activés, les transistors pourront s’ouvrir ou se fermer, alors qu’un état BAS désactive les ponts, les transistors restent ouverts. Ensuite, on trouve les broches pour piloter les transistors. Comme un bon tableau vaut mieux qu’un long discours, voici les cas possibles et leurs actions :

Input 1 (broche 2 et 10) Input 2 (broche 7 et 15) Effet
0 1 Tourne dans le sens horaire
1 0 Tourne dans le sens anti-horaire
0 0 Frein
1 1 Frein

Ainsi, en utilisant une PWM sur la broche d’activation des ponts on sera en mesure de faire varier la vitesse. Il ne nous reste plus qu’à brancher le moteur sur les sorties respectives (2 et 7 ou 11 et 14 selon le pont utilisé) pour le voir tourner. 🙂 Et voilà ! Vous savez à peu près tout ce qu’il faut savoir (pour l’instant 😛 ) sur ce composant.

Attends attends attends, pourquoi il y a deux broches Vcc qui ont des noms différents, c’est louche ça !

Ah oui, c’est vrai et c’est important ! Le composant possède deux sources d’alimentation. Une pour la partie « logique » (contrôle correct des transistors), VCC1 ; et l’autre pour la partie puissance (utile pour alimenter les moteurs à la bonne tension), VCC2. Bien que ces deux entrées respectent les mêmes tensions (4.5V à 36V), nous ne sommes pas obligés de mettre des tensions identiques. Par exemple, la tension pour la logique pourrait venir du +5V de la carte Arduino tandis que la partie puissance pourrait être fournie par une pile 9V par exemple (n’oubliez pas de bien relier les masses entre elles pour avoir un référentiel commun).

N’utilisez JAMAIS le +5V de la carte Arduino comme alimentation de puissance (pour la logique c’est OK). Son régulateur ne peut fournir que 250mA ce qui est faible. Si vous l’utilisez pour alimenter des moteurs vous risquez de le griller !

Comme je suis sympa ( :mrgreen: ) je vous donne un exemple de branchement du composant avec un moteur et une carte Arduino (j’ai pris le modèle L293D pour ne pas m’embêter à devoir mettre les diodes de protection sur le schéma 🙄 ) :

Schéma d'utilisation du L293D
Montage du L293D

Vous noterez la présence du gros condensateur polarisé (100 µF / 25V ou plus selon l’alimentation) pour découpler l’alimentation de puissance du L293D. Comme je n’utilise qu’un seul pont, j’ai relié à la masse les entrées de celui qui est inutilisé afin de ne pas avoir des entrées qui « grésillent » et fassent consommer le montage pour rien. Enfin, vous remarquez que j’utilise trois broches de l’Arduino, deux pour le sens (2 et 4) et une PWM pour la vitesse (3).

Le L298

Étudions maintenant le grand frère du L293 : le L298. Si je parle de grand frère ce n’est pas innocent. En effet, son fonctionnement est très similaire à celui du L293, mais il est capable de débiter des courants jusqu’à 2A nominal par pont et jusqu’à 3A pendant un bref instant. Il propose aussi une fonction pouvant être intéressante qui est la mesure du courant passant au travers du pont (pour vérifier si votre moteur est rendu en butée par exemple). Que dire de plus ? On retrouve deux broches d’alimentation, une pour la logique et l’autre pour la puissance. Celle pour la logique peut aller de 4.5 à 7V (là encore on pourra utiliser celle de l’Arduino). L’entré puissance, en revanche, admet une tension comprise entre 5 et 46V. Pour un fonctionnement optimal, la documentation nous recommande de placer des condensateurs de 100nF sur chaque ligne d’alimentation. Et comme pour le L293, on pourra aussi placer un gros condensateur polarisé de 100µF (tension à choisir selon l’alimentation) sur la ligne d’alimentation de puissance. Comme le fonctionnement est le même que celui du L293, je vais juste vous proposer une liste des broches utiles (oui je suis fainéant !).

le L298

Pour le premier pont :

  • Les sorties sont situées sur les broches 2 et 3.
  • Les entrées pour le sens de rotation sont la 5 et 7 et la PWM (enable) ira sur la broche 6.

Pour le second pont :

  • Les sorties sont situées sur les broches 13 et 14.
  • Les entrées pour le sens de rotation sont la 10 et 12 et la PWM (enable) ira sur la broche 11.

Pour les deux ponts :

  • La masse, qui est au milieu sur la broche 8.
  • L’alimentation de la logique de commande (le 5V) sur la broche suivante, la 9.
  • Et l’alimentation de la partie puissance sur la broche 4.

Je ne mentionne pas les broches 1 et 15 qui sont celles servant à mesurer le courant traversant les ponts. Je doute que vous vous en serviez dans un premier temps et si vous arrivez jusque là je n’ai aucun doute que vous arriverez à les mettre en oeuvre (indice : il faudra utiliser une résistance 😉 )

Le L298 n’existe pas avec les diodes de roue libre intégrées. Prenez donc garde à bien les rajouter dans votre montage sous peine de voir votre composant griller.

Comme précédemment, voici un schéma d’illustration (l’image représentant le L298 n’est pas exacte, mais le boitier multiwatt n’existe pas encore dans Fritzing donc j’ai dû feinter) :

Schéma du L298 avec un moteur et ses diodes
Montage du L298 avec un moteur et ses diodes

Et Arduino dans tout ça ?

Bref rappel sur les PWM

Si vous avez bien lu la partie précédente, vous avez dû apprendre que pour pouvoir modifier la vitesse de rotation du moteur il faut utiliser un signal PWM. Mais vous souvenez-vous comment on s’en sert avec Arduino ? Allez, zou, petite piqûre de rappel ! Commençons par redire où sont situées les broches utilisables avec la PWM. Elles sont au nombre de 6 et ont les numéros 3, 5, 6, 9, 10 et 11. Pour les utiliser, vous devrez les configurer en sortie dans le setup() de votre programme :

Ensuite, vous pourrez agir sur le rapport cyclique du signal PWM (le ratio entre temps à l’état HAUT et temps à l’état BAS) en utilisant la fonction analogWrite(broche, ratio). L’argument broche désigne… la broche à utiliser et l’argument ratio indique la portion de temps à l’état haut du signal.

Le rapport cyclique est défini par un nombre allant de 0 à 255. Cela signifie qu’à 0, le signal de sortie sera nul et à 255, le signal de sortie sera à l’état HAUT. Toutes les valeurs comprises entre ces deux extrêmes donneront un rapport cyclique plus ou moins grand. Dans notre cas, le moteur tourne plus ou moins vite selon si le rapport cyclique est grand ou petit. Pour savoir quel rapport cyclique correspond avec quelle valeur, il faut faire une règle de trois :

Valeur argument Rapport cyclique (%)
0 0
127 50
255 100

Le calcul donnant la valeur pour chaque portion est défini par cette relation :

\(argument = \frac{x \times 100}{255}\)

Le résultat de ce calcul donne la valeur de l’argument pour le rapport cyclique recherché. x est la valeur du rapport cyclique que vous souhaitez donner au signal.

Utiliser un shield moteur

Comme nous l’avons vu précédemment, réaliser un pont en H demande quelques efforts (surtout si vous désirez tout faire vous mêmes 😀 ). Afin de rendre ces derniers plus accessibles aux personnes ayant moins de moyens techniques (tout le monde ne dispose pas du matériel pour réaliser ses propres cartes électroniques !), l’équipe Arduino a développé et mis en productions un shield (une carte d’extension) pour pouvoir utiliser facilement des moteurs. Cette extension possède ainsi tout ce qu’il faut pour mettre en œuvre rapidement un ou des moteurs. La seule contrepartie est que les broches à utiliser sont imposées. Cependant, il existe une multitude de shields moteurs non officiels pouvant faire les mêmes choses ou presque. L’avantage de ces derniers est indéniablement leur prix souvent moins cher. En revanche, il n’est pas toujours facile de trouver leur documentation et le format de la carte ne se soucie pas forcément du « standard » Arduino (et n’est donc pas forcément adaptable en « s’ajoutant par dessus » comme un shield officiel le ferait). Je vais donc maintenant vous présenter le shield officiel, son fonctionnement et son utilisation, puis ensuite un shield non-officiel (acheté pas cher sur le net) que je possède et avec lequel je ferai mes photos/vidéos. Vous devriez alors avoir assez de connaissances pour utiliser n’importe quel shield non-officiel que vous pourrez trouver. Les deux shields présentés ont un point commun : ils utilisent tous les deux le L298 comme composant pour les ponts en H.

Le shield officiel d’Arduino

Tout d’abord, voici l’adresse de description de ce shield : le shield moteur. Comme vous avez bien lu la partie précédente à propos du L298, vous connaissez déjà la majeure partie des choses à savoir. Parmi elles, vous savez que le L298 nécessite trois broches de « pilotage » (par pont intégré) et envoie la puissance sur deux broches (par moteur). Éventuellement nous disposons aussi des deux « sondes de courant » mais nous y reviendrons plus tard. Voici un petit synoptique de résumé que je vous ai concocté pour l’occasion : 🙂

Le shield moteur officiel en image

Voici comment il fonctionne et les quelques précautions d’utilisation.

  • L’alimentation de puissance sur les borniers à visser à gauche est reliée à l’Arduino et peut donc lui servir de source d’alimentation. Si vous voulez dédier cette alimentation à la carte moteur, il faut donner un coup de cutter sur le strap marqué Vin en dessous de la carte
  • Les entrées/sorties du shield sont reliées à l’Arduino de la manière suivante :
    Fonction Broches mot. A Broches mot. B
    Direction 12 13
    PWM 3 11
    Frein 9 8
    Mesure de courant A0 A1

La mesure de courant se fait sur les broches A0 et A1. Si vous avez besoin de ces broches pour d’autre applications, vous pouvez là encore désactiver la fonction en coupant le strap en dessous de la carte. Sinon, la mesure se fera simplement avec la fonction analogRead(canal). Le circuit a été calibré de façon à ce qu’il y ait 3.3V lorsque le pont délivre 2A (le maximum). Cette relation est proportionnelle, on a donc un rapport de 1.65V par Ampère. Comme l’équipe d’Arduino sait pertinemment que le nombre de broches est limité, ils ont utilisé un montage électronique supplémentaire, pour gagner une broche par pont. En effet, grâce à un petit montage avec une porte logique OU Exclusif, on peut déactiver la fonction de « frein » tout en gardant celle du sens. Grâce à cela, on peut se limiter à seulement deux broches pour commander chaque moteur : celle du sens et celle de la vitesse. Voici comment ils ont fait : Tout d’abord, regardons la table de vérité du OU EXCLUSIF. Cette dernière s’interprète comme suit : « La sortie est à 1 si une des deux entrées uniquement est à 1″. Sous forme de tableau on obtient ça:

Entrée A Entrée B Sortie
0 0 0
1 0 1
0 1 1
1 1 0

Maintenant rappelez-vous, les conditions de freinage étaient justement représentées lorsque les deux entrées du pont étaient au même niveau. En couplant intelligemment le résultat de cette porte logique et les entrées de pilotage, on peut décider oui ou non d’avoir la fonction de frein. Afin de mieux comprendre, je vous invite à consulter cet extrait du schéma technique du shield :

Astuce de pilotage du moteur

Grâce à ce montage, vous pouvez choisir ou non d’avoir un mode de frein sur vos moteurs. Si vous préférez avoir deux broches disponibles et ne pas avoir de frein (juste une roue libre lorsque la PWM est à 0), alors il vous suffira une fois de plus de couper les straps en dessous de la carte.

N’ayez pas peur d’avoir des regrets ! Si vous coupez un strap, vous pourrez toujours le remettre en ajoutant un petit point de soudure pour relier les deux pastilles prévues à cet effet. 😉 Le mieux aurait été d’avoir la possibilité de mettre des cavaliers que l’on enlève à la main, mais bon, c’est comme ça.

Vous savez maintenant tout à propos de ce shield. Je vais maintenant vous en présenter un non-officiel et ensuite nous passerons à un petit montage/code d’exemple pour finir ce chapitre.

Mon shield non-officiel

Maintenant que vous connaissez le fonctionnement global du shield officiel, vous allez pouvoir utiliser sans problème la plupart des shields moteurs. Afin de ne pas faire de publicité pour un site ou un autre, je vais vous présenter mon shield qui vaut aussi bien qu’un autre (mais pas forcément mieux). Il n’y a aucun parti pris, j’ai acheté ce dernier afin de profiter de tarif intéressant lors d’une commande avec d’autres composants. Si j’avais été uniquement à la recherche d’un shield moteur, j’en aurais peut-être pris un autre qui sait ! Bref, assez de ma vie, passons à l’étude du module ! Afin de bien commencer les choses, je vais d’abord vous montrer une photo d’identité de ce dernier. Ensuite je vous expliquerai où sont les broches qui nous intéressent et ferai un parallèle avec le shield officiel. Les deux étant basés sur un L298 l’explication sera assez rapide car je n’ai pas envie de me répéter. Je ferai néanmoins un petit aparté sur les différences (avantages et inconvénients) entre les deux.

Le shield moteur étudié

Voici une petite liste des points importants :

  • À gauche en jaune : les entrées de commande. EnA, In1, In2 pour le moteur A ; EnB, In3, In4 pour le moteur B. On trouve aussi une broche de masse et une sortie 5V sur laquelle je reviendrai.
  • En bas en vert différents jumpers (des cavaliers si vous préférez 😉 ) pour activer des résistances de pull-down (force une entrée/sortie à l’état bas) et câbler la mesure de courant de sortie des ponts
  • À droite en bleu, les bornes pour brancher les moteurs A et B (respectivement en haut et en bas) et au milieu le bornier pour amener l’alimentation de puissance (et une entrée ou sortie) de 5V

Au milieu on retrouve le L298 avec de chaque côté (en haut et en bas) les diodes de roue libre pour chaque moteur. Une petite précision s’impose par rapport à ce shield. La carte embarque un régulateur 5V (le petit bloc noir en haut à gauche marqué 78M05). Ce dernier peut être utilisé ou non (Activez-le avec le jumper vert juste à coté). Si vous le laissez activé, c’est lui qui fournira l’alimentation pour la logique du L298. Si vous le désactivez, vous devrez fournir vous-même le 5V pour la logique. Dans tous les cas, il vous faut relier les masses puissances et logiques entre Arduino et le shield afin d’avoir un référentiel commun. Si vous l’activez, alors vous obtiendrez une sortie de 5V sur le bornier bleu à droite (utile pour alimenter l’Arduino par exemple). Si vous le désactivez, alors vous devrez fournir le 5V (et donc le bornier bleu devra être utilisé comme une entrée). Ce shield n’est en fait qu’une simple carte électronique disposant du L298 et facilitant l’accès à ses broches. Le fonctionnement se fait exactement comme nous l’avons vu dans le chapitre précédent, lorsque je vous présentais le L293 et L298 pour la première fois. Pas de facétie avec des portes logiques pour gagner des broches. Ici, tout est brut de décoffrage, on commande directement le pont en H. Il vous faudra donc trois broches par moteur, deux pour gérer la direction et le frein et une (PWM) pour la vitesse.

Petit programme de test

Nous allons maintenant pouvoir passer aux choses sérieuses : l’utilisation du moteur avec l’Arduino !

L’électronique

Pour cela, nous allons commencer par câbler le shield. En ayant la partie précédente concernant le vôtre sous les yeux, vous devriez pouvoir vous en sortir sans trop de difficulté. (Désolé, pas de schéma ce coup-ci car le logiciel que j’utilise ne possède pas encore le shield moteur dans sa base de données, faites donc preuve d’imagination 😉 ). Personnellement, je n’utiliserai qu’un seul moteur (car dans l’immédiat j’en ai qu’un sous la main 😛 ). Je vais donc le brancher sur les bornes bleues « Moteur A ». Ensuite, je vais relier les différentes broches de commande à mon Arduino. La broche EnA sera reliée à une sortie de PWM (dans mon cas la broche 3) et les broches In1 et In2 seront reliées à n’importe quelles broches numériques (2 et 4 pour moi). Il ne nous reste plus qu’à nous occuper de l’alimentation. Tout d’abord, je mets un fil entre la masse du shield et celle de l’Arduino (pour avoir un référentiel commun). Comme ma carte possède son propre régulateur de tension 5V, pas besoin de l’amener depuis Arduino. Enfin, je relie les deux fils pour la puissance. Dans mon cas ce sera une alimentation 12V (400 mA max, wouhou) qui vient d’un adaptateur allume-cigare (censé fournir du 5V) que j’ai démonté pour obtenir une source de 12V. Je vous propose aussi de rajouter un potentiomètre sur une entrée analogique. De cette façon nous allons pouvoir faire varier la vitesse sans recharger le programme 😉 . Et voilà, point de vue électronique tout est prêt. Voilà ce que ça donne chez moi (un beau bazar 😀 , mais j’ai oublié le potentiomètre) :

Le montage avec le shield et Arduino

L’informatique

Maintenant, nous allons devoir nous occuper du code et comme toujours, nous commençons par lister les variables concernant les broches utilisées :

Ces différentes broches seront bien entendu des broches de sortie (sauf l’analogique), donc nous les déclarons comme telles dans le setup() :

Et voila, si vous exécutez le code maintenant votre moteur sera… arrêté ! Eh oui, j’ai volontairement mis une vitesse nulle à la fin du setup() pour éviter que le moteur ne s’emballe au démarrage du programme. Mais si vous changez cette dernière (mettez 50 pour voir) vous verrez votre moteur se mettre à tourner. Nous allons donc rajouter un peu d’interactivité, pour que vous puissiez vous-même augmenter/diminuer la vitesse en fonction de la valeur lue sur le potentiomètre :

Mais pourquoi tu divises la vitesse par 4 à la ligne 5 ? Je veux aller à fond moi !

C’est très simple. La lecture analogique nous renvoie une valeur entre 0 et 1023 (soit 1024 valeur possibles). Or la fonction analogWrite ne peut aller qu’entre 0 et 255 (total de 256 valeurs). Je divise donc par 4 pour rester dans le bon intervalle ! Car : \(4 \times 256 = 1024\).

Programme plus élaboré

Maintenant, je vous fais cadeau d’un code vous permettant d’aller dans les deux sens et à vitesse variable. Mais, je vous conseille d’essayer de le faire par vous-même avant de regarder ce qu’il y a dans la balise secret. Le potentiomètre est utilisé comme régulateur de vitesse, mais on va virtuellement décaler l’origine. Autrement dit, entre 0 et 511 nous irons dans un sens, et entre 512 et 1023 nous irons dans l’autre sens. Nous ferons aussi en sorte que la vitesse soit de plus en plus élevée lorsque l’on « s’éloigne » du 0 virtuel (de la valeur 512 donc). Je vous donne le code tel quel (avec des commentaires bien sûr). Libre à vous de le traiter comme un exercice. À sa suite, une petite vidéo du résultat.

Secret: Réponse SelectionnerAfficher
Bravo à ceux qui ont essayé de faire ce programme, même s’ils n’y sont pas arrivé ! Dans ce dernier cas, vous pouvez aller voir sur les forums et poser vos éventuelles questions après avoir vérifié que vous avez bien tout essayé de comprendre. 😉 Voilà la vidéo qui montre le fonctionnement du programme :

Désolé pour la qualité de la vidéo, il faut vraiment que je change d’appareil…

Vous savez désormais comment fonctionne un moteur à courant continu et quels sont les moyens de le piloter. Il va dorénavant être possible de vous montrer l’existence de moteurs un peu particuliers qui se basent sur le moteur à courant continu pour fonctionner. Et vous allez voir que l’on va pouvoir faire plein de choses avec ! 😉

239 commentaires

  1. Super tuto sur les moteurs ! Vraiment bien expliqué, tu présentes plusieurs solutions, c’est bien.
    Par contre je n’ai pas trop compris l’intérêt d’un shield moteur par rapport au L298.
    Sur GoTronic un shield moteur arduino basé sur un L293P coûte 28€ (2A par canal) alors que le L298 coûte seulement 6€ (2A par canal).Je trouve que la différence de prix est énorme.

    • Tu aurais les liens des produits ?
      Celui de 28€ c’est celui « officiel Arduino », il est trouvable moins cher cependant (autour de 20€ en général), GoTronic s’engraisse pas mal on dirait 😀
      Ce shield officiel offre une garanti de fabrication/compatibiltié avec ta carte Arduino et amène quelques trucs supplémentaires (comme les connecteurs ThinksKit par exemple).
      Perso mon shield moteur (moche et rouge qu’on voit sur les photos) m’a coûté moins de 10€ sur un site américain et venant de chine.

      • GO TRONIC laisse 20% de TVA et propose un produit d’origine 😉 Pour le reste , c-à-d le travail réalisé = super clair pour mopi qui suis un débutant total .Merci !

  2. Salut Eskimon !

    Un énoooorme « bravo », et un non moins grand « merci » pour ton travail de titan.

    Non content de nous présenter l’aspect « pratique » qui lie l’Arduino aux moteurs, tu vas même jusqu’en expliquer le fonctionnement dans ses plus intime détails… Chapeau bas ! Quelle patience, quel courage ! J’aurais déjà jeté mon matos par la fenêtre si j’avais dû rédiger un tel tutoriel !

    Dis-moi, il me semble que tu n’as pas abordé un détail auquel je m’intéresse actuellement. Le principe des transistors et autres MotorShield c’est bien de séparer le circuit de commande du circuit de puissance ? Mais il me semble que si on alimente seulement le Shield (mais pas l’Arduino), ce dernier est quand même alimenté. Pour de faibles voltages aucun soucis, mais si on monte aux 36V max du 293D j’ai peur qu’il y ait de la casse.

    Sur le MotorShield « officiel », il y a au dos une connexion à rompre, nommée « Vin Connect », pour éviter de fusiller l’Arduino.

    J’en viens à ma question : comment faire pour empêcher que le Shield alimente l’Aruino lorsque l’on a un Motor Shield qui ne présente pas de façon évidente cette fameuse connexion ?

    J’ai ce modèle http://www.amazon.fr/dp/B00CTK9WAI/ref=pe_386181_37038081_pe_205631_30430471_3p_M3T1_dp_1#productDetails et je cherche simplement à savoir comment faire de sorte qu’en mettant une alim de 32V pour un moteur, l’Arduino ne fonde pas sur place.

    Merci par avance pour tes éclaircissements et encore félicitations pour tout ce boulot monstre.

    • Pour le mérite de l’écriture, n’oublions pas que olyte a aussi participé 🙂
      Mais merci pour les félicitations, ca fait toujours plaisir 🙂
      Pour ce qui est de la connexion Shield/Arduino ca va pas mal dépendre des shields en fait, et je peux pas m’amuser à tous les acheter pour en faire le détail 😀
      Normalement, si tu alimentes ton shield et que ce dernier renvoie cette alimentation sur Vin, alors ton Arduino sera alimenté aussi via le régulateur 5V. Si effectivement tu montes à plus de 20V, il va commencer à faire la gueule et va cramer.
      Dans le cas de ton shield, il y a un jumper jaune. A quoi sert-il ?
      Sinon tu peux toujours couper la patte du shield qui retourne vers Vin si tu as besoin d’amener plus de 20V.

      • Salut,

        Merci pour ta réactivité !

        Je me suis finalement intéressé au seul jumper présent sur le Shield (le jaune effectivement) et après quelques tests rapides il est apparu que c’est bien ce qui permet ou non d’alimenter l’Arduino. Tout de même, ils auraient pu écrire « Vin connect », comme tout le monde ! T’as l’oeil en tout cas !

        L’essentiel c’est que ça fonctionne et que le matos n’ait subit aucune lésion. Oui parce qu’effectivement lorsque j’ai alimenté en 32V j’étais plutôt fébrile, la perte de l’Arduino ou du shield (ou des deux) aurait été tragique.

        Au fait j’ai une question qui reste dans le sujet : où te fournis-tu en matériel ? J’aurais besoin d’un sick fork sensor (un capteur infra) mais j’ai un mal de chien à trouver ça (c’est souvent de l’autre côté du globe et les prix ne sont jamais affichés)… Une idée, un conseil, une bonne adresse, une connaissance, un lien à me proposer ?

        Parce que j’imagine qu’il a fallu que tu en trouves du matos, pour rédiger tout ça avec autant d’illustrations…

        Merci encore pour ta réponse.

  3. Félicitation pour ceux qui ont participer à la construction de ce tuto.
    je dispose actuellement du shield officiel et la carte arduino yùn. il y a un truc bizarre que j’ai remarqué sur le shield, ce dernier est alimenté avec 9v et quand je mesure la tension à la borne 5v je ne trouve rien ..qeu qlq mV! et quand je le relie avec la carte je mesure 8,..V, c-a-d la tension de l ‘alimentation! normalement il doit fournir 5v à la carte en dessous. avant d’avoir le multimetre (ou à vrais dire faire recours à celui ci !!!!) ‘presque’ tout marche avec moi, même la broche Vin était liée avec la carte ( je ne s’avais pas qu’il est risqué) et vraiment j’ai programmé la carte par WIFI et et tout etait magnifique..
    OR maintenent je n’ ai q’une folle led 13 qui ne cesse plu de clignoter ( la led ON ne s’allume plu) quand j’alimente la carte soit à travers le shield ou même par son câble !! et celle ci n’ai plu reconnu par l ordinateur

    si je ne lie pas la broche Vin du shield à la carte rien ne se passe led 13 ne marche plus aussi
    Cela signifie que la carte est endommagée!!

    pourrez vous me donner un espoir et me trouver une solution

    • Le shield moteur officielle ne possède pas de régulateur 5V. Il se sert de celui de la carte Arduino en dessous.
      En quelque sorte le chemin est le suivant :
      9V sur shield moteur -> les 9V passe par Vin -> vont vers le régulateur de l’arduino -> réguler à 5V -> reparte vers toutes les lignes de 5V (dont les broches 5V qui sont liaison entre l’arduino et ses shields).

      • Bon tien mais le problème c’est que la belle neuve carte arduino yùn ne dispose pas de ce régulateur. suite à ce chemin et aux information sur le site arduino la carte est endommagée!

        • Je suis certes désolé d’avoir lu rapidement ton commentaire et du coup pas vu le fait qu’il s’agissait d’une carte yun qui effectivement ne dispose pas de régulateur.
          Cependant, au vu de ton commentaire précédent la carte était malheureusement déjà morte avant mon explication erronée.
          Je n’en suis pas pour le moins désolé d’avoir fourni des explications incorrectes dans cette situations particulière.
          Par contre le site Arduino est claire :
          > If you are powering the board though the Vin pin, you must supply a regulated 5VDC. There is no on-board voltage regulator for higher voltages, which will damage the board.

          http://arduino.cc/en/Main/ArduinoBoardYun?from=Main.ArduinoYUN

  4. Bonjour !

    D’abord un grand merci !

    Alors voilà pour une expérience , j’ai relié mon moteur CC à une turbine que je fait tourner grâce à un ventilateur. Mon moteur est ensuite relié au L298 puis à arduino. Mon but est de faire freiner ou non le moteur pour qu’il tourne toujours à une vitesse qui correspond à un rendement maximum.
    Malheureusement la partie logique du L298 à besoin de 5V pour fonctionner. Or en sortie de mon moteur j’ai tout au plus 1.7V.
    Auriez-vous une solution à ce problème ?! car je ne vois pas comment l’alimenter sans influencer ces 1.7V en sortie.

    Merci d’avance !

      • C’est de la MPPT , de la régulation. Je me sert du ventilateur pour faire tourner mon moteur et je récupére de l’énergie électrique.
        Malheureusement je n’ai que 1.7 V en sortit et visiblement ce n’est pas assez pour alimenter la partie logique du L298….

        • Je connaissais pas la MPPT ! Si je comprend bien tu te sers du moteur comme « capteur » en le mettant en générateur ? Je t’invite cependant à ouvrir un sujet sur le forum d’OC par exemple, parce que là on sort un peu du cadre « utiliser un moteur pour faire bouger quelque chose » 😀 cq vq etre difficile d’aider efficacement a travers les commentaires !

          • Pas de soucis.
            Je cherchais juste un moyen d’activer la partie logique du L298, je me demandais si vous saviez comment faire.

            Désolé du dérangement et merci pour tout !!

  5. Pingback: Mecano | Pearltrees

  6. bonjour,

    Sais tu ou trouver le LS298? Car j’ai trouver plusieurs site et il me semble pas pareil. Ce serais pour en acheter plusieurs pour contrôler plusieurs moteur à CC.

    Je te remercie d’avance et si tu connais un site plutôt fiable ce serais pratique ;).

    Bonne journée

    • Tu veux plutôt dire L298 (sans ‘S’) je suppose ?
      En terme de site fiable il en existe plusieurs, dont Farnell et RadioSpares (ce dernier faisant la livraison gratuite le weekend sur son site pour les particuliers).
      Après internet c’est vaste, il y a peut etre possibilité de trouver moins cher etc…

          • D’accord merci 😀

            sinon sur ton schémas tu as mis 3 condo, et 1 est polarisé et les 2 autres non (1µF et 2×100µF) c’est pour savoir si c’est normal de avoir les deux en parallèle, et donc si c’est bien les bon condensateur.

          • Oui tout est normal (ce sont deux 100 nF par contre, pas micro 😉 ).
            La différence c’est que le polarisé et les autres non pas tout a fait le même rôle en terme de filtrage et découplage.
            Généralement le plus simple est de chercher les « Applications Notes » dans la datasheet du composant.

  7. Bonjour,

    Je ne sais toujours pas comment mais j’ai un de mes deux L293D qui vient de fumer, je crois qu’il et mort.

    En revanche, en l’inter-changeant avec celui que je n’utilisais pas, pas moyen de refaire tourner mon petit moteur…

    Je me demandais si je n’avais pas grillé autre chose sur le MotorShield, d’où ma question : comment puis-je m’assurer que le second L293D fonctionne bien et vérifier que le reste du Shield n’a pas subit de lésions s’il vous plait ?

    • C’est une question difficile…
      En général, quand on veut tester une carte on commence par tester sans CI que les alimentations arrivent aux bons endroits sans court-circuit. Ensuite on met les CI et on refait le test. Enfin, on test si les fonctions ont le comportement attendu.

      • Merci pour ta réponse rapide.

        Quitte à passer pour un ignorant : que veux dire le sigle « CI » ? J’ai googlé mais je n’ai pas trouvé…

        Comme je l’écrivais plus haut, ce qui m’inquiète c’est qu’en remplaçant le L293D grillé par l’autre qui se trouve sur le Shield et qui est normalement fonctionnel, je n’obtient plus les mêmes résultats. J’ai commencé par vérifier que ce n’était pas le moteur qui était fichu, mais celui-ci tourne sans soucis quand je leconnecte directement à l’alimentation.

        Comment vérifier que l’alim’ arrive aux bons endroits sur la carte ? Premier point la LED s’allume, c’est déjà ça. Il y a des connecteurs du L293 à sonder c’est ça ? SI je m’en réfère au tuto et à ce que j’ai compris, il faudrait que je vérifie quelquechose sur les broches 8 et 16 n’est-ce pas ? Mais quoi ?

        Merci pour ton aide.

        Au fait c’est génial le « stack » (je ne sais pas quel nom tu lui donne) des icônes des chapitres sur le bord de l’écran !

        • > Au fait c’est génial le « stack » (je ne sais pas quel nom tu lui donne) des icônes des chapitres sur le bord de l’écran !

          Ca fra plaisir à Sandhose ca !

          > Comment vérifier que l’alim’ arrive aux bons endroits sur la carte ?

          Avec un multimètre en mode voltmetre.

          > CI = Circuit Intégré ^^ (et il n’y a pas de questions bêtes !)

          • J’ai mal posé la question. ^^
            Je me doute bien que le multimètre est de mise, mais je ne sais pas ce que je dois vérifier et où sur la carte. 😉

            Hormis ces deux broches 8 et 16, y a-t-il d’autres « endroits clés » qui nécessitent d’être sondés ? Dois-je m’attendre à trouver exactement la même tension que celle d’alimentation ?

            Merci pour l’explication du sigle.

          • C’est assez délicat.
            Soit tu as le schéma électronique de ta carte moteur et dans ce cas tu dois trouver tout les endroits où tu es supposé avoir GND et VCC pour mesurer 0V et 5V, soit tu n’as pas et dans ce cas… suis les pistes pour essayer de repérer là où les tensions de références sont censés être…

            C’est loin d’être marrant à faire, je te l’accorde !

  8. Je bataillais depuis des heures pour comprendre comment contrôler un moteur cc et j’ai eu le plaisir de lire cette page tombée du ciel. Félicitations pour ces explications, c’est vraiment un taf remarquable 🙂

    Je découvre tout juste Arduino et je me posais une question… On voit dans la vidéo que le moteur est contrôlé par un potar. Un ensemble Arduino (carte + shield moteur) permet-il de contrôler le moteur depuis le pc, par programmation ? (L’idée générale serait : je clique sur une icône et le moteur se met à tourner). Si oui, quels sont les langages/environnements de dév qui permettraient cela ?

    Encore bravo pour le tuto, très accessible et agréable !

  9. Bonjour, vous avez mit a la parti potentiomètre le même schéma que celui d’avant je ne vois pas la différence, est ce que vous pourriez me dire ou mettre le potentiomètre car je veux juste cette partie la: faire varier la vitesse du moteur merci d’avance ( je prépare un power-point et j’aurais besoin de vos schéma mais avec le potentiomètre merci )

  10. Bonsoir,

    Je reviens avec mon soucis de L293D grillé. 🙂

    J’ai un question : sur le motorshield, s’il manque l’un des deux L293D, cela n’impacte en rien le fonctionnement de l’autre ?

    Mon programme, le plus basique qui soit, n’utilise que le moteur 2, donc si il n’y a pas de L293 pour les moteurs 3 et 4 ça ne devrait pas poser problème, si ?

    J’ai beau sonder et sonder avec mon voltmètre, je n’ai jamais rien obtenu d’autre comme différence de potentiel que 0,16V entre la masse et les sorties des moteurs. J’en ai déduit que le problème était avant, au niveau du L293D, mais là je ne sais pas ce que je dois observer.

    Ce qui est sûr c’est que le composant a bien des masses en 4, 5, 13, 12 et 8 et 16 sont bien alimentées.

    Du reste, je ne sais pas ce que je suis censé observer ; je ne sais pas où trouver ma réponse et ce problème m’embarrasse.

  11. Es-ce-que le L298 permet de pouvoir tenir plus de d’amperage que ce la carte arduino (j’ai un petit doute, je suis pas sur d’avoir compris) ?.

    Je suis sur une carte qui pilote deux moteurs en parallèles mais avec le même programme, chaque moteur fonctionne avec 230mA (donc supérieur a la carte Arduino) et je crois avoir compris que en mettant le L298, le pont en H, ceci me permet de pouvoir les alimenter ?

    Je te remercie d’avance 😉

    • Et si j’alimente je L298 (oui encore XD) , il en sort donc du 24V ? c’est juste pour évité de faire tout cramer. Apres je retombe sur mes question de puissance des moteur que je dois alimenter.

      Et je te remercie de m’aider, je suis en soif d’apprendre ces petits composant très utile a la vie 😉

      • Le L298 possède deux alimentations séparé : Une pour la partie « logique » (le 5V arduino par exemple) et une pour la partie « puissance » (9V , 12V, 24V, ce que tu veux, adapter à tes moteurs !).
        C’est cette dernière tension que tu vas retrouver sur tes moteurs, il faut donc la choisir en fonction des moteurs. Elle doit être supérieur à celle pour la partie logique (tu ne peux pas avoir « logique = 5V » et « puissance = 3V » par exemple).

        Ensuite, seule la partie « puissance » fournira un courant élevé. La partie logique elle ne consommera que quelques milli-ampères, indépendant des moteurs.

  12. Bonjour a tous !

    Très bon tuto, félicitations ! c’est assez rare d’obtenir cette qualité…
    Sinon, juste une remarque pour les puristes et perfectionnistes : lors du pilotage d’un moteur en PWM de base sur un Arduino vous risquez d’entendre un ronronnement désagréable correspondant à la basse fréquence générée.
    Cette fréquence, située autour des 500 hertz, n’est pas du tout conseillé pour commander des moteurs avec une configuration PWM par défaut.
    En effet, l’oreille humaine est capable d’entendre des sons entre 20 hertz et 18 Khz (grave à aigu), afin de rendre inaudible ou presque ce genre de bruit dans le moteur, il faut reconfiguré la fréquence PWM des sorties de l’Arduino et se caler plutôt vers les 20 KHZ (soit 20000 Hertz).
    Je vous invite donc à consulter l’URL suivante pour en apprendre davantage sur le pilotage des moteurs en PWM.
    En Anglais:

    http://forum.arduino.cc/index.php/topic,117425.0.html
    Librairie : https://code.google.com/p/arduino-pwm-frequency-library/

  13. Bonjour,
    je suis debutant sur arduino, je bosse actuellement sur arduino DUE pour la conversion des signeaux analogique numerique, l’objetif est de pouvoir etablir une balise reflectometrie pour cela j dois pouvoir lire sur l’entrée analogique A0, pour recuperer un signal analogique a la sortie, et visualise sur u oscilloscope, de ce fait j’ai des souci?
    Vje besoin de votre aide, merci d’avance??

    • Salut ! Je t’aurais bien aidé mais là c’est vraiment pas assez précis et il faudra plus d’infos pour avancer… Je te propose d’aller poster un message sur le forum « électronique » du site OpenClassrooms sur lequel je passe souvent 🙂

  14. Bonjour Eskimon, il se trouve que dans le cas d’un projet je dois contrôler deux moteur à l’aide d’un L298 mais avec Flowcode 4 ou 5. La carte EB022 possède justement le double pont en H L298 cependant je ne sais pas le faire fonctionné je ne comprends pas et mon prof ne veux pas m’aidé …. j’utilise un PIC 16F877A je suis perdu … si tu pouvais m’aider un peu stp je te remercie d’avance pour ta réponse mais également pour ton tuto malgrès qu’il soit sous Arduino ! (tu peux me contacter sur ma messagerie si tu veux) voila merci

    • Là je ne vais rien pouvoir faire pour toi. Ca fait un bail que j’ai pas touché à des PIC mais surtout, surtout, je ne veux pas toucher à du flowcode qui pour moi est le meilleur moyen pour ne pas comprendre ce que l’on fait 🙁 (c’est pas ta faute, remercie l’éducation nationale je suppose…)

      Désolé donc 🙁

  15. Salut !

    j’ai un soucie avec le fonctionnement des potentiomètre, j’ai beau les tourné les tourné d’un sens à l’autre, le moteur tourne dans le même sens.

    le but de mon programme est de faire tourné ou/et de avancer le robot. alors le problème est que je me trouve avec 2 potentiomètre sur le même moteur. je cherche a faire tourné le robot a l’arrêt. Avec une série de if… else… j’obtient le robot a l’arrêt, et avec des if… consécutif il fais les deux plusieurs partie en même temps ce qui fais un peu n’importe quoi ( je fonctionne avec des LED pour les test).

    les potentiometre etant pas très précis, j’ai appliqué:
    if (sens 512) // pour les deux sens le ou n’est pas le ou logique ||, ce n’est pas dans le programme
    {
    if( vitesse 490) {….
    Pour que la « fonction » sens fonctionne. Et vice versa pour la partie vitesse pour que le robot ne tourne pas lorsque qu’il avance. ( la variable vitesse permet l’avancer et la variable sens permet la rotation)

    je sens que ce que je raconte n’est pas très compréhensible mais si tu as une idée, ou une alternative qui me permettrais d’avancer, bien sur je te demande pas de donnée une réponse complète ;), juste si tu as une idée.

    si tu as des questions, des détails que je n’aurais pas dit ou autre n’hésite pas 🙂

    sur ce merci quand même 😀

  16. Bonjour, jai acheté le carte rouge que vous avez conseillé. Je ne suis pas sur d’avoir bien compris le cablage. dans la partie jaune jai mit mon arduino sur le 5v et puis sur le gnd et jai aussi branché l’alimentation de ma baterie dans le bleu. Il suffit de qu’une seul alimentation pour que les lumiere de la carte s’allume. Normal ?
    Sinon des que je branche l’alimentation mon moteur ne tourne pas et il fait un bruit special comme si il bloqué.
    Merci

  17. Pingback: Arduino | Pearltrees

  18. Bonjour,

    Avant de commencer, un grand merci pour ce tuto. Il est juste clair et parfaitement compréhensible pour tous.

    Je travaille sur une trieuse-compteuse de pièce commandée par deux moteurs à aimants permanents.
    et la disposition ressemble quasiment à celle expliquée dans votre partie « Un peu de découplage » à deux différences près.

    J’ai une alimentation de 4,5V qui arrive sur une résistance R1= 1,6ohm en série avec [Le moteur lui même en // avec un condensateur 104] en série avec unedeixème résistance R2=1,6ohm puis la masse.

    Je pense avoir saisi le rôle du condensateur qui supprime les parasites. Mais les deux résistances je ne vois pas trop à quoi elles servent?

    De plus n’ayant pas de tachymètre, je voulais déterminer la vitesse rotation en relevant la tension aux bornes de la résistance R2 (sortie du moteur), en déduire le courant, puis la vitesse. Mais impossible de mesurer quoi que ce soir sur les résistances (aucune précision, bcp d’oscillations). Donc voilà, je ne comprends ces deux résistances.

    Vous me serez d’une aide absolue !! Merci d’avance pour la réponse.
    MD

    • Je pense effectivement que les résistances sont la pour faire de la mesure… Si ca oscille, un petit filtre pourra surement faire l’affaire pour avoir une composante continue (l’idéal serait de regarder avec un oscilloscope l’allure du signal).

  19. Coucou Eskimon, je voulais savoir quelque chose, je ne comprends pas cette partie du programme :
    « if(vitesse > 512)
    {
    //on décalle l’origine de 512
    vitesse -= 512;
    //le moteur va dans un sens
    digitalWrite(in1, LOW);
    digitalWrite(in2, HIGH);
    Serial.print(« + »);
    } »
    Dans quel sens tourne le moteur pour cette partie du programme ? Tu dis dans le sens positif, c’est à dire le sens horaire c’est ça ? :p
    Désolé mais je débute vraiment en arduino et j’ai encore du mal à assimiler les bases.

    En tout cas ton tutoriel est vraiment bien rédigé et il est à la portée de tous 🙂

    Merci d’avance, bonne journée

    • En fait ca va dependre de comment est branché ton moteur, il tournera soit dans un sens, soit dans l’autre 😀 En effet, admettons ton moteur tourne dans un sens, si tu inverses les fils il ira dans l’autre sens, du coup je peux pas répondre « il tournera dans le sens horaire » puisque ca va dépendre de ton branchement.
      C’est donc relatif. Dans le if il ira dans un sens, dans le else il ira dans le sens opposé 🙂

  20. Bonjour Eskimon. Tout d’abord, je tiens à dire un grand merci pour cet article extrement clair et détaillé. Bravo pour le travail effectué, ça m’a permis de mettre bcp de choses avec lesquelles je bidouille depuis plusieurs semaines, bien au clair dans ma tête.

    La partie, contrôle via le PWM d’un arduino en utilisant un MOSFET est celle qui m’interesse tout particulierement. En effet, je suis en train de fabriquer un robot controllé par 2 moteurs d’essuye-glace placés à l’avant, dont je contrôle la direction en créant un différentiel de vitesse de rotation entre les 2 moteurs. Dans mon cas, inutile d’avoir une marche arrière donc un circuit de contrôle simple avec un MOSFET suffit amplement.
    J’ai commencé en montant 2 MOSFET de type canal N et tout se passait bien jusqu’à ce que je réalise que la masse des moteurs était au chassis et se retrouvait donc commune à mes deux moteurs via le cadre métallique du robot.
    Une solution serait d’isoler les masses à l’interieur des moteurs mais cela s’avère impossible car ceux-ci ne sont pas conçus pour être démontés.
    L’autre solution, si j’ai bien compris, consiste à refaire le circuit mais en plaçant mon MOSFET entre le pôle positif et le moteur mais en utilisant du coup, un MOSFET de type canal-P.
    J’ai tenté un montage comme celui là, http://i61.tinypic.com/35ib1gi.jpg (la resistance de 1K en bas à droite représente le moteur) utilisant un MOSFET canal P (en haut à droite) et un MOSFET canal N. J’ai aussi mis une résistance de 10 K en pulldown entre le Gate et la Source du canal N mais quand j’alimente le tout, le moteur tourne extremement lentement en faisant un bruit sourd comme si il était surchargé et le canal N devient brulant en moins de 2 secondes.

    Je pense ne pas être le seul à avoir ce probleme et comme je trouve peu de ressource sur l’utilisation de canal P pour controller un moteur via un arduino alors qu’on en trouve pas mal avec des canal N, il me semble que ce serait une belle plus value de rajouter une explication sur le montage avec un canal P en plus du canal N.

    Merci par avance pour toute aide 🙂

  21. Bonsoir,

    Tout d’abord je tiens à dire que ce tuto est réellement bien fait !

    En fait je suis ici pour avoir un éclaircissement, je ne comprends pas le : »Serial.begin(115200); » du programme avancé, à quoi cela sert-il, merci beaucoup ! 🙂

    Bonne soirée

    • Le serial begin permet de mettre en place la liaison série. Je m’en sert pour afficher des informations sur l’écran de l’ordinateur. Le paramètre 115200 représente la vitesse utilisée pour la communication (d’ordinaire on trouve 9600 mais la j’ai eu envie d’aller plus vite ^^ )

  22. Bonjour Eskimon,

    Je viens de trouver ce tuto que je trouve très facile à comprendre. Merci.

    Je débute dans l’utilisation de l’Arduino.

    Je souhaite entraîner un chariot avec un moteur de visseuse (12v), faire varier sa vitesse et inverser son sens .

    J’ai programmé ma carte Arduino Mega 2560 à laquelle j’ai connecté une ‘chinoiserie’ avec L298 semblable à celle que vous utilisez.

    Pour effectuer mes tests, j’ai placé le chariot à quelques centimètres du sol, de façon à ce que les roues ne touchent pas le sol et tournent à vide. Les tests sont concluants puisque je peux maîtriser le sens de rotation et la vitesse. Dans ce cas le moteur demande +/- 1,5 A.

    Mais, …, lorsque que je pose le chariot au sol, le chariot ne se déplace pas.
    Je pense que le poids du chariot exige un intensité trop importante du moteur que le module ne peut fournir puisque si j’ai bien lu votre tuto ce module ne peut pas aller au-delà de 2A.

    Existe-t-il des modules semblables qui autorisent une intensité plus élevée que les 2A ?

    Si non, comment résoudre mon problème ?

    Merci d’avance pour votre aide..

    • Fiouuu deja 2A c’est balezes 😀 Pour aller au dela il y a pas 36 solutiins :
      – Les moteurs peuvent-ils supporter une tension supérieurs et/ou alimenter à la tension nominale ?
      – Passer a un variateur
      – Faire soi meme le pont en H

      • Bonjour Eskimon,

        Merci pour votre réponse rapide,…, qui ne m’enchante guère.

        En effet, je ne sens pas capable de réaliser moi-même le pont en H. Mes connaissances en électronique sont quasi nulles et je ne dispose pas du matériel nécessaire.

        Par contre en cherchant un peu sur le net, j’ai trouvé ce module : http://www.gotronic.fr/art-commande-de-2-moteurs-15a-dri0018-19703.htm qui permet de commander 2 moteurs jusque 15A.
        C’est un peu cher, mais je pense qu’il y a moyen de trouver une chinoiserie équivalente à un prix moindre.

        Qu’en pensez-vous ?

        BàV

        • > Qu’en pensez-vous ?

          Pas grand chose 😀 pour faire une décision éclairée il faudrait avoir le moteur sous les yeux etc… ce qui est loin d’être simple ^^ .
          Par contre attention, si tu prends un pont en H capable d’alimenter a plusieurs ampères il faudra aussi la source d’énergie capable de balancer les ampères en questions 😉
          Je te propose de continuer la conversation sur un forum comme OpenClassrooms (rubrique électronique) plutôt que de discuter dans la partie commentaire de l’article qui n’est pas trop adapte pour ce genre de de sujet 🙂

          • Merci, pour l’info.

            Je vais suivre votre conseil et continuer la conversation sur un autre forum afin de ne pas surcharger cette partie commentaire de l’article.

            BàV.

  23. Bonjour,

    Merci pour ce tutoriel très bien fait.

    Je me suis entraîné à faire tourner mon petit moteur à l’aide de la sortie PWM et une boucle faisant varier sa vitesse. J’ai également utilisé le port série pour voir l’intensité aux bornes du moteur.

    Peux-tu me dire quelle est l’unité donnée par un analogueRead() car je pense n’avoir pas compris comment interpréter ces valeurs?

    Par avance merci

    • analogRead() n’a pas vraiment d’unités, c’est plutôt une relation proportionnel entre la représentation interne (entre 0 et 1023) et la tension mesurée (qui doit etre en 0 et ARef, 5V par defaut). Si tu mesures 5V alors tu as 1023, si tu mesures 0V alors tu auras 0 et entre les deux c’est proportionnel.

  24. Re-bonjour Eskimon,

    J’aurais une autre question liée au shield moteur officiel arduino.

    Je possède le shield moteur arduino et j’ai commandé un moto-réducteur pour mon projet.
    Dans la doc constructeur du moteur, il est précisé que l’intensité en charge maximale ne dépasse pas 1A (ce qui convient très bien pour le shield). Cependant en relisant la doc, je m’aperçoit que le moteur nécessite une intensité de démarrage (stall current) de 4,62 A lorsqu’il est alimenté en 12V !
    Sur le site officiel du shield, il est précisé que l’on peut monter à 4A max.
    Je me demandais donc si en réduisant l’alimentation de mon moteur, je réduirais également le pic d’intensité au démarrage. Cela m’arrangerais car je suis loin d’avoir les connaissances nécessaires pour choisir les transistors d’un pont en H.

    Par avance merci

    Et bonnes vacances.

          • Dernière petite question (je l’espère :D)

            J’ai testé l’augmentation de vitesse par une augmentation progressive du rapport cyclique sur un petit moteur et j’ai remarqué qu’en partant d’un rapport cyclique nul jusqu’à une certaine valeur, le moteur reste immobile (du au couple résistant).
            Lorsque le moteur est immobile, est-ce que le courant qui le traverse est fort ?

  25. Merci pour ces explications vraiment claires 🙂 Ton tuto est vraiment une mine d’or !
    Juste une petite question, j’ai trouvé ce shield : http://www.dx.com/p/keyes-l293d-motor-control-shield-motor-drive-expansion-board-for-arduino-blue-227033#.U9n8hta-5eE mais j’aimerais aussi tester uniquement avec des L293D, pensez-vous qu’il est possible de les démonter du shield sans les abimer ?
    Il parait que tu passes à rennes courant août ? Je t’invite à boire une bière 🙂

    • Si l’image est correcte, alors le L293D devrait pouvoir être extrait puisqu’il n’est pas soude mais monte sur un support. En faisant gentiment levier avec un tournevis plat ca devrait être jouable de l’extraire sans l’abîmer.

      Sinon ouaip je passerais surement a Rennes, je vais aller faire un sujet sur ZdS pour s’organiser un JZDS sauvage 😀

  26. Bonjour j’ai réaliser le montage avec n L293D et un potar , après avoir mit le programme le moteur ne réagit pas au potar. Si j’enlève le potar du montage le moteur tourne mais si je le laisse le potar empêche le moteur de tourner. Help pls

  27. Super travail!

    J’aurais cependant souhaité en savoir un peu plus sur les condensateurs 😀 :
    – Pourquoi, je cite : « Sa valeur devra être comprise entre 1nF et 100nF environ. » ? de quoi cela dépend-il?

    – Connais-tu une formule simple, ou un bon tuto pour calculer la capacité d’un condensateur de filtrage?

    – Sur ton shield L298, on trouve un emplacement vide « C1 ». Vu son emplacement, j’imagine qu’il s’agit d’un emplacement pour un condensateur pour lisser le 5V out. Peut-on y placer un condensateur soi-même ? Dans ce cas, quelle doit être sa capacité?

    Et merci encore pour cet énorme travail !

    • Ahhh le condensateur, ca mériterait un cours à part entière tellement les utilisations sont multiples 😀

      Pourquoi, je cite : “Sa valeur devra être comprise entre 1nF et 100nF environ.” ? de quoi cela dépend-il?

      « De l’habitude » 😀 C’est pas une super réponse, mais je n’en ai malheureusement pas d’autres (pour ce qui est de l’électronique analogiques, je n’ai que des bases faibles et pas un réel grand amour 😀 )

      Connais-tu une formule simple, ou un bon tuto pour calculer la capacité d’un condensateur de filtrage?

      Un bon tuto non. Pour le calcul, je te conseillerais bien google avec des mots-clés comme fréquence de coupure, filtrage etc…
      Je ne suis vraiment pas un as de l’électronique analogique 😉

      Sur ton shield L298, on trouve un emplacement vide “C1″. Vu son emplacement, j’imagine qu’il s’agit d’un emplacement pour un condensateur pour lisser le 5V out. Peut-on y placer un condensateur soi-même ? Dans ce cas, quelle doit être sa capacité?

      Bonne question, il faudrait que je regarde, je n’y ai jamais fait attention !

  28. Bonjour,
    J’aimerais utiliser le module L298 non pas pour contrôler des moteurs mais des solénoïdes pull-up ZYE1-1038 qui fonctionne en 12V DC (ils consomment 1.25A il me semble). Est-ce qu’il y a des précautions particulières à prendre ou bien cela fonctionne comme pour les moteurs?

    merci
    Julien.

    ps: félicitation pour la richesse de votre tuto 🙂

    • Je n’ai jamais utilise de solénoïdes ( 🙁 ) mais ces derniers n’étant qu’un enroulement (comme un moteur) je ne vois pas de raisons contradictoires a l’utilisation d’un pont en H comme le L298 pour ca. Mais cette consommation de 1.25A n’est pas censé être permanente non ? Elle ne doit avoir lieu que lors du déplacement du corps et ensuite être réduite lorsque ce dernier ne bouge plus non ?

  29. Salutation :),

    J’ai lu ton article avec attention mais étant un novice de arduino et (en électricité) je n’ai pas tout compris.

    je comprends pas bien (avec la carte motor shield officiel) comment tu alimentes la carte arduino.

    Donc j’ai été voir d’autre article sur internet, et la je vois plein de gens super poser les cartes.

    http://arduino.cc/en/uploads/Tutorial/DueMotorShieldFan.jpg
    quelle en sont les conséquences ? aucun fil ne doit être utilisé ? comment savoir quelle pin est utilisée ou non ?

    ps super tuto.

    • Avec le shield officiel, les broches sont interconnecté entre elles. Le shield fait le lien pour qu’au final ce soit assez transparent. La contre partie est que le rôle de chaque broche est imposé. En effet, le composant central (en l’occurence un L298) ne peut pas être relié au hasard, donc ses broches de commandes sont reliés à des broches précises de l’Arduino. Ainsi pour savoir quelles pin est libre/utilisée il faut allez lire la fiche descriptive sur le site officiel (pour les shields officiels)

  30. Je sais si c’est moi qui me trompe , mais quand tu configurais les pont tu as mit :
     »
    Pour le premier pont :

    Les sorties sont situées sur les broches 2 et 3.
    Les entrées pour le sens de rotation sont la 5 et 7 et la PWM (enable) ira sur la broche 6.
    Pour le second pont :

    Les sorties sont situées sur les broches 13 et 14.
    Les entrées pour le sens de rotation sont la 5 et 7 et la PWM (enable) ira sur la broche 6.
     »
    Du coup les deux ponts ont la même config ? O.o

    Ma question c’est si j’utilises deux moteurs , je dois faire un double pont en h ? Combien de PWM différente je vais devoir utiliser ? Pourquoi les ports 5 et 7 du micro contrôleurs sont utilisés pour la rotation ? se sont bien des entrées numérique non ?

    Enfin merci pour ce travail magnifique , on a beau chercher partout sur internet , on trouvera pas mieux . GG x)

  31. Salut,
    Très bon tuto et très intéressant.
    J’ai moi aussi fait un montage entre un Arduino et un moteur 9V et j’ai presque la même chose que vous mais il y a certains choix de votre côté que j’aimerais comprendre.
    Pourquoi avez-vous mis une résistance de 10 K Ohms entre la masse et votre sortie de l’Arduino sur le MOSFET ? C’est pour protéger le MOSFET ?
    De mon côté, j’ai un petit problème. J’ai remarqué que ma pile de 9V chauffe beaucoup… Savez vous ce qui peux engendre cela ? J’ai le même schéma que vous sans la résistance du MOSFET ainsi que le condensateur.

    • Pour la resistance, c’est explique au dessus du schema :

      […]avec une résistance de pull-down, comme ça si le signal n’est pas défini sur la broche Arduino, le transistor sera par défaut bloqué et donc le moteur ne tournera pas

      Pour la pile 9V, je suppose que c’est normal, ces piles sont bien pour des petits tests mais pas vraiment adaptée pour délivrer de fort courant longtemps.

  32. Merci pour ces informations.
    Etant en train de faire un système qui va devoir tenir dans le temps, je vais voir pour modifier le système d’alimentation pour quelque chose qui chauffe moins.
    Savez-vous où je pourrais trouver un tuto aussi bien fait que le votre pour le branchement d’un moteur plus gros (qui marche au 220) via une carte relais avec l’Arduino ?

    • Salut !

      Pour l’aide « personnalisée » je t’invite a venir poster ton message sur ZdS (rubrique « Systèmes et Matériel » devrait faire l’affaire). J’essaie de garder la zone de commentaire pour les questions lies au tutoriel 😉

      A bientôt !

  33. Pingback: Le moteur à courant continu - Tuto Ardui...

  34. Bonjour,
    merci pour ce super tuto. J’ai appris plein de choses.
    Du coup, j’ai fait un petit bot cafard qui fuit la lumière (arduino shield, 2 moteurs continus, 2 senseurs lumière).
    ça marche super tant que l’arduino est connecté en USB – Mais dès que je passe à une alimentation sur pile 9 V (au bornier du Shield Arduino, sur la prise Jack, les deux en même temps….) : plus rien 🙁
    Je suis un peu vert, parce que je ne vois pas l’issue ::
    Le montage est simple:
    Senseur 1 sur A4 ;
    Senseur 2 sur A5 ;
    Pile 9V sur le bornier du shield.

    Je vous donne mon code, qui « roule »:

    Secret SelectionnerAfficher
    • Si le code marche alors le problème est surement matériel… La source 9V est une pile « carre » ? Si oui c’est peut-être (surement même) elle la fautive, elle n’arrive pas a donner suffisamment de courant pour faire tourner les moteurs. Une meilleur approche serait d’utiliser des piles rondes type AA, elles peuvent sortir plus de courant (mais il en faut plusieurs pour obtenir la même tension)

      • Merci pour ta réponse et ta réactivité.
        Oui, c’est une carré; j’ai essayé avec 8 AA dans un boîtier, mais pareil (un petit soubresaut et couuuuuiiiiiic). Avec le SHIELD – rien (sauf sur USB). Il est possible que les moteurs demandent une tension plus importante ?

        • Il est possible que les moteurs demandent une tension plus importante ?

          C’est peu probable. L’USB c’est 5V, 8 piles AA c’est 8×1.5V=12V (ramené en 5V via le régulateur). Les piles étaient neuves ? Parce que la je vois plus trop d’explication.

          • …………………………….. O-O°………………………………….

            *** J’ai changé les piles……… Il y en avait trois d’un vieux jouet qui ne donnait plus rien.
            … M’était même pas venu à l’esprit.
            é_è …. Plus mauvais, on ne fait pas (Je ne te dis pas à quel point je me sens TOUT petit)

            Merci infiniment pour ta réactivité et pour ce blog génial.

  35. Bonjour, j’ai un problème : je n’arrive pas a faire tourner mon moteur dans l’autre sens. Quand je fait comme vous dites, mon moteur ne tourne pas.
    Pour finir, j’ai longtemps mit par erreur digitalWrite(enable, 255 ); digitalWrite(enable, 255 );
    quand j’ai remplacé par analogWrite, rien n’a changé.

  36. Bonjour et une grand merci pour ce tuto qui me permet de mieux appréhender une partie de l’univers Arduino
    je vais débuter dans ce domaine (dés que le père Noël m’apportera le kit de départ 😉

    Mon premier projet sera d’ouvrir et fermer la porte en bois (40cm de haut sur 20 de large, +- 1kg) à des heures précises (pas me lever à 5 h du mat en été !!)

    J’avais donc penser à un petit moteur (540 mabushi) en contrôlant la vitesse et le temps de rotation
    Pensez vous que ce montage soit compatible avec les éléments du tuto ?

    En tout cas merci encore pour ce boulot qui aide grandement les débutants ! 🙂

  37. Bonjour, je suis technicien de maintenance et la semaine dernière, j’ai vu une carte de gestion de porte battante qui alimente un moto-reducteur CC classique en ouverture et fermeture. Jusque là rien de bien surprenant, mais le truc intéressant c’est que pour connaitre son fin de fermeture et ses ralentissements la carte n’utilise pas de tempo ni de codeur monté sur le moteur mais (selon la notice) elle compte les pics de courants créés par le changement d’enroulement sur le moteur.
    Avez-vous une idée de comment c’est fait ? J’aimerai reproduire ce système sur un projet personnel.
    Encore bravo pour votre livre et vos tutoriels, s’ils sortent en version papier je suis preneur.
    Bonne journée.

    • Sur certains pont en H (comme le L298) il y a une sortie permettant de mesurer le courant traversant le pont. Comme on sait que le moteur consomme plus au démarrage et surtout s’il est bloqué ou si l’on lui offre une résistance, alors je suppose qu’il « suffit » de détecter ce pic pour déterminer si on est en butée ou non. (mais du coup je vois pas comment différencier que l’on est en fin de course normale ou en train de taper dans quelqu’un)

      • En fait, je ne parle pas d’une mesure de surintensité provoqué par un bloquage mécanique mais de la détection du changement d’enroulement moteur (3 fois par tour pour un moteur à 3 enroulements)qui doit créer un pic de courant car sur un moment très court on alimente 2 enroulements en même temps.
        Si c’est facilement réalisable, cela rend les moteurs CC de récupération un peu plus intéressants car on pourrait avoir l’avantage d’un moteur pas à pas mais bien moins cher.
        Je suis en train de rechercher un oscilloscope, je vous recontacte dès que j’ai des mesures concrêtes (si j’arrive à en avoir…)
        Bonne journée.

        • ça y est, j’ai reçu mon oscilloscope et j’ai visualisé l’image du courant moteur. J’ai utilisé une resistance de shunt de 1 ohm 10 W et j’ai des pics de courant comme prévu, 12 par période.
          L’étape suivante c’est de rentrer ce signal dans mon arduino et de voir si la carte arrive à les compter.
          Je vous tiens au courant.

  38. Bonjour,
    J’ai réalisé un montage avec un L293D pour contrôler un moteur CC de ce type http://tinyurl.com/lb4ro7o . Il est alimenté en 12V, le problème est que le moteur ne tourne pas, c’est comme si il n’avait pas assez de pêche pour se lancer. Alors que le montage fonctionne très bien pour des moteurs plus petits.
    Auriez vous une idée pour m’aider s’il vous plait ? Merci d’avance.
    Je vous fournir plus d’info technique si besoin.

  39. bonjour,

    j’ai récupérer un voiture téléguidé très bas de gamme et je voudrais la modifier pour qu’elle se déplace vers l’endroit le plus lumineux.
    elle possède 2 moteurs CC, un pour la propulsion et un autre pour faire tourner les roue avant.
    donc je me posais la question de comment contrôler la fin de course de la rotation des roues avant.
    en lisant ton tuto je me suis dit que peut-être la solution serais d’utiliser une des broche « current sense » .
    et donc je me posais la question de qu’elle résistance utiliser, à la suite de mes rechercher sur internet et notamment un de tes post sur OC, je pensais opter pour une résistance bobiné 5W et 0,56 Ohm.
    est-ce que ça te parait logique ou pas, et est-ce qu’il y aurait une autre solution?
    merci

  40. Pingback: RobotProjet3° | Pearltrees

  41. Pingback: Contrôleurs/Electronique/Automatique | Pearltrees

  42. Bonjour,

    J’utilise depuis pas mal de temps des modules L298 tout fait un comme un shield. Ce sont des produits de Chine. Mais il n’y a pas beaucoup de risques au pire le L298 brule et ne fonctionne plus. Je ne pense pas qu’il peut altérer l’Arduino en cas de problème.

    Ce qui est intéressant c’est qu’il y ait déjà les diodes de roue libre, un régulateur pour la partie logique etc. et enfin le module et environ à 3€ frais de port gratuit. En sachant que sur des sites en France le L298 seul est en vente autour de 6€.

    http://coursdivers.blogspot.fr/2015/02/pont-en-h-l298.html

    Bonne journée

  43. Bonjour et merci pour tout ce travail !

    Grâce à ton tuto j’ai pu me lancer dans l’utilisation d’Arduino que je pensais être beaucoup moins abordable que ça. Je m’étais bien trompé et c’est grâce à toi que je l’ai réalisé.

    Du coup je fabrique un petit robot pour ripper mes DVD et automatiser l’échange de DVD. Celui-ci utilise des moteurs à courant continu alimenté en 9V et 12V pour moins d’un ampère et j’ai vu que pour piloter ceux que tu utilises dans ton livre, tu emploies des MOSFET. J’aurais aimé savoir quelle référence de MOSFET utilises-tu (ce que je trouve sur le net m’est assez hermétique et je ne sais pas quoi choisir) et j’aurais souhaité également savoir si la résistance de pull-down est un modèle particulier de résistor, ou si un simple résistor 1/4 de watt suffit ?

    Merci encore à toi et à Olyte pour vos efforts, grâce à vous j’ai plein de projets que je peux maintenant réaliser comme confectionner des robots avec ma belle-fille ! Je vous suis vraiment reconnaissant !!

    • Bonjour,

      Je ne fais pas d’aide particulière, par principe et manque de temps. Je ne suis pas un bureau d’étude ! Si vous voulez de l’aide pour un projet, tournez vous vers des forums comme ceux de Zeste de Savoir (rubrique « Systèmes et Matériels ») en expliquant les endroits qui posent problèmes etc…

  44. Bonjour et bravo pour ce tutoriel très bien expliqué !

    Je cherche à réaliser un robot avec quatre moteurs CC.
    J’ai décidé d’utiliser un pont en H par le biais d’un L298 pour que les moteurs reçoivent leur PWM ainsi que que leur sorties logiques pour déterminer le sens de rotation.

    J’ai cependant une question pour la mesure de vitesse possible grâce aux broches qui donne le courant passant dans le pont.
    Pour avoir cette vitesse, j’ai pensé à un convertisseur courant/tension.
    Est ce que cette solution peut être viable et surtout fiable ?

    Merci encore pour toutes vos informations

    • Non ne ce n’est pas très fiable, car la consommation de courant d’un moteur n’est pas représentative de la vitesse de ce dernier. En effet, un moteur va consommer plus de courant au départ (pour réussir a lancer l’inertie) et ensuite en consommera moins une fois le régime de croisière établi. Si il rencontre un mur et commence a forcer, alors rebelote le moteur va consommer beaucoup sans pour autant avancer. En résumé, le courant est l’image du couple du moteur, pas de sa vitesse.

  45. En gros, je cherche à retrouver la vitesse de mon robot
    Je voulais utiliser la valeur du courant pour calculer la vitesse mais je pense que c’est impossible .. (J’avais pensé à attendre une vitesse stationnaire pour que la puissance sera plus ou moins constante et que le rapport entre couple et vitesse puisse être utilisé (Puissance = Couple x Vitesse de rotation)

    • Salut,
      J’ai peut être une solution, mesure la valeur de ta sortie courant sur ton L298. Si elle est comprise entre 0 et 5V, essaie de la rentrer dans une des broches interruptions de ta carte arduino et utilise la detection de front descendant. Compte le nombre d’interruptions, il devrait être proportionnel aux nombres de tours effectués par ton moteur.

  46. Pingback: Séance 2 | Drawbot

  47. Salut ! Tout d’abord merci beaucoup pour ton travail ! Cela fait quelques jours que j’ai attaqué ton tuto, et je comptais attendre encore un peu pour te remercier, mais il se trouve que j’ai décelé une petite coquille, donc j’en profite 😉 Tu indiques 180 mètres/heures pour la vitesse du robot calculée en fonction de la vitesse angulaire du moteur, or en faisant les calculs je trouve plutôt 1 800, ce qui représente un peu plus tout de même, mais je pense que c’est juste un oublie de 0 😉 Encore merci pour tout ton travail !

  48. Bonjour,
    j’ai une question qui peut paraitre bete mais je suis bloqué depuis un moment sur quelquechose qui parait très simple mais qui me pose des soucis..
    J’explique: je dois commander des moteurs CC qui execute des actions en fonction d’un timing
    Ex: pendant 1 seconde le moteur 1 tourne
    puis pendant deux secondes le moteur 1 et 2 tournent
    est ce que quelqu’un aurait la gentillesse de m’aider.. J’ai tenter des trucs avec une fonction milles mais sans résultats satisfaisant!
    bonne journée.

  49. Hello ! Super tuto très bien détaillé, en plus d’être intéressant !
    J’ai une petite question :
    Dans le projet de réaliser un petit robot autonome (arduino donc), se dirigeant vers la lumière avec 2 photorésistances, j’aurais besoin d’une petite aide. Pour ce qui est de la commande des moteurs, je dispose d’un shield motor Velleman (http://www.velleman.co.uk/contents/en-uk/p580_ka03.html). Lorsque mon arduino est connecté en USB à mon ordi, et le shield fixé dessus (2 moteurs connectés), ais-je besoin d’alimenter le shield en surplus? J’espère que ma pensée est assez claire…
    Merci d’avance,
    Brandon

    • D’après ce que je vois de la doc technique, le L298P (qui équipe ton shield) est comme les autres L298 et nécessite une tension « puissance » supérieure a la tension « logique/commande ». Du coup il faut une seconde source d’alimentation pour la puissance. Ce conseil est vrai dans tout les cas car le port USB et le régulateur d’Arduino ne sont pas fait pour délivrer de fort courant.

      • Ah d’accord, merci bien pour la réponse, vous éclairez mes pensées 🙂
        Ce qui fais que je dois alimenter le shield indépendamment de l’arduino ? J’ai la possibilité d’utiliser une alimentation externe (mes moteurs supportent du 5.9V) ou d’utiliser celle de l’arduino (un petit strap sur le shield permet de sélectionner le choix). Donc si j’utilise une alimentation secteur de 12V pour l’arduino et que je positionne le strap de façon à utiliser l’alimentation de l’arduino, cela va t’il fonctionner ?
        (Je ne sais pas si ça fonctionne comme cela, mais je suppose que même si j’alimente l’arduino en 12V, le régulateur le réduit en 5V. Et mes moteurs fonctionne en 5V également, donc je pense que je peux trouver ici un bon compromis non ? Surtout que si le shield propose de se baser sur l’alimentation de l’arduino, cela est envisageable ? Ou alors je me trompe sur toute la ligne, et auquel cas je m’en excuse ^^)
        En attente de votre réponse,
        Brandon

  50. Salut Eskimon 🙂
    Très bon tuto et très intéressant. 😀
    tout d’abord je vous remercie pour ton effort (y)
    j’ai un projet de fin d’étude intitulé « commande d’un moteur à courant continu » ,ce moteur de notre faculté,j’ai préparer deux chapitres,l’identification des paramètres ,et la regulation du courant et de vitesse ,maintenant il me reste que la partie programmation avec l’Arduino.
    je vous questionne comment changer la fréquence pwm en 4khz(3906 acceptable)???

  51. Salut Eskimon , vous êtes la seule personne capable de m’aider , donc pour cela je me permet de vous sollicités encore une fois , je suis vraiment dans un cas d’extrême urgence j’ai mon examen en fin de semaine
    , j’ai mon rapport a rendre cet semaine , et je suis très embêtée , auriez vous un Facebook ou une adresse e-mail pour que je puisse vous envoyé des document afin de finalisé mon projet , merci de répondre 🙂 .

    • Fidèle a moi-même et comme j’ai toujours expliqués, je ne fais pas d’aide personnalisée, urgent ou pas. C’est ainsi et c’est un choix auquel je tiens. Si tu as besoin d’aide je te conseille fortement d’aller faire un tour sur les forums de Zeste de Savoir et d’y créer un nouveau sujet avec le maximum d’informations et je suis sur que qqun pourra t’y aider 🙂

      Bon courage !

  52. Salut Eskimon,
    tout d’abord merci pour ce tuto, il m’a été d’une aide précieuse pour mon projet de SI.
    J’aurai cependant une question : y a t il un moyen de mettre le système dans une sorte de veille ? En gros, j’ai un détecteur de mouvement, et quand il détecte un mouvement, il passe une variable de 0 à 1. Est ce que c’est possible de dire dans le setup que si la variable est à 0, on ne fait rien, et que si la variable est à 1, on allume le moteur ? J’aurai bien testé, mais je n’ai plus le matériel sur moi, du coup je ne sais pas si ça marcherait.

    Autre question aussi, la carte Arduino Uno possède t elle une « horloge interne », en gros est ce que je peux lui dire si telle action a déjà été faite il y a moins de 24 heures, tu ne le refais pas ? Et si oui, quelle est la syntaxe ?

    Merci d’avance,
    Yamigishi.

    • Pas d’horloge interne a proprement parler non, juste la fonction millis() retournant le nombre de millisecondes depuis le démarrage de la carte (permettant de déterminer 24h cependant, mais limite a 50 jours puis reset du nombre). Pour avoir une vrai horloge il faut utiliser une RTC.

      Pour les histoires de sommeil, l’Arduino possède des modes de repos/sommeil et peut être réveillée par interruption externe par exemple.

  53. Bonjour, moi j’aurai une petite question. sur tout les schéma on peux voir que les masses ou le 0v entre les générateur son toujours relié ensemble. Pourquoi ?
    Un débutant en électronique. cordialement.

    • On fait cela afin d’avoir une référence commune. C’est un peu comme quand on mesure une altitude dans la vraie vie, on le fait « par rapport a quelque chose (en général le niveau de la mer) ». En effet, dire « je suis a 3000m de haut » n’a pas de sens si on ne sait pas « ou est le sol du début des 3000 mètres ». En électronique c’est pareil, pour dire « ici j’ai 5V et la j’ai 18V » il faut une référence commune a tout cela, c’est la masse.

  54. Bonjour,

    Et merci pour ce tuto encore une fois très clair (je dois être la 100.000ème personne à le dire mais il faut bien le reconnaitre !)

    Je sèche complètement sur les valeurs retournées par le moniteur série lorsque j’affiche la valeur de l’intensité du moteur.
    Je fais tourner mon moteur à plein régime : « analogWrite (vitesseMotA, 255); »
    Puis je veux afficher le courant qu’il consomme : « Serial.println (analogRead(courantMotA)); »
    Je téléverse le tout (avec le reste du programme bien sur), tout marche parfaitement … Sauf que les valeurs que je trouve dans le moniteur série me paraissent ininterprétables …
    « 15
    15
    15
    161
    15
    15

    48
    67
    154
    … »
    J’ai tenu à faire des tas d’essais, en affichant le courant à la vitesse du port série, puis une seule fois à chaque mise en marche, puis toutes les secondes, puis toutes les deux secondes … Rien de meilleur !

    Savez-vous comment interpréter ces résultats ? Comment les transformer en tout cas en valeurs de courant (A ou mA) ?

    D’avance merci

  55. Bonjour,

    Et encore bravo pour ce tuto ! (Je dois être le 100.000ème à le dire mais il faut bien le reconnaitre !)

    J’ai, quant à moi, un problème pour interpréter les résultats renvoyés par la lecture du courant de mon moteur. Je fais tourner mon moteur pleine balle : « analogWrite (3, 255); »
    Et j’affiche son courant : « Serial.println (analogRead (A0)); »
    Je téléverse le tout (avec le reste du programme bien sur) et tout fonctionne parfaitement … Sauf que les valeurs qui sont retournées dans le port série sont pour ma part, ininterprétables :
    « 15
    15
    15
    161
    15
    15

    34
    254
    122
    84
    15

    etc »

    Il est à préciser mon montage : Un shield Moteur officiel Arduino est pluggé sur une Arduino Uno. Mon moteur est quant à lui un motoréducteur 12V alimenté via un transo 230/12V. En sortie un condensateur de filtrage de la tension est implanté (100µF). A l’ampèremètre j’ai, suivant les vitesses de mon moteur, autour de 400mA. (Le condensateur à permis de réduire à moins de 50 mA la valeur du courant alternatif mesuré à l’ampèremètre, contre presque 150 mA sans).

    J’ai réalisé beaucoup de tests différents : Affichage continu des valeurs de courant à la vitesse de transmission série (115200 bauds), un seul affichage à chaque mise en marche, un affichage moyenné, un affichage toutes les secondes, toutes les 5 secondes … RIEN … ! Je suis quelque peu désespéré ! Haha !

    Comment puis-je (s’il est possible) interpréter ces valeurs ? Est-il possible de les convertir en un courant (A ou mA) ?

  56. Pingback: Arduino | Pearltrees

  57. Bonjour,
    Un très grand merci pour ce tuto qui me permet de découvrir avec passion le monde de l’éléctronique!
    Je viens d’ailleurs de passer commande d’un arduino uno et d’une série d’accessoires pour tester réellement toutes ces manipulations au lieu de les lire passivement sur mon écran d’ordi…
    Jusqu’à présent tout me paraissait assez clair mais je dois dire que je bloque sur un petit détail concernant le shield moteur arduino (le bleu…)
    J’ai du mal à comprendre cette histoire de frein qui peut être activé ou pas. Sur le schéma de la carte, on voit DIRA et BRAKEA aller sur un connecteur logique qui semble être un non.et (NAND) (une sorte de D avec un petit rond…) pour ensuite partir dans IN2 du L298. Sachant que DIRA se retrouve également dans IN1, je ne comprends pas comment cela marche …
    Par exemple, si DIRA=BRAKEA=1, on a DIRA#=0, donc dans IN1,on a 1 et dans IN2 on a 0 ce qui signifie que le moteur tourne alors qu’il devrait être freiné puisque BRAKEA=1…
    Pouvez-vous m’aider à comprendre ?
    Merci d’avance

  58. Bonjour,

    très bon tuto, très intéressant.

    On voit sur la plaque de proto plusieurs condensateurs a coté de l’alim mais il n’y en a pas sur la shield officielle, Faut-il en rajouter? Est-ce nécessaire ?

    L’inconvénient de la shield est qu’elle utilise la pin 3 or elle sert aussi pour les interruptions donc si on veut utiliser cette shield pour contrôler 2 moteurs DC avec roues codeuses ca devient compliqué.

  59. Hello,

    Bravo pour ce tuto, très complet. C’est rare.
    Si seulement je l’avais trouvé plus tot. Toutes les embuches rencontrées …
    Ca me conforte bien des mes choix.

    Pour augmenter les A que le pont H peut encaisser, j’ai monté deux L293D soudés l’un sur l’autre, ca a doublé sa capacité a encaisser les ampères.

  60. Pingback: Arduino Uno et moteurs (partie 4) - Atelier JCMAtelier JCM

  61. Bonjour Eskimon,
    Merci pour ce tutorial qui ma servis de base pour mètre en place quelques idées.
    J’utilise le shield L2930 et j’aimerais faire tournée dessus 4 moteur DC.
    Le but étant d’automatiser un Quadricopter, j’ai récupéré des moteurs qui malheureusement demandent un couple de démarage important (malgrés leurs trés petite taille…ils sont trés cranté enfaite !)
    J’ai eu pas mal de soucis a démaré les moteurs dés le début, mème en les prenant un par un, sans doute à cause de ce problème de trop grand couple demandé au démarage (si j’aide le moteur a démaré à la main, apres il tourne sans soucis).
    Finalement j’ai réussi à faire tournée un des moteurs sur l’entré 2 en reglant la fréquence à 64khz la effectivement le moteur démare sur les chapeaux de roue ! mais par contre les entrés 3 et 4 ne sont apprioris pas régulable au niveau de la fréquence, et je me retrouve donc avec deux moteurs pouvant tournée et deux impossible à démaré (sans aide manuel de ma part toujours).
    Es que tu aurais une idée de comment je pourrais mis prendre pour forcé une certainne fréquence, ou simplement donnée un couple de démarage plus important…?

    Merci d’avance.

    Ismonh

  62. Pingback: Actuateurs | Pearltrees

  63. Hello, merci beaucoup pour ce cours Eskimon, je débute en Arduino et ça m’a vraiment aidé!

    J’ai repris ton code et ton montage, et le moteur tourne, ce qui est un bon début. Mais la vitesse est plus faible que si j’alimente le moteur directement aux bornes de la pile, et quasi immédiatement elle se met à décroître.
    Et plus surprenant, lorsque je déconnecte la pile du montage, le moteur continue de tourner à très faible vitesse, même lorsque je déconnecte le 5V de l’Arduino. Il stoppe lorsque je déconnecte l’un des pin fournissant le PWM.

    J’ai essayé avec 2 boards Arduino différents, et 2 L293D différents, donc a priori ça ne vient pas de là.
    Est-ce que tu aurais une explication?
    Merci biengue!

  64. bonjour on a comme projet de fin d’etude la commande d’un moteur a courant continu par Arduino et Pic ; nous somme débutantes et nous voulons des proposition a propos de cela pouvez vous nous aidez s’ils vous plait merci d avance

  65. Pingback: Electricité | Pearltrees

  66. Salut à tous,
    J’ai fait le même montage qu’indiqué dans le tuto – fort utile! – mais en ajoutant un accéléromètre afin d’asservir mon moteur à l’inclinaison mesurée. Le souci est que lorsque le moteur tourne, il crée une tension parasite qui malgré le motor controller va jusqu’à perturber les mesures de l’accéléromètre. Lorsque j’utilise un optocoupleur entre l’arduino et le motor controller pour tenter d’isoler la partie moteur, la tension parasite continue de se propager, visiblement via le pin 5V qui est le seul relié directement au motor controller.
    Z’auriez pas une idée pour résoudre ce problème?
    Merci!

    • Non ce n’est pas possible, l’astuce sera donc d’utiliser plusieurs L298 (ou de bidouiller beaucoup pour adresser les signaux aux bons moteurs à tout instant, mais c’est une prise de tête considérable pour un gain négatif)

  67. Bonjour !
    Déjà, merci énormément pour l’aide que vous nous apportez au travers de ce tutoriel.
    J’ai deux questions. La première, c’est par rapport au découplage : je ne suis pas sûr de comprendre l’intérêt réel des trois petits condensateurs autour du moteur (à la limite celui entre les bornes pourquoi pas mais les deux reliés avec la carcasse je vois vraiment pas). Vous parlez de parasites : quelle en est la nature et sont ils vraiment nocifs pour le système ou peuvent-ils être considérés comme étant négligeable ?

    De plus, il se trouve que lorsque que j’utilise un pont en H (le L293D) avec un moteur, celui ci tourne plus lentement que si je le connecte directement sur une pile 9V. Je pense que cela est dû à la résistance interne du pont en H. Est-ce qu’il y a un moyen pour contrer ce phénomène ? J’ai remarqué le même genre de problème avec le MOSFET, alors qu’avec le transistor bipolaire c’est pas le cas (ou alors ça l’est tellement peu que je ne l’ai pas remarqué).

    Merci d’avance pour votre réponse, et encore bravo pour ce blog.

  68. Bonjour,
    tout d´abord felicitation,…
    Je souhaiterai realiser un robot avec ma carte Arduino munis de deux moteur ce qui lui permettra de tourer…
    Seulement je ne sais pas quel moteur choisir… Pourriez vous m´eclairer a ce sujet ?
    Merci de votre reponse.

    • Mon projet est faire commander un bras manipulateur a 5 moteurs a courant continue avec un controle angulaire et nous utilisons le language arduino je n’aisser pas commant faire ce taravail puisque j’ais une petit connaissance sur l’arduino .quelles la solusion possible ? Et est ‘ce qu’on utilisons des servo moteur et combien de servo nous utilisons .et qu’est ce q’on utilise pour la securiter .?Et nous utuliserons in clavier et un afficheur LCD?

  69. Bonjour,

    Bravo pour votre tuto qui représente une somme colossale de travail.
    J’aimerais savoir si je peux piloter des moteurs 24V avec le motor shield arduino officiel.
    En effet, j’ai lu dans votre tuto que le L298 pouvait supporter une alim de puissance de 46V , mais j’ai l’impression que le shield Arduino ne le supporte pas ( même en coupant le strap Vin).

    pouvez-vous me donner votre avis,

    Merci
    Denis

  70. Bonjour,
    Merci pour ce tuto.

    Je cherche à alimenter un moteur DC de modelisme dont les caractéristiques suivent
    (ici : http://www.pb-modelisme.com/Moteur/electricmotor/detailMoteur.php?prod=47) :

    Plage de tension : 7.0 V à 9.6 V
    COURANT : 15.0 A en continu à 18.0 A en pointe

    j’ai un motor shield adruino (http://playground.arduino.cc/Main/AdafruitMotorShield)

    Ma question est de savoir si avec une alimentation extérieure (pack 8.4 V 1900mah) le shield ou mon arduino uno risquent de griller.

    ma crainte vient de mes difficultés a interpréter la limite de 600mA mentionnée au niveau du L293D.

    Merci de votre aide.

  71. Bonjour,
    Tout d’abord, merci beaucoup pour ce tuto, je vous dois beaucoup !

    Je suis en train de me faire un petit robot, et j’utilise le L293D pour contrôler mes roues. Mes moteurs sont fait pour être alimentés à 5V. En branchant les moteurs directement sur l’alimentation (de 5V), ils fonctionnent parfaitement. Par contre, en utilisant l’IC, je n’ai plus que la moitié de la tension aux bornes du moteur : 2,5V, il ne peut pas fonctionner. Est-ce normal de perdre autant de tension ? Du coup, est-ce que je peux mettre une alimentation de 10V, tant que j’ai bien 5V max aux bornes du moteurs, ou il y a un risque quelque part ? (Pour info, le courant ne dépasse pas 500mV)

    Merci beaucoup !

  72. Bonjour,
    J’aimerai controler la vitesse d’un moteur a courant continu. C’est pour un bras robotisé. Mais je vais commencer par un seul. Et avec arduino.
    Y’aurai t-il quelqu’un qui a déja fait l’experience, si il pourra me montrer sont programme. Merci d’avance.

  73. bonjour
    je peut commander 6 moteur a courant continu avec la carte arduino uno avec un clavier et un afficheur et des bouton mais les pin de la carte arduino n est pas suffisant que est ce que je etulise comme module d extention .merci d avance

  74. Bonjour,
    Super tutoriel. J’ai actuellement un motorshield qui contrôlera mon moteur à courant continu.
    Quel moteur me conseillez-vous sachant qu’il est censé être alimenté au maximum de 5V car le motorshield ne délivre pas plus.
    Merci par avance.

  75. Bonjour,
    Déjà merci pour ton tuto qui m’a donné envie de me mettre à l’électronique.
    Voilà, je suis en train de faire une carte qui pilote les moteurs d’un train d’atterrissage d’un avion radiocommandé.
    Pas de problème pour récupérer le signal PPM du récepteur, pour commander les moteurs en avant ou arrière suivant ce qu’il est souhaitable. Pour arrêter les moteurs en butée, mon idée est de mettre une résistance de 1 ou 1.5 Ohm en série de la ligne moteur et de mesurer la ddp aux bornes de cette résistance. le moteur bloqué consommant environ 1 A, la perte sera d’environ 1V (le moteur est alimenté en 14V).comment avec Arduino mesurer cette ddp ? Dans un circuit simple je mets la borne de la résistance à la masse et je lis sur une entrée analogique la ddp sur la résistance.
    Mais avec le L293D que j’ai prévu, le moteur tourne dans un sens ou dans l’autre et si je lis entre le neutre et
    une des deux bornes, j’ai environ 1V ou 10V si le moteur tourne dans l’autre sens (pchitt, l’entrée analogique de mon Arduino).
    Comment faire ?.
    Est ce que mettre 10 ou 11 Volts sur une broche analogique grille la carte si on ne lit pas cette broche.(Je peux lire une entrée dans un sens et une autre dans l’autre sens; c’est lourd mais ça doit pouvoir marcher.
    Merci de ta réponse et encore bravo.

  76. Bonjour,
    je viens de réaliser un câblage et un petit programme permettant de changer le sens de rotation et faire varier la vitesse d’un petit moteur CC 9v.
    J’ai un petit problème, le moteur a du mal à fonctionner, lorsque je bouge mes mains devant.
    Je pense que c’est un problème de « magnétisme » (interference avec mon corps ?).
    Est ce possible et existe-t-il une solution ?
    Merci.

  77. Pingback: Pilotage moteur à courant continu | Pearltrees

  78. SVP;
    j’aimerais faire un robot mobile à 04 roues: j’ai utilisé deux moteurs à Courant continu pour les deux roues de dernières; celles de devant n’en n’ont pas. je contrôle le sens de déplacement de mes roues grâce au shield L293D alimenté par une pile de 9V. après le téléversement de mon code source dans arduino, je constate que mes deux roues reliées aux moteurs tournent correctement lorsque le robot n’est pas posé sur un support. Quand par exemple je met le robot au sol les roues s’immobilisent; pourquoi??? j’aimerais bien que vous m’aidiez à résoudre ce problème.
    Merci.

  79. Pingback: Robots Aquatiques – Projets DUT GEII Mulhouse

  80. Bonjour,
    Je suis en train de faire une petite platine électronique pour piloter les 2 trains d’atterrissage d’un avion télécommandé.
    pour cela j’ai prévu un contrôleur L298N. Le problème, c’est les 8 diodes Schottky à monter, ça prend beaucoup de place.
    Le peut-on pas utiliser simplement 2 pont de diodes de redressement, branchées un peut differemment

  81. Pingback: Variation de vitesse de moteur continu avec un arduino - La programmation sur le web

  82. Super votre exposé juste une question est-il possible de bloquer le moteur pcq j’aimerai piloter une petite grue pour mon petit fils alors monter et descendre une petite charge pas de problème mais pour maintenir la charge à une certaine hauteur il faut qu’il ne soit pas en roue libre. Comment faire sans passer par un moteur pas à pas ou par ailleurs vous avez un magnifique exposé également.
    Merci.

    • Salut Thys , je pense que tu pourrais programmer une fonction qui selon l’ordre que tu envoie blocque le MOteur DC qui est la valeur initiale ( conf le pont H blocage electonique ) ou l’attribue une valeur fixe ( que tu as prédéfinie ) en PWM BAh maintenant c’est à toi de réfléchir au reste

  83. Bonjour,

    Merci pour ce blog et de répondre aux questions.

    J’aimerais savoir si on utilise un variateur de vitesse pour le moteur, faut-il quand même le protéger avec le montage diode de roue libre + condo + transistor.
    C’est pour des petits moteurs (diamètre 7mm) pour une application de mini quadri.

    Merci

  84. Bonjour,

    J’ai fais exactement les meme branchement avec le L293DNE (je sais pas se que signifie le NE). Le programme a l’air de fonctionner. Le problème est qu’à partir du moment où je branche le moteur, celui ci fait du bruit mais pas de mouvement. Je test à nouveau la tension et je remarque qu’elle a chuté à moins de 1V.

    PS: c’est un moteur RS550S de 14,4V

    Merci de votre aide

  85. Et si on utiliser les aimants permantents 2 à 3 fois plus fort que les aimants electromagnetiques !! On realiser un moteur qui produits environ 30 % plus les energie et force (perte deja reduit aussi pour le dynamo/alternateur en combonation avec ce moteur electrique) qui le ensemble consommer !! Voila 30 % les energie gratuit !

  86. Pingback: Quentin24433 | Pearltrees

  87. Bonjour, tout d’abord je voulais dire que cet article à été très instructif pour la conception de mon programme dans le cadre de mon TPE.
    Je voulais juste savoir à quoi correspond les entrées in1 et in2 s’il vous plaît.
    Cordialement

  88. Bonjour, très bon article!!
    J’ai juste une question, comment avez vous fait pour déterminer la valeur de la résistance pull down dans le 3ème schéma avec la carte arduino?

  89. Bonjour,

    J’utilise un L298 pour piloter deux moteurs CC (PWMA broche 3 DirA1 broche 4 DirA2 broche 5 PWMB broche 10 DirB1 broche 12 DirB2 broche 11). Tout fonctionne bien dans les deux sens.
    Le problème c’est quand j’ajoute un servo à mon programme. Dès que l’instruction  » servo_9.attach(9); » est ajouté le moteur B ne tourne plus.
    J’ai généré mon code avec Blockly et Ardublock sans aucune différence de résultats.
    J’ai essayé de remplacer le L298 par un TB6612FNG sans succès.
    J’utilise une carte UNO (geekcreit, copie chinoise) et arduino 1.0.5.

    Est-ce que vous auriez une piste à me suggérer ?

    • et merde : « On boards other than the Mega, use of the library disables analogWrite() (PWM) functionality on pins 9 and 10, whether or not there is a Servo on those pins » (http://arduino.cc/en/reference/servo).

      J’ai inversé Les branchements du moteur B (PWMB broche 11 DirB1 broche 12 DirB2 broche 10) et ça fonctionne.
      La library servo.h désactivait le pilotage PWM du moteur B.
      A noter : le servo fonctionne nickel sur la broche 9.

  90. Bonjour,
    tout d’abord merci c’est un très bon tuto en français !
    j’ai un projet dans lequel j’aimerais contrôler le couple en sortis d’une MCC. Je pense que contrôler en couple offre de meilleur performance dynamique et de nombreux algorithmes de commandes multi axe sont en couple.
    le courant étant l’image du couple, il ne me parait pas trop stupide de penser à asservir le courant. J’ai remarqué en lisant ce très bon tuto que les shields possédaient un capteur de courant mais je crois que ces capteurs sont plus pour limiter les piques de courant qu’un véritable contrôle couple?
    Vue qu’on utilise une PWM pour commander les ouvertures/fermetures des pond en H ou est ce que la différence Iconsigne – Imesuré va intervenir dans le montage electronique? (Iconsigne=K*Cconsigne), c’est peut être en amont de la pwm?
    Merci <3

  91. Bonjour, et d’abord merci pour ce tuto. J’ai fais le montage avec un thyrsitor TIC106M que j’ai branché sur une arduino uno pour la gachette et une comme alimentation une pile 9 volts. Et j’ai fait mon montage en 2 exemplaires. Il y en a un lorsque j’arrête d’envoyer un courant ds la gâchette le moteur arrête de tourner et l’autre le moteur continu à tourner. Alors j’ai interverti les moteurs et sur un moteur (toujours le même) le moteur ne s’arrete pas.(les moteurs viennent du même moteur et sont parfaitement identiques). Y aurait-il quelqu’un qui aurait une idée du pourquoi.
    Merci et à bientôt

  92. Bonjour,
    Pour un projet personnel, je dois pouvoir commander un grand nombre (une quarantaine) de moteurs continus/pas à pas/servo. Un RPi3 sera connecté à des arduino, eux même à des relais, etc… Quels modèles d’arduino et de shields moteurs me conseillez vous ?
    Merci

  93. Bonjour, je lis attentivement ce tutoriel qui est assez complet, je vous félicite c’est un beau travail. J’aimerais utiliser un moteur à courant continu pour concevoir un accordeur de guitare automatique (le moteur me permettrait de tourner les mécaniques de la guitare pour ajuster la fréquence de la corde par rapport à une fréquence de référence). J’aimerais vous demander si le type de moteur et le shield Arduino sont bien adaptés à mon projet.
    Merci

Laisser un commentaire