Sulla scia delle conoscenze acquisite grazie a Franco, ecco come puoi risparmiare 2 pin di Arduino per pilotare i motori passo-passo bipolari semplicemente aggiungendo all’SN754410NE, due transistor , cinque resistenze e otto diodi.
Riprendo quello che ha scritto Franco in merito a questa configurazione:
è quanto consigliato sul datasheet dell’integrato SN754410 della Texas Instr. solo che ho impiegato dei comuni transistor BC547 ; i diodi di protezione sono degli altrettanto comuni 1N4007
Sai che la curiosità, in questo caso, è dell’elettronico e quindi guarda il datasheet; a pagina 6 trovi lo schema in questione, di cui riporto una immagine direttamente presa da dato PDF:
dallo schema sai che con soli due pin Control A e Control B puoi controllare un motore passo-passo bipolare. Il problema potrebbe essere ottenere i segnali in NOT sui piedini complementari ad ogni eccitazione di una fase.
Franco ha realizzato tutto questo con soli 2 transistor BC547 , 2 resistenze da 1KΩ e 2 resistenze da 10KΩ, ecco lo schema con cui puoi realizzare il collegamento ad Arduino:
Ed ecco lo stesso schema realizzato con Fritzing:
I componenti impiegati puoi facilmente reperirli in commercio e realizzare rapidamente il tuo driver per il motore passo-passo con eccitazione 2-2, passiamo allo sketch con cui puoi pilotare il driver:
/* Stepper Controll di Franco Da Re */ int motorPin1 = 6; int motorPin2 = 7; int delayTime = 2; void setup() { pinMode(motorPin1, OUTPUT); pinMode(motorPin2, OUTPUT); } void loop() { digitalWrite(motorPin1, LOW); digitalWrite(motorPin2, LOW);//1 delay(delayTime); digitalWrite(motorPin1, LOW); digitalWrite(motorPin2, HIGH);//2 delay(delayTime); digitalWrite(motorPin1, HIGH); digitalWrite(motorPin2, HIGH);//3 delay(delayTime); digitalWrite(motorPin1, HIGH); digitalWrite(motorPin2, LOW);//4 delay(delayTime); }
La prima grande differenza è nelle linee 03-04: i pin settati per la comunicazione con Arduino sono 2 invece di 4;
linea 06: imposta il tempo che vuoi far passare tra uno step ed il successivo, ricorda che un motore passo passo compie un giro completo in un certo numero di passi successivi indicati solitamente sul motore stesso;
linea 08: definisci la funzione setup() all’interno della quale imposterai le impostazioni preliminari dello sketch;
linee 09-10: in ciascuna linea imposti la modalità ( pinMode ) con cui Arduino dovrà gestire i pin indicati alle linee 3 e 4; in questo caso li userai in modalità OUTPUT;
linea 13: definisci la funzione loop();
linee 14-15: imposta la fase 1 o primo passo del motore, porta a livello logico basso ( LOW ) entrambi i pin 6 e 7, in questa fase essendo il pin 6 a 0v otterrai che il pin 2 dell’SN754410NE sarà a livello logico basso, mentre il pin 7 a livello logico alto, attraverso la resistenza da 10KΩ connessa direttamente al polo positivo ( + ), in questa fase il transistor non è in conduzione e quindi non porta a livello logico basso il pin 7; la stessa cosa accade sui pin 10 e 15 dell’SN754410NE connessi al pin 7 di Arduino; quello appena visto in funzione è il circuito di NOT realizzato con 2 transistor realizzato da Franco;
linea 17: imposti il tempo di attesa prima di eseguire il passo successivo;
linee 18-19: imposti la fase 2 o secondo passo, lascia il pin 6 a livello logico basso ( LOW ) e porta a livello logico alto ( HIGH ) il pin 7; in questa condizione il in 10 dell’SN754410NE si trova a +5v e di conseguenza il transistor entra in conduzione mediante la resistenza da 1KΩ collegata tra il pin 7 di Arduino e la base del transistor; la conduzione porta il pin 15 a livello logico basso;
linea 21: attendi il trascorrere del tempo di attesa impostato;
linee 22-23: porta a livello logico alto entrambi i pin 6 e 7 di Arduino, in cui i pin 2 e 10 dell’SN754410NE sono a +5v e i pin 7 e 15 si troveranno a 0v;
linea 25: attendi il trascorrere del tempo di attesa impostato;
linea 26-27: lascia a livello logico alto il pin 6 e porta il pin 7 a livello logico basso; di fatto in questa fase ti trovi ad avere una situazione completamente invertita rispetto alle linee 18 e 19 ;
Il risultato è che puoi pilotare il motore con soli 2 pin e lasciare che gli altri pin siano usati per pilotare altri motori, ad esempio in una CNC, ma in ogni caso l’effetto più rilevante è che proprio grazie all’eccitazione 2-2 puoi ottenere maggiore coppia dal motore.
Buon divertimento.
2 commenti
1 ping
Buongiorno,
ho letto tutto il suo sito, complimenti.. seguendo la sua documentazione ho costruito il mio primo driver per motori stepper con un SN754410NE, ma alimentandolo ancora con quattro pin dell’arduino, volevo implemetare questa modifica ma non trovo i BC547, cosa posso usare come alternativa a questi? (ho provato l’alternativa secondo le specifiche, cercandone uno tecnicamente identico ma il negozio qua vicino non ha nulla di quelli che ho richiesto).
Grazie per eventuale aiuto
Saluti
Autore
Ciao Daniele,
sono contento che tu sia riuscito a leggerlo tutto !! sei il primo .. ci sono oltre 600 articoli e non tutti sono semplici.
In merito al transistor di solito i negozi di elettronica sanno meglio di me quali siano compatibili come modelli perché è riportato nei cataloghi.
Cercando su internet ho trovato in Google diversi transistor compatibili con il BC547 ( 548,549, ecc.. ) dovresti verificare con il negozio da cui ti rifornisci quali ha a disposizione.
[…] Non inserito il disegno sopra a caso, lo schema che puoi utilizzare per questo esperimento è identico a quello presentato nell’articolo precedente. […]