Charlyrobot GRBL
+-
+
- Porteur du projet : resonance & julien maire+
+
- Date : 16/03/2017/ - …+
+
- Licence : CC-by-sa-3.0+
+
- Description : Passer en GRBL une fraiseuse numérique Charlyrobot CRA4+
+
Description
++Passer en grbl une fraiseuse numérique Charlyrobot CRA4 +
+ +
+Les Charlyrobot ont envahi les collèges dans les années 90, ce sont des
+machines robustes, mais leur logiciel est un peu archaïque.
+
+Nous décidons de remettre a jour une CRA4 récupérée à l'ESADMM
+(Beaux-Arts de Marseille) en changeant l'électronique par une Arduino
+qui permettra une gestion en Grbl avec des logiciels comme Universal Gcode sender.
+
+Inspiration : +http://www.usinages.com/threads/retrofit-charlyrobot.42233/print +
+ ++Nous n'allons certainement pas garder : +
+-
+
- le verrouillage du capot+
+
- certains boutons à l'avant de la machine+
+
Matériaux
+-
+
- 1 Arduino (uno)+
+
- 1 cnc shield+
+
- 3 drivers moteur DM420A+
+
- du cable électrique+
+
Notes
+-
+
- Les steppers ont 8 fils , 4 paire de deux. (il y en a une paire rouge (1e bobine) et une paire marron (2e bobine).+
+
- Les end stops sont des fils jaunes vifs (certains sont bariolés), en paire avec les fils rouges (+ dans l'ancienne config).+
+
- Le palpeur semble être un fil gris clair.+
+
- L'alimentation d'origine délivre 32.5v+
+
Code test drivers pas à pas :
++Nous allons tester les moteurs et drivers un par un avec ce code test : +
+ + + ++ps : nous règlons les DIPSWITCHs : +
+-
+
- pour un maximum de courant : SW1,SW2,SW3 = OFF OFF OFF, SW4 = ON+
+
- pour une résolution au 1/16e de pas : SW5 SW6 SW7 = ON ON OFF+
+
//Relier les entrées du driver à l'Arduino +int dirPin = 2; +int pulPin = 3; +int enblPin = 4; + +void setup(){ + pinMode(dirPin, OUTPUT); + pinMode(pulPin, OUTPUT); + pinMode(enblPin, OUTPUT); + digitalWrite(enblPin, HIGH); +} + +void loop(){ + slide('L', 500, 500); //go Left for 500 steps at speed 500, (the lower the number is the faster the motor will go) + delay(2000); + slide('R', 500, 500); //go Right for 500 steps at speed 500 + delay(2000); +} + +void slide(int dir, int steps, int sspeed){ + if (sspeed < 50) sspeed = 10; //keeps the speed above 10 + if (dir == 'L') digitalWrite(dirPin, HIGH); + else if (dir == 'R') digitalWrite(dirPin, LOW); + + while (steps > 0){ + digitalWrite(pulPin, HIGH); + delayMicroseconds(10); + digitalWrite(pulPin, LOW); + delayMicroseconds(10); + delayMicroseconds(sspeed); + steps--; + } +}+ +
Configuration GRBL
++Nous devons configurer le grbl … +https://github.com/grbl/grbl/wiki/Configuring-Grbl-v0.9 +
+$0=10 (step pulse, usec) +$1=255 (step idle delay, msec) +$2=0 (step port invert mask:00000000) +$3=0 (dir port invert mask:00000000) +$4=1 (step enable invert, bool) +$5=1 (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) // homing ne marche pas bien , donc desactivé pour le moment +$23=4 (homing dir invert mask:00000001) +$24=250.000 (homing feed, mm/min) +$25=1500.000 (homing seek, mm/min) +$26=250 (homing debounce, msec) +$27=1.000 (homing pull-off, mm) +$100=640.000 (x, step/mm) +$101=640.000 (y, step/mm) +$102=640.000 (z, step/mm) +$110=3000.000 (x max rate, mm/min) +$111=3000.000 (y max rate, mm/min) +$112=500.000 (z max rate, mm/min) +$120=100.000 (x accel, mm/sec^2) +$121=100.000 (y accel, mm/sec^2) +$122=40.000 (z accel, mm/sec^2) +$130=320.000 (x max travel, mm) +$131=220.000 (y max travel, mm) +$132=80.000 (z max travel, mm) ++
+Si vous utilisé UGS le reglage de la vitesse de deplacement (Feedrate) +manuelle est tres lente par defaut, il faut penser à la regler sinon +vous penserez que ca ne marche pas ! +
++note : sur WIn 10 UGS platform ne marche pas… il faut utiliser le Classic GUI il semble… +
+ +Code allumage fraiseuse bouton de façade
++Nous avons choisi d'ajouter une petite Arduino nano et un relai +5V>220V pour contrôler avec les bouton de façade l'allumage de la +défonceuse. +Les boutons sont en pullUp, et le stop est inversé… de plus nous +obtenons pas mal de bruit qui déclenche l'allumage intempestif de la +fraiseuse …. du coup nous rajoutons des condensateurs +antibruit en parallèle et un code arduino tarabiscoté pour attendre que +les boutons soit amaintenu appuyé quelques centaines de millisecondes +pour agir… +
+ +
+
+
float Compteur = 0; + +int StartBouton = 4; +int StopBouton = 5; +int RelayPin = 3; + +void setup(){ + pinMode(StartBouton, INPUT_PULLUP); + pinMode(StopBouton, INPUT_PULLUP); + pinMode(RelayPin, OUTPUT); + //Debug + Serial.begin(9600); +} // close setup + + +void loop() { + while (digitalRead(StartBouton) == LOW ){ + + delay(100); //resolution + Compteur = Compteur + 100; + + //Afficher le temps allumé + Serial.print("ms_start = "); + Serial.println(Compteur); + + if (Compteur >= 600){ + digitalWrite(RelayPin, HIGH); + Serial.print("START"); + } + + } //close while + + + // attention le bouton stop est inversé ! + while (digitalRead(StopBouton) == HIGH ){ + + delay(100); //resolution + Compteur = Compteur + 100; + + //Afficher le temps allumé + Serial.print("ms_stop = "); + Serial.println(Compteur); + + if (Compteur >= 300){ + digitalWrite(RelayPin, LOW); + Serial.print("STOP"); + } + + } //close while + +//reset compteur +Compteur = 0; +}+ +