Discussioni di carattere generale sull'elettronica analogica e digitale. Didattica e applicazioni pratiche.
da LArmstrong1985
#8225
Buongiorno,
sto progettando una macchina CNC.
Per una maggiore precisione ho preferito mettere un encoder lineare magnetico con le seguenti caratteristiche:
- Pole pitch: 1mm
- Risoluzione: 1um
- Ripetibilità: +/- 2um

Basandomi sulla risoluzione, ho considerato ogni impulso di conteggio pari ad 1um ma così facendo ottengo dei valori
errati anche se ripetitivi nel senso che se torno nella stessa posizione il valore letto è praticamente sempre lo stesso.
L'errore in alcuni casi è anche rilevante (fino a 300um) anche se il conteggio è corretto in quanto è lo stesso tra il mio software
e l'analizzatore logico.
Sto sbagliando qualcosa? E' giusto considerare ogni impulso di conteggio pari a 1um o devo effettuare qualche calcolo particolare
a partire dai dati che ho?

Grazie mille a tutti.
Avatar utente
da double
#8226
LArmstrong1985 ha scritto: [CUT] ho considerato ogni impulso di conteggio pari ad 1um ma così facendo ottengo dei valori errati anche se ripetitivi nel senso che se torno nella stessa posizione il valore letto è praticamente sempre lo stesso[CUT]

Il fatto che tornando alla medesima posizione la lettura sul tuo Sw sia la stessa è un buon segno.

Quel che manca nelle specifiche dell'encoder è il numero di impulsi per micron. Se tale valore non è scritto da nessuna parte (strano) l'unico modo per ricavarlo è empirico e tutto sommato semplice.

Muovi di una quantità esattamente nota (0.1 mm, 1mm, 10 mm, dipende dalla massima escursione possibile) che hai misurato con un micrometro centesimale (stai lavorando con risoluzioni altissime!) e conta quanti impulsi sono arrivati, Poi muovi del doppio, triplo, ecc e conta ogni volta gli impulsi arrivati.
Quando hai abbastanza dati traccia la curva (X=posizione ed Y=impulsi) che difficilmente sarà una retta precisa e poi calcola la retta che meglio approssima la curva di misura. Usa il metodo dei minimi quadrati oppure la retta approssimante di excel/openoffice.
La pendenza della retta approssimante è la tua costante impulsi x micron.

ps. posta foto, marca e modello del tuo encoder magnetico lineare, magari in rete si trova qualche dato in più!
Bios ringraziano
da LArmstrong1985
#8227
Ciao,
l'encoder è un HiWin PM-B-01-xx-T-xx.
Di seguito il link all'intera documentazione, anche di altri modelli.
https://www.hiwin.it/images/download/documenti/sistemi-di-posizionamento-manuale-tecnico.pdf
Quello da me utilizzato è a pagina 14. In effetti anche io ho sempre visto nelle formule gli impulsi per micron
ma qui non è indicato per cui ho pensato che fosse la risoluzione ovvero 1 impulso = 1um.
Sicuramente dalle prime prove fatte, come dicevi anche tu, non mi sembra sia un errore lineare, per cui per essere
preciso dovrei creare una tabella.
Oltre ai signali A e B c'è anche quello di index (Z) che dovrebbe essere ogni 1mm. Posso considerare questi impulsi più precisi e basarmi su esso?

Grazie mille!
Avatar utente
da double
#8231
Premetto che non conosco questo tipo di encoder, ma l'argomento e' interessante ed ho fatto qualche ricerca.
La distanza percorsa dal cursore lungo la striscia magnetizzata è calcolata come descritto in questo documento
https://www.te.com/content/dam/te-com/documents/sensors/global/Sensors%20Whitepaper%20-%20Scale-based%20AMR%20Sensor%20Systems.pdf
SI calcola l'arcotangente delle uscite analogiche seno e coseno per risalire alla posizione fra due poli della testa di lettura (pole pitch di 1 mm). Poi occorre contare anche quanti poli si sono attraversati.

Peraltro le due uscite digitali hanno il classico doppio segnale di un encoder in quadratura che permette di discriminare il verso di movimento. Per ultimo l'uscita di reference genera un impulso ogni DUE cicli completi dei segnali digitali, quindi l'accuratezza del segnale di reference è la stessa ma la risoluzione è otto volte inferiore.

A prima vista (e se la divisione in gradi fosse la stessa per analogici e digitali ) sembrerebbe che la risoluzione dei segnali analogici sia migliore di quella dei segnali digitali che pero' forniscono anche la direzione, probabilmente combinandoli assieme si risale alla posizione assoluta con la massima risoluzione comunque si muova la testina.

Sempre leggendo i gradi, sembrerebbe che ci siano 4 impulsi digitali (i fronti di salita e di discesa) ogni pitch pole attraversato, quindi si avrebbe un impulso ogni 250 micron , tuttavia le specifiche danno la medesima risoluzione per entrambi i segnali . Sicuramente ne sai tu più di me!

ps: Il circuito di interfaccia fra il sensore ed il SW di misura lo hai fatto tu?
LArmstrong1985 ringraziano
da LArmstrong1985
#8232
Anche io avevo trovato questo tipo di formule collegate ai pole pitch e ai PPM(il dato che non ho) in questo articolo:
https://www.motioncontroltips.com/faq-what-do-x1-x2-and-x4-position-encoding-mean-for-incremental-encoders/
Se davvero però un impulso è pari a 250um il dato che leggo non ho completamente senso :(
In più qui parla di diversi tipi di codifica (x1 - x2 - x4) cosa che non è specificata nel datasheet. Io sto usando la x4 ovvero
4 conteggi ogni phase.
Riguardo il circuito di interfaccia dei segnali dell'encoder sto usando questa demo board della Maxim:
https://datasheets.maximintegrated.com/en/ds/MAX14890EEVKIT.pdf
E' dotata di diversi jumper di configurazione per i segnali di ingresso, ma escludendo l'impostazione RS422, non sono sicuro di come vada impostata (DI o TTL)?

Ti ringrazio per ora
Avatar utente
da double
#8237
Riconfermo la mia ignoranza in materia.

Ho dato uno sguardo alla demo board ed anche al datasheet del max14890. Si tratta di un ricevitore di livelli con vari standard, come quelli previsti nel datasheet dell'encoder. Quindi pongo qualche domanda:
1) quali uscite dell'encoder hai usato per connetterle alla demoboard, solo quelle digitali (due segnali on/off in quadratura) o anche i due segnali analogici seno e coseno?
2) il sw che hai sviluppato cosa se ne fa di questi segnali? Conta gli impulsi (in numero e verso) o li moltiplica anche per qualche costante?
3) hai provato a fare il confronto spostamento vs lettura del tuo software? Quale ' lo spostamento minimo apprezzabile?

Probabilmente sbaglio io, ma non mi sembra che il MAX14890 legga e ritrasmetta anche i segnali analogici ma lavori solo solo con quelli di tipo digitale (RS-422/HTL/TTL/DI), in tal caso probabilmente non si apprezza lo spostamento all'interno del pole pitch. Pero' ripeto che posso sbagliare.
da LArmstrong1985
#8267
Ciao,
ho fatto delle verifiche approfondite confrontando i valori letti con quelli dell'analizzatore logico e mi sembra che in realtà stia leggendo bene dall'encoder.
Purtroppo sto lavorando su un sistema già montato su cui sono presenti un riduttore a vite e un carrello su cinghia in maniera da trasformare il moto da rotativo in lineare.
Non avendo esperienza e non avendo potuto fare prove con il motore a vuoto non so se sono errori attribuibili solo a questi componenti esterni e se ci sono delle tecniche per ovviarvi.
I problemi che riscontro sono i seguenti:
- ogni volta che faccio una inversione nel senso di marcia del motore ho una perdita consistente (nell'ordine dei 300um)
ed è questo l'errore principale. Nel caso successivamente mi muovo nella stessa direzione leggo un valore pressochè corretto. Questo potrebbe essere compatibile con problemi meccanici dovuti al fatto che quando inverte il senso di marcia il motore ci mette un po' ad "ingranare" sulla vite
- molto probabilmente per lo stesso motivo non riesco a compiere piccoli spostamenti per cui se chiedo al motore di fare pochi step in realtà mi sposto di poco. Nel caso magari chieda di fare 1 step il motore non si sposta per nulla
- l'ultimo problema riguarda l'encoder il cui segnale vedo è sfasato soprattutto alla fine di diversi secondi rispetto a quando io ho finito di inviare gli impulsi al driver. Questo potrebbe essere normale (non so) però essendoci così tanto ritardo non mi permette di fermarmi esattamente al mio zero e in secondo luogo anche se volessi adottare un sistema
retroazionato per migliorare la precisione non mi permette di essere preciso dato che il valore che leggerei dall'encoder è molto in ritardo rispetto agli step che invio.

C'è qualche soluzione che può essere utili per risolvere questi problemi?

Grazie mille!
Avatar utente
da double
#8268
Senza offesa , ma con poco metodo nell'approccio si rischia di andare a tentoni o peggio a tentativi

1) posta uno schizzo o una foto dell'ambaradan: driver (microstep?) motore (passo passo?), trasmissione (riduttore conico o a vite senza fine?), gestione del backslash (ruota a doppia corona?), gola e cinghia (dentata, trapezoidale, ecc?), barra magnetica dell'encoder( lunghezza di lavoro?), encoder (uscite solo digitali o anche analogiche a seno/coseno?)
2) quel benedetto encoder quanti impulsi/cicli fornisce per ogni millimetro di spostamento effettivo?
3) quanti impulsi da inviare al motore servono per muovere il carrello di 1 millimetro?
4) che vuol dire che servono alcuni secondi per inviare il treno di impulsi al motore? chi li genera e come li trasmette? c'è una mcu che comanda un driver intelligente che pilota il motore oppure il comando è diretto mcu-> ponti di potenza-> motore?
5) il posizionamento e' assoluto (sai in anticipo di quanto si sposterà il carrello in funzione dgli impulsi inviati) oppure relativo (con l'encoder misuri di quanto si è spostato il carrello e aggiusti la posizione con altri impulsi)

Sembrano domande banali (ed in effetti lo sono) ma serve conoscerne le risposte per gestire il marchingegno, semprechè non sia un segreto industriale!

ps. 3 decimi di perdita durante l'inversione del movimento sono una enormità, non e' il motore lento ad ingranare ma è l'ingranaggio che non recupera il gioco!
Bios ringraziano
Vendo

OWON HDS2202S nuovo imballo originale 190.00 eur[…]

Sono comuni interruttori a levetta DPDT. Se le due[…]

Visita il nostro canale telegram