L298N Pilotare un motore passo passo con Arduino

Ancora L298N, ancora un altro how to 😉
Dopo l’articolo in cui ho mostrato come pilotare un motore DC con Arduino e il modulo L298N, questa volta tocca ai motori passo passo.
Se non sai cos’è il modulo L298N trovi qualche informazione in più nell’ articolo precedente.
Update: dopo varie prove ed esperimenti, abbiamo capito che anche se fattibile, pilotare un motore passo passo con un modulo L298N non è la cosa ideale a causa di problemi di surriscaldamento e assorbimento di corrente. Dai un’occhiata agli altri miei articoli dove spiego come utilizzare i driver appositi.
Iniaizamo
Per quanto riguarda il motore passo passo, potrei/dovrei dilungarmi molto nelle spiegazioni, ma lo scopo di questo articolo non è questo, quindi una breve citazione da Wikipedia per dire che:
Il motore passo-passo spesso chiamato anche step o stepper è un motore elettrico sincrono in corrente continua senza spazzole che può suddividere la propria rotazione in un grande numero di passi (step). La posizione del motore può essere controllata accuratamente senza dover ricorrere al controllo ad anello chiuso (feedback) se la taglia ed il tipo di motore sono scelti in modo adeguato all’applicazione.
È considerato la scelta ideale per tutte quelle applicazioni che richiedono precisione nello spostamento angolare e nella velocità di rotazione, quali la robotica, le montature dei telescopi ed i servomeccanismi in generale. Tuttavia ultimamente vengono spesso sostituiti da motori brushless o da attuatori voice-coil per le applicazioni di fascia alta.
Continua a leggere su Wikipedia
In base al tipo ed alle caratteristiche del motore i prezzi possono variare dalle poche decine di euro alle centinaia se non alle migliaia. Motori a costo zero possono essere riciclati in casa da stampanti, scanner, lettori floppy, lettori CD/DVD…
Per l’esperimento di oggi il motore da utilizzare deve rispettare i requisiti tecnici del modulo L298N, cioè non assorbire più di 2A per fase e non necessitare più di 35 Volt di alimentazione, questi i limiti fisici del modulo.
Tornando al motore, una delle caratteristiche principali sono gli Step per giro, cioè il numero di spostamenti (step) che effettua il rotore per compiere un giro completo. Più è alto questo numero più il motore è accurato. Altre caratteristiche importanti riguardano la forza esercitata durante la rotazione, la forza durante la fase di arresto e mantenimento della posizione, ma per adesso non ci interessano.
Il mio motore è stato prelevato da una stampante multifunzione, per l’esattezza dal suo scanner, come numero di step (96 step) diciamo che è abbastanza scarso, ma per ovviare a questo deficit i progettisti hanno pensato bene di affinare gli spostamenti con un sistema di ingranaggi (nel video lo vedrai senza gli ingranaggi).
Ricordiamoci del particolare del numero degli step in quanto è un parametro fondamentale per utilizzare la libreria Stepper di Arduino.
La prima cosa da fare quindi è trovare il datasheet del proprio motore, questo è il mio.
In alcuni casi, i produttori non specificano il numero di step per giro (chiamiamola pure risoluzione del motore), ma specificano invece lo Step Angle, che in sostanza è il numero di gradi compiuti dal rotore del motore in un singolo step. Avendo questa informazione basta dividere 360 per lo Step Angle e scoprire quanti sono gli Step per giro. Nel mio caso lo Step Angle è di 3.75°, quindi 360/3.75 = 96 Step per giro.
Lo schema
Rapidamente uno sguardo allo schema dei collegamenti:
I colori utilizzati nello schema rispecchiano quelli del video a fondo pagina.
In questo esempio è stata utilizzata una funzione del modulo L298N discussa nell’articolo precedente, e cioè la capacità del modulo di fornire in uscita una tensione stabilizzata a 5 Volt quando questo è alimentato a 12 Volt. Questa tensione di uscita è stata impiegata per alimentare Arduino. Altra differenza dallo scorso articolo è incentrata sui pin Enable del modulo L298N. In questo caso sono stati utilizzati due jumper per impostare lo stato Enable a true (in sostanza gli viene mandato un valore alto di tensione) e non vengono utilizzati quindi per regolare la velocità del motore.
Connessioni del motore passo passo
Come capire l’ordine di connessione dei cavi del motore?
Trattandosi di un motore bipolare i cavi che lo alimentano e controllano sono quattro, ma per poterlo utilizzare vanno identificate le coppie giuste. Se possediamo il datasheet, siamo a cavallo, viceversa ci tocca ingegnarci… Il metodo è semplice. Guardando l’immagine di seguito, possiamo vedere a grandi linee come sono collegati internamente questi quattro fili, quindi armandoci di tester, posizionato in funzione test continuità, basterà cercare quali sono le coppie di cavi che forniscono una certa resistenza, e che quindi fanno parte dello stesso avvolgimento.
Una volta scoperte le coppie basta collegarle alle uscite Output A e Output B del modulo L298N.
Continuando con la descrizione dei collegamenti, passiamo alla parte del controllo, quindi le connessioni tra Arduino e il modulo L298N: pin IN1 al pin 11, IN2 al pin 10, IN3 al pin 9 e IN4 al pin 8. Ricordiamoci di posizionare dei jumper sui pin EN-A e EN-B del modulo.
Terminiamo il montaggio con l’alimentazione. Per comodità io uso un alimentatore da banco, ma nello schema viene riportata una batteria, in ogni caso, colleghiamo il polo positivo all’ingresso +12V del modulo, il negativo alla massa (GND) e per alimentare Arduino sfruttiamo l’uscita +5V del modulo collegandola al pin Vin. Sempre da Arduino facciamo partire un cavetto che colleghi la sua massa con quella del modulo.
Upload del codice
Una volta terminata la fase di montaggio è ora di passare al codice. Come sempre rimando alla spiegazione dello stesso nei commenti a corredo. Se qualcosa non ti è chiaro utilizza la zona commenti a fine pagina!
/* * L298N pilotare un motore passo passo con Arduino * In questo esempio vediamo come sfruttare la libreria Stepper * al fine di controllare un motore passo passo * Obbietivo : muovere ripetutamente il motore da 0 a 180 gradi e ritorno * Nel post correlato viene mostrato come interfacciare Arduino * ed il motore passo passo tramite il modulo L298N * * Autore : Andrea Lombardo * Web : http://www.lombardoandrea.com * Post : http://bit.ly/L298N-ARDUINO-MOTOREPASSOPASSO * Git : https://github.com/AndreaLombardo/Arduino-L298N-Motore-Passo-Passo */ //includo l'apposita libreria per gestire i motori passo passo #include <Stepper.h> /* * Informo il programma su quanti sono gli step impiegati * dal mio motore per compiere un giro completo. * In alcuni datasheet (come nel mio caso) non e' specificato il numero di step del motore * viene tuttavia specificato il numerdo di gradi effettuato ad ogni step (Step angle). * Avendo queste informazioni, basta dividere 360 per lo Step angle * per ottenere il numero di step del motore. * E' evidente che piu' alto e' il numero degli step, piu' accurato sara' il movimento del motore */ int static stepMotore = 96; //modificare il valore in base agli step del motore in possesso //un giro completo e' composto da 360 gradi, ne deriva che per compiere 180 gradi il motore dovra' percorrere //un numero di step pari ai suoi "stepMotore diviso 2" int stepDaPercorrere = stepMotore/2; //definisco i pin che controlleranno il motore, per convenzione ho usato i nomi dei connettori presenti sul modulo L298N int static IN1 = 11; int static IN2 = 10; int static IN3 = 9; int static IN4 = 8; //Istanzio un oggetto Stepper che rappresentera' il mio motore Stepper mioMotore(stepMotore, IN1, IN2, IN3, IN4); void setup() { //imposto la velocita' del motore //prova a giocare con questo valore per vedere le reazioni del motore //ma fallo gradualmente per non fare incazzare il motore... mioMotore.setSpeed(40); } void loop() { //effettuo il movimento di andata mioMotore.step(stepDaPercorrere); //attendo 50 millisecondi delay(50); //il metodo step accetta valori negativi //effettuo il movimento di ritorno mioMotore.step(-stepDaPercorrere); //attendo altri 50 millisecondi delay(50); }
Questa volta è possibile scollegare l’Arduino dal pc dopo aver caricato il programma, in quanto Arduino sarà alimentato dal modulo L298N.
Come sempre
- Assicurati che tutti i collegamenti siano corretti;
- Ricordati di impostare la porta COM del tuo Arduino;
- Utilizza le tensioni corrette;
- E ricorda che io non mi assumo nessuna responsabilità per eventuali danni o disastri che causi 😀
A fine pagina trovi il link per scaricare il pacchetto con codici e schemi di collegamento. Come sempre ti ricordo che acquistando prodotti Amazon passando attraverso i link del mio sito, io percepisco una piccola commissione (parliamo di centesimi) in buoni regalo. Questi buoni sommati alle eventuali donazioni PayPal, servono a mantenere attivo il sito web e ad acquistare nuovi componenti.
Prodotti Amazon
Aihasd L298N Doppio H-Bridge Stepper Driver del Motore Modulo Scheda di Controllo
4,74 €Akozon Motore Stepper Modulo H L298N Bridge Modulo Passo-Passo Scheda Driver Motore per Smart Car Robot
8,69 €L298N Modulo, Driver di Tipo a Doppio Canale H-Bridge, Scheda Controller Azionamento Motore per Azionare Il Motore Passo-Passo su Auto Intelligenti O Robot
10,86 €SparkFun Full-Bridge Motor Driver Breakout - L298N
4,90 €Fasizi 5pcs Dual Channel L298N PWM Velocità DC Motor Driver Board Dual H-Bridge Modulo motore passo a passo
9,99 €Motore passo-passo, controller driver motore passo-passo per NEMA 17 23 motore, 4A controllo motore passo-passo scheda integrata avanti e indietro impulso velocità angolo modulo di controllo PLC
32,99 €Motore passo-passo, Mcwdoit 5 pezzi Nema 17 Stepper Motor 1.7A 0.59 Nm 84oz.in 48mm Corpo w / 1m Cavo e connettore +5 Pz Nema 17 Staffa di montaggio motore per stampante 3D / CNC
52,99 €STEPPERONLINE 1 asse motore passo-passo CNC Kit 12,0 Nm 6A Nema 34 motore passo-passo e driver 2,4 – 7,2 A 18 – 80 VAC / 36 – 110 VDC per macchina per incisione CNC, stampante 3D
146,81 €STEPPERONLINE Motore passo-passo 5 pezzi Nema 17 bipolare 42Ncm 1.5A 42x42x39mm 4 fili con cavo da 1 m e connettore per stampante 3D/fresatrice CNC, nero
37,66 €STEPPERONLINE 1 asse Closed Loop Kit motore passo-passo 12,0 Nm 1000PPR Nema 34 stepper motore e motore passo-passo driver 0~8,2A 24~80VDC per macchina per incisione CNC
167,32 €Arduino UNO Rev3 [A000066]
Arduino Uno SMD Rev3
Arduino UNO WiFi REV2 [ABX00021]
57,00 €Arduino UNO Mini Limited Edition [ABX00062]
50,00 €Arduino Make Your UNO Kit [AKX00037] - un kit completo per costruire Make Your Uno PCB + Audio Synth PCB
Il mio video
Puoi clonare il progetto direttamente da GitHub!
Approfondimenti
Risposta Michele
#include <Stepper.h> int static stepMotore = 96; //modificare il valore in base agli step del motore in possesso int stepDaPercorrere = 50; //numero di step necessari ad aprire il telo. //definisco i pin che controlleranno il motore, per convenzione ho usato i nomi dei connettori presenti sul modulo L298N int static IN1 = 11; int static IN2 = 10; int static IN3 = 9; int static IN4 = 8; int static SW = 12; //switch che risulterà chiuso alla chiusura del telo //Istanzio un oggetto Stepper che rappresentera' il mio motore Stepper mioMotore(stepMotore, IN1, IN2, IN3, IN4); void setup() { mioMotore.setSpeed(25);//imposto la velocita' espressa in giri al minuto pinMode(SW, INPUT); //imposto il pin dello switch come input //resetto la posizione del telo. Lo chiudo! while (!isTeloChiuso()) { mioMotore.step(-stepDaPercorrere); } } void loop() { //il sensore mi dice che c'è troppo caldo e lo switch mi dice che attualmente il telo è chiuso if (devoAprire() && isTeloChiuso()) { //apro mioMotore.step(stepDaPercorrere); } //il sensore mi dice che c'è troppo freddo o piove e lo switch mi dice che attualmente il telo è aperto if (!devoAprire() && !isTeloChiuso()) { //chiudo mioMotore.step(-stepDaPercorrere); } //rimani fermo mioMotore.step(0); //attendo 50 mills delay(50); } boolean devoAprire() { //qui ci metto la logica che controlla la temperatura e decido il da farsi //restituisco true se voglio che il telo venga aperto, false se voglio chiuderlo return true; //false } boolean isTeloChiuso() { val = digitalRead(SW); if (val == HIGH) { return true; } else { return false; } }
Commentati Recentemente