Motori passo-passo bipolari con Arduino – seconda parte

Nel precedente articolo hai imparato come funziona un motore bipolare, e forse hai già sperimentato lo sketch di esempio con il tuo Arduino.motore passo-passo bipolare

Lo sketch proposto non è complesso, ripete una sequendi segnali in cui il valore HIGH si sposta lungo i 4 pin a cui è connesso il driver SN754410NE e di conseguenza il motore passo-passo.

Come avrai già letto il driver utilizzato non ha una sua intelligenza specifica, il suo scopo è consentirti di utilizzare tensioni e correnti superiori a quelle gestibili con Arduino e quindi pilotare motori con coppia elevata con Arduino.

Tutta l’intelligenza del movimento proviene dallo sketch e da Arduino.

Prima di iniziare a sviscerare il programma linea per linea mi preme che ti sia chiaro il concetto con cui il motore esegue i suoi passi successivi: trattandosi di 4 bobine collegate a due a due poste agli antipodi il movimento è dato dalla polarizzazione delle bobine stesse:

Motore passo-passo a 4 fili

Figura 1

Nella posizione in cui si trova il magnete centrale permanente, se volessi far spostare l’albero del motore in senso orario dovresti polarizzare correttamente la bobina in basso, applica quindi un segnale positivo al B+ ed uno negativo al B- se l’albero ruota in senso orario hai ottenuto quato desideravi e sai che la bobina inferiore attiva il magnete centrale quando riceve corrente positiva su B+ e negativa da B- attraverso la bobina ai suoi antipodi. Lo stesso concetto vale per A+ e A-, immagina che il magnete si trovi rivolto verso il basso e che tu voglia continuare la tua rotazione in senso orario applicherai il positivo ad A+ ed il negativo ad A-; per spostarlo quindi verso l’alto dovrai attirare il magnete centrale ( permanente ) verso l’alto eccitando la bobina in alto, sai che per eccitare quella in basso hai applicato positivo a B+ e negativo a B-, applica i poli inversi ( positivo a B- e negativo a B+) e la bobina in alto sarà eccitata facendo spostare l’alberino in senso orario di un altro step ( passo ).

Ripetendo il gioco dell’inversione dei poli su A+ e A- ( positivo su A- e negativo su A+ ) l’alberino si sposta nella posizione iniziale.

La sequenza che hai appena utilizzato per eseguire un giro completo è:

B+ B- A+ A-
Step1 high low low low
Step2 low low high low
Step3 low high low low
Step4 low low low high


A questo punto ti è chiaro come opera un motore bipolare e come vanno polarizzati i suoi terminali e puoi riprendere lo sketck:

int motorPin1 = 8;
int motorPin2 = 9;
int motorPin3 = 10;
int motorPin4 = 11;
int delayTime = 100;

void setup() {
  pinMode(motorPin1, OUTPUT);
  pinMode(motorPin2, OUTPUT);
  pinMode(motorPin3, OUTPUT);
  pinMode(motorPin4, OUTPUT);
}

void loop() {
  digitalWrite(motorPin1, HIGH);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, LOW);
  delay(delayTime);
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, HIGH);
  digitalWrite(motorPin4, LOW);
  delay(delayTime);
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, HIGH);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, LOW);
  delay(delayTime);
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, HIGH);
  delay(delayTime);
}

Iniziamo con la definizione dei pin a cui collegare il driver SN754410NE:

linee 01-04: definisci le quattro variabili di tipo  integer ciascuna per uno dei 4 pin a cui è connesso il motore;

linea 05: definisci un tempo di attesa tra uno step ed il successivo, lo scopo è attendere questo tempo per darti modo di comprendere il senso di rotazione e verificare i collegamenti tra Arduino ed il driver/motore;

linee 07-12: definisci la funzione setup() in cui indichi ad Arduino che ciascuno dei 4 pin dichiarati nelle linee 01-04, è da utilizzare come OUTPUT ossia per inviare segnali;

linea 14: definisci la funzione loop() in cui esegui i comendi di rotazione vera e propria, la funzione loop() è divisa in 4 blocchi simili, in cui ciascun blocco ricalca uno degli step della Tabella sopra;

linee 15-18: definisci il primo blocco o step che il motore esegue, per farlo invii un segnale HIGH sul pin 8 che avrai avuto cura di collegare al B+ (vedi tabella) e LOW per tutti gli altri pin;

linea 19: attendi il tempo definito alla linea 05, prima di eseguire il passo successivo, ricorda che tale tmpo è definito in millisecondi;

linee 20-23: è un blocco del tutto simile al precedente che invia il segnale HIGH al pin 10, a cui avrai avuto cura di collegare A+;

linea 24: attendi un tempo identico a delayTime prima di compiere il passo successivo;

linee 25-28: compie un nuovopasso in avanti inviando HIGH al pin 9, e LOW a tutti gli altri, il pin 9 deve essere collegato a B-;

linea 29: attendi un tempo identico a delayTime prima di compiere il passo successivo;

linee 30-33: compie l’ultimo passo del nostro ciclo prima di ripetere tutta la sequenza, per eseguirlo invii al pin 11 il segnale HIGH e LOW a tutti gli altri;

linea 34: attendi il delayTime prima di ricominciare il ciclo di rotazione.

Ora che sai esattamente come pilotare questi motori potrai sperimentare altri sketch e realizzare nuovi progetti con Arduino e i motori bipolari, ricorda che se ne trovano molti nelle vecchie stampanti, non ti costa nulla e puoi divertirti davvero tanto.

Buon divertimento.

  • Questo sito ed i suoi contenuti è fornito "così com'è" e Mauro Alfieri non rilascia alcuna dichiarazione o garanzia di alcun tipo, esplicita o implicita, riguardo alla completezza, accuratezza, affidabilità, idoneità o disponibilità del sito o delle informazioni, prodotti, servizi o grafiche correlate contenute sul sito per qualsiasi scopo.
  • Ti chiedo di leggere e rispettare il regolamento del sito prima di utilizzarlo
  • Ti chiedo di leggere i Termini e Condizioni d'uso del sito prima di utilizzarlo
  • In qualità di Affiliato Amazon io ricevo un guadagno dagli acquisti idonei qualora siano presenti link al suddetto sito.

Permalink link a questo articolo: https://www.mauroalfieri.it/elettronica/motori-passo-passo-bipolari-con-arduino-seconda-parte.html

34 commenti

3 ping

Vai al modulo dei commenti

    • Andrea il 26 Marzo 2012 alle 15:58
    • Rispondi

    Buongiorno, dallo smantellamento di una vecchia montatura per telescopi ho recuperato i due motori preposti all’inseguimento e ricavato i seguenti dati:

    Motore 1:
    Synta DW1332008
    Model: 42BYJ07 StepAngle 3.75/7.5
    Voltage: 12VDC Ratio: 131.876
    Credo sia un unipolare a 6 fili

    Motore 2.
    Synta DW1332009
    Model: 42BYJ08 StepAngle 3.75/7.5
    Voltage: 12VDC Ratio: 131.876
    4 fili

    Avrei una mezza idea per riadattarli ad altro scopo e volevo sapere se lo schema (ed i componenti) indicati potesse funzionare anche con questi due modelli… nello specifico vorrei sapere se l’integrato è sufficiente (naturalmente uno per motore) e come trattare i sei cavi dell’unipolare

    1. Ciao Andrea,
      ho fato qualche ricerca sul web ed i motori di cui mi scrivi sono stati presi da una EQ5 o EQ6, se non ho compreso male il suo scopo è un sistema di puntamento per telescopi come mi scrivi.
      Da un fornum presente sul bed in cui ho inserito i dati forniti, non mi sembra che i due motori in tuo possesso siano dei passo-passo, piuttosto dei gearmotor ossia motoriduttori.
      Probabilmente i fili in più che vedi servono ad un encoder o altro sistema di controllo della rotazione.
      Per verificare prova a seguire il mio articolo sui “motori passo-passo come identificarli” avrai senza dubbio le idee più chiare e magari con le misurazioni alla mano, se sono dei passo-passo, possiamo dedure il circuito che ti occorre.

      Mauro

    • Andrea il 27 Marzo 2012 alle 16:22
    • Rispondi

    accidenti, ho dato per scontato che lo fossero… grazie comunque, vedo di raccogliere qualche dato in più

    1. A prima vista un motore a 4 o 6 fili potrebbe sembrarlo anche ad un occhio esperto. La conferma arriva con qualche controllo con il tester. C’è un modo empirico con cui puoi verificare senza strumenti elettronici: smonta ogni ingranaggio visibile e prova a far ruotare l’albero senza alimentare il motore, un passo-passo sentirai tra le dita un movimento a step successivi tutti regolari, occorre un po’ di sensibilità manuale, un motore in cc non ha una rotazione di tanti piccoli spostamenti ma continua.

      Spero ti sia utile almeno per una prima valutazione, il tester fa il resto.

      Mauro

  1. Salve! Signor Mauro ALFIERI.

    Ho visto il suo progetto di cnc” a tre assi stepper driver con 7408,74139,74191 ed ULN2003″ nel suo web site.
    Vorrei praticare questo suo progetto per il mio piccolo CNC.Forse, puo mandarmi la schema elettrica di questo
    circuito?

    Con i miei rispetti.

    Felix Mulinar

    Nota: Mi dispiace:nel primo messaggio e-mail indirizzo era sbagliato

    1. Ciao Felix,
      non ho mai realizzato una cnc ma solo degli articoli in cui spiego come si usano i motori passo-passo con arduino.
      In tutti gli articoli trovi lo schema di montaggio o le foto dei collegamenti oltre allo sketch ed alle spiegazioni.

      Mauro

    • Enrico il 3 Maggio 2014 alle 22:36
    • Rispondi

    Buongiorno Mauro,

    innanzitutto complimenti per il suo blog. E’ attraverso le sue lezioni che mi sto avvicinando ad Arduino e in generale all’elettronica quindi gliene sono grato.

    Ho seguito costantemente le sue lezioni, e giunto a questo punto le scrivo per chiederle: c’è un limite alla potenza dei motori passo-passo pilotabili con Arduino + driver? Oppure esistono driver per ogni potenza necessaria?

    Il mio intento è quello di pilotare un motore di discreta potenza, comandandolo “real-time” attraverso un programma scritto in LabVIEW. Quindi ne approfitto anche per chiederle se secondo lei anche questo secondo aspetto è possibile.

    La ringrazio anticipatamente e rinnovo i complimenti per la sua chiarezza di esposizione.
    Enrico

    1. Ciao Enrico,
      di driver per motori passo-passo ne esistono di differenti potenze, dovrai probabilmente lasciare il campo dell’hobby ed andare su prodotti semi-professionali o professionali per avere potenze elevate e sopratutto tempi di risposta molto ridotti.

      Purtroppo non conosco LabView, se non di nome, e non conosco le sue potenzialità.

    • Marco il 23 Luglio 2014 alle 17:41
    • Rispondi

    Salve Mauro, sto cercando di inserire dei dati da excel nel programma di arduino motor shield con un motore passo passo bipolare. Ho letto che si può utilizzare un array, ma non so come. Se ne sa qualcosa mi faccia sapere perfavore.
    Grazie in anticipo

    1. Ciao Marco,
      se non ricordo male ho scritto un articolo in merito, non ricordo con precisione quale, dovresti provare a leggere gli articoli sui motori passo-passo.

    • Marco il 19 Febbraio 2015 alle 18:01
    • Rispondi

    Ciao Mauro,
    io ho un motore passo passo bipolare e un driver A4988. Volevo sapere se era possibile pilotare il motore con due pin soltanto: uno per la direzione e l’altro per gli step. Ti posso inviare una foto dei collegamenti se vuoi
    Grazie della disponibilità

    1. Ciao Marco,
      il driver che possiedi serve proprio a fare quello che desideri.
      Per i collegamenti la foto mi è inutile in quanto non sono standard i colori dei fili, puoi seguire i miei tutorial per comprendere come sono distribuite le fasi e come riconoscerle per collegarle al driver A4988

      Mauro

    • Marco il 23 Febbraio 2015 alle 16:48
    • Rispondi

    Ciao Mauro
    ti ringrazio molto, sono riuscito a muovere il motore con un semplice sketch. Per muoverlo pongo nello stato high e nello stato low il pin con cui comando il motore con un certo delay tra le due fasi e se vario questo delay ovviamente mi cambia la velocità del motore. Ho fatto caso però che se il mio delay diviene inferiore a 500 micro secondi il motore non riesce a girare. E’ un limite del driver o del motore passo passo o c’è un altro modo senza usare potenziometri per raggiungere velocità più elevate?

    Marco

    • Domenico il 15 Marzo 2016 alle 19:22
    • Rispondi

    Ciao Mauro,
    ti chiamo per un consiglio. Vorrei pilotare con Arduino + il driver SN754410NE un motore bipolare che ho recuperato da un vecchio scanner. Il problema è che non sono riuscito a trovare il datasheet specifico del mio motore, un MITSUMI M35SP-7N , 4Ω, quindi, non conosco il valore della corrente assorbita per cui non sono sicuro che il driver SN754410NE vada bene.
    Ho trovato documentazione di modelli simili ma sono tutti unipolari mentre il mio ha solo 4 fili (quindi mi sono convinto si tratti di un bipolare). L’unica informazione su cui posso basarmi sono i 5V e 500mA riportati sullo scanner: sicuramente attendibili i 5V meno i 500mA che sono il valore massimo che l’usb del pc può erogare.
    Dalla legge di Ohm ho calcolato che la corrente assorbita dovrebbe essere di (5V/4ohm)=1.25A.
    In questo caso visto che il driver in questione supporta massimo 1A dovrei cercarne un altro?
    Cosa mi consigli?
    Grazie per il tuo lavoro che torna davvero utilissimo sia per lo studio che per hobby.

    1. Ciao Domenico,
      se stai solo eseguendo un esperimento con componenti di recupero puoi usare l’SN754410NE per i test.
      Se hai intenzione di realizzare un progetto che vede coinvolto questo motore o un suo parente di superiore corrente ti consiglio uno dei driver trattati nel blog: EasyDriver, Pololu A4988, DRV8825 o MD20A ..

        • Domenico il 16 Marzo 2016 alle 13:35
        • Rispondi

        Penso che comprerò l’EasyDriver.
        Riguardo il motorino in questione ti faccio una domanda cui spero tu possa rispondermi in base alla tua esperienza. Come avevo già scritto è un motorino che ho recuperato da un vecchio scanner che funzionava prendendo l’alimentazione dalla usb del pc; sullo scanner c’è scritto 5V e 500mA. Sul motorino c’è scritto che ad ogni coppia di morsetti ho una resistenza di 4 ohm che, quindi, con 5V di alimentazione mi dovrebbero assorbire una corrente di 1,25mA. Il pc non potrà mai dare una corrente così grande fermandosi ad un massimo di 500 mA. Non capisco allora come fa il motorino ad avere la potenza sufficiente per funzionare. Pensi che nella scheda contenuta nello scanner ci possa essere qualcosa che limita la corrente (1.25mA) che il motore altrimenti assorbirebbe dal pc ?
        Ciao e grazie di tutto.

        1. Ciao Domenico,
          non conoscendo come fosse costruito lo scanner non è possibile azzardare teorie.
          Tu hai dedotto le informazioni dal fatto che lo scanner fosse alimentato a 5v dalla USB, che non è detto, di solito hanno anche una alimentazione esterna.

            • Domenico il 16 Marzo 2016 alle 18:53

            Credo di non averti capito: lo scanner aveva solo una porta usb e nessun altra possibilità di alimentazione e vicino alla usb c’è scritto 5V e 500 mA..

          1. Ciao Domanico,
            lo scanner aveva solo l’alimentazione a 5v?
            il motore potrebbe essere alimentato a 2v ed avresti 2/4=0,5A o anche a voltaggi inferiori.

    • Domenico il 21 Marzo 2016 alle 18:15
    • Rispondi

    Ciao Mauro,
    si lo scanner si alimentava solo dalla usb che indicava 5V e 500 mA; non avevo pensato al fatto che, effettivamente, il motore poteva alimentarsi ad un voltaggio più basso per cui poteva assorbire meno corrente di quella che avevo calcolato. Comunque, ho già ordinato la scheda easydriver e farò delle prove appena mi arriva. Ciao e grazie.

    1. Ottimo Domenico.

    • domenico il 31 Marzo 2016 alle 15:27
    • Rispondi

    Ciao Mauro,
    ho una domanda da farti circa Arduino. Sai dirmi quanto è la massima corrente che si può assorbire dal pin chiamato 5V di Arduino Uno Rev3?
    Ti dico quello che ho trovato spulciando qua e la su internet.
    I 14 pin digitali ed i 6 analogici, poichè sono collegati ai pin del microcontrollore ATmega328, hanno un valore max di corrente di 50 mA ma si consiglia di non lavorare oltre i 20 mA (se non ricordo male questo l’ho letto anche qui tra i vari commenti).
    Il pin 5V però credo di aver capito che sia collegato al regolatore di tensione che pare possa fornire fino ad 800 mA. Se questi dati fossero corretti allora potrei assorbire dal pin 5V fino ad un max di 800mA.
    Sai darmi delucidazioni al riguardo?
    Grazie

    1. Ciao Domenico,
      è corretto quanto hai compreso, aggiungi che io non arriverei chiedere al pin 5v 800mA in quanto connesso anche all’alimentazione del microcontrollore a cui se manca corrente per funzionare adeguatamente potrebbe darti dei comportamenti anomali e difficilmente diagnosticabili.
      Inoltre, se non ricordo male, il carico complessivo sui pin non deve eccedere i 250mA; questo comporta che la somma delle correnti assorbite dai pin non deve superare tale valore.

        • Domenico il 5 Aprile 2016 alle 19:38
        • Rispondi

        Ok perfetto, io avevo bisogno di poter assorbire circa 220 mA per poter alimentare uno stepper unipolare direttamente dai 5V di Arduino (5 V richiesti dal motore diviso i circa 22,7 ohm di resistenza del singolo avvolgimento). L’ho fatto ed è andato tutto ok.
        Grazie e alla prossima.

        1. Ciao Domenico,
          per pochi minuti tutto bene, ma alla lunga potresti bruciare i pin Arduino se superi l’assorbimento consigliato.

            • Domenico il 6 Aprile 2016 alle 14:43

            Ciao Mauro,
            hai perfettamente ragione. Infatti, avevo solo bisogno di fare delle piccole (e brevi) prove.
            Ciao

    • Flavio il 19 Settembre 2017 alle 16:05
    • Rispondi

    Ciao Mauro.
    Ho un motore stepper kysan 1124090 , ho preso un modulo driver ULN2003 e copiato il tuo sketch ma il motore non si muove.
    Se scollego il motore le luci del driver si accendono in una sequenza guidata da arduino, se inserisco i 4 cavi del motore i lampeggi cambiano…
    cosa avro’ sbagliato? Grz…

    1. Ciao Flavio,
      potresti aver sbagliato l’accoppiamento delle fasi.
      Trovi molti tutorial miei su questo blog su come riconoscere le fasi di un motore stepper.

    • Flavio il 20 Settembre 2017 alle 14:43
    • Rispondi

    Si li ho visti, utili e ben spiegati…
    Sul modulo stepper il connettore per il motore ha 5 pin mentre il motore ne ha 4 …
    Mi consigli di usare un motore unipolare a questo punto?

    1. Ciao Flavio,
      parli del driver?
      Controlla che sia un driver in grado di controllare un bipolare, in caso contrario devi scegliere se usare un driver per bipolare, differente, o cambiare il motore.

        • Flavio il 21 Settembre 2017 alle 14:40
        • Rispondi

        Nella descrizione del driver non c’e’ scritto.
        Faccio una ricerca, probabilmente hai ragione.

        Vorrei avere un motore con tre velocità… 1, 2 e 3 giri al secondo con un commuttaore a 3 step piu’ lo zero.
        Puoi consigliarmi tu uno motore passo passo e un driver in modo da essere sicuro?
        Grazie…

        1. Ciao Flavio,
          dipende dalla coppia di cui hai bisogno, quelli che uso nei miei tutorial possono andar bene, trovi i link negli articoli.

            • Flavio il 23 Settembre 2017 alle 09:05

            Scusa la mia ignoranza ma quale differenza c’è tra unipolare e bipolare ? Perchè sciegliere uno al posto dell’altro visto che entrambi si muovono allo stesso modo…

          1. Ciao Flavio,
            sul blog trovi tanti articoli che descrivono questa differenza, spiegarli in un commento è complesso.

  1. […] esperimento con il mio motore bipolare, Arduino e l’SN754410NE, nel precedente articolo: Motori passo-passo bipolari con Arduino – seconda parte hai imparato a pilotare un motore bipolare con Arduino, oggi imparerai come regolarne la […]

  2. […] ne puoi rendere conto utilizzando lo sketch presentato in questo articolo e impostando il delayTime a 0, anche il tuo motore resterà fermo ed emetteva un […]

  3. […] Ringrazio da subito il Sig. Franco Da Re, che qualche giorno fa mi ha scritto dopo aver letto questo articolo: […]

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

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