juppiter Inserito: 15 settembre 2005 Segnala Share Inserito: 15 settembre 2005 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 è 0Fine cicloImmagino 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 anticipatamenteAlessandro---panta rei--- Link al commento Condividi su altri siti More sharing options...
Tode Inserita: 15 settembre 2005 Segnala Share Inserita: 15 settembre 2005 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.- pausapresumo 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 More sharing options...
juppiter Inserita: 15 settembre 2005 Autore Segnala Share Inserita: 15 settembre 2005 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 alibabaUna specifica di una ditta qualunqueIl 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 More sharing options...
Tode Inserita: 15 settembre 2005 Segnala Share Inserita: 15 settembre 2005 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 More sharing options...
juppiter Inserita: 15 settembre 2005 Autore Segnala Share Inserita: 15 settembre 2005 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 More sharing options...
Claudio F Inserita: 19 settembre 2005 Segnala Share Inserita: 19 settembre 2005 (modificato) 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 12) conteggiare per 30uS 2a) se torna a 0 salta a punto 1 2b) se timeout allora trovata pausaNall'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: 19 settembre 2005 da Claudio F Link al commento Condividi su altri siti More sharing options...
juppiter Inserita: 20 settembre 2005 Autore Segnala Share Inserita: 20 settembre 2005 (modificato) 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: 20 settembre 2005 da juppiter Link al commento Condividi su altri siti More sharing options...
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora