Buongiorno a tutti.
Ho collegato un motore stepper ad arduino con il relativo driver di potenza.
Ho usato questa libreria per comandare il movimento del motore con accelerazione:
#include <AccelStepper.h>
// Define a stepper and the pins it will use
AccelStepper stepper(1, 9, 8);
int pos = 2000;
void setup()
{
stepper.setMaxSpeed(1000);
stepper.setAcceleration(1000);
}
void loop()
{
if (stepper.distanceToGo() == 0)
{
delay(300);
pos = -pos;
stepper.moveTo(pos);
}
stepper.run();
}
Volevo capire quali sono i limiti del sistema, voglio dire la massima velocità e accelerazione che
posso raggiungere. ora ho settato i due valori a 1000 ma quei due numeri avranno un significato...?
Grazie in anticipo.
Da quello che ho compreso dal link che hai messo sono gli step inviati in un secondo dunque la domanda che mi pongo e se veramente il tuo step motor è capace di seguire 1000 step in un secondo, mi sembrano tanti. Proverei con valori molto più bassi per iniziare magari 40/50 lo stesso vale per l'accelerazione vedi se possibile i dati di targa del tuo motore.
**@robotronico: ** essendo il tuo primo post, ti chiederei cortesemente di presentartiQUI (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con attenzione il REGOLAMENTO ... Grazie.
Grazie per le risposte.
è la prima volta che ho a che fare con un motore step quindi non so praticamente nulla.
La scheda del motore è questa:
Dal grafico che vedo gli step al secondo possono arrivare fino a 10.000 ma per lavorare con una coppia decente non dovrei superare i 1000. (se ho capito il significato di quel grafico)
Io ho scritto 1000 ma a me pare parecchio lento.
Inoltre quel numero dovrebbero essere gli impulsi che arduino da in uscita sul pin 9. giusto?
Ma io ho letto che di default la frequenza massima della PWM sul pin 9 è di 488Hz.
Inoltre il driver di potenza del motore ha un settaggio impostato a 1/16 che non ho ben capito cosa sia:
Per primo un motore Passo Passo non va pilotato in PWM
Per secondo quel Datasheet da informazioni riguardate 2 motori diversi. Quale hai Tu?
Con che tensione alimenti il driver?
1/16 vuol dire che il driver fa 15 passi intermedi tra 2 passi interi (16 passi in tutto) modulando la corrente sui 2 avvolgimenti. Questo funziona solo bene, se la tensione di alimentazione é alta.
Ciao Uwe
Ma io ho letto che di default la frequenza massima della PWM sul pin 9 è di 488Hz.
Non c'entra niente la frequenza del PWM con il pilotaggio dello stepper
Inoltre il driver di potenza del motore ha un settaggio impostato a 1/16 che non ho ben capito cosa sia:
Vuol dire che lo stai pilotando in MicroStepping.
Ovvero che se per fare un giro completo in modalità 1:1 servono 200 Step, in 1:16 ne servono 200x16=3200
Metti gli switch in un rapporto minore e vedrai come corre
Buongiorno a tutti e grazi ancora per le risposte.
il mio motore è HS200 2231 0210.
Lo alimento a 24V per il momento perché non ho un alimentatore con tensione maggiore.
So bene che il motore pp non va alimentato con la PWM ma il driver vuole in ingresso un segnale di clock.
Io sono abituato con i plc che sparano fuori il treno di impulsi. la frequenza degli impulsi e proporzionale alla velocità dei motori.
Quindi che roba esce dal pin 9 di Aruino?
robotronico:
Quindi che roba esce dal pin 9 di Aruino?
Escono gli impulsi che pilotano l'ingresso step del controller, la frequenza è quella che inserisci nella libreria, però su gli AVR a 8 bit non riesci ad andare oltre 1000-1500 impulsi al secondo, anche se metti un valore maggiore la velocità massima è quella, è un limite dato sia da wiring che dalla libreria stessa.
Utilizzando codice ottimizzato, ovvero scritto in C Ansi, si arriva senza problemi a 10.000 impulsi al secondo cinque motori diversi con relative rampe.
Solitamente sugli stepper di buona qualità, controllati come si deve, si arriva attorno ai 6000-8000 step al secondo come velocità massima, limite che si applica anche al microstepping pertanto se usi un microstep 1/16 alla fine il motore arriva al massimo a 500 step, interi, al secondo, inoltre con il microstepping si perde molta coppia.
quindi è come pensavo la frequenza degli impulsi è proporzionale alla velocità.
A me non serve molta precisione quindi immagino che posso anche settare il driver 1/1 in modo da avere la coppia massima.
Il periodo degli impulsi e' legato alla velocita'. Di solito il profilo di velocita' e' un trapezio con una rampa di salita in accelerazione e cioe' con periodo dempre piu' breve fino al raggiungimento della velocita richiesta e si manteneva per un certo periodo di tempo (la retta del trapezio). Poi, in funzione della posizione da raggiungere si inizia una rampa di discesa con periodi via via crescenti sino al raggiungimento della posizione voluta. Per il mantenimento della posizione normalmente si parzializza la'alimentazione per evitare consumi onerosi ma mantenendo un duty cicle sufficente ad evitare spostamenti accidentali del carico a cui e' connesso l'albero motore. Normalmente il profilo di velocita' si ottiene variando il periodo di interrupt in base ad una tabella che mette in relazione la posizione da raggiungere con il numero di passi con cui pilotare il motore. E' tuttavia possibile che il motore in accelerazione possa perdere qualche passo e allora si utilizza una tecnica che chiamavamo BANG in avanti aumentavamo i passi a velocita' costante (la retta del trapezio) in modo da recuperarli.
Questa era la tecnica che si usava nel controllo dei micromovimenti delle macchine da scrivere professionali quando esistevano ancora.
astrobeed:
inoltre con il microstepping si perde molta coppia.
Ciao astrobeed
Spiegami meglio.
Ho capito che dici che usando un motore con un pilotaggio in corrente con la stessa tensione di alimentazione e la stessa velocitá di rotazione (non di passi) in un momento di funzionamento in equilibrio, senza variazione di velocitá o di coppia un motore pilotato in microstepping ha meno coppia dello stesso motore pilotato a passi interi (alimentando sempre solo un avvolgimento alla volta)?
Ciao Uwe
uwefed:
ha meno coppia dello stesso motore pilotato a passi interi (alimentando sempre solo un avvolgimento alla volta)?
Esatto, qui un bel pdf che spiega molto bene la cosa.
Da notare che la perdita di coppia è si legata alla quantità di microstepping, ma non è direttamente proporzionale con questo, è più una variazione di tipo esponenziale ed è anche legata alla distanza tra i poli del magnete permanente e i poli degli elettromagneti.
Non ultimo, con il microstepping, c'è anche il problema che l'errore di posizionamento è soggetto ad un certo jitter, variabile in funzione della posizione, che a sua volta porta ad un ripple durante la rotazione del motore, per farla semplice è bene non esagerare con il microstepping, valori alti non portano nessun reale vantaggio, solitamente è bene stare a valori non maggiori di 1/16 se è realmente necessario aumentare la risoluzione del motore e la fluidità di movimento.
Tutto funziona ma il motore scalda ma morire e vibra durante l'accelerazione/decellerazione
Ho impostato la scheda driver 1/1 perchè con il ridutore ovviamente mi serviva piu velocità possibile.
Sapete dirmi da che dipende?
e soprattutto come posso risolvere?
Grazie