Go Down

Topic: Programmare un motore passo passo (Read 10517 times) previous topic - next topic

Enry1995

Feb 05, 2018, 08:22 pm Last Edit: Feb 05, 2018, 10:17 pm by Enry1995
Buona sera a tutti,
ho acquistato da amazon questi stepper:

https://www.amazon.it/gp/product/B06XRFCP3X/ref=oh_aui_detailpage_o03_s00?ie=UTF8&psc=1


con il driver L298N.

ho seguito vari guide online come questa dove si comanda il motore indicandone la velocità. Il mio sotto i 40 rpm non gira in modo regolare... e oltre nemmeno si muove.

Code: [Select]


/*
* 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);






poi ho letto quest'altra guida che fa muovere il motore indicando solo i passi, che per la mia applicazione sarebbe più utile... Ma il motore non si comporta nel modo giusto, prima si muove a destra poi a sinistra senza alcun senso.


Code: [Select]


#include <Stepper.h>

const int stepsPerRevolution = 4096;  // Numero di passi del motore necessari per fare un giro

// Inizializziamo l'oggetto myStepper
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);

int stepCount = 0;

void setup() {
 Serial.begin(9600);
}

void loop() {
 myStepper.step(1); //Un passo in senso orario.
 Serial.print("steps:");
 Serial.println(stepCount);
 stepCount++;
 delay(500);
}[/ CODE]





questo è lo schema dei collegamenti che ho utilizzato:



Quale sarebbe una possibile soluzione per farlo ruotare in modo regolare di quanti step voglio?

Grazie a tutti buonaserata.

gpb01

Cortesemente correggi il tuo post sostituendo i tag QUOTE con i tag CODE, grazie.

Guglielmo
Search is Your friend ... or I am Your enemy !

-zef-

ma sei sicuro che dal driver la presa dei 5V sono in uscita e non in entrata? Inoltre se non sbaglio da Vin sulla UNO ci devi far arrivare almeno 7 volt

Enry1995

ma sei sicuro che dal driver la presa dei 5V sono in uscita e non in entrata? Inoltre se non sbaglio da Vin sulla UNO ci devi far arrivare almeno 7 volt

Quindi diresti di staccare l'arduino dai 5v e alimentarlo da USB?

Enry1995



Questo sarebbe la foto della struttura che deve muovere che ha un peso inrisorrio... Ma il problema sembra proprio essere che i motori non hanno forza, può essere? Ho svincolato i 5v come mi è stato consigliato e sembra andare un pelino meglio ma non abbastanza

uwefed

Quei motori non hanno tanta forza.

Perche non modifichi quel pezzo e metti un contropeso per far forzare il motore di meno?
Stai usando una rampa di accelerazione?

Ciao Uwe

-zef-

Vedi che il driver deve essere anche alimentato a 5 volt, per la forza controlla se sul driver non ci sia un trimmer che regola la corrente al motore, se troppo bassa il motore non ha forza, ma attento che se troppo alta scalda come una stufa per poi andare in fumo.

Enry1995

Quei motori non hanno tanta forza.

Perche non modifichi quel pezzo e metti un contropeso per far forzare il motore di meno?
Stai usando una rampa di accelerazione?

Ciao Uwe
Un contrappeso? Come lo metteresti? L'asse superiore quello che si inclina a dx/sx  e basta fatica anche lui... Oltretutto ha veramente pochissimo peso.. per le rampe, momentaneamente non le ho utilizzate, perché volevo far muovere il motore di uno step a lavolta..


brunello22

Quote
Ma il motore non si comporta nel modo giusto, prima si muove a destra poi a sinistra senza alcun senso.
Prova a invertire due fili di una fase che vanno al motore

uwefed

Vedi che il driver deve essere anche alimentato a 5 volt, per la forza controlla se sul driver non ci sia un trimmer che regola la corrente al motore, se troppo bassa il motore non ha forza, ma attento che se troppo alta scalda come una stufa per poi andare in fumo.
zef per favore non dare consigli sbagliati.
Il L298 (senza L297 come in questo caso) é un driver di tensione e percui non ci sono impostazioni di corrente.

Ciao Uwe

Enry1995

Vedi che il driver deve essere anche alimentato a 5 volt, per la forza controlla se sul driver non ci sia un trimmer che regola la corrente al motore, se troppo bassa il motore non ha forza, ma attento che se troppo alta scalda come una stufa per poi andare in fumo.

Ciao, quindi mi consigli di alimentarlo comunque magari con una USB ?  Ecco la foto del driver:





Non vedo trimmer però ... Grazie a tutti per l'aiuto che mi state dando



Enry1995

zef per favore non dare consigli sbagliati.
Il L298 (senza L297 come in questo caso) é un driver di tensione e percui non ci sono impostazioni di corrente.

Ciao Uwe

Il discorso che deve essere alimentato a 5v sempre è giusto? Faccio una prova?

-zef-

zef per favore non dare consigli sbagliati.
Il L298 (senza L297 come in questo caso) é un driver di tensione e percui non ci sono impostazioni di corrente.

Ciao Uwe

Davo per scontato fosse un driver con L297 e L298, non era mia intenzione dare consigli sbagliati, che comunque non poteva di certo fare danni. Non essendo un driver con step e dir "forse" va anche configurato in modo diverso per essere usato con la libreria stepper, ma visto che non ho mai usato ne tale libreria ne tale tipo di driver evito di dare ulteriori consigli sbagliati  :smiley-confuse:  :-X 

Enry1995

Davo per scontato fosse un driver con L297 e L298, non era mia intenzione dare consigli sbagliati, che comunque non poteva di certo fare danni. Non essendo un driver con step e dir "forse" va anche configurato in modo diverso per essere usato con la libreria stepper, ma visto che non ho mai usato ne tale libreria ne tale tipo di driver evito di dare ulteriori consigli sbagliati  :smiley-confuse:  :-X 
Puoi spiegarmi meglio? Che differenza c'è tra il mio driver piuttosto che l'altro? Cambia solo la regolazione della corrente?
Come vedi il tuo consiglio mi ha aperto un mondo ahaha e anche se è stato sbagliato mi a portato a conoscenza di cose che non sapevo e che magari sono utili per la mia applicazione

Enry1995

Cortesemente correggi il tuo post sostituendo i tag QUOTE con i tag CODE, grazie.

Guglielmo
Puoi spiegarmi meglio? Che differenza c'è tra il mio driver piuttosto che l'altro? Cambia solo la regolazione della corrente?
Come vedi il tuo consiglio mi ha aperto un mondo ahaha e anche se è stato sbagliato mi a portato a conoscenza di cose che non sapevo e che magari sono utili per la mia applicazione
zef per favore non dare consigli sbagliati.
Il L298 (senza L297 come in questo caso) é un driver di tensione e percui non ci sono impostazioni di corrente.

Ciao Uwe

Buona sera, ho delle novità, ho creato un video che mostra come si comporta il motore quando viene gestito da questo software:

Code: [Select]
#include <Stepper.h>

const int stepsPerRevolution = 4096;  // Numero di passi del motore necessari per fare un giro

// Inizializziamo l'oggetto myStepper
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);

int stepCount = 0;

void setup() {
 Serial.begin(9600);
 myStepper.setSpeed(10);
}

void loop() {
  do
  {
 myStepper.step(stepCount); //Un passo in senso orario.
 Serial.print("steps:");
 Serial.println(stepCount);
 stepCount++;
 delay(100);
  } while (stepCount<=100);

delay(5000);

 do
  {
  myStepper.step(stepCount); //Un passo in senso orario.
 Serial.print("-steps:");
 Serial.println(stepCount);
 stepCount--;
 delay(100);
  } while (stepCount>=0);
 
}


il programma "teoricamente" funziona, dal monitor seriale vedo la variabile stepcount crescere e poi scendere. ma il motore si muove in modo irregolare e non segue i passi che si vedono sul monitor seriale... 

Ho provato sia ad invertire uno dei due cavi che alimentano una bobina del motore, sia ad alimentare esternamente con 5v di un carica telefono il L298N .... Entrambe le prove non mi hanno portato a nessun miglioramento anzi, invertendo le fasi il motore si muove in modo peggiore. Ho scoperto che i +5v dell'integrato erogano e non assorbono tensione ( l'ho dedotto dal led di alimentazione del carica telefono, acceso anche se collegato solo dalla parte dell'uscita).

Go Up