Le "plotter"

Traceur de PCB

Projet de traçage de circuits imprimés.
Pour ce projet, je ne vais pas tout développer, juste mettre en œuvre GRBL.
C'est quoi GRBL? Un pilote de CNC (Lire machine à commande numérique).

Materiel
  • Objectif :Imprimer des circuits imprimés double faces.
  • Moyen:
    • Utilisation d'un processeur ATmega328P sur Arduino Nano
    • Énergie utilisée : Alim 230V AC -> 5V DC
    • Commande : USB
    • Moteur : 2x 28BYJ-48 5V avec driver NPN Darlinton ULN2003
    • Servomoteur : SG90
    • Capteur de fin de course : 2xMicro Switch miniature 3 Bornes
  • Sources:
    • Le programme GRBL : https://github.com/ruizivo/GRBL-28byj-48-Servo
    • Sketch uses 29,814 bytes (97%) of program storage space. Maximum is 30,720 bytes.
      Global variables use 1,490 bytes (72%) of dynamic memory, leaving 558 bytes for local variables. Maximum is 2,048 bytes.
La partie mécanique J'ai pris une base sur le net en "sketchup", mais je ne sais plus où. Je l'ai entièrement retraité sur Solidworks 2016.
Les options ajoutées :
  • Capteurs de fin de course
  • ??
Les fichiers 3D seront bientôt disponibles ici, après avoir réalisé les pièces avec une imprimante 3D Ultimaker 2+ extend.
La partie électronique

Branchement de l'arduino NANO

Les moteurs (28byj-48) sont connectés à une carte contrôleur qui utilise l'ULN2003.
Les branchements sont les suivants :
Branchement Arduino Nano/Moteurs
NANOULN2003AxeNANOULN2003AxeNANOAutre
D21N1Axe XA01N1Axe YD11Servo Z
D31N2A11N2D10Limite X
D41N3A21N3D9Limite Y
D51N4A31N4 

Configuration avant compilation

Grbl 0.9i avec servomoteur
GRBL 0.9i avec support de servomoteur. Utilisez le code PIN D11 pour piloter le servo.
Utilisez les commandes M03 Sxxx (xxx entre 0 et 255) pour faire tourner le servo entre 0-180.
La commande M05 tourne le servo à zéro degré.
Vous pouvez modifier la durée de l'impulsion dans le fichier spindle_control.c:

#define RC_SERVO_SHORT     15       // Timer pour une durée d'impulsion de 0,6 ms (9 pour 0.6ms)
#define RC_SERVO_LONG      32       // Timer pour une durée d'impulsion de 2,5 ms (39 pour 2.5ms)    
//#define RC_SERVO_INVERT     1     // pour inverser la direction de du servo
Si vous souhaitez que le servo fonctionne de 0 -> 180 degrés, changez RC_SERVO_SHORT et mettez 9, RC_SERVO_LONG et mettez 39.
Si vous souhaitez inverser la direction de l'asservissement, décommenté la ligne ci-dessus.
La partie informatique

- 1ère Phase

Mettre le programme dans l'arduino

  • Télécharger le fichier GRBL : grbl.hex
  • Téléversez ce fichier sur votre arduino nano préféré :
    avrdude -C ..\etc\avrdude.conf
    -p m328p -c arduino -P COM5 -b 57600 -U flash:w:"grbl.hex":i

2ème Phase

Configurer votre GRBL

On peut configurer GRBL afin qu’il s’adapte aux réglages de notre CNC grâce au moniteur série.
Pour cela, ouvrez le moniteur série de Arduino IDE (Outils > Moniteur série).
Réglez la vitesse à 115200 baud et sélectionnez nouvelle ligne.
Grbl 0.9j ['$' for help]
Si vous tappé "$" il devrai mettre ça:
$$ (view Grbl settings)
$# (view # parameters)
$G (view parser state)
$I (view build info)
$N (view startup blocks)
$x=value (save Grbl setting)
$Nx=line (save startup block)
$C (check gcode mode)
$X (kill alarm lock)
$H (run homing cycle)
~ (cycle start)
! (feed hold)
? (current status)
ctrl-x (reset Grbl)
ok
ok
Avec "$$", il sort l'ensemble des paramètres suivants :
$0=10 (step pulse, usec)
$1=25 (step idle delay, msec)
$2=0 (step port invert mask:00000000)
$3=0 (dir port invert mask:00000000)
$4=0 (step enable invert, bool)
$5=0 (limit pins invert, bool)
$6=0 (probe pin invert, bool)
$10=3 (status report mask:00000011)
$11=0.010 (junction deviation, mm)
$12=0.002 (arc tolerance, mm)
$13=0 (report inches, bool)
$20=0 (soft limits, bool)
$21=0 (hard limits, bool)
$22=0 (homing cycle, bool)
$23=0 (homing dir invert mask:00000000)
$24=25.000 (homing feed, mm/min)	Vitesse lente pour deuxième accostage limite.
$25=500.000 (homing seek, mm/min)	Vitesse de recherche de l'origine
$26=250 (homing debounce, msec)
$27=1.000 (homing pull-off, mm)		Distance pour libérer l'interrupteur fin de course(par défaut 1 mm)
$100=250.000 (x, step/mm)			Pas/mm suivant X
$101=250.000 (y, step/mm)			Pas/mm suivant Y
$102=250.000 (z, step/mm)			Pas/mm suivant Z
$110=500.000 (x max rate, mm/min)	Pas/mm maxi suivant X
$111=500.000 (y max rate, mm/min)	Pas/mm maxi suivant Y
$112=500.000 (z max rate, mm/min)	Pas/mm maxi suivant Z
$120=10.000 (x accel, mm/sec^2)
$121=10.000 (y accel, mm/sec^2)
$122=10.000 (z accel, mm/sec^2)
$130=200.000 (x max travel, mm)		Distance maximum suivant X en mm à partir de X0
$131=200.000 (y max travel, mm)		Distance maximum suivant Y en mm à partir de Y0
$132=200.000 (z max travel, mm)		Distance maximum suivant Z en mm à partir de Z0
ok
ok

$\$100, \$101, \$102$ : pas/mm

Il est nécessaire de connaitre le nombre de pas/mm, plusieurs solutions (Attention utiliser la "," et pas le ".")
Définition de la précision
Courroie vis
Pas par tour du moteur :
Diamètre de la poulie moteur : mm
Pas de la vis : mm
Vitesse de rotation : pas/s

$3 : La direction des ports

Valeur du masqueInversion
DécimalXYZ
0000
1100
2010
3110
4001
5101
6011
7111
Inversion "0" non ; "1" oui

Homing Config $\$21,\$22,\$23,\$24,\$25, \$26,\$27$

Capteur de fin de course en position HOME.
ParamètreDésignation
$21=1Valide limite HOME sur capteurs
$22=1Valide cycle HOME
$23=0Masque d'inversion de sens des axes.
$24=25.000Vitesse lente pour deuxième approche du capteur en mm/min
$25=500.000Vitesse de recherche de HOME en mm/min
$26=250Temps pour éviter le rebond du capeur en msec
$27=3.000Distance pour dégager le fin de course en mm.
Tout fonctionne correctement