Velocità bassa stepper

Buonasera.
Sto testando uno stepper 23HS9440-26 (4A) collegandolo al driver TB6600.
Ho alimentato il tutto con un alimentatore 24V 3A.
Il driver l ho impostato ad una corrente di 4A ed impostato a microstep (4).
Mi sembra però che il motore giri abbastanza piano. Nel programma ho usato una pausa sugli impulsi con “delayMicroseconds (500)”.
Anche variando questo valore, la velocità maggiore che ottengo mi sembra sempre molto bassa.
Avete suggerimenti?

Ti segnalo che, nella sezione in lingua Inglese, si può scrivere SOLO in Inglese ... quindi, per favore, la prossima volta presta più attenzione in quale sezione metti i tuoi post; questa volta esso è stato spostato, da un moderatore della sezione di lingua Inglese, nella sezione di lingua Italiana ... la prossima volta potrebbe venire direttamente eliminato. Grazie.

Guglielmo

Mi scuso e la ringrazio, non ho notato.
Grazie.

Si, ma è già la seconda volta (anche nell'altra discussione avevi sbagliato sezione) ... eliminate i traduttori automatici delle pagine se li avete attivi, che NON vi fanno capire dove scrivete!

Guglielmo

Ho visto adesso entrambi gli errori! Non mi ero accorto anche perché è la prima volta che pubblico argomenti!! Cercherò di stare più attento

1 Like

Con un delay da 500uS stai generando un treno di impulsi con una frequenza di 1000Hz.
Con un motore da 200 step/giro ed un microstepping da 1/4 di passo significa che stai facendo girare il motore a 1000/200*4 *60 = 75 RPM

Per andare oltre devi accertarti che sia il driver che il motore siano in grado di gestire frequenze maggiori. Il TB6600 dovrebbe arrivare fino ad un massimo di 20Khz, per quanto riguarda il motore, hai un datasheet di riferimento?

Ciò detto, usare un delay anche se breve non è mai una buona idea.
Proprio in questi ultimi giorni ho giocato un po' con uno stepper, ed ho scelto di usare l'interrupt sul Timer1 per generare la sequenza di impulsi.

Qualcosa del genere per capirci:

bool doStep = true;

// Set Timer1 interrupt frequency
void setMotorSpeed(uint16_t stepPerSecond) {
  #define PRESCALER 8
  noInterrupts();
  TCCR1A = 0; TCCR1B = 0; TCNT1 = 0;    // Clear registers
  OCR1A =  (uint16_t) ((16000000UL / (PRESCALER * stepPerSecond)) - 1);
  TCCR1B |= (1 << WGM12);   // CTC
  TCCR1B |= (1 << CS11);    // Prescaler 8
  TIMSK1 |= (1 << OCIE1A);  // Output Compare Match A Interrupt Enable
  interrupts();
}

// Timer 1 Interrupt Service Routine. If motor must run, simply toggle the state of STEP_PIN
ISR(TIMER1_COMPA_vect) {
  if (doStep)
    digitalWrite(STEP_PIN, digitalRead(STEP_PIN) ^ 1);
}

Ti ringrazio! Chiara la spiegazione, un po’ meno il codice; Devo studiarmelo un pochino!
Ti allego una foto del motore:
Considera che attualmente, se uso step intero, mi fa un giro completo in 9 secondi! Mi sembra esageratamente lento!


Il motore non è velocissimo da quanto si vede dal grafico (inizia a perdere coppia in modo sensibile intorno ai 250/300 RPM), ma così c'è decisamente qualcosa che non torna.
Prova a postare anche lo schema e lo sketch che stai usando al momento.

Il TB6600 se non ricordo male ha tutti gli ingressi optoisolati e quindi devi collegare ciascun "-" al GND in comune con arduino (oppure al i morsetti "+" al positivo con segnali attivi bassi).


image

Per quanto riguarda il pezzo di codice che ti postato prima, il principio di funzionamento è molto semplice. Usando il Timer hardware del microcontrollore genero un segnale ad onda quadra con frequenza variabile, poi con una variabile booleana decido se attivarlo o meno sul pin corrispondente alloe STEP del driver.

Più tardi vedo di postare quanto mi hai chiesto! Intanto ti ringrazio per l’aiuto.

In sostanza lo schema che ho fatto è questo, nonostante stia usando arduino mega.

la parte di sketch che sto usando per le prove è questo ciclo while:

// Avanzamento 1
if (tasto == 'B'){
while (x < 1600){

digitalWrite (motoreStepp, HIGH);
delayMicroseconds (500);
digitalWrite (motoreStepp, LOW);
delayMicroseconds (500);

x++;
}
}Testo preformattato

Hai verificato le fasi del motore con un multimetro?
Se non ricordo male sul connettore da 6 pin dello stepper le due fasi sono 1/4 e 3/6

No. Non le ho verificate in realtà! Ho seguito la connessione come da manuale del produttore.
Però domani le verifico con il multimetro.
Dici che se sono sbagliate può funzionare lo stesso il motore, ma girare più piano?

Più che girare piano, gira male facendo uno step una tantum.

Io ho verificato sugli stepper che ho in casa in questo momento e sono tutti cosi sul connettore di uscita del motore (lato destro dell'immagine):

image

Ok, ma il mio stepper (nema 23) ha solo 4 fili
Nero A+
Verde A -
Rosso B+
Blu B-
stasera verifico connessioni e bobine con multimetro poi ti dico!

Ho verificato connessioni e alimentazioni, e risultava tutto ok.
Cambiato driver e nulla da fare.
Alla disperata ho tolto il ciclo while e messo la logica direttamente nel LOOP e come per magia lo stepper ha iniziato a girare molto meglio e più veloce.
Non ho ancora capito se quella che vedo è la sua massima velocità. Farò ulteriori prove.
Secondo te dov'è il cono di bottiglia nel ciclo while che ti avevo indicato in precedenza?