I motori passo-passo bipolari riservano altre modalità di funzionamento, tutte molto interessanti. Se usi la classe Stepper.h di Arduino puoi veramente sbizzarrire la tua fantasia.
Non inserito il disegno sopra a caso, lo schema che puoi utilizzare per questo esperimento è identico a quello presentato nell’articolo precedente.
In particolare è lo schema che Franco mi ha inviato perchè potessi condividerlo con tutti gli appassionati all’argomento, insieme allo schema rappresentato in figura mi ha inviato anche uno sketch che fa uso della Stepper.h per pilotare con facilità il motore stepper, e scrive:
… permette di settare il numero di passi in un verso , nell’altro e la velocità di rotazione : in pratica fà tutto ; i valori che ho immesso sono quelli testati per il motore di stampante del datasheet indicato e fa ruotare il motore di 10 giri in senso orario e di 3 giri in senso antiorario alla velocità di 300rpm ; a velocità superiori a 500 rpm si saltano dei passi , inferiori a 100 rpm vibrazioni eccessive
Ovviamente utilizzare la libreria Stepper.h rende le cose davvero più semplici, di contro se vuoi capire quale sia il principio di funzionamento di un motore stepper, ti consiglio di partire dal primo articolo sull’argomento.
Ecco lo sketch proposto da Franco:
#include <Stepper.h> // n° di passi per giro //del proprio motore const int stepsPerRevolution = 48; // inizializzo la libreria stepper // con il numero dei pin di Arduino //cui ho collegato le bobine del motore: Stepper myStepper(stepsPerRevolution, 6,7); void setup() { // setto la velocità di rotazione a n rpm: // 100<=n<=400 myStepper.setSpeed(300); // inizializzo la porta seriale: Serial.begin(9600); } void loop() { // orario Serial.println("orario"); myStepper.step(480); delay(1000); // antiorario Serial.println("antiorario"); myStepper.step(-144); delay(1000); }
Analizziamo lo sketch linea per linea:
linea 01: includi la libreria Stepper.h nel tuo sketch, indichi ad Arduino di caricarla per l’uso nelle linee successive;
linea 05: imposta la costante di tipo integer con il valore degli step necessari al tuo motore bipolare per compiere un giro completo, nell’esempio il numero di passi necessari è 48;
linea 10: inizializza l’oggetto myStepper con i parametri ( numero di step, pin fase A, pin fase B ), nell’esempio i pin utilizzati sono 6 e 7 ed il numero di step per compiere un giro è rappresentato dal valore di StepPerRevolution impostato alla linea 05;
linea 12: definisci la funzione di setup();
linea 16: utilizza il metodo setSpeed() dell’oggetto myStepper() per definire la velocità a cui il motore deve ruotare, l’unità di misura è rpm ossia giri al minuto. Come suggerito da Franco nei suoi esperimenti ricorda che velocità troppo elevate costringono il motore a saltare dei passi, mentre velocità ridotte introducono molte vibrazioni. Molto dipende dalla geometria del tuo motore e dall’impiego che ne vuoi fare, cerca il giusto compromesso;
linea 19: inizializza il monitor seriale con cui potrei monitorare il senso di rotazione impostato dal loop();
linea 22: definisci la funzione di loop();
linea 24: printa sul monitor seriale la parola “orario” per indicare che le istruzioni che seguono impotano uno spostamento orario dell’alberino, se tuttavia non dovessi vedere l’albero motore ruotare nel verso atteso non hai che da invertire il collegamento dei pin 6 e 7 tra loro.
linea 25: utilizza il metodo step() per impostare il numero di passi che il motore deve compiere, nell’esempio il motore impiega 48 passi per eseguire un giro completo per cui impostando i passi da eseguire a 480 deduci facilmente che il motore compirà 10 giri ( 1 giro = 48 passi -> 480/48 = 10giri );
linea 26: imposta un tempo di attesa di 1000 millisecondi ( 1 secondo ) tra la rotazione appena eseguita e la prossima;
linea 29: similmente alla linea 24 printa la scritta “antiorario” sul monitor seriale;
linea 30: imposta il numero di step da eseguire, in questo caso il numero di step impostato è negativo (-144) da cui puoi facimente dedurre che il senso di rotazione sarà invero al precedente ed in particolare avrai 144passi/48 passi per giro = 3 giri;
linea 31: imposta il tempo di attesa a 1 secondo come per la linea 26;
L’effetto dello sketch sarà che il tuo motore eseguirà prima 10 giri in senso orario alla velocità di 300rpm, si fermerà per 1 secondo ed eseguirà 3 giri in senso antiorario alla stessa velocità per poi fermarsi ed attendere 1 secondo e ricominciare tutto daccapo.
Infine Franco scrive:
… l’eccitazione 2-1 , nel caso in cui non si fosse costretti a ridurre il numero dei pin da utilizzare per il pilotaggio , rappresenta un ottimo compromesso fra assorbimenti e resa in termini di coppia, con in più il vantaggio di una maggiore fluidità rispetto gli altri due tipi ( si può scendere a velocità di rotazioni più basse senza vibrazioni ).
In conclusione l’eccitazione 1-1 eccita una bobina ogni passo ( assorbe poco, rende poco e vibra in basso), la 2-2 ne eccita due contemporaneamente ogni passo ( assorbe molto, ha la maggior coppia ma vibra in basso ), la 2-1 eccita una sola bobina al passo n e due bobine contemporaneamente al passo successivo n+1, per poi ritornare ad una bobina al passo n+2 etc.
Questo potrebbe essere lo spunto di partenza per tutti coloro che volessero scrivere uno sketch e disegnare uno schema di collegamento per l’eccitazione 2-1.
Buon divertimento
14 commenti
Vai al modulo dei commenti
Salve! Io vorrei riuscire a pilotare tre motori bipolari in simultanea, con l’SN754410NE
Autore
Ciao Marco,
mandami qualche specifica dei motori: tipo, potenza, numero di giri ecc…
Mauro
Salve e complimenti , io ho un motore stepper da 1,2 A e un driver di potenza con L297 e L298N kit nuova elettronica.
Lo sketch di prova proposto da Franco mi andrebbe bene per il mio lavoro ma non capisco come collegare arduino a L297 e come modificare lo sketch. Sono agli inizi con arduino se mi può rispondere le sarei molto grato.
Grazie mille Marco
Autore
Ciao Marco,
il tuo motore è un bipolare o un motore unipolare?
Se possiedi un codice, sigla identificativa sia del motore sia del kit me li invii così posso darti qualche dritta.
Mauro
Ciao Mauro
il motore è bipolare minebea 23LM-K327-05 1,5 A
il kit di nuova elettronica è LX.1420
scusa se mi sono dimenticato metà informazioni.
Garzie Marco
Autore
Ciao Marco,
il motore è un bipolare guardando il sito del produttore.
Sul kit di nuova elettronica LX.1420 purtroppo non sono riuscito a trovare lo schema.
Tu che lo hai, confrontarlo con qualche schema di stepper drive Shield che trovi nel web e capire se puoi collegarci arduino e come.
Mauro
Gentile Marco, e gentile Mauro,
sono nuovo di queste parti. Devo collegare un Arduino UNO ad una scheda LX1420 di Nuova Elettronica, e non essendo per nulla esperto, mi interessa sapere se Marco ha già risolto il problema.
Grazie per ogni risposta che vorrete darmi.
Andrea Posch.
Autore
Ciao Andrea, lascio a Marco la risposta in quanto non conosco la scheda di cui parli.
Mauro
Ciao
Seguo molto i tuoi corsi su arduino e in generale tutto quello che cè sul sito.
Ora se potevi aiutarmi a sapere che tipo di motore passo passo è il 23KM-K381-P2 della minebea , sto progettando una piccola cnc e ho 3 di questi motori.
Grazie molto del tuo aiuto Alan
Autore
Ciao Alan,
sul sito del produttore trovi la descrizione del codice che hai sul motore e ti spiega che caratteristiche ha il passo-passo che possiedi.
Mauro
Trovato
Ora li provo con Arduino e l298 come dal tuo tutorial.
Ciao e grazie
Autore
Ottimo Alan !!!
Ciao,
Con la libreria stepper.h posso prendere il valore di step da una variabile?
Sto cercando di fare un divisore per mandrino e in base a quante divisioni voglio fare calcolo ogni quanti step il motore deve avanzare, solo che questo valore è il risultato di una divisione, e il loop si dovrebbe poi ripetere per il numero di divisioni impostate.
Ps.
Ci siamo conosciuti in un corso livello base 2 anni fa..
che requisiti ci vogliono per un corso avanzato?
Grazie
Autore
Ciao Andrea,
si puoi farlo. cos’è un divisore per mandrino ?
Per i corsi ti consiglierei di partecipare al corso arduino e motorini se il tuo progetto usa i motori.
E’ un corso specifico a cui puoi accedere avendo seguito un corso base, senza ulteriori corsi.
L’ultimo l’ho tenuto a Milano il 03/09 .. il prossimo non so ancora quando sarà, spero a breve, sempre a milano.