7 minute(s) de lecture

16bits Cette carte est une interface parallèle 16bits qui peut piloter jusqu’à 8 moteurs pas à pas (Stepper Motor) en mode step/dir à l’aide d’un fichier de trajectoires pré-calculées (GCode file) au format json. Les moteurs peuvent être drivés avec au choix des A4988 (bruyants et dépassés), ou mieux avec des TMC2208 ou TMC2209 qu’il faudra configurer en mode step/dir et non pas UART. L’interface parallèle est gérée par une machine à état hébergée sur un Raspberry-pico. Elle va servir à animer un automate nécessitant jusqu’à 8 moteurs.

Hardware

Matériel nécessaire

Il vous faut:

  • 1 Raspberry PICO, toutes les versions 1 ou 2 sont compatibles.
  • 1 petite diode Schottky 5v 1A, au format DO-41.
  • 1 à 8 moteurs pas à pas 12v de type NEMA17 (j’utilise des modèles NEMA17HE15-1504S)
  • 1 à 8 drivers de moteurs A4988(je ne recommande pas: ils sont très bruyants et peu fiables), ou bien TMC2208 en mode step/dir ou encore TMC2209 en mode step/dir. Attention à ne pas prendre des TMC2208 ou TMC2209 en mode UART: ils ne sont pas compatibles avec cette carte.
  • Une alimentation DC 12v de 360 Watts si vous comptez utiliser 8 moteurs.
  • 1 à 8 micro-switch DIP avec 3 boutons, pour configurer les micro-steps de chaque moteur.
  • 9 condensateurs 25v 100uf, les plus petits en hauteur (il faut les loger sous les drivers TMC)
  • 1 led 5mm pour visualiser la mise sous tension de la carte (j’ai opté pour une led rouge)
  • 1 résistance 1/4watts de 220ohms (pour la led)
  • 1 convertisseur 12v-5v TRACO TSR: leur rendement est excellent.
  • 1 connecteur mâle 12v XT60
  • 1 pin header mâle 4 pins pour connecter l’interface i2c (pour un écran OLED déporté)
  • 1 pin header mâle 2 pins pour connecter un ventilateur 12v
  • 1 à 8 connecteurs mâles 4 pins pour brancher les moteurs
  • 1 connecteur JST mâle 3 pins pour brancher une interface UART
  • 2 à 16 pins header femelles 8 pins afin d’y connecter les 1 à 8 drivers sans avoir à les souder sur la carte.
  • 2 pins headers femelles 20 pins afin d’un connecter le raspberry pico sans avoir à le souder sur la carte.
  • 1 ventilateur 12v 60mm: je recommande un Noctua NF-A6x15 FLX car il est très silencieux.
  • bien entendu la carte PCB que vous pouvez re-faire fabriquer à partir des fichiers GERBER fournis dans ce Github dans le dossier hardware, ou bien vous pouvez me contacter pour voir s’il men reste en stock.

Assemblage de la carte

16bits Si j’ai bien compté, il y a 333 soudures à faire sur cette carte. Les sérigraphies sont assez claires, il faut juste veiller à bien souder les condensateurs dans le bon sens (la patte la plus longue sur le +), ainsi que la led (idem patte la plus longue sur le +) et la diode Schottky dont la cathode est sérigraphiée sur le PCB. Les switch DIP doivent aussi être soudés comme indiqués sur la sérigraphie (“On” vers le “1”).

16bits Pour souder les pins header femelle, je conseille vivement de les souder par paire avec les driver en place (idem pour les pins header femelle du Raspberry-PICO à souder avec le PICO en place): ceci afin de les souder bien droits.

Cliquez pour agrandir l’image.

Placez ensuite le Raspberry-pico dans le sens indiqué par la sérigraphie (prise usb vers le haut). Les drivers sont tous orientés dans le même sens, avec la petite vis de réglage vers la gauche comme sur la photo.

Impression 3D boîtier

16bits Un boîtier à imprimer 3D est à disposition dans le Github du projet dans le dossier 3D_STL. Il y a une partie basse dans laquelle la carte se loge, et une partie haute qui permet de maintenir en place le ventilateur et le passage des câbles (alimentation 12v et moteurs). La partie haute est à imprimer à l’envers: face haute vers le bas, pour éviter de faire trop de supports.

16bits

Connection des moteurs

16bits

J’ai pris en référence un NEMA17HE15 qui a un connecteur 4 fils de 4 couleurs (Noir, Vert, Bleu, Rouge) avec 4 références qu’on retrouve sur chaque connecteur sérigraphié sur la carte (A+, B+, A-, B-). Si les branchements ne sont pas respectés en fonction du moteur choisi, il va vibrer au lieu de tourner correctement.

  • Noir: A+,
  • Vert: B+,
  • Bleu: A-,
  • Rouge: B-

Attention les moteurs doivent se brancher ou débrancher uniquement lorsque la carte est hors tension, sinon vous risquez de les détruire ainsi que les drivers.

Chaque moteur sur la carte est sérigraphié de M0 à M7.

Pour brancher le ventilateur il suffit de brancher les 2 fils +12v et Gnd sur l’emplacement adéquat sur la carte. Si vous avez un ventilateur 3 fils comme avec le Noctua NF A6-X15, repérez bien le fil rouge (+12v) et le fil noir (Gnd). Quand au fil jaune qui sert à mesurer la vitesse du ventilateur: vous pouvez le laisser débranché, la carte ne l’exploite pas.

Micro-stepping des moteurs

Le micro-stepping de chaque moteur (full, 1/2pas, 1/4pas, 1/8pas etc …) est défini à l’aide des DIP micro-switch: 3 positions on/off sont nécessaires pour un A4988, mais seuls les 2 1er on/off seront nécessaires pour les TMC2208 et TMC2209. Suivez les instructions de votre driver pour paramétrer correctement le micro-stepping souhaité.

Attention: ne pas modifier les positions des DIP-SWITCH lorsque les moteurs sont en train de fonctionner: il faut le faire hors tension.

Software

Le firmware de la carte en micro-python est conçu pour fonctionner avec un Raspberry PICO, version 1 ou 2 peut importe. L’interface parallèle 16 bits est gérée par une machine à état.

Micro-python

Si vous installez micro-python pour la première fois sur un Raspberry PICO, cet article en résume les étapes.

Firmware

Le firmware écrit en micro-python est à récupérer sur le Github du projet dans la section software. Il faut bien veiller à récupérer tous les modules.

  • gcode: contient les fichiers de trajectoire en exemple, au format json.
  • sm: module qui gère la machine à état pour l’interface parallèle 16 bits.
  • stepper: module de gestion des drivers.
  • main_automat.py: programme principal qui lance une animation parmi les fichiers de trajectoires qu’il y a sur la carte. Pour une exécution automatique au branchement de la carte, il suffit de renommer ce fichier en main.py. Sinon il faudra relier le Raspberry PICO à l’ordinateur via la prise USB pour démarrer le programme.

Manuel d’utilisation

Fichiers de trajectoires

Pour animer un automate avec 8 moteurs max, il faut préparer un fichier de trajectoires pré-calculées au format json à déposer dans le dossier /gcode sur le microcontrôleur. Ce fichier json a la structure suivante:

  • “COMMENT”: ligne de commentaire
  • “DRIVER”: il faut préciser ici les drivers utilisés entre A4988, TMC2208 ou TMC2209
  • “FREQ-SM”: il s’agit de la fréquence de fonctionnement en Hz de la machine à état. Plus elle est élevée (exemple 700 Khz), et plus les moteurs vont tourner vite. Si vous dépassez 1Mhz (voire 600KhZ pour des A4988) ça ira trop vite les moteurs ne pourront pas suivre la cadence.
  • “MODE”: il faut indiquer LOOP ou UNIQUE selon qu’on veut rejouer l’animation en boucle ou pas.
  • “GCODE_SEQ”: on retrouve ici l’animation à jouer pour chaque moteur numéroté de 0 à 7.

Pour un moteur donné, une animation consiste en une liste d’ordres qui sont exécutés les uns après les autres. Chaque ordre de chaque moteur est synchronisé au cycle d’horloge près par l’interface parallèle. Un ordre est une chaîne de caractères qui doit respecter ce pattern: ax_sn_dy_vz où x, n ,y et z sont des entiers:

  • a représente l’action: x vaut 1 ou 0. 1 signifie au moteur d’avancer, 0 signifie de stopper.
  • s représente le nombre de steps: n est le nombre de steps où le moteur doit tourner (si x=1) ou le nombre de steps où il doit rester immobile (si x=0)
  • d représente la direction de rotation du moteur: y vaut 1 pour le sens horaire, 0 pour le sens anti-horaire.
  • v représente la vitesse de rotation. Dans ce mode le moteur bouge d’un step et marque un arrêt de z steps. Ainsi z=0 correspond à la vitesse maximale, tandis que z=1 fera tourner le moteur 2 fois plus lentement (1 step sur 2 il ne bouge pas), … , z=n fera tourner le moteur (n+1) fois plus lentement que z=0.

Exemples:

  • a1_s400_d1_v0: le moteur tourne de 400 steps dans le sens horaire, vitesse maximale.
  • a0_S400_d1_v0: le moteur s’arrête pendant 400 steps dans le sens horaire, vitesse maximale: cet arrêt va durer exactement le même temps que s’il tournait de 400 steps dans le sens horaire à vitesse maximale.
  • a1_s300_d0_v2: le moteur fonctionne 300 steps dans le sens anti-horaire à la vitesse 2 (il bouge 1 step et marque un arrêt de 2 steps).

exécution d’un fichier de trajectoires

Rien de plus simple, il suffit d’instancier un objet Automat en précisant le fichier gcode à utiliser:

appl = Automat(gcode_file='gcode/test_automat.json')

Evolution en cours

Les évolutions suivantes sont en cours de réalisation:

  • Interface WEB pour piloter la carte depuis son smart phone. Il faudra utiliser un Raspberry pico 1 ou 2 en version W.
  • Interface UARt pour communiquer le fichier de trajectoires en série, depuis une autre machine.