venerdì 1 maggio 2015

Come pilotare i motori passo passo con Arduino

Molti utenti mi scrivono sottoponendomi per la maggior parte dei casi quesiti su come poter utilizzare Arduino in una CNC oppure su come poter controllare i motori passo passo.

Spero di fare un pò luce su questo argomento cercando di semplificare i concetti il più possibile.

Per comandare un motore stepper con Arduino servono principalmente i seguenti componenti

Hardware

  • Scheda Arduino
  • Driver per pilotare il motore (in questo articolo utilizzerò un Pololu A4988)
  • Motore stepper
  • Alimentatore
  • Cavo USB

Software

  • Software IDE di interfacciamento con Arduino
  • Librerie GRBL
  • Universal Gcode Sender

Il motore stepper lo potete recuperare da una vecchia stampante, l'alimentatore va benissimo quello ATX di un vecchio PC, la scheda Arduino la potete comprare a circa 25 euro mentre il driver per pilotare potete utilizzare un Pololu a4988 oppure un EasyDriver, sono poco costosi nell'ordine di 3/5 euro cad..
Tutti i software sono opensource.

Arduino Uno e schema PIN di GRBL



Driver Pololu A4988



Collegare Arduino al driver

In questo esempio utilizzerò un Pololu A4988 ma in linea generale i driver si assomigliano tutti.
Prendiamo in esame il motore del primo asse (asse X).
Seguendo lo schema delle librerie GRBL vedremo che i pin utilizzati per il motore dell'asse X sono i seguenti:
pin 2 (Step Pulse) 
pin 5 (direction)





Collegare il driver al motore


Colleghiamo l'alimentazione




Carichiamo le librerie GRBL su Arduino

La prima cosa da fare è scaricare le librerie GRBL da questo link
Poi basta copiare la cartella nel percorso delle librerie di Arduino come in figura


Aprire l'IDE di Arduino e dal menu File selezionare GRBLtoArduino


Una volta caricate le librerie sarà sufficiente fare l'upload nella scheda Arduino cliccando sul pulsante "Carica" come in figura


Tutta la documentazione di GRBL la potete trovare qui sotto:

GRBL 0.8 la potete scaricare da qui
GRBL 0.9 la potete scaricare da qui

Utilizziamo Universal Gcode Sender

Universal Gcode Sender è un simpatico programmino sviluppato in Java e quindi multipiattaforma che si occupa di interpretare i comandi Gcode inviando le informazioni ad Arduino che tramite le librerie GRBL invia gli impulsi ai motori.
In sostanza è l'equivalente di Mach3 con la differenza che ha molte meno funzionalità.

In Universal Gcode Sender trovere 3 sezioni

Command Mode


In questa sezione potete/dovete settare tutti i parametri per far funzionare correttamente la vostra CNC.

Per elencare i parametri digitate $$ (INVIO), vi comparirà un elenco simile a questo:
$0=755.906 (x, step/mm)
$1=755.906 (y, step/mm)
$2=755.906 (z, step/mm)
$3=30 (step pulse, usec)
$4=500.000 (default feed, mm/min)
$5=500.000 (default seek, mm/min)
$6=28 (step port invert mask, int:00011100)
$7=25 (step idle delay, msec)
$8=50.000 (acceleration, mm/sec^2)
$9=0.050 (junction deviation, mm)
$10=0.100 (arc, mm/segment)
$11=25 (n-arc correction, int)
$12=3 (n-decimals, int)
$13=0 (report inches, bool)
$14=1 (auto start, bool)
$15=0 (invert step enable, bool)
$16=0 (hard limits, bool)
$17=0 (homing cycle, bool)
$18=0 (homing dir invert mask, int:00000000)
$19=25.000 (homing feed, mm/min)
$20=250.000 (homing seek, mm/min)
$21=100 (homing debounce, msec)
$22=1.000 (homing pull-off, mm)
Per cambiare un parametro digitare $[numero parametro] [nuovo valore](invio) 
Ad esempio 
se vogliamo impostare sull'asse X il numero degli step a 900 digiteremo 
$0=900 (invio) 

File Mode

In questa sezione potete scegliere dal vostro computer un file Gcode da far eseguire alla vostra cnc



Manual Control

In questa sezione potete movimentare gli assi manualmente utilizzando anche le freccine della tastiera



Procedimento:
  1. Collegate Arduino al PC tramite la porta USB
  2. Avviate Universal Gcode Sender
  3. Scegliete la porta COM sulla quale Arduino è collegato
  4. Scegliete il Baud rate corretto (Con le libreri GRBL 0.9 il baud deve essere 115200)
  5. Cliccate sul tasto open per connettersi ad Arduino
  6. Andate nella sezione "Command Mode" e digitate $X(invio) per resettare gli allarmi
A questo punto se avete collegato tutto bene nella sezione potete iniziare a far girare il vostro motore.

Questa è la piastra che ho realizzato con i 3 pololu a4899 per la mia cnc laser

Spero abbiate trovato interessante questo articolo.
Grazie per la lettura


4 commenti:

  1. Ciao,sono ore che sto leggendo il tuo blog,fantastico,complimenti davvero!!
    Mi sto muovendo per fare esattamente ciò che hai creato tu,ma,per mia sicurezza vorrei chiederti qualche delucidazione,soprattutto sul discorso programmazione arduino,essendomi avvicinato ora a questo mondo,sono un po' tanto neofita...ti anticipo che sono un installatore elettrico con pochi problemi anche a livello di manualità e meccanica,l unica mia lacuna,ripeto,è la programmazione di arduino.
    Mi farebbe molto piacere scambiare qualche mail o telefonata con te,poi,non si sa mai,ci si potrà trovare a scambiarsi anche altri progetti e consigli...
    Ti lascio la mia mail dove puoi contattarmi in ogni momento e per il momento ti ringrazio tanto sperando di avere una tua risposta a breve e di nuovo complimenti!!!
    stefano.antenucci81@gmail.com
    Ciao ciao,buona giornata!

    RispondiElimina
    Risposte
    1. Ciao Stefano e grazie per i complimenti!
      Perdonami se ti rispondo solo adesso, sono stato molto impegnato su altri fronti.
      Non mi sopravvalutare, io con Arduino ho fatto il minimo indispensabile per far funzionare la mia cnc e se ti può rassicurare non ho dovuto scrivere mezza riga di codice.

      Detto questo se vuoi realizzare una cnc non serve scrivere codice mentre se vuoi realizzare altro fammi sapere, vedo come posso darti una mano.

      a presto
      Saluti
      Mirco

      Elimina
  2. Ciao. Ho provato a seguire il tuo progetto, ma quando vado a muovere il motore manualmente dal programma, il motore non risponde.
    Premetto che il circuito è corretto, però ho un dubbio sul grbl. Se uso la banda 9600 mi da un errore l'universal gcode, pero se eseguo i comandi ogni volta mi da ok come output. Se uso la banda 115200 non mi da errori ma non esegue niente lo stesso.
    Che mi consigli?

    RispondiElimina
    Risposte
    1. Ciao,
      quando ti trovi di fronte ad una situazione del genere il consiglio che posso darti è quello di isolare i problemi, ovvero fare una checklist delle condizioni da verificare al fine di identificare la vera problematica.

      Più nel pratico dovresti prima accertarti che il driver sia alimentato correttamente, poi verifica che anche i motori siano alimentati, in tutte e 2 le bobine deve passare corrente, prova con un multimetro.
      Se tenti di girare l'albero del motore come ti sembra? libero di girare o fa resistenza?

      Dopo che hai verificato questa situazione passa alla scheda Arduino e controlla che i due pin step e dir siano funzionanti.
      Io per controllarli collego un semplice led a gnd e al pin "step" poi da universal gcode sender invio dei comandi... se il led si accede anche (anche se molto fioco) significa che il segnale arriva correttamente; fai la stessa cosa con il pin "dir"

      A questo punto se tutte queste verifiche hanno avuto esito positivo possiamo escludere un problema software e controllare meglio i collegamenti del driver tra arduino ed il motore.

      Altra cosa, la versione delle GRBL 0.8 funziona a 9600 baud mentre la 0.9 funziona a 115200 per cui se sei sicuro della versione installata utilizza la velocità idonea.


      Fammi sapere l'esito dei test.
      Saluti
      Mirco

      Elimina