come gestire da arduino un motore passo-passo controllato via L297 & L298?

mi sono trovato in casa uno stepper motor, del quale non conosco molto bene le caratteristiche del modello e mi piacerebbe provare ad utilizzarlo.
ho montato questo circuito:

che ho trovato in internet e nel quale vendono usati un l297 e un l298... ora mi manca la parte prima dell' L297, ovvero collegamenti e software...
qualcuno ha qualcosa che possa essermi utile da linkarmi? o se magari avete tempo spiegarmi un po' come funziona?
grazie mille in anticipo! :wink:

http://cambarduino.altervista.org/l297.pdf
da quello che ho capito
CW/CCW lo imposti o alto o basso in base al verso di rotazione
clock è un'onda quadra, ogni volta che il segnale passa da un valore basso ad uno alto il motore compie uno step

mmmm ok grazie :wink: quindi la frequenza dell'onda quadra sul clock è proporzionale alla velocità... a che velocità posso farlo andare al massimo?
ma con uno stepper non posso fare come sui servo che gli dico la posizione e lui si posiziona là?
grazie ancora :slight_smile:

?R:
mmmm ok grazie :wink: quindi la frequenza dell'onda quadra sul clock è proporzionale alla velocità... a che velocità posso farlo andare al massimo?
ma con uno stepper non posso fare come sui servo che gli dico la posizione e lui si posiziona là?
grazie ancora :slight_smile:

su questo non posso aiutarti mi dispiace, però immagino dipenda anche dal motore.

comunque puoi scriverti tu una funzione molto semplice per la velocità che vada a rompere le b***e ad un timer :stuck_out_tongue:

?R:
mmmm ok grazie :wink: quindi la frequenza dell'onda quadra sul clock è proporzionale alla velocità... a che velocità posso farlo andare al massimo?
ma con uno stepper non posso fare come sui servo che gli dico la posizione e lui si posiziona là?
grazie ancora :slight_smile:

Dipende dal motore, dal carico, da come piloti il motore (in tensione o in corrente; col L298 puoi fare entrambe le cose) e dalla curva di accelerazine.
Ciao Uwe

ok ok grazie, quindi la prossima domanda è come ottenere la posizione esatta? :slight_smile:

non capisco, che "posizione esatta"?
Ciao Uwe

uwefed:
non capisco, che "posizione esatta"?
Ciao Uwe

mi sembrava che si potesse fare come con i servo motori, ovvero gli dico la posizione 90 e lui si posiziona li, o sto facendo confusione?

la seconda che hai detto :slight_smile:
gli stepper non avendo necessariamente un encoder, non hanno idea della posizione in cui si trovano, a differenza di un servomotore.
Ad uno stepper puoi solo comunicare i passi da fare a partire dalla posizione in cui si trova.

Un stepper fa i passi che gli dai attraverso il driver/pilotaggio.
Puoi prevedere un sensore di finecorsa (meccanico, ottico, magnetico). All accensione muovi il motore in modo da azionare il finecorsa e da quel momento sai in che posizione si trova il motore. Puoi programmare Arduino in modo che prende comandi di posizione simile a quelli del servo e il motore si posizionerá in modo adeguato.
Ciao Uwe

ahn ok grazie mille ora è tutto più chiaro :wink:
quindi posso solo fare come detto da superlol nella prima risposta, ovvero controllare il verso di rotazione e la velocità...
i vantaggi rispetto ad un normale motore DC brushed sono quindi la maggiore precisione nella gestione dei movimenti e che ha una maggiore coppia quando il rotore è fermo, no? altro?

Un motore passo passo fa i passi che gli fai fare. Anche da fermo puoi almentarlo senza che si gira e percui ha una certa coppia anche da fermo. Un motore corrente continua (indipendente se con o senza spazzole) non ha coppia quando é fermo e se vuoi pilotarlo in modo preciso devi usare un encoder per leggere la posizione e fare una retroazione per pilotarlo in modo che arriva/tenga quella posizione.
Ciao Uwe

uwefed:
Un motore passo passo fa i passi che gli fai fare. Anche da fermo puoi almentarlo senza che si gira e percui ha una certa coppia anche da fermo. Un motore corrente continua (indipendente se con o senza spazzole) non ha coppia quando é fermo e se vuoi pilotarlo in modo preciso devi usare un encoder per leggere la posizione e fare una retroazione per pilotarlo in modo che arriva/tenga quella posizione.
Ciao Uwe

si quello che dicevo anch'io, ma tu l'hai detto meglio :slight_smile:
domani se ho tempo completo il circuito e lo provo, grazie a tutti per l'aiuto :wink:

uwefed:
Un motore passo passo fa i passi che gli fai fare. Anche da fermo puoi almentarlo senza che si gira e percui ha una certa coppia anche da fermo. Un motore corrente continua (indipendente se con o senza spazzole) non ha coppia quando é fermo e se vuoi pilotarlo in modo preciso devi usare un encoder per leggere la posizione e fare una retroazione per pilotarlo in modo che arriva/tenga quella posizione.
Ciao Uwe

io sapevo che nei motori a spazzole se non vi era differenza ti tensione tra i capi della bobina (ma vi circola corrente) l'albero veniva bloccato.

insomma se avevo 5V ad 1A e collegavo il positivo su entrambi i pin allora il motore si bloccava

Questo non ha niente a che fare con la tensione ma se cortocircuiti i 2 contatti di un motore in rotazione sopratutto queli con eccitazione a magneti permanenti ma in parte anche quelli con l'eccitazione in serie al rotore ma meno con l' eccitazione in paralello al rotore fungono da generatore che é cortocirquitato da una bassisima resistenza percui frena molto velocemente.
Anche un Ponte H puó frenare cosí un motore.

Ciao Uwe

io sui miei robot ho usato dei motori DC brushed e li controllavo con dei L298, io avevo messo gli enable sempre a livello alto mentre sugli input del ponte ad h gli davo un segnale pwm sull'input A e lo stesso segnale ma negato sull'input B, così se il duty cycle era al 50% il motore andava "avanti e indietro" così velocemente da rimanere fermo e a frenare... con questo metodo però si consumma molta corrente, ma funziona abbastanza bene :slight_smile:

ho ancora una domanda riguardo l' L297, l'ingresso Vref che nel datasheet viene definito come:

Reference voltage for chopper circuit. A voltage applied to this pin determines the peak
load current

quindi come faccio a capire che tensione applicare in corrispondenza della corrente massima che voglio?
grazie ancora :wink:

la cosa del Vref l'ho capita da solo :slight_smile:
c'è ancora una cosa che non capisco, i pin del motore... io mi trovo questo motore del quale so solo che è uno stepper...
ha 6 fili:
-rosso,
-bianco-rosso,
-verde,
-bianco-verde,
-bianco,
-nero.
io ho provato a collegare il verdi e il bianco-verde al L298 pensando che fossero una bobina, il rosso e il bianco rosso come se fosse l'altra bobina e gli altri 2 uno a massa e l'altro a 12v... ma il rotore non si muove, anzi tutto il motore vibra... cosa ho sbgliato?? :~

?R:
la cosa del Vref l'ho capita da solo :slight_smile:
c'è ancora una cosa che non capisco, i pin del motore... io mi trovo questo motore del quale so solo che è uno stepper...
ha 6 fili:
-rosso,
-bianco-rosso,
-verde,
-bianco-verde,
-bianco,
-nero.
io ho provato a collegare il verdi e il bianco-verde al L298 pensando che fossero una bobina, il rosso e il bianco rosso come se fosse l'altra bobina e gli altri 2 uno a massa e l'altro a 12v... ma il rotore non si muove, anzi tutto il motore vibra... cosa ho sbgliato?? :~

prendi il tester, test di continuità e prendi 2 capi, se il tester fa "bip" quella è una bobina.

un stepper con 6 fili ha 2 avvolgimenti con un contatto centrale su ogni avvolgiemnto. Prendi i cavi di ciascun avvolgimento che hanno la resistenza piú alta.
Ciao Uwe