salve a tutti, volevo un consiglio dai più esperti, vi spiego in breve il mio dilemma:
vorrei realizzare tramite una guida lineare equipaggiata di stepper Nema17 un posizionatore, in effetti vorrei che esso si muova e si fermi in una determinata posizione stabilita da me.
avevo pensato ad un finecorsa montato ad uno dei lati e un contatore (software) , all' avvio esso dovrebbe girare fino a che non chiuda il contatto del finecorsa e poi da li invertire il senso di rotazione e incominciare a contare i passi fino a che non raggiunga la destinazione da me impostata.
adesso mi viene il dubbio se magari sarebbe meglio usare un encoder per leggere i passi del motore, consigli ?
Lo stepper di fatto ha già dentro un encoder, e aggiungendo il finecorsa hai realizzato la configurazione classica. Perché dovrebbe essere meglio usare un encoder esterno secondo te?
Stai usando uno stepper che già di suo si posiziona al numero di passi che gli fai fare.
L'unica ragione pratica per usare un encoder esterno è se c'è il rischio che il motore stepper perda passi a causa di una coppia resistente eccessiva, ma in tal caso è comunque già troppo tardi perché il motore sarebbe "in stallo" senza alcuna coppia motrice e quindi non puoi più regolare la posizione.
Esiste una specifica ragione per usare un motore (anche stepper) un finecorsa e un encoder, tutti e tre assieme
la ripetibilità dei fine corsa potrebbe non essere elevata, specialmente in ambiente "sporco" e intendo anche sporcizia fisica sulla meccanica
in questo caso l'intervento del fine corsa non dice "esattamente" la posizione, e se l'errore supera un passo del motore o se è per quasto una divisione dell'encoder la frittata è fatta...
la soluzione è quella di usare un fine corsa che si limita a segnalare (in retromarcia)il superamento (per meno di un giro di encoder) del punto di inizio corsa
e poi tornare in avanti fino alla tacca di zero dell'encoder
quello è il vero punto "zero" dell'asse
in questa maniera si riusciva anche a fare azionamenti pure con motori a gabbia di scoiattolo
un pochino più complicato di come vorrebbe fare lo OP, ma si tratta di soluzione molto utilizzata, almeno fino a qualche anno fa, quando facevo queste cose per lavoro...
Si è vero, è una tecnica molto utilizzata ed efficace con gli encoder incrementali. L'ho vista applicata molte volte in ambito industriale.
Tornando agli stepper, con il driver giusto, volendo si potrebbe fare anche un homing "sensorless" andando a battuta su un vincolo meccanico con ripetibilità e precisione elevatissima.
Purtroppo @extrema76 non ci ha fornito molte informazioni di dettaglio sul grado di precisione che è necessario per questo posizionamento.
Scusate il ritardo per la risposta, a me serve la massima precisione, in più prevedo di memorizzare le posizioni quindi proverò ad azzerare il contatore una volta premuto il fine corsa, pensavo che con l'encoder sarei stato più preciso, comunque farò qualche test. Secondo voi la classe AccelStepper fa al caso mio?
Ragazzi non riesco a leggere lo stato di questo switch, è normale switch elettrico con un contatto in comune uno normalmente chiuso e uno aperto, pensavo fosse facile, sono principiante, probabilmente dovrei usare switch adatti per Arduino?
Abilita il pull-up interno del microcontrollore e poi colleghi sul comune dello switch il GND e il contatto NC lo colleghi sull'ingresso selezionato.
In condizioni di riposo, il contatto NC mette a GND l'ingresso quindi l'istruzione
digitalRead(SwitchPIN) restituisce LOW come risultato.
Quando lo switch viene premuto, il contatto si apre e lo stato dell'ingresso sarà HIGH grazie alla resistenza interna di pull-up che porta il livello di tensione sui +5V.
int limitSwitch = 6; pin
void setup() {
pinMode(limitSwitch, INPUT_PULLUP);
}
void loop() {
if(digitalRead(limitSwitch) == HIGH){
digitalWrite(2, LOW); // il pin 2 e collegato ad un led per fare prove
}
else{
digitalWrite(2, HIGH);
}
giusto ?
Si, anche se manca una parentesi e il testo "pin" va commentato
Se vuoi giocare un po' online con il simulatore (ho invertito lo stato del led in funzione dell'ingresso e cambiato un pin per comodità).
buongiorno, sono riuscito a leggere lo stato dello switch grazie al vostro aiuto, adesso volevo un consiglio su come proseguire, vi spiego: uso la libreria accelstepper, vorrei settare delle posizioni prestabilite partendo dallo switch immagino con un contatore conterò i passi, il motore dovrà spostarsi verso la destinazione da me impostata, tutto questo controllato tramite un display 16x2 e un joystick, secondo voi come potrei fare, premetto che già muovo il motore attraverso l' asse Y del joystick. grazie
tramite la la libreria accelstepper come faccio a fermare il motore quando viene premuto il finecorsa e di conseguenza ripartire solo nel senso di rotazione opposta .
Potresti dare un bello sguardo alla documentazione e agli esempi dalla libreria
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.
