posizionamento errato stepper motor

Sezione dedicata all'elettronica di controllo cnc.
Rispondi
stefa24
Newbie
Newbie
Messaggi: 16
Iscritto il: venerdì 11 luglio 2014, 12:48
Località: piacenza

posizionamento errato stepper motor

Messaggio da stefa24 » sabato 12 luglio 2014, 9:35

ciao
sono nuovo del forum, spero riusciate a darmi una mano con un problema che mi assilla da qualche giorno, usando una scheda arduino che legge gli impulsi di un encoder, vorrei fare ruotare un albero di X° gradi ogni con pause di Y secondi, mediante uno stepper. Quello che non riesco ad ottenere è la precisione della rotazione. Ho usato cavi schermati per l'encoder e per i cavi dello stepper, ho controllato con un ocilloscopio gli impulsi dell'encoder non sono perfetti, ne vedo qualcuno in più del dovuto che la scheda vede come valido e che è la causa dell'errato posizionamento, secondo me, quali altri accorgimenti posso prendere?

Stefano

Avatar utente
hellfire39
God
God
Messaggi: 3774
Iscritto il: domenica 16 dicembre 2012, 9:04
Località: AN

Re: posizionament errato stepper motor

Messaggio da hellfire39 » sabato 12 luglio 2014, 13:33

Un'immagine dei segnali sarebbe utile.

stefa24
Newbie
Newbie
Messaggi: 16
Iscritto il: venerdì 11 luglio 2014, 12:48
Località: piacenza

Re: posizionament errato stepper motor

Messaggio da stefa24 » sabato 12 luglio 2014, 15:36

ciao
finalmente sono riuscito ad avere una immagine da pdf
Non hai i permessi necessari per visualizzare i file e le foto allegati in questo messaggio. Per visualizzare tali file devi registrarti ed effettuare il Login

Avatar utente
hellfire39
God
God
Messaggi: 3774
Iscritto il: domenica 16 dicembre 2012, 9:04
Località: AN

Re: posizionament errato stepper motor

Messaggio da hellfire39 » sabato 12 luglio 2014, 16:07

Mi sembra perfetta :-k

stefa24
Newbie
Newbie
Messaggi: 16
Iscritto il: venerdì 11 luglio 2014, 12:48
Località: piacenza

Re: posizionament errato stepper motor

Messaggio da stefa24 » sabato 12 luglio 2014, 18:58

ciao
quello che, secondo me, crea problemi nel posizionamento, a fronte di un motore che gira in modo regolare sono alcuni intervalli brevi rispetto agli altri, in altre parole alcuni fronti di discesa e salita o salita e discesa sono più ravvicinati rispetto ai loro corrispondenti.
Ho fatto la prova di visualizzare sia l'angolo misurato che il numero di passi fatto tra una pausa e l'altra, mentre gli angoli impulsi era costante, non lo era il corrispondente numero di passi.
Da prove fatte con il solo encoder non si sono problemi e l'onda è più pulita, i problemi nascono quando lavoro con lo stepper.

Stefano

stefa24
Newbie
Newbie
Messaggi: 16
Iscritto il: venerdì 11 luglio 2014, 12:48
Località: piacenza

Re: posizionament errato stepper motor

Messaggio da stefa24 » sabato 12 luglio 2014, 19:00

Ho eliminato l'encoder, e patto prove di posizionamento contando i passi dello stepper e il posizionamento viene eseguito correttamente, ma non volevo seguire questa strada, nel caso perdessi dei passi.

Stefano

turbina

Re: posizionament errato stepper motor

Messaggio da turbina » sabato 12 luglio 2014, 23:47

Hai provata a sostituire l'encoder , potrebbe essere difettoso

Avatar utente
hellfire39
God
God
Messaggi: 3774
Iscritto il: domenica 16 dicembre 2012, 9:04
Località: AN

Re: posizionament errato stepper motor

Messaggio da hellfire39 » domenica 13 luglio 2014, 1:06

Quanti passi/giro ha l'encoder?
Se l'encoder non ha gli stessi passi dello stepper (o un suo multiplo) è normale che possa avere forme non regolari. Ma servirebbe vedere entrambe le forme d'onda in quadratura per capire se sta 'rimbalzando'.

Dalla forma d'onda non mi sembra guasto.

stefa24
Newbie
Newbie
Messaggi: 16
Iscritto il: venerdì 11 luglio 2014, 12:48
Località: piacenza

Re: posizionament errato stepper motor

Messaggio da stefa24 » domenica 13 luglio 2014, 8:14

ciao
l'encoder ha 360 passi/giro lo stepper lavora a 400passi/giro, provo a spiegare quello che succede:
con una scheda conto i passi dell'encoder raggiunto il valore programmato, manda un pin HIGH e azzera il contatore, che viene rilevato da un'altra scheda che controlla lo stepper per fermarlo, restituisce il numero di passi, lo restituisce, dopo un intervallo azzera il contaore e riprende a girare fino al prossimo HIGH, la scheda dello stepper restituisce sempre gli stessi valori, mentre la la scheda dello stepper restituisce sempre valori diversi.

Ho provato anche a sostituirlo ma con gli stessi risultati.

Ma quei fronti ravvicinati rispetto agli altri è una cosa normale? se il motore gira a velocità regolare.

Stefano

Avatar utente
hellfire39
God
God
Messaggi: 3774
Iscritto il: domenica 16 dicembre 2012, 9:04
Località: AN

Re: posizionament errato stepper motor

Messaggio da hellfire39 » domenica 13 luglio 2014, 9:24

Domanda: per l'encoder, che suppongo abbia due segnali in quadratura, conti solamente in avanti, guardando un solo segnale oppure conti avanti/indietro guardando i fornti di entrambi i segnali in quadratura?

Se conti solo in avanti, un'ipotesi potrebbe essere che, in qualche posizione, ti fermi in posizione molto vicina ad una transizione encoder. Una minima vibrazione in questa zona farebbe rimbalzare l'encoder avanti e indietro.
Se conti avanti indietro conteresti +1 (-1 +1) === 1
la parte tra parentesi è il rimbalzo.

Ma se conti solo in avanti incrementi di 2.

Ti allego una immagine. Ho schematizzato le posizioni di arresto del motore e quelle in cui scatta l'encoder. Si vede che, ogni tanto, ci sono delle posizioni in cui il motore si arresta in posizioni molto vicine alla zona di commutazione dell'encoder. Ogni passo stepper fa 0,9 passi encoder.

Ricorda che un motore stepper non gira in modo continuo, ma a passi. E, dopo ogni passo, potrebbe oscillare intorno alla posizione di riposo.
Non hai i permessi necessari per visualizzare i file e le foto allegati in questo messaggio. Per visualizzare tali file devi registrarti ed effettuare il Login

stefa24
Newbie
Newbie
Messaggi: 16
Iscritto il: venerdì 11 luglio 2014, 12:48
Località: piacenza

Re: posizionament errato stepper motor

Messaggio da stefa24 » domenica 13 luglio 2014, 11:38

ciao
conto solo in avanti e soltanto i fronti di salita, finora ho usato un solo canale, ho scritto un programma che nelle intenzioni dovrebbe scartare eventuali impulsi indesiderati, ma non ho ottenuto risultati soddisfacenti.
Ho capito il problema dell'indeterminazione della posizione dell'encoder, ma l'errore è di qualche grado.
Nelle CNC che tecnica si usa per il posizionamento, si usano motori sovradimensionati e si contano i passi del motore per il posizionamento?
Non sapevo dell'oscillazione del motore, una soluzione potrebbe essere quella di usare uno stepper con pochi passi giro e collegarlo con delle pulegge in modo da moltiplicare i giri dell'encoder per un giro dell'albero?

Stefano

Avatar utente
hellfire39
God
God
Messaggi: 3774
Iscritto il: domenica 16 dicembre 2012, 9:04
Località: AN

Re: posizionament errato stepper motor

Messaggio da hellfire39 » domenica 13 luglio 2014, 12:08

Di solito nelle CNC amatoriali che utilizzano gli stepper si lavora ad anello aperto.
Ovvero ci si affida solamente ai passi dello stepper per posizionare gli assi.

Un asse ben dimensionato (o sovradimensionato) *NON DEVE* perdere passi. Altrimenti è sottodimensionato.
D'altra parte gli stepper si utilizzano proprio perché sono comodi: i circuiti di pilotaggio sono semplici e costano poco e non richiedo hadware aggiuntivo (come gli encoder).

Gli encoder si utilizzano di solito con gli altri tipi di motore (es. brushless, c.c.) per i quali è necessario avere uno trumento esterno che rilevi la posizione dell'asse.

A mio avviso, uno stepper che, in condizioni di lavoro normale, perda passi è un motore sbagliato.

Tornando al tuo problema, io penso che la soluzione più corretta sia quella di contare sia in avanti che indietro perché è il modo corretto di utilizzare l'encoder incrementale. Tieni presente che la possibilità di avere rimbalzi c'è sempre.
(Lasciando encoder e motore come sono).

Altra info: che tecnica utilizzi per contare gli impulsi encoder nel micro? CIn base alla tecnica e/o alle risorse hardware utilizzate c'è sempre il rischio di perdere conteggi. Però in questo caso il conteggio encoder sarebbe minore di quello atteso. Mentre nel caso proposto sopra sarebbe maggiore.

stefa24
Newbie
Newbie
Messaggi: 16
Iscritto il: venerdì 11 luglio 2014, 12:48
Località: piacenza

Re: posizionament errato stepper motor

Messaggio da stefa24 » domenica 13 luglio 2014, 13:33

ciao
grazie per le risposte e alcune conferme.
Uso una scheda arduino con la funzione interrupt, che so essere la soluzione migliore per non perdere impulsi.
Al momento il motore è sovradimensionato rispetto alle esigenze, per sicurezza ne cerco qualcuno di taglia maggiore.

Stefano

turbina

Re: posizionament errato stepper motor

Messaggio da turbina » domenica 13 luglio 2014, 17:26

Per un controllo di posizione DEVI usare entrambi i canali A e B , impossibile essere precisi con un solo canale

stefa24
Newbie
Newbie
Messaggi: 16
Iscritto il: venerdì 11 luglio 2014, 12:48
Località: piacenza

Re: posizionament errato stepper motor

Messaggio da stefa24 » giovedì 17 luglio 2014, 13:12

ciao
ho risolto in parte il problema del posizionamento dello stepper, eliminando, per il momento, l'encoder e contando i passi del motore, pero' adesso si presenta uno strano comportamento, che provo a descrivere:
quando il motore si arresta a grazie a un sensore collegato al pin 3 e monitorato dall'interrupt in modalità FALLING, talvolta succede che dopo l'arresto il motore e trascorso l'intervallo stabilito ruoti di qualche passo per arrestarsi e riprendere a muoversi regolarmente dopo il medesimo tempo, in pratica succede questo
STOP-MOTO-STOP-MOTO fino al prossimo stop
mentre dovrebbe fare questo
STOP-MOTO fino al prossimo stop

Credo che il comportamento sia anche corretto, perchè dipende da dove l'interrupt riprende il programma, ho quindi provato a mettere un goto dentro l'interrupt per rimandare il programma all'inizio, ma il compilatore non lo accetta
/*
by Nick Gammon per debounce
*/
const byte switchPin = 11;
byte oldSwitchState = HIGH; // assume switch open because of pull-up resistor
const unsigned long debounceTime = 5; // milliseconds
unsigned long switchPressTime; // when the switch last changed state
byte switchState;

#define led_pin 13
#define sensor_stop_pin 3
#define motorPin 12// digital pin per il driver dello stepper


int ritardo, ritardo_1;
volatile byte k;
byte pin;

void setup()
{
pinMode (led_pin, OUTPUT);

pinMode (switchPin, INPUT_PULLUP);

pinMode(sensor_stop_pin, INPUT_PULLUP);
attachInterrupt(1, sensor_stop, FALLING); //sensore induttivo collegato al pin 2

pinMode(motorPin,OUTPUT);// set the digital pin as output

ritardo = 3500;// pauses for microseconds us
ritardo_1 = 5000;// pauses for milliseconds ms

Serial.begin(9600);
}

void loop()
{
// see if switch is open or closed
switchState = digitalRead (switchPin);

// has it changed since last time?
if (switchState != oldSwitchState)
{
// debounce
if (millis () - switchPressTime >= debounceTime)
{
switchPressTime = millis (); // when we closed the switch
oldSwitchState = switchState; // remember for next time
if (switchState == LOW)
{
Serial.println ("Switch closed.");
digitalWrite(led_pin, HIGH);
} // end if switchState is LOW
else
{
Serial.println ("Switch opened.");
digitalWrite(led_pin, LOW);
} // end if switchState is HIGH
} // end if debounce time up
} // end of state change

if(k == 0)
{
k = 1;
delay(ritardo_1);
}

motore();

}//fine loop

void sensor_stop()
{
k = 0;
}


void motore()
{
if(k == 1 && switchState == LOW)
{
digitalWrite(motorPin, LOW); // sets the pin on
delayMicroseconds(ritardo);// pauses for microseconds
digitalWrite(motorPin, HIGH); // sets the pin off
delayMicroseconds(ritardo);// pauses for microseconds
}
}

Rispondi

Torna a “Elettronica CNC”