Table XYZ carte interface grbl

De Wiki LOGre
Aller à : navigation, rechercher


Cette page a pour but de documenter la réalisation ainsi que la mise en oeuvre d'un carte d'interfacage entre les entrées/sorties de contrôle des 3 axes de la table XYZ et un Arduino sur lequel tourne le firmware GRBL, afin d'interpréter du G-code et de piloter la table XYZ.

GIT

Pour importer le répertoire GIT de documentation et de développement :

git clone git@logre.eu:TableXYZ

Le dossier contenant les fichiers relatifs est le dossier : TableXYZ/NouvellesCartes/Shield_Grbl

Présentation

Grâce au super boulot d'observation et de documentation effectué par notre cher ami Marc qui a tout consigné sur la page de la Table XYZ, nous savons que nous pouvons contrôler le déplacement des trois axes de la machine, en pilotant les différents signaux regroupés sur le connecteur HE10 34 pins femelle décrit sur la page Table XYZ au chapitre "Pilotage Logique des Axes"

Connecteur d'entrées/sorties de la Table XYZ

Les commandes d'entrée des drivers (Horloge et Direction) des moteurs des trois axes XYZ + W ainsi que les retours des butées de début et fin de course des axes XYZ sont tous regroupés sur le même connecteur. C'est un connecteur câble à carte de type HE10 34 pins femelle décrit sur la page "Table XYZ" au chapitre "Pilotage Logique des Axes" Voici le schéma de câblage du connecteur :

Entrées-Sorties Axes sur Carte "Horloge 4 voies"

Firmware GRBL Arduino

Le firmware GRBL a pour vocation d'être un firmware, qui tourne sur micro-contrôleur Atmel Atmega328p utilisé notamment par les plateformes Arduino, open-source fiable et robuste pour piloter simplement et efficacement de petites CNC. Le projet est documenté sur | github .

Le rôle du firmware est d'interpréter les commandes G-code envoyées par un ordinateur au micro-contrôleur via la liaison série et de piloter le déplacement du spindle sur les 3 axes en prenant en compte notamment l'accéleration et la décélération lors des déplacements de celui-ci.

Configuration des I/Os d'un Arduino flashé avec GRBL

Par défaut une carte de type Arduino Uno, flashée avec le firmware GRBL, possède ses entrées/sorties comme indiqué sur la photo ci-contre :

Entrées-Sorties d'un Arduino Uno flashé avec le firmware GRBL

Le raccordement d'un Arduino flashé avec GRBL est décrit | ici

On retrouve les pins "direction" et "step pulse" pour chaque axe qui correspondent aux entrées repérées "Sens, Direction" et "Horloge, Step" du connecteur HE10 de la table XYZ

Il n'y a qu'une pin "limit" par axe implémentée avec une résistance de pull-up interne. Il faut donc mettre en parallèle les deux interrupteurs de butée de début et de fin de course normalement ouverts entre la pin de l'Arduino correspondant à l'axe et la masse.

Il y a aussi trois pins de contrôle qui, comme les pins "limit", sont cablées avec une résistance de pull-up interne et qu'il convient donc de connecter à un interrupteur normalement ouvert entre la pin et la masse pour obtenir un contrôle de la fraiseuse sur un panneau frontal : - cycle start / Resume - feed hold - reset / Abort

Il y a deux pins qui permettent d'allumer le spindle ainsi que de contrôler sa vitesse de rotation ou son sens de rotation, selon la version de GRBL flashée.

Carte d'interface Arduino-GRBL / Table XYZ

Mapping des IOs de l'Arduino

Nom de la pin Numéro de pin arduino Fonction sur le shield Numéro de pin Connecteur HE10 - 34
5v 5v 5v 32
GND GND GND 30? 34 33
Direction Z D7 Connexion directe vers la Table XYZ 19
Direction Y D6 Connexion directe vers la Table XYZ 17
Direction X D5 Connexion directe vers la Table XYZ 16
Step Pulse Z D4 Connexion directe vers la Table XYZ 13
Step Pulse Y D3 Connexion directe vers la Table XYZ 11
Step Pulse X D2 Connexion directe vers la Table XYZ 9
Stepper Enable/disable D8 pull-down MOSFET + Connecteur header NC
Limit Z D11 Connexion directe vers la Table XYZ 25 & 26
Limit Y D10 Connexion directe vers la Table XYZ 23 & 24
Limit X D9 Connexion directe vers la Table XYZ 12 & 14
Spindle Direction D13 pull-down MOSFET + Connecteur header NC
Spindle Enable D12 pull-down MOSFET + Connecteur header NC
Reset/Abort A0 Connecteur header pour connecter poussoir du panneau de contrôle NC
Feed Hold A1 Connecteur header pour connecter poussoir du panneau de contrôle NC
Cycle Start/Resume A2 Connecteur header pour connecter poussoir du panneau de contrôle NC
Coolant Enable A3 pull-down MOSFET + Connecteur header NC
Probe A5 Header 2x1 pour futur ajout de palpeur NC

Schematic

Schematic du shield

Layout de la carte

Apercu du layout shield

Debug de la carte

Lors de la mise en route de la carte d'interface nous avons découvert quelques defauts de conception, ils sont listé ci dessous pour servir de base de travail en cas de conception d'une v2.

  • Les butées de fin de course sont normalement fermées, or sur le shield les butées de fin de course + et - sont court-circuitées (le malheureux concepteur de la carte pensait que les butées étaient normalement ouvertes ...). Un montage inversé la polarité des fins de course à la sortie des opto-coupleurs puis réalisant la fonction d'un OU logique a été greffé sur la carte (Merci Marc). Le schema de la modification est donné ci-contre
Schematic du shield
  • Le shield arduino tel que présenté plus haut court-circuite le 5v fournit par le port usb de l'ordinateur avec le 5 fournit par la table XYZ. Des que nous allumons le relais activant l'alimentation 80v des moteurs pas à pas de la machine, les sorties 5v se mettent a osciller et transmettent donc des informations aléatoires sur l’état des butées à l'arduino. Un modeste "coup de cutter" sur la piste reliant le 5v du connecteur HE10 au connecteur arduino a été opéré. Le suspense est a son paroxysme en attendant la prochaine session au logal pour tester ce fix. (nous avons avant cela essayé de connecter la masse "power" avec la masse "clean" du system sans resultat).
  • Il serait judicieux de modifier le profil extérieur du shield et notamment son coin nord ouest (où le petit smiley est dessiné) afin de permettre l’accès au bouton poussoir reset de l'arduino qui se situe en dessous.
  • Reprise du debug été 2017 sous l'impulsion de gremunch apres un trop long hivernage : Nous avons put tester la carte qui permet effectivement de faire se deplacer le charriot Voir le bipbip dessiné par Greg.

Nous obtenons cependant une erreur lorsque nous activons les fins de course a cause d'un des end stop de l'axe Y considéré toujours actif par le micro. Il y a une petite carte pcb sur chacun des axe X et Y faisant l'interface entre le end stop OPB847 et le connecteur HE10.

Voici le schema électrique de cette carte:

schema du pcb d'interface entre end stop et connecteur DB9

voici une photo de la carte d'interface de l'axe X qui fonctionne.

Photo du pcb d'interface entre end stop et connecteur DB9 (qui marche aka de l'axe X)

Sur le pcb de l'axe Y il manque un des npn (type 2N3904) et celui ci à été remplacé par une goute de soudure court-circuitant ce qui aurait dut etre sa base et son emetteur.

Photo du pcb d'interface entre end stop et connecteur DB9 de l'axe Y où l'on constate qu'il manque un npn qui a été remplacé par une goûte de soudure

Si on regarde le schéma de la carte d'interface entre les opto-coupler et les connecteurs DB9 on voit que quand le transistor bipolaire interne de l'opto-coupleur est ON (quand la butée n'est pas enclenchée) cela court-circuite la base et le collecteur du transistor NPN sur la carte.

Le transistor NPN sur la carte d'interface est donc polarisé en diode quand celui de l'opto-coupleur est passant et les noeuds es1 ou es2 sont donc polarisés a un potentiel de 0.5v (mesuré) quand la butée n'est pas enclenchée.

L'opto coupleur sur lequel le npn a été remplacé par une goute de soudure quand à lui présente bien une tension de 0v sur es1 ou es2 quand la butée n'est pas enclenchée et 5v dans le cas contraire.

La butée sur laquelle le bip a été remplacé par une goute de soudure marche donc encore mieux marcher que celle avec le transistor présent il faut donc chercher la cause du problème ailleur.

On constate en observant le cablage du end stop de la carte Y qu'il n'est pas correct

Photo du pcb d'interface entre end stop et connecteur DB9 de l'axe Y où l'on constate un cablage suspect du end stop

En effet voici la correspondance des couleurs des fils au pins du end-stop correcte:

couleur du fil numéro de pin PCB Pin du end-stop connection sur le pcb
Jaune 1 Collecteur npn Signal end-stop sur DB9 / Collecteur du bnpn du PCB
marron 2 Anode 5V ou R 100 ohms
Blanc 3 Emmeteur npn Base npn
Vert 4 Cathode Gnd ou R 100 ohms

cablage des opto coupleurs

Dans le cas du end stop de l'axe Y au cablage suspect nous avons le schema suivant :

mauvais cablage des opto coupleurs

Si ce schéla est exact les deux DEL ne sont pas correctement alimentées et donc les npn des coupleurs sont toujours bloqués. Du coup les deux signaux des end stop sur le connecteur DB9 sont tirés à 5v par leur résistance de pull-up ce qui a pour conséquence d'activer la buttée. IL faudrait recabler le pcb correctement et re -tester ainsi

Firmware GRBL

Compilation du Firmware

Pour utiliser les bonnes pins (firmware version 0.9j), il faut commenter une ligne de config.h et avoir au final :

// #define VARIABLE_SPINDLE // Default enabled. Comment to disable.

Configuration du Firmware

Pour configurer le firmware, on y accède par exemple avec picocom sous Linux :

picocom -c -b115200 /dev/ttyACM0

Modifier /dev/ACM0 pour pointer sur le bon port, Ctrl+a,Ctrl+x pour quitter picocom

Ensuite on peut :

  • afficher la configuration actuelle avec $$
  • modifier la valeur d'une ligne x avec $x=valeur

Configuration à utiliser

Configuration provisoire et demandant à être raffinée. Principaux éléments à modifier :

$0=12 (step pulse, usec) (augmenter encore si besoin)
$2=7 (step port invert mask:00000111)
$3=1 (dir port invert mask:00000000) (directions à préciser devant la machine)
$5=0 (limit pins invert, bool) (à 0 avec le shield patché par Marc)
$12=0.010 (arc tolerance, mm) (résolution minimale 0.010 sur Z)
$20=1 (soft limits, bool) (mettre à 0 pendant les tests si ça pose problème)
$21=1 (hard limits, bool) (mettre à 0 pendant les tests si ça pose problème)
$22=1 (homing cycle, bool) (mettre à 0 pendant les tests si ça pose problème)
$23=0 (homing dir invert mask:00000000) (directions à préciser devant la machine)
$100=10.000 (x, step/mm) (résolution X : 0.2mm, à ajuster finement si besoin)
$101=10.000 (y, step/mm) (résolution Y : 0.2mm, à ajuster finement si besoin)
$102=100.000 (z, step/mm) (résolution Z : 0.01mm, à ajuster finement si besoin)
$110=10000.000 (x max rate, mm/min)
$111=10000.000 (y max rate, mm/min)
$112=10000.000 (z max rate, mm/min)
$120=250.000 (x accel, mm/sec^2)
$121=250.000 (y accel, mm/sec^2)
$122=100.000 (z accel, mm/sec^2)
$130=495.000 (x max travel, mm) (course utile X, à ajuster finement si besoin)
$131=397.000 (y max travel, mm) (course utile Y, à ajuster finement si besoin)
$132=46.000 (z max travel, mm) (course utile Z, à ajuster finement si besoin)

Ordre des bits des masques 00000ZYX