Vai al contenuto
PLC Forum


Lettura Da Calibro Digitale O Linear Gauge - una informazione teorica da un newbie...


juppiter

Messaggi consigliati

Buongiorno a tutti,

come prima cosa devo dire che ho trovato il forum molto interessante, pieno di informazioni utili.

Avrei una domanda di tipo teorico per iniziare a programmare un DRO (digital read out) per una fresa. (tipo shumatech).

Vi sono in commercio questi calibri o aste lineari digitali provenienti dalla cina che permettono di leggere la posizione di un cursore su una scala da 6 pollici a 12 pollici circa con una risoluzione di 20k linee per pollice circa. Sono poco costose e si trovano facilmente, magari su internet. L'unico problema è che usano un protocollo proprietario che non mi è molto chiaro, diverso dallo standard internazionale digimatic (il più diffuso).

Sul calibro, ci sono 4 pin: un gnd, un power a 1.5V e due linee dati; la prima linea dati è il clock, l'altra invece sincronizzata con la prima invia i dati.

La velocità di trasmissione è sincrona e dovrebbe essere fissata a 90khz, ma sembra che alcuni modelli vadano da 75 a 100, quindi mi è impossibile impostare preventivamente un timer.

Il calibro invia sulla linea dati due serie di 24 bit per informare della propria posizione (credo ogni serie in complemento di uno 1 bit di segno + 23 di dati, ma non è questo l'importante...).

Il problema che mi pongo è il seguente: il clock fa 48 volte su e giù, e fino a qui ci sono. Poi fa una pausa pari a 3 clock in posizione high, quindi ricomincia. I dati vengono trasmessi dall'inizio del ciclo sull'altro pin.

E' la prima volta che vedo un clock fare una pausa (?), ma poiché sono 'ignorante' probabilmente è un sistema che avrà anche un nome -delucidazioni?...

Utilizzo mplab e asm, non ho problemi nel leggere i dati quando il clock sale oppure scende, ma mi trovo in difficoltà nel sincronizzare il momento della lettura con la pausa. Pensavo infatti a questo semplice schema per memorizzare i dati del calibro e poi trattarli...

1) Inizio Ciclo

- E' il pin clock alto?

- Si, allora è il pin data alto?

-Si, allora il bit letto è 1

-No, allora il bit letto è 0

Fine ciclo

Immagino di dover leggere il clock per un certo numero di cicli e capire quando inizia il ciclo vero e proprio, ma come posso farlo visto che non c'è una frequenza definita?

Domanda: come posso sincronizzare la mia lettura con questo clock?

Grazie a tutti anticipatamente

Alessandro

---panta rei---

Link al commento
Condividi su altri siti


secondo me i cinesi lo hanno copiato dal protocollo SSI della siemens (sono bravi in questo), con l'unica differenza che non ci sono i canali complementari:

- durante la pausa del clock il convertitore parallelo/seriale del trasduttore carica i dati

- con il primo cambio di clock da high a low viene inviato alla seriale il bit più significativo.

- ad ogni ulteriore cambio del clock viene trasmesso un dato fino ad arrivare al bit meno significativo.

- pausa

presumo che il dato sia in codice gray ma potrebbe tranquillamente essere anche in binario

mi passi un link per questi trasduttori che sono curioso?

Link al commento
Condividi su altri siti

Ciao Tode...

non esiste un prodotto preciso, ma una intera produzione 'nazionale', ad esempio su alibaba (forse lo sai, comunque è un motore di ricerca cinese di prodotti e produttori) ne puoi trovare moltissimi:

Ricerca su alibaba

Una specifica di una ditta qualunque

Il sito da cui ho tratto molte informazioni è shumatech, dove c'è un progetto quasi amatoriale. Il software del controllore non è open source. Il prodotto, di cui vendono pcb e volendo anche accessori, è il dro 350.

In questo link c'è la specifica di queste 'digital chinese scales', con un analisi digitale dei segnali: Questo è il link , da cui ho tratto il 90% delle informazioni.

C'è anche qualche altro progetto on line (mi pare su un contest della olimex)

Qui dice:

The 48-bit serial stream contains two 24-bit words that are the absolute and relative positions of the scale in binary format, not BCD format like the Digimatic protocol.  Each 24-bit word is sent least significant bit (LSB) first, which is opposite from most serial protocols that send the most significant bit (MSB) first.
Link al commento
Condividi su altri siti

scusa, ma non ti conviene montare sulla tua fresa un bella riga ottica o una banda magnetica incrementale e fine?

Quei calibri che io sappia sfruttano un principio capacitivo che soffre la presenza di olio refrigerante e trucioli.

Link al commento
Condividi su altri siti

Hai sicuramente ragione ma è un progetto a 'budget limitato'... proverò comunque a interfacciare questo calibro ad una scheda di test...

Alessandro

--panta rei--

Link al commento
Condividi su altri siti

Si deve conoscere con ragionevole certezza la durata della pausa (o la frequenza del clock), poi da quanto ho capito il valore dei bit dati si aggiorna in corrispondenza del fronte di discesa del clock (anche di questo bisogna essere certi), e quindi e' meglio leggerlo al centro in corrispondenza del fronte di salita.

Le fasi sono 2, ricerca della pausa e lettura dei 24 bit.

Nell'ipotesi di avere un clock a 90 kHz (e quindi 90 kbit/s come velocita' dati) la pausa vale circa 33 uS, quindi per identificarla con sicurezza basta continuare a leggere lo stato del clock finche' lo si trova sempre alto per 30uS consecutivi:

1) attendere clk a 1

2) conteggiare per 30uS

2a) se torna a 0 salta a punto 1

2b) se timeout allora trovata pausa

Nall'ipotesi di usare un pic a 20 MHz puo' bastare questo ciclo che prosegue solo quando incontra il clock alto esattamente per 30uS:

BTFSS INPUT_PIN       ;controlla clock
GOTO $-1              ;se basso ricontrolla
MOVLW 25
MOVWF CONTATORE       ;predispone ciclo di 25 iterazioni da 1,2uS
DECFSZ CONTATORE,F    ;decrementa conteggio
GOTO $+2
GOTO $+4              ;se timeout esce
BTFSC INPUT_PIN       ;controlla clock
GOTO $-4
GOTO $-9              ;se basso ricomincia dall'inizio

Modificato: da Claudio F
Link al commento
Condividi su altri siti

Un doblone per Claudio.

Ora ho decisamente chiaro il problema. Effettivamente non mi ero mai reso conto di poter traslare il numero di istruzioni per sec. in un tempo usabile: 20 mhz cominciano quasi a starmi stretti, eh eh... Registrerò il segnale, per misurare con precisione il periodo del clock del calibro. Inoltre ho controllato la stabilità di un oscillatore che uso spesso (murata): anche se fosse durante il ciclo sempre sopra o sotto la frequenza teorica non uscirei dalla sincronia... cool!

Grazie, il tuo aiuto è stato moolto prezioso.

Ti aggiornerò sui progressi.

Alessandro

--!panta rei!--

Modificato: da juppiter
Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...