dimanche 26 septembre 2021

Tmotor

 

 J'ai découvert des moteurs (soit-disant ?) open hardware assez puissant

https://www.youtube.com/watch?v=WKRLlthr9kY

Teardown

 


 

Installation

J'ai commandé avec les moteurs un module d'interface Rlink (NOTE : ce module est déjà obsolète une V2 avec plus de fonctionnalité et mieux documentée est sortie. La première version du logicielle était défaillante, et la deuxième (V1.2) est en chinois...)
Les branchements sont assez évidents.
L'installation du logiciel sur un PC windows s'est bien passé, et j'ai pu lancer l'exécutable R-LINK Config Tool.exe, qui ouvre une interface graphique.

Par contre lors du branchement du module Rlink, pas d'apparition du matériel USB dans le gestionnaire de périphérique, ni d'apparition du port COM dans R-Link. L'installation automatique des drivers n'a pas été possible (USB Serial), et la documentation ne donnait aucune information sur ce sujet.
Après installation de différents drivers trouvés au hasard sur internet, j'ai par chance trouvé le bon.
CH341SER.zip https://tropratik.fr/wp-content/uploads/2021/02/CH341SER.zip
Il m'a également fallu copier à la main le fichier .inf pour x64 et peut-être faire uninstall, puis install, mais ça a fini par marché.



La tension max n'est pas non plus très claire dans la documentation 24V ou 48V ?

J'ai utilisé une batterie 6S 1OA.h de Turnigy. J'avais préalablement préparé un câble pour passer du connecteur XT90 de la batterie au connecteur XT30 du moteur.


Fixation

Sur mes premiers essais, le moteur était juste posé. Je recommande fortement de le visser, car sur un emballement du moteur, le câble de connexion s'est enroulé autour du moteur et a cassé. Pour cela prévoir des vis M3 20mm pour une fixation par l'arrière, ou plus courte pour une fixation d'une plaque sur l'avant.

Prise en main

Une fois les drivers installés, le port COM est apparu et j'ai pu me connecter au module R-link avec les paramètres par défaut.


La documentation est assez légère.

L'onglet configuration permet d'avoir une communication série avec le moteur. Des informations apparaissent lorsque l'on alimente le moteur. En cas de tension d'alimentation insuffisante (j'ai commencé avec 6V au lieu de 24V), une erreur apparait également.

Il est ensuite conseillé de faire une calibration moteur en envoyant un "c" dans la commande

Le moteur va faire un tour complet dans un sens puis dans l'autre (1/6ème de tour en sortie après le réducteur). Les mesures sont affichées sur l'écran


 


En tappant "e", il es possible d'avoir un retour de la position du moteur. Il y a cependant un bug et dans les retours de ligne et l'affichage est décalé.

En tappant s, on peut visualiser et modifier les paramètres du moteur, par exemple le CAN id (1 par défaut). ATTENTION, une coupure électrique du moteur semble nécessaire pour la prise en compte des changements.


 

 Pour plus d'information voir le doc de Ben Katz qui fut à l'origine du projet de contrôleur open source au MIT https://docs.google.com/document/d/1dzNVzblz6mqB3eZVEMyi2MtSngALHdgpTaDJIW_BpS4/edit

ATTENTION : la saturation en intensité ne semble pas prise en compte sur mes moteurs !

Saturation à 10A non respectée (testée aussi à 1A et après redémarrage)


Une fois l'id fixé, il est possible de retourner dans les autres onglets pour visualiser l'état du moteur.

Il faut d'abord choisir la bonne adresse (le logiciel revient parfois à 0, alors que l'adresse 1 était utilisée par défaut dans mon cas).

Ensuite, en appuyant sur Run, les courbes commencent à défiler (position, vitesse et intensité).

De manière étrange, la position est limitée à 2 tours dans un sens et 2 tours dans l'autre avant de sauter. Avec le rapport de réduction de 6, cela correspond logiquement à +/-12 tours du moteur et de l'encodeur, soit un peu plus de +/-75radians pourtant la position va jusqu'à +/-95.5rad. Mystère !

C'est dommage que la position soit limitée ainsi alors que plusieurs tours de l'encodeur sont déjà réalisés, la difficulté du multi-tour semble donc déjà traitée.

Le moteur n'est toujours pas actif et il est possible de tourner l'arbre de sortie à la main facilement.

Si l'on clique sur "Enter M_Mode", le moteur devient actif. Il est toujours possible de le tourner, mais cela devient plus difficile. "Exit M_Mode" permet normalement de stopper la tension du moteur, mais PRUDENCE le moteur s'est parfois emballé à grande vitesse pendant mes essais, sans possibilité de l'arrêter sans couper directement l'alimentation. Pas très rassurant pour la suite.

Contrôle du moteur via l'interface

Les cases à cocher permettent juste d'afficher les consignes de position, de vitesse et de couple torque (intensité en réalité), mais n'a pas d'effet sur le contrôle.

Pour vraiment contrôler le moteur, il va falloir changer les paramètres Kp (raideur), Kd (amortissement) ou torque (feedforward). Attention DANGER ! Si on augmenter le paramètre Torque tout seul, le moteur accélère sans fin, atteint une très grande vitesse et perd son contrôle !!!

Le paramètre Kd permet de contrôler la vitesse du moteur, grâce à la vitesse dérivée de la position de l'encodeur. ATTENTION aussi ici, à partir d'une certaine vitesse, la vitesse est mal mesurée et peut changer de signe, ce qui peut amener à un emballement du moteur.

Problème sur la mesure de vitesse : ne jamais aller dans cette zone avec un contrôle en boucle fermée !


Le paramètre Kp, va permettre d'aller à une position précise, mais ATTENTION ici aussi, la plage de contrôle est limitée, une fois que l'on dépasse 95.5 rad on passe à -95.5 radians. Cela peut perturber le moteur qui peut encore une fois s'emballer, et ça fait peur, surtout si le moteur n'est pas solidement fixé, il va bouger juste avec son inertie.

 ATTENTION

Comme vous l'aurez peut-être compris j'ai eu des problèmes avec mon premier moteur qui s'est mis plusieurs fois dans un état instable où j'ai du couper l'alimentation, le moteur tournant très vite et dans tous les sens. Le moteur chauffe alors énormément et c'est peut-être l'origine de la panne qui est ensuite apparue. Celle-ci se caractérise par un problème de lecture de l'encodeur qui fait des petits sauts ou des grands sauts (en fonction de la position dans laquelle je lance une nouvelle calibration). Ces sauts créent du bruit dans le calcul de la vitesse et le moteur s'emballe.

Saut de la position de l'encodeur


Vitesse bruitée suite à un problème sur l'encodeur (ou la calibration)

 La calibration semble chercher corriger un problème de non-linéarité, mais ne se finit jamais.




Contrôle externe du moteur

J'ai trouvé quelques bibliothèques sur github. Je ne les ai pas encore testé.

Bibliothèque python (nécessite un module USB-CAN)
https://github.com/vyas-shubham/mini-cheetah-tmotor-python-can



Bibliothèque arduino
https://github.com/DGIRobo/Mini-Cheetah-Motor-V3-Control-By-Arduino_CANShield/blob/master/gim8008V3.cpp (projet incomplet)

https://github.com/MihaiMoldovanu/robotic/blob/68a58475ef3fd61797a2dd0e90c213f72f91026b/arduino/CAN_bus_robot.ino


J'ai fait quelques tests avec un arduino MKR zero et un shield MKR can, mais sans succès jusqu'à présent.

Aller plus loin

Différentes versions de code source du contrôleur existe, sans que je sache laquelle est la mienne.


https://os.mbed.com/users/benkatz/code/HKC_MiniCheetah//file/fe5056ac6740/main.cpp/
https://github.com/bgkatz/motorcontrol

https://os.mbed.com/users/Wooden/code/BLDC_V2//file/a74e401a6d84/Calibration/calibration.cpp/

La compilation se fait avec :
https://os.mbed.com/studio/

Voir aussi les docs de Bart Dring
https://docs.google.com/document/d/1QIEI6IdHOcW4N1cRyucb33io4LriNYafIMs1sjLfTQU/edit

 
Les actuteurs mini-sheetath ont normalement un port pour une carte ST-Link V2 qui permet de faire une mise à jour directement
https://www.youtube.com/watch?v=2jzKCeKifuY!

Sur le Tmotor, le port ST-Link V2 est normalement accessible en ouvrant le capot, mais sur ma version il semble avoir disparu, tant et si bien que je ne vois pas comment procéder à une mise à jour firmware.


Doc des composants

Encoder
https://www.monolithicpower.com/en/ma702.html