Motore stepper Nema 17, libreria stepper etc

Buongiorno a tutti.

E' arrivato il momento più per curiosità di dedicarmi ai motori passo passo. Avrei individuato questo prodotto:
http://www.robot-italy.com/product_info.php?cPath=0_159&products_id=1542

che vorrei pilotare con il driver al seguente link (secondo schema):

usando la libreria Stepper.

Detto questo, ciò che offre la libreria (oppure anche la AccelStepper), mi pare di capire è TUTTO quello che mi servirebbe (ovviamente implementando le sue funzioni per i movimenti che devo far compiere al motore). E' corretto secondo voi?

Altre librerie atte allo scopo che potrebbero essere interessanti?

Grazie.

Nel frattempo mi sono documentato un po'.

Ho scoperto che per pilotare quel motore 1.7A a me serve come minimo un BigEasyDriver che riesce a fornire 2A.

Oltre a questo permette il controllo del motore in microstep fino ad 1/16.

Detto questo, qualcuno ha un esempio di come usare il BigEasyDriver e magari sa se la libreria AccelStepper funziona correttamente con questo motore? Sarebbe piuttosto comodo poterlo gestire con essa.

Grazie a chi vorrà darmi una mano o anche solo un consiglio/supporto.

io ho recuperato un piccolo stepper da una stampante e lo testero' come nel link che hai messo, il mio e' piccolino, credo di poterlo pilotare con l293d.

se riesco a non impazzire con arduino1.0 che mi da solo errori possiamo far prove assieme per imparare :wink:

Ciao. Il tuo facilmente lo piloti col 293, quello che vorrei pilotare io necessita di driver perchè siamo a 1.7A.

Ho individuato un paio di driver ma almeno leggendo un po' parrebbe che il BigEasy sia quello che fa per me, peccato non trovi molti esempi sul suo utilizzo...

Se necessiti io per il resto dovrei cavarmela :slight_smile:

Ciao,
io utilizzo la Easy Big Driver (e mi sembra faccia bene la sua parte) con steppers NEMAxx (ed altri motori) fino 2.0A (anche 2.5A di picco con dissipatore e ventola) senza problemi.

Per iniziare ho usato come base questo sketch che potete implementare a piacimento.

Se avete bisogno, per quanto posso e per quanto ne so ( :~ poco!) sono a disposizione

Buon lavoro

//////////////////////////////////////////////////////////////////
//©2011 bildr
//Released under the MIT License - Please reuse change and share
//Using the easy stepper with your arduino
//use rotate and/or rotateDeg to controll stepper motor
//speed is any number from .01 -> 1 with 1 being fastest - 
//Slower Speed == Stronger movement

// -----------------------------------------------------------------------------------------
// Utilizzo ARDUINO - to - (EBD) Easy Big Driver
// Pin 2 to DIR  -  Pin 3 to STEP  -  Pin GND to GND
// EBD POWER PINS (GND e M+)con voltaggio per motore
// EBD AA-BB to 11-22 dello stepper
// Regolare corrente con TRIMMER on board
// ----- >>>  RAFFREDDARE CON VENTOLINA <<<--------
//////////////////////////////////////////////////////////////

#define DIR_PIN 2
#define STEP_PIN 3

void setup() {
  pinMode(DIR_PIN, OUTPUT);
  pinMode(STEP_PIN, OUTPUT);
} 

void loop(){ 

  //rotate a specific number of degrees 
  rotateDeg(360, 1);
  delay(1000);

  rotateDeg(-360, .1);  //reverse
  delay(1000); 

  //rotate a specific number of microsteps (8 microsteps per step)
  //a 200 step stepper would take 1600 micro steps for one full revolution
  rotate(1600, .5);
  delay(1000); 

  rotate(-1600, .25); //reverse
  delay(1000);
}

void rotate(int steps, float speed){
  //rotate a specific number of microsteps (8 microsteps per step) - (negitive for reverse movement)
  //speed is any number from .01 -> 1 with 1 being fastest - Slower is stronger
  int dir = (steps > 0)? HIGH:LOW;
  steps = abs(steps);

  digitalWrite(DIR_PIN,dir); 

  float usDelay = (1/speed) * 70;

  for(int i=0; i < steps; i++){
    digitalWrite(STEP_PIN, HIGH);
    delayMicroseconds(usDelay); 

    digitalWrite(STEP_PIN, LOW);
    delayMicroseconds(usDelay);
  }
} 

void rotateDeg(float deg, float speed){
  //rotate a specific number of degrees (negitive for reverse movement)
  //speed is any number from .01 -> 1 with 1 being fastest - Slower is stronger
  int dir = (deg > 0)? HIGH:LOW;
  digitalWrite(DIR_PIN,dir); 

  int steps = abs(deg)*(1/0.225);
  float usDelay = (1/speed) * 70;

  for(int i=0; i < steps; i++){
    digitalWrite(STEP_PIN, HIGH);
    delayMicroseconds(usDelay); 

    digitalWrite(STEP_PIN, LOW);
    delayMicroseconds(usDelay);
  }
}

Grazie. Interessante.

Io sto pensando di usare la BigEasyDriver insieme alla libreria AccelStepper che dovrebbe facilitare un po' la vita e fare da quello che ho visto tutto quanto mi serve.

Ti chiedo una cosa che non mi è chiara sui microstep: la BigEasyDriver ha un default di 16 microstep. Ciò significa che per una rotazione completa un motore da 400 ne fa 6400 (nel tuo caso ne farebbe 200*16 = 3200). Vedo che tu fai 8 microstep. Controlli quindi con Arduino anche i pin M1,M2,M3 del BigEasyDriver per cambiare il numero di microstep impostati di default?

Ora, se avessi un driver che non gestisce i microstep, per fare una rotazione completa dovrei fare una cosa del tipo (molto semplicistica) rotate(400). Usando i microstep una rotate(6400). Ma questo cosa implica nella velocità con la quale il motore fa tutta la rotazione? E' la stessa cosa, o essendoci di mezzo i microstep, sarò molto più lento?

Se è molto più lento devo per forza pensare di utilizzare anche i pin M1,M2,M3 sul BigEasyDriver e di conseguenza, essendo a corto di pin sul 2009 per il progetto che sto portando avanti, vedere di gestire la cosa con uno shiftregister.

Spero che qualcuno possa darmi una mano :slight_smile:

Ciao

se non hai la necessità (veramente rara) di modificare il valore di microstepping durante l'esecuzione, non è necessario che controlli i PIN di configurazione della BED con Arduino, semplicemente collegali a GND o VCC in maniera statica.

Grazie Luca.

Sai cosa? Che non riesco a rendermi conto se mi servono o meno i microstep e se una volta definito che questi mi servono se devo variarne il numero... Cioè, in quali casi sono necessari?

Ciao

normalmente si utilizza il microstepping per:

  • aumentare la "accuratezza" dei motori nel raggiungere la posizione desiderata (hai più step intermedi)
  • rendere più "fluido" il comportamento (vai a pilotare il motore con onde sinusoidali invece che quadre)

bye

Supponendo di pensare ad un motore che gira una vite a passo infinito... L'accuratezza, anzichè essere data dai microstep, non può dipendere dal passo della vite?

Forse al momento non ho i pezzi per fare delle prove e mi sto scervellando su qualcosa che basterebbe vedere andare, ma non mi rendo conto nemmeno della distanza di movimento che potrei avere con o senza microstep.

Quindi valutare se i 16 microstep del BigEasyDriver sono adatti al mio scopo oppure 8 o meno andrebbero comunque bene. Buh :frowning:

Ciao!

Perchè non ci dai qualche informazione in più sul Tuo progetto... così possiamo capire (ed eventualmente consigliarti) se ti è necessario lavorare in microstep :slight_smile:

Ciao, nessun problema per le info sul progetto, ma ho capito che mi serve di lavorare coi microstep, almeno leggendo le specifiche di quanto fatto fin'ora simile.

Vorrei poter realizzare una piccola slitta di avanzamento etc. per un microscopio.

Difffenza tra microstepp e step normali:
I microstep introducono tra i step interi o i halfstep degli altri step. Il vantaggio é che come giá detto che si ha piú passi per rotazione e percui un posizionamento piú fine ( un motore con 1,8 gradi per passo con un 16 microstepping ha 3200 passi al posto di 200 per un giro) e percui devi dargli 3200 passi perché faccia un giro. per questo diventa il movimento piú fluido e meno a scalini e il motore gira meglio.
Visto che i micropassi vengono realizzati pilotando il motore in corrente e dandogli valori differenti per ogni microstep il motore ad alti giri ha piú coppia. Questo perché normalmente per usare passi interi o mezzi passi si usa un pilotaggio in tensione.
L' inghippo del microstepping e del pilotaggio in corrente in generale é che si deve pilotare il driver del motore con una tensione ca 4 volte la tensione nominale del motore. Per questo devi scegliere un motore con un tensione nominale bassa (sotto 5-6V). Se non si usa una tensione abbastanza alta il drive non riesce a imprimere la corrente al motore perché l' induttanza del avvolgimento la limita. Consequenza: il microstepping funziona cosí male che un pilotaggio a passi interi a tensione funziona meglio. l' alimentatore deve poter fornire questa tensione altina e la corrente necessaria percui 4 volte quello per pilotare in corrente.

Ciao Uwe

Ciao uwe, grazie. Avevo letto un tuo post sul vecchio forum e speravo in una tua risposta.

Il motore che vorrei acquistare è questo: http://www.robot-italy.com/product_info.php?cPath=159&products_id=2244 è dato per 3V e 1.7A.

Vorrei usare poi il BigEasyDriver per pilotarlo. Mi pare che ci siamo.

Io utilizzerei una batteria da 12V/7Ah.

Uwe ha dato una spiegazione esaustiva e TOMBALE :grin:

Direi anch io che ci siamo.
Solo che la batteria sará vuota in meno di 2 ore
Calcolo:
7Ah é calcolato con una scarica di 1/20 della capacitá (350mA). Se la scarichi con 2,4A (1,7A * SQR(2), dato dalle correnti impresse dal BigEasyDriver, vedi integrato A4988) si esaurisce molto piú velocemente. Stimo sulle 2 ore.

Ciao Uwe

Grazie ancora Uwe.

Posso anche pensare ad un alimentatore :slight_smile:

Se usi un alimentatore allora uno 12V con almeno 2,5A
Ciao Uwe