Publié le 24 août 2020 - par

Piloter un moteur Brushless avec le Raspberry Pi

Dans la préparation d’un drone, j’ai monté les moteurs brushless (sans balais) et les ESC (Electronic Speed Controller ) mais encore faut-il les tester et vérifier que tout fonctionne. C’est possible de le faire en connectant tout le bazar, carte de pilotage et récepteur. Après si ça ne fonctionne pas on est dans la m… parce qu’on ne sait pas d’où ça vient.
J’aime bien monter les éléments d’un ensemble et tester pas à pas le fonctionnement. En général ça permet de détecter plus rapidement les pannes et d’y remédier.

Commande d’un moteur Brushless avec ESC par un Raspberry Pi

Moteur Brushless

Les moteurs brushless (sans balais) ont peu a peu envahi de nombreux domaines. On les trouve dans les ventilateurs, les lecteurs de disquette, disque dur, lecteurs de CD/DVD… mais aussi pour des modèles plus puissants sur des machines à laver pour entraîner le tambour, sur des robots…

Par rapport aux moteurs à balai qui possèdent un collecteur sur lequel le courant arrive par deux balais en carbone (ou en cuivre pour les petits modèles) le moteur brushless élimine les problèmes d’usure, d’étincelles, d’oxydation etc. Par contre il nécessite une électronique de commande plus sophistiquée.

Principe

Cliquer pour agrandir

Le moteur brushless utilisé sur les drones est un outrunner, c’est à dire que les bobines sont fixes et que c’est la cage extérieure qui tourne ! Attention à vos doigts 😉  Du point de vue technique ça simplifie énormément le montage puisque la partie alimentée est fixe et que ce sont les aimants qui tournent.

Sur ce schéma de principe (faux et juste fait pour expliquer ce qui se passe, je précise) sur la partie gauche la bobine A reçoit une tension positive qui crée un pôle Nord (bleu) et la bobine B reçoit une tension négative qui crée un pôle Sud (rouge). La bobine A attire l’aimant 1 et repousse l’aimant 2, ce qui fait tourner la cage dans le sens horaire. La bobine B attire l’aimant 3 et repousse l’aimant 4 ajoutant cette force à celle de la bobine A.

Sur l’image de droite, l’ESC a changé les tensions appliquées : la bobine A reçoit maintenant une tension négative qui crée un pôle Sud et va repousser l’aimant 1. La bobine B reçoit une tension positive, elle va repousser l’aimant 3. la cage du moteur continue de tourner. Au cycle d’après l’ESC va alimenter la bobine B et la C, puis la bobine C et la A etc. pour maintenir le moteur en rotation. C’est la vitesse à laquelle l’ESC va modifier les tensions qui va faire tourner le moteur plus ou moins vite.

Il y a bien sur plus de bobines qui sont reliées entre elles en trois groupes, mais le principe est le même.

Et en vrai ?

Vue de dessus d’un moteur brushless de drone. Ici c’est la cage du moteur qui tourne (flèches jaunes). Comme signalé plus haut, il faudra faire attention à vos doigts ! Mais c’est bien de le répéter plusieurs fois ! De même le couple de démarrage fait que le moteur va se déplacer, vous avez tout intérêt à le fixer pour les essais, soit sur le bras du drone, soit comme je l’ai fait, sur un support imprimé en 3D et bien bloqué.

Les bobines sont plus nombreuses que sur le schéma de principe. Plus il y a de bobines, plus la force appliquée à la cage en rotation est grande. On voit en bas à gauche les trois fils qui sortent et comme vous le voyez sur le schéma ça n’a rien à voir avec un servomoteur, les trois fils sont équivalents. Ici le cône de blocage de l’hélice a une couleur noire, il y a aussi des moteurs avec un cône blanc (alu). la vis de serrage a un pas inversé sur un des modèles car sur un drone certains moteurs tournent CW = Clockwise = dans le sens des aiguilles d’une montre et les autres tournent CCW = Counter Clockwise = dans le sens inverse des aiguille d’un montre. Du fait de l’inversion de pas de la vis, le co^ne est toujours en serrage sur l’hélice. Il faudra donc veiller à respecter le sens de rotation prévu par le fabricant.

Sur la vue de dessous on retrouve les 3 fils d’alimentation des bobines et on peut voir les aimants collés sur la cage du rotor. Ce sont ces aimants attirés et repoussés par le champ des bobines qui vont faire tourner le moteur. La mécanique est très réduite puisque la partie électrique est fixe. L’axe de la cage est bloqué par un circlip.

Retour d’information

Le microcontrôleur a besoin de connaître la position du moteur pour le piloter efficacement. Sur certains appareils on trouve un capteur à effet Hall qui déclenche une impulsion à chaque passage d’un aimant (existait sur les lecteurs de disquette). Pour ne pas compliquer le câblage et garder un coût faible, ce n’est pas la solution retenue ici.

En cours de rotation (voir le schéma de principe) une des bobines (à tour de rôle) n’est pas alimentée. Or un aimant qui se déplace crée une tension dans la bobine à proximité (force contre électromotrice). Le microcontrôleur mesure cette tension et peut en déduire la position de la cage du moteur à tout instant.

Commande

La commande des groupes de bobines est réalisée par un pont qui peut être ouvert comme pour la bobine C. dans ce cas aucun courant n’est envoyé à la bobine, par contre le microcontrôleur vient lire la tension sur le fil correspondant. Les aimants induisent une tension qui le renseignement sur la position exacte du rotor.

Les interrupteurs représentés ci-dessus sont dans la réalité des transistors à effet de champ (MOSFET) qui commutent rapidement et supportent le courant demandé par le moteur. Il faudra adapter l’ESC à la consommation du moteur. Ici un modèle 20A devrait suffire pour alimenter ces petits moteurs. Ici le + est envoyé sur la bobine B et le courant revient par la bobine A. Dans la pratique, les MOSFET commutent sans arrêt pour fournir une sorte de courant triphasé sur le 3 fils du moteur.

Chaque ESC comporte un microcontrôleur qui va créer le signal nécessaire pour ouvrir/fermer les MOSFET et alimenter (ou pas) les bobines, contrôler la vitesse de rotation, gérer la surchauffe des MOSFET en diminuant la puissance temporairement…

Il reçoit en entrée un signal PWM qui lui donne la consigne pour la vitesse à donner au moteur. Ce signal provient de la carte pilote (CC3D), il est fonction des ordres de la personne qui pilote le drone, mais aussi des décisions prises par la carte concernant la stabilisation ou autre.

Identification du moteur

Il existe de nombreux modèles de moteurs brushless. Les tailles sont différentes et les vitesses sont adaptées aux utilisations. Ici pour un drone de 250mm j’ai opté pour un 18062280KV. Traduction ?

18 c’est le diamètre du moteur en mm (le stator avec les bobines)

06 c’est la taille des aimants en mm

2280KV c’est le nombre de tours par minute et par volt à vide. Donc avec la batterie 3S (11,1 v) que j’ai choisie : 2280 x 11,1 = 25300 tr/min. Plus le KV est élevé, plus la vitesse de rotation est élevée mais plus le couple est faible (petite hélice). Plus le KV est faible plus la vitesse de rotation est faible mais plus le couple est important (grande hélice). 

D’autres paramètres interviennent comme le nombre de tours de chaque bobine, le diamètre du fil utilisé, le nombre de pôles etc. mais c’est une autre histoire et si ça vous intéresse vous trouverez plein de sites intéressants et documentés qui en parlent !

 

ESC (Electronic Speed Controller)

TOUS LES TESTS SE FONT SANS HÉLICE ! DANGER !!

Présentation

Sur cette image provenant de Wikipedia, on a la tension de batterie (3S = 11.1v) qui arrive de la droite.
La prise BEC sort du 5volts à destination du récepteur ou autre, le signal PWM est envoyé à l’ESC sur le fil jaune.
A gauche les 3 fils qui vont vers le moteur brushless. A ce sujet j’ai vu des “mecs qui sachent” sur des forums indiquer que ces fils de sortie rouge, jaune et noir vers le moteur brushless transportent l’alim sur le + et le – (rouge et noir) et le signal de commande du moteur brushless sur le fil jaune. Désolé, c’est une grosse connerie (désolé je n’ai pas trouvé d’autre terme, celui-ci s’applique bien dans ce cas). Un moteur brushless n’est pas un servomoteur et ce n’est pas parce que (sur certains ESC) les fils ont la même couleur que ceux des servos qu’ils transportent les mêmes signaux 😉 

Un ESC est un contrôleur électronique de vitesse. Il reçoit une information de type PWM (Pulse Width Modulation), la même qu’on envoie aux servos pour les positionner. Sauf qu’ici on ne pilote pas une position, mais la vitesse du moteur.

Les signaux PWM (Pulse Width Modulation)

Sur le Raspberry Pi il y a une seule sortie PWM matérielle (derrière il y a un circuit spécialisé pour générer ces signaux). Par contre toute sortie GPIO peut sortir un signal PWM si elle est commandée par un programme (une bibliothèque) suffisamment rapide. Il faut parfois accepter de légères variations dans le timing car le système peut parfois avoir besoin du processeur. Dans ce cas la gestion du PWM n’est pas prioritaire et peut entraîner un léger “Jitter” qui va se traduire par un léger grognement du servo et éventuellement un tremblement léger de l’axe de sortie. Ce problème n’existe pas si on privilégie le PWM hardware.

Cliquer pour agrandir

Le signal PWM (Modulation de largeur d’impulsion) est un signal à 50Hz (période de 20ms voir ci-dessus). Toutes les 20ms, une impulsion est envoyée. Sa largeur dépend (en radiocommande) de la position du manche (ou du volant pour une voiture). Il faut noter que l’intervalle entre les impulsions n’a pas d’importance ici. C’est bien le temps de la partie haute qui détermine la valeur transmise.

  • Si le manche est en bas, une impulsion de 1ms est envoyée. Pour un servo cela lui donne l’ordre de se positionner à gauche. Pour un drone le moteur est à l’arrêt et pour une voiture il est en marche arrière.
  • Si le manche est au neutre (au milieu), une impulsion de 1,5ms est envoyée. Pour un servo cela lui donne l’ordre de se positionner au centre. Pour un drone le moteur est à mi vitesse et pour une voiture il est à l’arrêt.
  • Si le manche est en haut, une impulsion de 2ms est envoyée. Pour un servo cela lui donne l’ordre de se positionner à droite. Pour un drone le moteur est à fond et pour une voiture il est en marche avant.

En commande proportionnelle, la largeur d’impulsion est proportionnelle à la position du manche ou du volant, ce qui permet de faire varier de façon continue la position du servomoteur de direction ou la vitesse du moteur.

En plus l’ESC vous parle

Lorsque vous le mettez sous tension il fait entendre une mélodie (cliquez pour écouter)

Vous pouvez écouter cette série de bips en cliquant sur ce lien.

Un ESC vous “parle” en émettant des bips, qui sont en fait des bruits émis par le moteur qu’il fait vibrer pour vous informer. Les bips peuvent différer selon la marque et le modèle. Vous pouvez télécharger la doc de l’ESC EMAX que j’utilise en cliquant sur ce lien EMAX BLHeli ESC.

Piloter un ESC

Le pilotage d’un ESC destiné à commander un des moteurs de drone (je fais les tests avec un quadri rotors) est normalement confié à une carte de pilotage. J’ai une CC3D (Copter Control 3D) qui embarque un microcontrôleur STM32 et un capteur MPU-6000. c’est une carte open source, les schémas, liste de pièces etc. sont disponibles en ligne. Le capteur MPU-6000 est un capteur qui combine  un gyroscope 3 axes et un accéléromètre 3 axes. 

Le récepteur de télécommande (RX à gauche de l’image) reçoit les ordres de la télécommande manipulée par le pilote du drone. Il sort des signaux PWM (un par canal) qui sont envoyés à la carte CC3D (au centre). c’est la carte qui après traitement va commander les ESC et servos (s’il y a des servos). Le pilote donne par exemple l’ordre de tourner vers la droite, c’est la CC3D qui va envoyer les ordres sous forme de PWM aux 4 ESC pour que le drone tourne à droite etc.

On voit la complexité du montage à réaliser, auquel on ajoute encore la télécommande. Les plus téméraires vont brancher tout le bazar et tester. des fois ça arrive à tomber en marche… et des fois, non ! Pour ma part je suis très méfiant et je préfère tester les différentes parties les unes après les autres. Ça permet d’une part de mieux comprendre comment ça fonctionne, et d’autre part de détecter plus rapidement un élément défectueux.

Pour tester chacun des 4 ensembles moteur + ESC, je vais donc envoyer le signal PWM de commande avec un Raspberry Pi. Il y en a toujours (au moins) un sur le bureau, mais j’aurais eu un Arduino ça marchait aussi…

La prise BEC (Battery Eliminator Circuit)

La prise BEC est souvent rencontrée en modélisme. Elle utilise souvent une prise JST à 2 pôles. Ici du fait de la présence d’un fil d’entrée PWM, elle comporte 3 fils. Son nom vient du fait que l’alimentation 5v fournie par cette prise permet d’éliminer une batterie. Par exemple sur un drone, le récepteur devrait être alimenté par une batterie séparée. Ici c’est l’ESP alimenté en 3S (3,7 x 3 = 11,1 volts) qui va fournir ce 5v, éliminant la nécessité d’une batterie supplémentaire.

Sur l’image ci-dessus vous voyez la prise BEC de l’ESC utilisé. Elle est adaptée à la connectique d’un récepteur classique en radio commande. Sur l’ESC on lit qu’il est prévu pour des batteries 2S à 4S. Ce sont des LiPo qui sortent 3,7 volts. L’ESC accepte en entrée de 2×3,7v à 4×3,7volts soit de 7,4 à 14,8volts. Pour ma part j’ai opté pour une batterie 3S de 11,1 volts.
La prise BEC est prévue pour fournir 2 ampères sous 5 volts, largement de quoi alimenter un récepteur de radiocommande sur 2,4GHz et quelques LED de position sur le drone.

Récepteur 2,4GHz. Sur ce côté les pins sur lesquelles les prises BEC sont connectées. Seule la première à droite (marquée Vcc) recevra du 5 volts. le fil sera déconnecté sur les autres prises.

Une seule alim
Pour éviter des soucis d’alimentation qui pourraient se produire sur un quadri copter, le fil rouge (+5v) de 3 des 4 prises BEC est soigneusement débranché et scotché. En effet les 4 BEC des 4 ESC peuvent fournir des tensions légèrement différents aux alentours de 5v et si on branche les 4 BEC sur le récepteur il peut se passer des trucs bizarres…

Installer les outils

Pour le pilotage des ESC à partir des GPIO du Raspberry Pi, je suis parti de l’article de Stéphane auquel vous pouvez vous reporter pour avoir plus de détails.
Le pilotage se fait comme vu ci-dessus en envoyant des signaux PWM à l’ESC. Celui-ci les traduit en commandes pour le moteur brushless.

Quel programme installer sur le Raspberry Pi ?

Allez après toutes ces considérations on arrive à la vraie question : “Et comment je fais avec mon Raspberry Pi ?”.  Plusieurs solutions existent mais celle qui semble le mieux adaptée pour les tests ESC + Brushless est la bibliothèque servoblaster. Servoblaster est un pilote noyau qui vous permet de contrôler 8 (ou plus) servos avec votre Raspberry Pi. Le servo 0 est relié au GPIO 4, pin 7, c’est celui que je vais utiliser pour la suite de l’article.

Récupérez les programmes sur le github de Richard Ghirst

Rendez vous dans le dossier des programmes

Modifiez le fichier init-script en supprimant la valeur –idle-timeout=2000 des options par défaut

# OPTS=”–idle-timeout=2000″

Mettez un # au début de la ligne
Il faut ensuite modifier servod.c

Rendez vous à la ligne 973 (la commande CTRL C vous indique le numéro de la ligne) et vérifier que vous avez :

Si le code est différent, modifiez le pour qu’il soit comme ci-dessus.

Il reste à créer le driver et à démarrer le service servoblaster :

Vous venez d’installer et de démarrer le service ServoBlaster qui a créé une entrée /dev/servoblaster vous donnant accès au contrôle PWM du GPIO.

pi@raspberrypi:/dev $ ls servo* -al
prw-rw-rw- 1 root root 0 août 22 18:26 servoblaster
-rw-r–r– 1 root root 317 août 22 18:26 servoblaster-cfg
pi@raspberrypi:/dev $ cat servoblaster-cfg
p1pins=7,11,12,13,15,16,18,22
p5pins=

Servo mapping:
0 on P1-7 GPIO-4
1 on P1-11 GPIO-17
2 on P1-12 GPIO-18
3 on P1-13 GPIO-27
4 on P1-15 GPIO-22
5 on P1-16 GPIO-23
6 on P1-18 GPIO-24
7 on P1-22 GPIO-25

Pour vérifier que les commandes sont acceptées tapez en ligne de commande :

pi@raspberrypi:/dev $ echo 0=250 > /dev/servoblaster
pi@raspberrypi:/dev $

Si tout se passe bien, votre servoblaster est fonctionnel et vous pouvez passer à la suite. Arrêtez la sortie PWM 🙂

 

Connecter le moteur et l’ESC

Fils du moteur
Ne raccourcissez pas les fils sinon attendez vous à des soucis pour souder les fils ! Le constructeur du moteur a dénudé et étamé son fil émaillé pour faciliter votre travail. Si vous choisissez de raccourcir les fils, il faudra enlever le vernis, étamer le fil convenablement et… ce n’est pas si simple.

Le Raspberry Pi éteint. Connectez l’ESC au moteur. L’ordre des fils n’a pas d’importance côté moteur… Si le moteur tourne dans le mauvais sens ça se modifie facilement en inversant 2 des 3 fils ou alors via le firmware de la carte de commande CC3D (un peu plus tard).

Reliez le fil noir de la prise BEC à la masse pin 6 du GPIO et le fil jaune au GPIO 4 pin 7. NE RELIEZ PAS LE FIL ROUGE DE LA PRISE BEC.

Pour passer en mode programmation, démarrez le Raspberry Pi et mettez les gaz à fond (j’envoie la valeur 200) pendant le démarrage de l’ESC et la séquence de programmation démarre (voir la notice si vous voulez utiliser cette possibilité). Vérifiez que vous avez un extincteur à proximité (nan, je rigole). Connectez l’ESC à la batterie (attention les courant peuvent être importants). vérifiez tout encore une fois avant de mettre sous tension. Vous êtes responsable de vos manips. L’auteur de l’article ou le blog ne peuvent être tenus pour responsables de vos erreurs.

Test des ESC et des moteurs

Il reste à faire la même manipulation avec les 4 ESC et les 4 moteurs. vous pouvez associer un ESC à un moteur en les numérotant, ce qui peut faciliter le dépannage si un des moteurs ne tourne pas, en croisant les ESC et les moteurs (une seule manip à la fois) et en notant soigneusement les différents tests pour pouvoir faire une déduction…

Vidéo

Conclusion

En chemin pour monter un drone “maison” à partir d’un châssis carbone de 250mm, des ESC et des moteurs de diverses provenances, ce test fait partie de la chaîne de tests permettant d’acquérir des connaissances sur le matériel utilisé.

 

Sources

 

 

 

 

 

 

 

 

Share Button

À propos François MOCQ

Électronicien d'origine, devenu informaticien, et passionné de nouvelles technologies, formateur en maintenance informatique puis en Réseau et Télécommunications. Dès son arrivée sur le marché, le potentiel offert par Raspberry Pi m’a enthousiasmé j'ai rapidement créé un blog dédié à ce nano-ordinateur (www.framboise314.fr) pour partager cette passion. Auteur de plusieurs livres sur le Raspberry Pi publiés aux Editions ENI.

5 réflexions au sujet de « Piloter un moteur Brushless avec le Raspberry Pi »

  1. benoit

    Bonjour les framboisiers,

    Tout d’abord, je trouve cette article formidable et très intéressant.

    Je n’ai pas de connaissance très poussée dans le domaine de l’électronique. Mais j’ai toujours eu l’idée de relier une carte électronique avec un moteur était super dangereux sans séparation du courant (via pont de diodes, par exemple).

    Je me trompe ?

    @+

    Répondre
    1. François MOCQ Auteur de l’article

      Bonjour Benoit
      j’utilise des RasPi et des moteurs depuis des années sans souci avec des circuits bien conçus
      le pont de diodes est plutot destiné au redressement de l’alternatif (vous dites “via pont de diode”)
      Avec des moteurs on utilise des ponts en H genre L293D ou L298 effectivement on peut voir un pont de diodes sur les schémas mais elles sont utilisées en protection dans ce cas on ne passe pas par les diodes, elles bloquent les tensions inverses induites lors de la commutation.
      on utilise des diodes anti retour avec les moteurs et les relais quand il y a de la commutation pour éviter le retour de tensions dangereuses sur les GPIO
      A la coupure d’une tension, une bobine génère un tension inverse qui peut détruire le GPIO (commut de relais, moteur à courant continu avec collecteur rotatif…)
      LA solution (en majuscules) c’est l’optocoupleur https://fr.wikipedia.org/wiki/Photocoupleur
      comme nos GPIO sortent du numérique en passant par un optocoupleur c’est la lumière qui transmet l’info et on isole galvaniquement le GPIO du moteur ou du relais
      on trouve des cartes relais optocouplées sur tous les sites en ligne https://www.amazon.fr/Elegoo-Optocoupleur-%EF%BC%94-Channel-Arduino-Raspberry/dp/B06XKST8XC/
      Pour les moteurs c’est plus rare, sauf dans le monde industriel
      cdt
      françois

      Répondre
  2. Bud Spencer

    L’optocoupleur n’est pas forcément une bonne solution en sortie de gpio. Sa conso sur le signal numérique est très élevée (en général entre 5 et 15 mA) en comparaison d’un driver (simple npn ou mosfet n, circuit spécialisé …) qui peut se contenter de seulement quelques µA (et qui si besoin peut driver une iso galvanique). De plus, l’opto ne se soustrait pas à la diode de flywheel car si elle est absente entre l’opto et un circuit inductif, c’est l’opto qui dégage tout comme un driver. Il faut savoir que les chances d’avoir un retour de la tension présente sur collecteur ou le drain d’un switch n sur sa base ou sa porte sont quasi nulle même en cas de fusion du bidule. C’est pour ça que dans la vraie vie, on ne trouve quasiment jamais d’optocoupleur directement en sortie de circuit logique. Hormis ça, très bon article (comme d’habitude) qui lève un peu le voile sur le fonctionnement bien particulier de ces brushless

    Répondre

Laisser un commentaire

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

Complétez ce captcha SVP * Time limit is exhausted. Please reload CAPTCHA.

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.