motore step con accelerazione

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:

http://www.airspayce.com/mikem/arduino/AccelStepper/classAccelStepper.html#ae79c49ad69d5ccc9da0ee691fa4ca235

il programma che ho scritto è questo:

#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 presentarti QUI (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.

Guglielmo

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:

Quindi è un po tutto confuso... potrei ovviamente fare delle prove e andare a tentativi ma mi piacerebbe capire qualcosa in più.
Grazie

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?

per gli switch ora è tutto chiaro. grazie :slight_smile:

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.

Grazie ragazzi siete stati utilissimi!

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

Si direbbe un pilotaggio "analogico":
http://www.nmbtc.com/step-motors/engineering/full-half-and-microstepping/
da cui la minore coppia

Ciao!

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.

ragazzi ho un problema.
Alla fine ho comprato questo motore con riduttore perchè mi serviva piu potenza.
http://www.ebay.it/itm/DE-Ship-14-1-Planetary-Gearbox-High-Torque-Nema-17-Stepper-Motor-DIY-CNC-Robot-/231657798084?hash=item35efe179c4

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