Pololu a4983 driver per motori passo-passo

Il driver della Pololu a4983 è un driver per motori passo-passo semplice da utilizzare e molto preciso, l’integrato a4983 è utilizzato anche per la realizzazione di altri driver non prodotti dalla pololu ed il suo funzionamento non differisce da questo articolo.

pololu a4983 driver per motori passo-passo bipolari

Ho trovato in internet due versioni di questo driver entrambe prodotte dalla Pololu una con regolatore di tensione ed una senza il regolatore di tensione entrambe le versioni sono state sostituite da una scheda identica basata dul regolatore a4988.

Poiché io ho acquistato la versione con l’a4983 ti mostro come realizzarci i tuoi progetti, ma puoi sostituire il driver con l’a4988 avendo la Pololu mantenuto la medesima piedinatura per entrambe le schede.

Il Pololu a4983 può pilotare motori bipolari con una corrente massima di 2A, per raggiungere potenze tali ti consiglio di dotare il driver di una aletta di raffreddamento adeguata per evitare che fonda.

Il circuito per testare il driver pololu a4983

Per eseguire i primi test devi saldare degli strip alla basetta per poi collegarla alla breadboard o sul tuo progetto finale.

Sul sito del produttore puoi trovare sia la piedinatura della scheda:

pololu a4983 retro

sia uno schema base di connessione dei pin:

pololu a4983 schema base

ti suggerisco di osservarli bene prima di procedere al montaggio in quanto la serigrafia dei circuiti è inserita dal lato opposto ai componenti per cui una volta montato sulla breadboard:

pololu a4983 montato

non vedi più come sono disposti i pin, ed inoltre devi ragionare a specchio rispetto alla prima foto.

Per eseguire i primi test puoi utilizzare questo schema di collegamento al motore passo-passo ed ad arduino:

schema pololu a4983 rotazioni

nello schema è rappresentato il driver senza regolatore di carica, per questo ti mostro anche lo foto del driver montato sulla breadboard anche con i pulsanti a cui l’ho collegato:

pololu a4983 breadboard

per questo test ti bastano solo i primi due pulsanti connessi rispettivamente al pin 8 ed al pin 7 di arduino, gli altri collegamenti da arduino verso i pin MS1,2 e 3 del driver Pololu a4983 e dai 3 pulsanti ai pin 4,5 e 6 di arduino puoi ometterli in questo primo test, ti serviranno per attuare le riduzioni di step con questo driver, te le mostrerò in un prossimo articolo.

Lo sketch di test per il pololu a4983

E’ giunto il momento di caricare su arduino lo sketch di test per provare il funzionamento del driver pololu a4983:

int DIR = 2;
int STEP = 3;

int Rotate = 7;
int pinGo = 8;

void setup() {
  Serial.begin(9600);
  pinMode(DIR, OUTPUT);
  pinMode(STEP, OUTPUT);

  pinMode( pinGo,INPUT );
  pinMode( Rotate,INPUT );
}

void loop()
{
    digitalWrite(DIR,HIGH);
    delay(50);

    if ( digitalRead( Rotate ) == HIGH ) {
      for ( int i=0; i<200; i++) { stepGo(); delay(10); }
    }
    if ( digitalRead( pinGo ) == HIGH ) {
        delay( 300 );
        stepGo();
    }
}

void stepGo() {
        digitalWrite(STEP, HIGH);
        delayMicroseconds(100);
        digitalWrite(STEP, LOW);
        delayMicroseconds(100);
}

il motore bipolare che ho utilizzato è un 200 passi = 1,8° per passo, questa informazione è necessaria per comprendere il ciclo for presente alla linea 22 che si attiva alla pressione del pulsante connesso al pin Rotate (pin 7 di arduino) e fa compiere al motore passo passo un giro completo ossia 200 step.

Lo sketch è molto semplice in quanto tutto il lavoro di spostamento lo esegue la funzione stepGo() definita alle linee 30-35: in pratica ogni volta che nella funzione loop() viene invocata la stepGo() arduino genera un segnale HIGH e LOW a distanza di 100 millisecondi sul pin 3 ( STEP ) e indica al driver pololu a4983 di spostare il motore di un passo in avanti.

Il verso di rotazione è stabilito dalla presenza sul pin 2 ( DIR ) di un segnale HIGH che hai definito alla linea 18 dello sketch.

Quindi premendo il pulsante ROTATE connesso al pin 7 il motore esegue 200 passi = 360° = un giro completo, premendo il pulsante pinGo connesso al pin 8 il motore esegue un solo passo ad ogni pressione.

Ho realizzato un video per mostrarti come funziona questo sketch:

Buon divertimento !!!

Cortesemente, prima di inserire i commenti leggi il regolamento

Permanent link to this article: http://www.mauroalfieri.it/elettronica/pololu-a4983-driver-motori-passo-passo.html

36 comments

1 ping

Skip to comment form

    • fabio on 30 dicembre 2012 at 10:55
    • Reply

    cerco gruppi di arduino a firenze
    fabio

    1. Ciao Fabio,
      spero tu ne possa trovare anche grazie a questo annuncio, a che progetto stai lavorando?

      Mauro

    • Pittino on 13 maggio 2013 at 17:27
    • Reply

    caro Mauro,

    nella descrizione hai scritto che “Il Pololu a4983 può pilotare motori bipolari con una corrente massima di 2A”.
    se io invece avessi bisogno di un driver per un motore bipolare con una corrente massima di 10 A?? cosa mi consigli? sul web non se ne trovano…

    grazie
    Pittino

    1. Ciao Pittino,
      so che non è facile trovarne nel mondo hobbystico, devi provare nella fascia dei prodotti professionali.
      Se trovo qualcosa te lo inoltro.

      Mauro

    • fabrizio on 24 agosto 2013 at 14:37
    • Reply

    Ciao, sto costruendo una stampante 3D, un prusa i3, essendo arrivato alla parte elettronica volevo eseguire un test su motori e driver prima di accendere la RAMPS.
    Ho riprodotto fedelmente lo schema, ho ricontrollato tre volte i collegamenti e lo sketch solo che sulla pressione dei pulsanti non succede nulla.
    Ho provato anche a utilizzare un altro motore / driver / pulsante.
    Per i cavi mi sono basato su queste specifiche: [http://www.linengineering.com/resources/wiring_connections.aspx]
    Quindi ROSSO(1A) BLU(2A) VERDE(1B) NERO(2B)
    Utilizzo dei a4988 [http://reprapsource.com/en/show/6806]
    e dei Nema 17 bipolari [http://reprapworld.com/?products_details&products_id=94&cPath=1614]
    Qui trovi i miei collegamenti: [https://www.dropbox.com/sc/mv08d7sei74bajw/GziQx4hSIm]
    La pila da 9V è carica, come la collego i led dell’Arduino si accendono.
    Il potenziometro del pololu è a un 1/4 di giro.
    Qualche idea. Grazie, ciao.

    1. Ciao Fabrizio,
      controlla i collegamenti del driver pololu a volte tra le versioni di driver cambiano i collegamenti di alimentazione o per la definizione dei micro passi.

      Mauro

    • fabrizio on 24 agosto 2013 at 21:27
    • Reply

    Ciao, ho cercato un po’ in internet e con una piccola modifica sono riuscito a fare girare il nema 17.
    Rispetto al tuo schema ho dovuto collegare VDD-pololu a 5V-arduino e poi ponticellare reset e sleep.
    Ho utilizzato il tuo sketch, il micro passo funziona mentre il giro completo non tanto,
    esegue neanche un quinto di giro e poi sento il motore che sforza e si ferma.
    Se vuoi non pubblicare questi due interventi, se invece hai qualche consiglio e hai voglia e tempo
    🙂 rispondimi alla mia email.
    Grazie e ciao.

    1. Ciao Fabrizio,
      così come lo descrivi sembra un problema di collegamento delle fasi.
      In pratica il singolo passo sposta il motore ma al passo successivo, o qualche passo dopo, una fase non riceve la corretta alimentazione e inverte il passo invece di avanzare; questo comportamento determina il malfunzionamento che rilevi sul giro completo.

      Mauro

    • fabrizio on 25 agosto 2013 at 14:49
    • Reply

    Ciao, risolto tutto, avevo collegato male 2A 2B 1A 2B, per il mio Nema 17 (42BYGHW811) la configurazione corretta è: rosso(2A) blu(2B) verde(1A) nero(1B)
    Ti ringrazio per l’articolo mi è veramente utile. Adesso posso eseguire dei test su tutti i motori – pololu
    così quando alimenterò la RAMPS se avrò dei problemi potrò concentrarmi su altro sapendo che
    questi funzionano.
    Grazie ancora, ciao.

    1. Ottimo Fabrizio,
      sono contento che tu sia riuscito a risolvere il problema.

      Mauro

    • Andrea Guzzini on 14 settembre 2015 at 10:20
    • Reply

    Ciao Mauro,
    sto ancora (sigh!) lavorando al progetto di inseguitore “barn door tracker” per astrofotografia (è passato un po’ di tempo).
    A causa delle eccessive vibrazioni indotte dal motore a regimi bassissimi (1 rpm), devo sostituire l’integrato SN754410N con cui pilotavo lo stepper con un driver che mi consenta il micro-passo e questo pololu a4988 mi sembra adatto (1/16 mi sembra il massimo che si possa ottenere con una spesa modesta).

    Ho un dubbio: alle linee 30-35 hai inserito la funzione delayMicroseconds(100) tra l’accensione/spegnimeto del pin STEP. A cosa serve?
    Devo impostare una velocità di rotazione dello stepper precisa al millisecondo e credo questo ritardo influisca sulla velocità di rotazione finale dell’albero, assieme a quello della linea 22 “delay (20)” …
    Grazie, sempre utilissimo il tuo sito!

    1. Ciao Andrea,
      mi fa piacere leggere del tuo progetto.
      Ogni mio sketch è commentato sotto per aiutarti a comprenderlo e modificarlo. Anche questo, se leggi il testo, trovi le linee critiche dello sketch tra cui anche le 30-35.

      Come driver ti consiglio di provare/leggere anche del DRV8825 una vera potenza con 1/32 di passo possibile.

        • Andrea Guzzini on 14 settembre 2015 at 12:47
        • Reply

        Si, grazie, avevo letto le linee di commento… mi chiedevo però se il ritardo di 100 microsecondi nell’impulso di accensione al pin STEP fosse dettato da qualche esigenza di risposta del pin stesso

        ho dato un’occhiata al driver che mi hai indicato… mi sembra molto adatto!

        1. Ciao Andrea,
          no serve solo per regolare il corretto funzionamento del driver e controllarne la velocità.

    • Andrea Guzzini on 30 settembre 2015 at 09:59
    • Reply

    Ciao Mauro, alle fine ho scelto il driver DRV8825, con riduzione di passo fino a 1/32.
    Scrivo qui per continuità con i messaggi precedenti, ma se vuoi sposto il tutto nel post specifico per questo tipo di driver …
    sono vicino ad ultimare il mio progetto (inseguitore “barn-door” per astrofotografia) …
    Sto facendo alcune prove di controllo…
    Ora una domanda, se puoi ancora aiutarmi…
    Uso uno stepper bipolare Mercury motor SM-42BYG011-25, con queste caratteristice: angolo 1.8°, 12V, resistenza per fare 34 ohm, Intensita corrente per fase 0,33A
    Alimento il tutto con una batteria ad 12V, 2200 mAh (12 batterie AA ricaricabili in serie)
    Ho eseguito e controllato tutti i collegamenti elettrici al driver DRV8825, impostano il micropasso a 1/32.
    Ho anche regolato la Vref del motore a 0.135 V, secondo le indicazioni trovate in rete, per avere una intensità massima pari a circa 80% della corrente dichiarata sul datasheet.

    Il motore sembra funzionare correttamente, a parte una rumorosità che non è costante durante il ciclo, ma ha un andamento sinusoidale (è normale?)
    Ho fatto una prova, per pignoleria, amplificando ad un secondo il tempo tra un micropasso e il successivo, per valutare se tutti i micropassi erano eseguiti correttamente …
    Trovo un andamento strano … il motore esegue correttamente circa 28-30 micropassi, poi ho l’impressione che ne perda 2-4 arrestandosi e poi ricominciando a muoversi …ciclicamente.

    Ho questo dubbio: forse l’alimentazione non è dimensionata correttamente per questo tipo di motore che lavora ad alto voltaggio e bassa intensità? Da qualche parte ho letto (ma potrei sbagliare) che per gestire il micropasso bisogna avere tensioni in ingresso maggiori di quelle di lavoro del motore …

    Scusa se mi sono dilungato … le mie conoscenze elettroniche sono molto scarse … ma mi piacerebbe aver conforto sul modo in cui studiare e risolvere il problema …

    1. Ciao Andrea,
      i motori che utilizzo normalmente nei miei esperimenti sono costanti e a meno di collegamenti errati o sforzo meccanico eccessivo che induca la perdita di passo non saperi dirti cosa comporta il fenomeno che osservi.
      Ti inviterei a provare con uno dei motori che ho testato ed eseguire dei test con un astina, sufficientemente lunga ( 20/30cm ), montata direttamente sull’albero del motore per verificare visivamente quale sia il momento in cui perde passi.

    • David on 6 agosto 2016 at 12:28
    • Reply

    Ciao Mauro,
    i tuoi tutorial sono sempre molto utili, complimenti.
    Ho un problema con un motore passo passo comandato dal drivere A4988.
    Ho seguito alla lettera i collegamenti e lo sketch da te descritti, funziona tutto bene, ma in fase di avvio di arduino, il motore ruota di qualche grado avanti e indietro senza alcuna logica. Se prima faccio avviare arduino e poi alimento il driver con i 5V, questo malfunzionamento non si verifica.
    Hai idea da cosa può dipendere.

    1. Ciao David, questo articolo si riferisce ad un altro tipo di drive, sei certo che i pin ed i collegamenti siano gli stessi?
      Verifica che il tuo drive non invii ad arduino i 5v di alimentazione, in tal caso potrebbe essere la causa del malfunzionamento.

    • Francesco on 12 febbraio 2017 at 21:14
    • Reply

    Ciao, mi chiamo Francesco e vorrei autocostruirmi un mulino per macinare l’orzo con una macchina per fare la pasta sfoglia, essendo parecchio pigro volevo utilizzare un motore passo passo per renderlo automatizzato.
    Ho trovato un motore della stampante, 17pm-j a sei fili, e volevo capire che tipo di driver mi possa servire.
    Puoi aiutarmi?

    1. Ciao Francesco,
      probabilmente la scelta del motore passo-passo non è la migliore per il tipo di applicazione essendo necessaria molta coppia che non è prerogativa dei motori stepper.
      Tuttavia, volendo utilizzarlo, puoi leggere i miei articoli sui motori passo-passo a 6 fili per comprendere come trasformarli in stepper bipolari ed usare un driver come quello descritto in questo articolo.

    • riccardo on 12 aprile 2017 at 21:03
    • Reply

    chiedo aiuto per trovare un driver idoneo a pilotare motori passo passo. ho questo tipo di motori :HV-200-2215-150 A B ‘ scritto 1,5 A/fase e 1,5 Ohm/fase. è un motore ad 8 fili. grazie

    1. Ciao Riccardo,
      hai cercato nel Blog? Ci sono driver fino a 3A per fase tipo i DRV8825 o EasyDriver

    • Alessandro Romano on 28 aprile 2018 at 21:31
    • Reply

    ciao! sono alle mie prime esperienze.volevo chiederti se si possono ottenere risultati identici con un driver ULN2003A?

    1. Ciao Alessandro,
      si possono ottenere risultati simili ma con molta più programmazione e studio degli algoritmi.
      Ho scritto qualche articolo dedicato all’ULN2003, cercalo nel blog.

    • Alessandro Romano on 30 aprile 2018 at 10:41
    • Reply

    Ciao!che tipo di motore hai utilizzato?
    Il mio scopo è quello di utilizzarlo per far girare una ruota di pladtica molto leggera per realizzare un dispencer che gia a 45 gradi alla volta in almeno in un secondo

    1. Ciao Ale,
      ho già risposto a questa richiesta in un altro articolo che puoi leggere.

        • Alessandro Romano on 3 maggio 2018 at 14:12
        • Reply

        al momento ho un nema 17 .va bene?

    • Alessandro Romano on 3 maggio 2018 at 14:14
    • Reply

    riguardo la resistenza sulla resistenza è di 100 kohm?

    • Alessandro Romano on 4 maggio 2018 at 10:53
    • Reply

    ciao! io sto provando con il driver A4988 con il tuo codice ma non funziona ,l’unica differenza di circuito che ho fatto è quella di ponticellare reset/sleep

    1. Ciao Alessandro,
      hai messo in reset il driver ?

        • Alessandro Romano on 4 maggio 2018 at 21:52
        • Reply

        come si mette in reset il driver?io ho connesso reset a sleep e cosi è rimasto
        comunque all’inizio sembra funzionare ,io ho impasto a 25 per far compiere 45 gradi alla volta.Ma come mai dopo che un paio di volte ha lavorato bene,compiendo i suoi giri a step di 45 gradi,poi ad un certo punto non procede piu premendo il pulsante
        ho alimentato con la pila di 9 volt il modello del motore è 42BYGHW208

        1. Ciao Alessandro,
          potrebbe essere un errore software, controlla con il monitor seriale se si blocca in qualche punto o esegue qualche istruzione errata.

    • Alessandro Romano on 4 maggio 2018 at 14:50
    • Reply

    ci sono riuscito a realizzare il circuito
    vorrei solo un piccolo aiuto su come modificare il codice per inserire un buzzer ,che premendo il pulsante 7 oltre a fare girare il motore a gradi ,in contemporanea me lo faccia suonare di circa un secondo (se questo ad esempio è collegato al pin 4)

    1. Ciao Alessandro,
      ci sono molti modi di far suonare un buzzer hai provato a leggere quelli proposti sul blog?

    • Alessandro Romano on 6 maggio 2018 at 09:20
    • Reply

    ciao! per quasi un minuto ,sembra che tutto proceda bene,che il motore gira i suoi step impostati,poi si ferma o va a scatti.Ma può essere un problema di alimentazione con la pila da 9 volt?? ho alimentato sia il motore il nami 17 con driver A4988 e arduino
    poi stranamente ,se dopo un po rialimenti,ritorna a fare i suoi giri,la pila non sembra esaurita ed è nuova,guarda il video.Spero di trovare una soluzione:
    https://drive.google.com/drive/folders/1Tvk84_KKdsXtDdJZfouT2-8Mt4v4aWuM

    1. Ciao Alessandro,
      sembra un problema di sketch.

  1. […] Pololu a4983 driver per motori passo-passo » […]

Lascia un commento

Your email address will not be published.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.