Motore passo-passp con Dual H-bridge RobotBase

Ho comprato questo driver per motori passo-passo:

e questo motore passo-passo:

Ho collegato l'arduino Uno al driver in modo da far funzionare il sorgente di esempio presente sul datasheet del driver:
http://www.seeedstudio.com/depot/datasheet/L298%20Dual%20H-Bridge%20Motor%20Driver%20datasheet.pdf

Se collego un motore DC funziona come si deve, gira in un verso o nell'altro come dico io.
Se invece collego il passo-passo, non si muove di una virgola.

Pero' poi mi sono accorto che in effetti il datasheet non spiega come pilotare un passo-passo, ma solo un DC!

Cosi' ho scaricato il datasheet dell' L298 che sta sul driver:

Qui fa vedere che controlla l' L298 con un altro chip: un L297 o un L6506; pero' non spiega che tipo di segnali inviano questi chip all'L298!

Quindi come faccio a capire come collegare la arduino al driver per poter controllare anche il motore passo-passo?!?

Ho trovato solo questa pagina in giapponese...
http://translate.google.com/translate?hl=en&sl=zh-CN&u=http://www.robotbase.net.cn/%3Fproduct-194.html&ei=ihHSS7n_JY3r-Qa7geG1DA&sa=X&oi=translate&ct=result&resnum=6&ved=0CCMQ7gEwBQ&prev=/search%3Fq%3D%2522robotbase%2522%2BL298%26hl%3Den%26client%3Dsafari%26rls%3Den

ciao jumpjack

Il L298 per pilotare un motore passo passo viene abinato normalmente al L297.

Il L298 é la parte di potenza e il L297 é la parte logica.

Ogni ponte H del L298 ha 3 entrate:
En disabilita tutti i transistori del ponte.
IN1 fa condurre o il transistore superiore o inferiore sinistro
IN2 fa la stessa cosa per i 2 transistori a destra.

En devi mettere a H
IN a massa potra OUT a massa e IN a H porta OUT a H.
Devi colegare le 2 bobbine del morore la prima tra OUT1 e OUT2 e la seconda tra OUT3 e OUT4.

Il L297 produce con i segnali ClOCK e CW/!CCW i segnali per pilotare i ponti da avere un movimento a passi interi o a mezzi passi (pin HALF/!FULL)

Oltre a questo il L297 controlla la corrente che circola nelle bobbine del motore e spegne i transistori del Ponte per limitare la corrente. Col motore che hai Tu non é necessario limitare la corrente perché ha un induttanza e resistenza molto alta.


LeggiTi le pagine a paginae 5 e 6 "MOTOR DRIVING PHASE SEQUENCES" del ST Microelectronics 0g0gh362kxwx30o7xi4x2i4jzffy datasheet pdf
Puoi pilotare il L298 con una delle sequenze illustrate.

A,B,C,D del L297 vanno sulle entrate IN1, IN2, IN3, IN4 del L298
!INH1 e !INH2 su EnA e EnB
Le resistenze sul piedini SENSE A e SENSE B non servono e vanno direttamente a massa, ma le resistenze possono anche restare.
A1 e A2 del motore rispettivamente su OUT1 e OUT2
B1 e B2 del motore rispettivamente su OUT3 e OUT4

Con ogni impulso del !CLOCK il motore fa un passo o mezzo passo (se selezionto il mezzo passo)

Ciao Uwe

Grazie per la spiegazione, pero' non hai risposto alla domanda piu' importante: si puo' usare la Arduino Uno al posto dell'L297?

Inoltre: considerando la mia board e il mio motore, è sufficiente collegare lo spinotto del motore direttamente ai pin sulla board, o devo fare qualche incrocio di fili?

Poi, una volta collegato correttamente il motore, per fargli fare almeno uno scatto che sequenza devo inviare sui pin di controllo della driver board? Il PDF non si legge.

ciao jumpjack

Ti ho risposto indirettamente :

Puoi pilotare il L298 con una delle sequenze illustrate.

Si si puó , devi generare i segnali giusti dal Arduino.

Ciao Uwe

eh, ma il PDF non lo vedo!

Vabbe', questa pagina risolve quasi tutti i miei problemi:

Spiega esattamente come fare quello che volevo fare io, cioè far muovere una manopola secondo la posizione di un potenziometro.

Mi rimane solo da adattare la spiegazione all' L298 invece dell'SN754410 :-?

In teoria, dovrebbe bastare collegare i pin 8,9 10 e 11 dell'arduino a I1, I2, I3 e I4 della scheda-driver... Ma i pin di Enable?!?

non ti capisco; non vedi i pdf?
Ciao Uwe

Veramente te l'ho gia' detto un paio di volte che non riesco a vedere i link...
Pero' vedo ora che era un problema del firewall dell'ufficio, da casa li vedo. Ora me li studio.

Allora, collegando SEI pin della arduino alla scheda-driver anzichè 3, e collegando direttamente il motore alla scheda tramite il connettore fornito col motore, sono riuscito a farlo girare.

Pero' si comporta in modo strano: se aumento la velocità con Stepper.setspeed(), aumenta sì la velocità.... ma sembra che gli step diventino proporzionalmente più piccoli, tant'e' che aumentando la velocità mantenendo costante il numero di step, l'angolo percorso dal rotore diminuisce! E' normale?
Inoltre, non posso impostare velocità superiori a 200, altrimenti ottengo velocità inferiori!
E, in ogni caso, il rotore, quando imposto la velocità a 200, di sicuro non gira a 200 giri/minuto, visto che per fare un giro completo impiega 10 secondi! :-?

A questo punto, mi viene in dubbio: dal momento che il rotore che vedo non si trova al centro del motore, mi sa tanto che all'interno dello "scatolotto" c'e' una riduzione tramite ingranaggi. Il motore è questo:

La scheda dice:

Angolo passo-passo: 5,625° / 64

Rapporto di riduzione: 1/64

Cioe', la seconda riga dice che c'e' una riduzione di ingranaggi che per ogni giro del "vero" motore dà 1/64 di giro del rotore esterno?!? :-?
Cioe' per far fare un giro intero al rotore dovrei impostare 64x64=4096 passi?!?

E invece da cosa si capisce la massima velocità raggiungibile?

La velocitá si conta in passi al secondo non giri al minuto;
Il motore passo passo dovrebbe fare i passi giusto finche superi la velocitá / coppia massima e li si ferma osciallando un po.
I passi non dovrebbero diventare piú piccoli con la velocitá maggiore.
Si penso che il Motore fa 4096 passi per un giro intero di 360 Gradi.

E invece da cosa si capisce la massima velocità raggiungibile?

Dai dati della documentazione tecnica.
Mi scivi la sigla del motore; sulla foto del shop non é leggibile.

Ciao Uwe

La velocitá si conta in passi al secondo non giri al minuto;

Nella libreria Stepper bisogna usare gli RPM. :-?

Il motore passo passo dovrebbe fare i passi giusto finche superi la velocitá / coppia massima e li si ferma osciallando un po.

Purtroppo con questo fatto della riduzione non riesco nè a vedere nè a "sentire" i singoli step, sono troppo microscopici!

Quote:
E invece da cosa si capisce la massima velocità raggiungibile?

Dai dati della documentazione tecnica.
Mi scivi la sigla del motore; sulla foto del shop non é leggibile.

Ciao Uwe

appena torno a casa ci guardo e ti dico di preciso, pero' credo che questo tizio abbia usato lo stesso motore (il secondo):
http://www.khwelling.nl/cnc/hardware/motor_test.html

Lui parla di 2048 step "testati", boh.

Credo di aver anche trovato il datasheet!
http://australia.rs-online.com/web/search/searchBrowseAction.html?method=getProduct&R=4198296

Devo studiarmi entrambi i link.

Ciao jumpjack

Nella libreria Stepper bisogna usare gli RPM.

Ok, ma li definisci anche quanti passi fa il motore per un giro di 3600 gradi.

Purtroppo con questo fatto della riduzione non riesco nè a vedere nè a "sentire" i singoli step, sono troppo microscopici!

Allora metti sul asse qualcosa come una lancetta e un indice di rifeimento. Poi fai sempre giri da 360 Gradi cosí ti accorgi.
Sí il motore sembra quelli nel link; allora la velocitá l'hai trovata.
allora max 700 passi al secondo come velocitá di partenza e
max 1400 passi al secondo se avviato. E di consequenza max ca 20 giri al minuto

Lui parla di 2048 step "testati", boh.

Secondo me sono 4096 passi per 360 gradi in pilotato in FullStep; se usi un driver Motore Passo-Passo che puó fare mezzi passi o microstep aumenta i numero di passi per giro. (per esempio con un EASYDRIVE 4.2 col A3967 oppure Pololu A4983 Stepper Motor Driver Carrier).
Comunque é facile fai 4096 passi e vedi se ha fatto 1 o 2 giri.

Ciao Uwe

Comunque é facile fai 4096 passi e vedi se ha fatto 1 o 2 giri.

Eh, fai presto a dire, tu ! :-?

Mi sai dire di preciso che comandi dovrei usare secondo te? Ho provato varie combinazioni, ma con risultati che non riesco a spiegarmi.

Sono partito da questo sorgente:

#include <Stepper.h>
#define STEPS 100
Stepper stepper(STEPS, 8, 9, 10, 11);
int previous = 0;

void setup()
{
  stepper.setSpeed(30);
}

void loop()
{
  int val = analogRead(0);
  stepper.step(val - previous);
  previous = val;
}

http://www.arduino.cc/en/Tutorial/MotorKnob
(ho tolto i commenti per compattezza)

Lasciando stare per il momento il potenziometro di controllo, rimarrebbe:

#include <Stepper.h>

// Parametri da sistemare:
#define STEPS 100
int Velocita=20; // RPM o cosa?!?
int NumeroDiStep = 64; // 1 giro o 1 step del rotore esterno?


void setup()
{
  stepper.setSpeed(Velocita);
  stepper.step(NumeroDiStep);
}

void loop()
{
 
}

Cosi' ad ogni reset dell'arduino dovrebbe fare un tot di step.

STEPS devi mettere a 4096 (passper 360 gradi)
Velocita= 1 ( sí giri al minuto )
NumeroDiStep 4096 ( passi del motore; per arrivare ai giri di 360 Gradi devi dividere per STEPS
Manca Stepper stepper(STEPS, 8, 9, 10, 11); nel secondo esempio.

#include <Stepper.h>

#define STEPS 4096
int NumeroDiStep = 4096; // 1 giro

void setup()
{
stepper(STEPS, 8, 9, 10, 11); 
int Velocita=1; // 1 RPM
}

void loop()
{
  stepper.setSpeed(Velocita);
  stepper.step(NumeroDiStep);
  delay(5000);                          // 5 secondi fermo}

Ciao Uwe