Exigez l’open source !

Date de publication sur blog d’origine : 11 Janvier 2019

Pilotage par Arduino de moteur brushless

[ Réédition : Visiblement j’ai dans cet article redécouvert la « régulation de tension par hachage » qui était sans doute déjà évidente à certains, qui dans leur grande mansuétude me pardonneront ; l’article aborde cependant un sujet bien plus large que cela. Le titre est par ailleurs racoleur et un poil démago, bien sûr. Plus précisément, ici on parlera du fait de contrôler une carte éventuellement propriétaire qui elle même pilotera le moteur, mais par un signal envoyé par Arduino ou tout autre signal en « PWM » et donc à l’aide d’une interface open-source !]

Si vous voulez la remise en contexte et la découvertes de plein d’expériences et de projets intéressants, lisez tout. S’il ne s’agit que de savoir comment procéder passez aux derniers paragraphes

Le petit monde des moteurs brushless et des assistances Open Source

Ceux qui se penchent sur la question du pilotage des vélos à assistance électrique les plus répandus, équipés de moteurs sans charbon (brushless) perçoivent vite que l’électronique sous le capot est complexe. Le moteur brushless fonctionne par une synchronisation de plusieurs bobines (un multiple de 3 sur les VAE, peut être même tout simplement trois) qui ainsi se magnétisent et engendre la réaction de pulsion/attraction qui entraîne la rotation du moteur. Il faut connaître la position du rotor par rapport au stator à chaque instant pour que les transistors du contrôleur alimentent tantôt une bobine, tantôt une autre. Vous n’avez pas envie que votre moteur mal synchronisé résiste soudainement à votre coup de pédale alors que vous êtes sans les mains, ou en danseuse, ou en descente dans un virage en épingle à cheveux. Ok, dans ce dernier cas normalement on s’arrête de pédaler et et le moteur n’est plus alimenté non plus, pas au delà de ce que sa propre inertie exige. Mais on retiendra par ces illustration que l’électronique de piotage est cruciale, ne s’improvise pas.

C’est sans doute pour cela que le pilotage du moteur brushless est resté longtemps dans le domaine propriétaire. Quelques grosses boites ayant développé leurs cartes de contrôle ont pris d’assaut le marché et vendent à un prix suffisamment raisonnable pour que peu trouvent à y redire.
Un ESC (electric speed control) pour moteur à charbon, c’est plus rudimentaire. On l’achète pour pas cher et on peut même le faire soi-même simplement avec un transistor alimenté par le PWM d’un Arduino qui lui indiquera le niveau de puissance requise. C’est très simple et tant mieux, on peut ainsi facilement piloter le moteur. Pourquoi pas prochainement ici, et même certainement, piloter un moteur à charbon pour assistance électrique. C’est simple, c’est moins cher qu’un moyeu de roue motorisé brushless, il faut juste le monter sur une chaîne indépendamment du moyeu, et programmer le code alimentant pilotant le MOSFET qui alimente le moteur.

Pour un moteur brushless c’est plus compliqué.
J’ai passé du temps, à me renseigner, chercher comment on pouvait le faire (avec l’allusion au départ que le petit autodidacte que je suis pouvais y arriver), qui le faisait. Et par miracle ou par obstination, il s’est avéré que les réponses documentées et expérimentées se faisaient notamment pas loin de chez moi.

J’ai d’abord entendu parler du projet Hope’n Bike, qui liait la super Maison du Vélo de Caen, le Fablab de la même ville, et la mission locale, dans une ambition d’aide à la mobilité des jeunes et précaire, et de formation de certains à la conversion de vélo en VAE, le tout en Open Source.
Je n’ai pas été encore vérifier, mais il semble que le succès est mitigé. Plus personne dans la presse n’en parle, comme si c’était laissé en stand by. Le projet a plutôt abouti, il s’est fait au moins quelques prototypes fonctionnels. il faudrait aller voir de plus près. Mais le projet documenté sur GitHub n’avance plus. Les différents éléments sont documentés selon des formats de logiciels d’électronique différents, chacun difficile à s’approprier. C’est le revers de la médaille  de l’opensource spontané, on est plein de bonne volonté mais ne se coordonne pas, et ça en devient difficile à s’approprier.

Une autre solution très intéressante et approuvée est le modèle de Vedder.se . Vedder c’est un génie suédois qui a fait sa propre carte de pilotage de moteurs BLDC, et par dessus le marché le programme sur ordinateur permettant paramétrer le fonctionnement attendu puis flasher le code correspondant sur la carte. Le tout en Open Source bien sûr.  Il vend sa carte  100 euros environ, raisonnable sans doute pour une carte capable de balancer du 100 ampères sans griller .Une communauté a émergé autour de son projet, utilisé pour différents types d’engins notamment trottinettes et skateboards électriques. C’est grâce à My Human Kit que que moi et quelques rennais avons pu découvrir cela récemment, un fablab dédié aux questions de dépassement du handicap, dans le cadre d’un Hackathon coorganisé avec la Petite Rennes dédié à un une roue motorisée amovible de l’avant d’un fauteuil roulant

Bon mais nous on balance déjà entre 40 et 150 Watt de puissance musculaire dans les pédales, a-t-on besoin d’une carte capable de balancer 100 A * 36 V =3600 W ?
C’est surdimensionné, évidemment, mais la compréhension de cette carte est aussi par ailleurs hors de portée de ma patience ou de mon cerveau, et de ceux de beaucoup d’usagers lambdas du vélo. J’ai beau avoir cherché à comprendre comment communiquer avec la carte, je me rappelle plus si on la piloter en tension, je vous laisse aller voir, mais les autres méthodes (« UART » « PPT »…) m’étaient inaccessibles.  On est dans l’Open Source, et c’est très bien, mais pas adapté au vélo et aux bricoleuses et bricoleurs moyens. Pour des raisons de budget, de complexité, et de puissance requise. Il faudrait donc dans l’idéal trouver une autre solution.

Et alors concrètement, on fait comment ?

Heureusement il y a moyen d’acheter des cartes moins puissantes et moins chères. C’est chose faite depuis quelques temps déjà. Il faut maintenant en prendre le contrôle.

Ladite carte se commande en tension. Avec une tension plus ou moins importante, entre 0 et 5V, on lui demande quelque chose ente laisser le moteur à l’arrêt et envoyer toute la purée. Ce type de commande est pratique pour un pilotage manuel. Un potentiomètre faisant office de pont diviseur de tension, brancher les deux broches des côtés sur du 5v et la masse permet à la broche du milieu d’envoyer la tension désirée.

Très pratique, sans doute très sollicité en Chine, ou le vélo est directement électrique sans assistance. Une poignée de gaz en guise de potard, et biiim, c’est parti les petits loups.
Le problème de ce pilotage  c’est qu’il n’est pas directement adapté à un pilotage électronique de la carte. Je ne sais pour ma part qu’utiliser Arduino, ou des microcontrôleurs Atmel, donc il fallait trouver une solution pour qu’un signal de sortie d’Arduino, selon certaines conditions (celles de la réglementation européenne notamment  : arrêt du moteur en cas de freinage, au delà de 25km/h ou de non pédalage) permette de solliciter la carte et le moteur. Pour avoir un signal analogique, on a du PWM à 5V : un clignotement entre 0V et 5V avec une proportion modulable de 0 ou de 5 V .

Allez zou, il nous faut transformer le PWM en vrai signal analogique. Il nous faut donc pour cela trouver de quoi lisser le signal, transformer des impulsions plus ou moins longue en proportion de la période, en tension plus ou moins haute sur une échelle de 0 à 5 V.

Ça semble simple comme ça, moi je ne savais pas faire. Et les recherches en lignes ne furent pas si simple qu’on en a l’habitude. Peu de gens documentent et publient ce genre de montage pourtant accessible à l’électronicien presque débutant. C’est cette page là et leurs auteurs que je dois remercier.
Il fallait encore adapter le montage à du 0-5V au lieu de 0-10V. (Je crois qu’une partie du montage est inutile ou peu utile, le filtre passe-bas de sortie) Après plusieurs tâtonnements sur un site de simulation, on trouve quelque chose de relativement linéaire et proche de 0-5 ici.

capture du 2019-01-11 00-57-12

Voilà, je suis content d’avoir réussi à mettre ça au point. Bientôt il n’y aura plus qu’à coder le reste des instructions sur Arduino et l’agrémenter d’un petit « digitalWrite » pour donner un ordre directement convertit en analogique pour le pilotage du moteur.