lightspeed attenuator+progetto HiFun controllo pre

Progetti, domande e idee sparse sull'autocostruzione delle elettroniche
Avatar utente
UnixMan
sostenitore
Messaggi: 12096
Iscritto il: 27 ott 2005, 22:34
Località: L'Aquila (Italy)
Has thanked: 79 times
Been thanked: 48 times

Messaggio da UnixMan »

per le EEPROM, rimanendo in casa microchip, ci vuole una 24XX512 da 512Kbit....penso che sia sufficente nò
penso di si`... magari quando abbiamo un po` di tabelle di attenuazione sottomano rifacciamo i conti cosi` ci rendiamo conto meglio.

In ogni caso e` bene prevedere di lasciare un bel po` di spazio inutilizzato per eventuali sviluppi futuri... ; ) in questo "coso" la quantita` di memoria disponibile e` sostanzialmente l'unico limite alla fantasia!!
per i PIC, la EEPROM arriva al massimo a 1024....quindi comunque abbiamo bisogno di una memoria esterna, per quanto riguarda le altre caratteristiche dobbiamo (devo) capire ancora come pilotiamo i LDR
...ci vuole un PIC con DAC? usiamo un DAC esterno? usciamo un potenziometro digitale esterno? ...a proposito di questa ultima opzione io ho queste
io propenderei per un DAC seriale esterno; un 16bit "stereo" pensato per l'audio, economico ma "silenzioso".

Se non vado errato i DAC interni delle PIC ed i pot. digitali tipicamente hanno risoluzioni troppo basse, rischieremmo di tarparci le ali per risparmiare due lire. Inoltre, per evitare di inquinare il segnale audio attraverso il link ottico, il rumore sul pilotaggio del LED deve essere minimizzato quanto piu` possibile. Di qui` l'uso di un DAC pensato x uso CDDA dovrebbe essere una buona scelta... oltre ad essercene una ampia scelta, essere relativamente economici e tutto sommato facili da reperire.
per la master board direi di lasciare quello che c'è.
In linea di massima penso che sia adeguato... ma cmq. di questo direi di riparlarne alla fine, quando ri-verificheremo in dettaglio quella scheda alla luce delle necessita`/possibilita` offerte dalle schede ingressi/attenuatore, delle features che vogliamo implementare subito e/o che prevediamo di poter eventualmente implementare in un secondo tempo aggiornando il firmware, etc.


Ciao,
Paolo.
Ciao, Paolo.

«Se tu hai una mela, e io ho una mela, e ce le scambiamo, tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee.»
andypairo
sostenitore
Messaggi: 689
Iscritto il: 03 nov 2005, 23:17
Località: Italy

Messaggio da andypairo »

Qualche opinione veloce:

-Le "dream features" lasciamole a quando avremo un oggetto funzionante, ora fanno solo confusione

-L'impedenza IMHO è meglio che sia costante. Per cui avremo tabelle di lunghezza differente

-Nei vari thread nessuno ha mai riscontrato reali problemi con i bassi valori di resistenza. I 100 ohm forse sono un po' troppo conservativi.

-Vorrei capire che motivazioni hai per ritenere che l'uso dell'ADC possa essere meno preciso

-Vorrei capire che strategia useresti per Vref, supponendo di dover settare una resistenza a 90, 1k, 4k7, 20k e 97k.
Tieni conto che il DAC deve anche poter erogare i 20mA per il led.

-OK per il 16bit, (ne servono 4 canali). Per il rumore possiamo mettere un bel cap in parallelo al led.

Ciao

Andrea
Avatar utente
UnixMan
sostenitore
Messaggi: 12096
Iscritto il: 27 ott 2005, 22:34
Località: L'Aquila (Italy)
Has thanked: 79 times
Been thanked: 48 times

Messaggio da UnixMan »

-Le "dream features" lasciamole a quando avremo un oggetto funzionante, ora fanno solo confusione
si e no`... discuterne ora in dettaglio magari potrebbe sembrare prematuro, ma e` bene tenere a mente ed in buon conto tutte le possibilita` per evitare di precuderci la possibilita` di implementarle in seguito. Ma, soprattutto, abbiamo comunque bisogno di sapere fin da adesso come saranno fatte queste benedette tabelle (di che valori di resistenza avremo effettivamente bisogno, etc) per valutare correttamente come realizzare tanto l'hardware che il software.

Dopo tutto si tratta semplicemente di calcolare qualche tabella e vedere cosa ne viene fuori...
-L'impedenza IMHO è meglio che sia costante.
anche a costo di sacrificare il range dinamico? e perche`?

Perche` mai dovremmo limitarci ad emulare un banale potenziometro!?

In genere, il problema maggiore con i "pre" passivi e` l'impedenza di uscita... di solito si finisce con lo scegliere una imp. di ingresso piuttosto scarsina per garantirsi che la max imp. di uscita rimanga sempre ragionevolmente bassa per non trasformare il tutto in un passa basso, incorrere in slew rate limitations, etc... ma, nal caso specifico, una volta raggiunto il minimo valore possibile per la Rldr shunt, l'imp. di uscita rimane sostanzialmente fissata da questa, per cui aumentare l'imp. di ingresso in generale non ha effetti negativi...

nel peggiore dei casi, per effetto delle interazioni tra impedenza di uscita dello stadio a monte, cavi, capacita` parassite varie, etc. si potrebbe verificare una leggera e progressiva tendenza ad accentuare le freq. + alte all'aumentare dell'impedenza di ingresso, cioe` al crescere dell'attenuazione oltre il punto in cui l'imp. di ingresso comincia a salire (che diversamente sarebbe comunque l'attenuazione max raggiungibile). Al piu` quindi ci sarebbe una sorta di effetto "presa fisiologica" ai volumi piu` bassi, insomma... il che tutto sommato e` un ulteriore vantaggio! :D
Per cui avremo tabelle di lunghezza differente
questo in linea di massima non dovrebbe essere un grosso problema, ma complicherebbe un po` il firmware. Anziche` gestire le tabelle banalmente con un loop fisso bisognerebbe usare qualche "trucco" (tipo scrivere la lunghezza di ogni tabella "in testa" alla stessa) oppure adottare una struttura dati un po` + sofisticata (e complicata) tipo linked list o roba del genere. Al solito, il problema sono le risorse limitate delle PIC ma immagino che, se proprio dobbiamo, in qualche modo dovremmo riuscire a farlo. Marzio? :?:

Pero`... perche` mai dovremmo complicarci la vita inutilmente per avere un risultato peggiore? Oltretutto, tabelle di lunghezza diversa ci creerebbero ulteriori problemi nel passare da una tabella all'altra, cosa che dovra` essere gestita nel modo piu` semplice possibile dalla scheda di controllo... non voglio dovermi preoccupare anche li` di quale sia il numero di passi delle varie tabelle!

No, scusa ma non ha senso. Stabiliamo fin da ora un valore ragionevole per l'attenuazione massima (40dB? 60dB? 100dB?) e poi facciamo tutte le tabelle con lo stesso numero di passi.

BTW: una cosa che mi e` venuta in mente e da valutare e` la eventuale possibilita` di sostituire le tabelle di attenuazione precalcolate con degli algoritmi che le determinino (calcolino) sul momento utilizzando un unico (ed ampio) set predeterminato di valori possibili (e ragionevoli) per le Rldr. Risparmieremmo un po` di memoria (avremmo le sole tabelle di calibrazione per gli LDR) a prezzo di qualche complicazione in piu` nel codice e soprattutto, verosimilmente, di una minore flessibilita`... boh, non credo che convenga... :?:
-Nei vari thread nessuno ha mai riscontrato reali problemi con i bassi valori di resistenza. I 100 ohm forse sono un po' troppo conservativi.
personalmente continuo a preferire l'idea di evitare di superare i 2/3 della max corrente ammessa per lunghi periodi, quale che sia la resistenza minima a cui cio` corrisponde. Comunque, queste sono cose che si imposteranno via software... per cui ognuno e` libero di scriversi (e caricare nella propria EEPROM) le tabelle (o gli algoritmi, se prendiamo quella via) che preferisce.

Al di la` di questo, continuo a non vedere il problema. Nel lightspeed originale questo esiste ed e` dovuto alle limitazioni del "sistema di controllo" (il potenziometro...) che obbliga ad un range dinamico limitato e soprattutto a variazioni sempre e comunque "simmetriche" della corrente nei due LED/LDR della "L". Guarda caso, uno dei motivi per usare un sistema piu` sofisticato come vogliamo fare noi e` proprio quello di evitare e superare tali limitazioni!
-Vorrei capire che motivazioni hai per ritenere che l'uso dell'ADC possa essere meno preciso
uhmm... sai che non mi ricordo piu`?! acc, sara` il caldo... boh, pero` se l'ho scritto qualcosa doveva essermi saltato in mente... dovrei ripensarci meglio. Pero` forse era una stupidaggine... magari avevo in mente le approssimazioni nei calcoli ma, a pensarci bene, probabilmente si possono usare valori precalcolati anche con il tuo metodo.
-Vorrei capire che strategia useresti per Vref, supponendo di dover settare una resistenza a 90, 1k, 4k7, 20k e 97k.
facciamo 100, 1k, 10k e 100k che mi sono piu` simpatici... :grin:

Mmmh... ipotizziamo di lavorare a corrente costante. Per semplicita` per ora poniamo Iset=100uA ed Rs=1k. Quindi, dobbiamo porre la soglia del nostro discriminatore a Vset == Iset * Rs = 100mV.

(se dobbiamo/vogliamo usare l'ADC, quale che sia Rs ed Iset possiamo metterci un op-amp in differenziale con quel tanto di guadagno che basta per riportare Vset verso meta` range dell'ADC stesso).

Vset == Iset * Rs ( = 100mV )
Vout == Iset * Rldr
Vadc == Vset + Vout

100 R -> Vout = 00.01 V ; Vadc = 00.11 V
001 K -> Vout = 00.10 V ; Vadc = 00.20 V
010 K -> Vout = 01.00 V ; Vadc = 01.10 V
100 K -> Vout = 10.00 V ; Vadc = 10.10 V

Ovviamente, in questo caso ho scelto Iset ed Rs piu` o meno a casaccio tanto per semplificare i conti, nella realta` andrebbero ottimizzati un po` meglio, comunque con un DAC a 16bit ci stiamo ancora dentro... pero` la precisione rischia di lasciare a desiderare. Indubbiamente e` una bella grana... specie visto che vorrei poterci spingere anche ben oltre i 100k (per intenderci, il mio "target" ottimale sarebbero 4 decadi, da 100 ohm a 1 Mohm a passi dello 0.5% - ammesso e non concesso che si riesca ad ottenere una precisione del genere dai LED/LDR).

Vediamo un po`... se utilizziamo l'ADC, una possibilita` per aumentare il range dinamico e migliorare la precisione e` quella di sfruttarlo per "cambiare scala" utilizzando diversi valori di Iset (e.g. 10uA, 100uA e 1mA) per i diversi range... a quel punto possiamo anche evitare il differenziale su Rs e leggere direttamente Vout con l'ADC.

A questo punto pero` tutto sommato torna in ballo anche la tua idea...

Possiamo fare cosi`: proviamo a vedere se e quanto e` complicato commutare le uscite dei DAC (che comunque abbiamo) buttando giu` uno schema. Poi valutiamo se sia meglio commutare le uscite dei DAC od utilizzare piuttosto una Vref fissa e commutare invece le resistenze. OK?
Tieni conto che il DAC deve anche poter erogare i 20mA per il led.
ovviamente il DAC va` bufferizzato... da valutare se con con un CCS controllato in tensione piuttosto che con un semplice buffer seguito da una R di valore sufficentemente elevato.

Mmmh, ne avevamo gia` discusso, mi sembra... pero` non ricordo piu`, eravamo arrivati a qualche decisione? e` ancora valida?

BTW, mi sa` che torna in auge anche la tua idea della Howland Current Pump... ; ) oppure, guardate qui`:

http://www.linear.com/ad/19-current_control.pdf

oppure ancora qualcosa del genere:

http://bach.ece.jhu.edu/~gert/courses/348/lab2/lab2.html#lab1d
-OK per il 16bit, (ne servono 4 canali).
se intendi dire due canali di DAC per canale audio (i.e. 4 canali DAC per la versione stereo == due DAC su due distinte schede ingressi/attenuatore) OK. In caso contrario... perche` dici che ce ne vogliono 4?!
Per il rumore possiamo mettere un bel cap in parallelo al led.
quello senza dubbio... ma non e` che con un cap risolvi tutto, devi comunque essere quanto piu` possibile "pulito" gia` a monte.

BTW, da quel punto di vista la soluzione buffer+resistenza forse e` piu` vantaggiosa, perche` con la R ed il cap a valle ci si "allontana" dal rumore prodotto tanto dal DAC che del buffer e si puo` formare un bel passa basso "sostanzioso" efficace da frequenze anche molto basse fino alla RF... con una VC-CCS in teoria hai un p/b forse ancora piu` efficacie (Zeq puo` essere anche molto + alta della ns. R), ma in pratica la cosa dipende dalla risposta in freq. del VC-CCS e, come se non bastasse, il rumore prodotto dallo stesso te lo ritrovi sostanzialmente tutto sul LED... mmmmh, mi sa` che, anche se e` meno efficente, e` molto meglio fare cosi`. :|


Ciao,
Paolo.
Ciao, Paolo.

«Se tu hai una mela, e io ho una mela, e ce le scambiamo, tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee.»
andypairo
sostenitore
Messaggi: 689
Iscritto il: 03 nov 2005, 23:17
Località: Italy

Messaggio da andypairo »

Ciao,
vedo che abbiamo tutti le idee chiare :D

Procedendo con ordine:
Ma, soprattutto, abbiamo comunque bisogno di sapere fin da adesso come saranno fatte queste benedette tabelle (di che valori di resistenza avremo effettivamente bisogno, etc) per valutare correttamente come realizzare tanto l'hardware che il software.
Qui credo si tratti di lavorare con margini non proprio risicati sui circuiti.
Non credo valga la pena andare oltre per non mettersi troppi vincoli.

Per quanto riguarda l'impedenza a "naso" mi tranquillizza averla costante ma possiamo includere la "feature" per i passi non realizzabili delle impedenze più basse. Provo a buttare giù uno spreadsheet, ma vorrei sentire altre opinioni.

La lunghezza differente è solo un falso problema comunque, ci metti il max valore di attenuazione o il mute per i valori inferiori a quelli realizzabili e sei a posto ;-)

Per la grandezza della tabella, con 250k e 50 Ohm avremmo 74dB massimi, per cui coi passi da 0.5dB sarebbero oltre 140 passi.

Francamente mi sembrano tantini...se non altro per la velocità di "scorrimento", a meno di usare il trucco della tastiera che se premo un tasto per tot secondi comincia a sparare a raffica.

Per gli usi "normali" direi 60dB (50k) possono andar bene.
Mmmh... ipotizziamo di lavorare a corrente costante. Per semplicita` per ora poniamo Iset=100uA ed Rs=1k. Quindi, dobbiamo porre la soglia del nostro discriminatore a Vset == Iset * Rs = 100mV.

(se dobbiamo/vogliamo usare l'ADC, quale che sia Rs ed Iset possiamo metterci un op-amp in differenziale con quel tanto di guadagno che basta per riportare Vset verso meta` range dell'ADC stesso).

Vset == Iset * Rs ( = 100mV )
Vout == Iset * Rldr
Vadc == Vset + Vout

100 R -> Vout = 00.01 V ; Vadc = 00.11 V
001 K -> Vout = 00.10 V ; Vadc = 00.20 V
010 K -> Vout = 01.00 V ; Vadc = 01.10 V
100 K -> Vout = 10.00 V ; Vadc = 10.10 V
Ma se lavoriamo a corrente costante che ce l'abbiamo a fare il DAC?
Volevo capire come intendevi usarlo perchè IMHO rappresenta una complessità in più che non è detto porti sti gran vantaggi in fase di calibrazione.
Vediamo un po`... se utilizziamo l'ADC, una possibilita` per aumentare il range dinamico e migliorare la precisione e` quella di sfruttarlo per "cambiare scala" utilizzando diversi valori di Iset (e.g. 10uA, 100uA e 1mA) per i diversi range... a quel punto possiamo anche evitare il differenziale su Rs e leggere direttamente Vout con l'ADC.

A questo punto pero` tutto sommato torna in ballo anche la tua idea...
Intendevi forse "se utilizziamo il DAC" ?
(per intenderci, il mio "target" ottimale sarebbero 4 decadi, da 100 ohm a 1 Mohm a passi dello 0.5% - ammesso e non concesso che si riesca ad ottenere una precisione del genere dai LED/LDR).
0.5%??? Cioè 0.04..dB? Non è che esageriamo?; )
Intendevi dB, spero :D
Possiamo fare cosi`: proviamo a vedere se e quanto e` complicato commutare le uscite dei DAC (che comunque abbiamo) buttando giu` uno schema. Poi valutiamo se sia meglio commutare le uscite dei DAC od utilizzare piuttosto una Vref fissa e commutare invece le resistenze. OK?
Commutare i DAC non è complicato concettualmente (o sul LED o sulla R da misurare) ma bisogna capire se porta vantaggi reali.

Una cosa importante:per avere linearità tra la tensione di pilotaggio (DAC) e la corrente nei led siamo quasi obbligati, data la caratteristica V/I dei diodi e la tensione disponibile (5V tipica , a meno di amplificarla), a usare un VCCS. Altrimenti rischiamo di percorrere il range di correnti utili in pochi bit del DAC.

Per la calibrazione il VCCS comporta una complicazione nella gestione e un aumento (relativo) della tolleranza a valori alti di resistenza. Inoltre non vedo vantaggi rispetto al più semplice Vref + resistenza opportuna.

A questo punto:

-pilotaggio del led col VCCS proposto, per 20-25mA max basta un opamp senza bjt, alimentato tra 0 (o -5) e 10V.

-calibrazione: Vref fissa e 3 res switchate o Vref variabile più Rs fissa.

Mo' so' stanco....

Ciao

Andrea

PS ecco un primo spreadsheet per poter calcolare (variando i valori in verde di Rnominale e Rmin) le resistenze target. La colonna "alternativa" indica la Rs (e non la Rp come scritto) calcolata secondo quanto proposto da Paolo per ottenere l'attenuazione desiderata a Rp = Rmin.

Non so che risultati sonori possa portare, ma il 5k ad alti valori di attenuazione arriva addirittura a una decade oltre...





Immagine Attachment: Lightspeed_Calcolo.zip ( 7497bytes )
Avatar utente
marziom
sostenitore
Messaggi: 3253
Iscritto il: 24 nov 2005, 18:06
Località: Ciociaria
Been thanked: 2 times
Contatta:

Messaggio da marziom »

eccoci qua!, è tornato il bastian contrario (io 8) )

volete vedere come vi faccio bastare 256byte di EEPROM?

seguitemi:

focalizziamoci sul nostro obiettivo: bobbiamo realizzare un attenuatore Lpad su N ingressi
perchè ci interessa la calibrazione? risposta: perchè i LED-LDR non sono tutti uguali, cioè? cioè con XmA uno misura YKohm l'altro ZKohm.....d'altrone una procedura manuale farebbe proprio questo: ne misuri 100 e scegli due con i valori più vicini.
dice: ah! .... allora perchè non facciamo uguale, perchè dobbiamo tracciare tutta la curva di trasferimento del LED-LDR?? per realizzare una attenuazione logaritmica perfetta?? e che ce ne frega, se sento piano alzo, se sento forte abbasso :grin:
ok, quindi della funzione logaritmica non ci frega..... rimane allora l'unica ragione che ha un minimo di importanza: la funzione di trasferimento non è lineare.
vero?? siamo sicuri???.... ma davvero non è proprio lineare????
ecco un esempio di curva:

Immagine

io quasi quasi sarei portato a pensarla lieare...almeno per una buona parte del tratto che ci interessa.... ad ogni modo adesso l'obbiettivo fa riformulato:
quello che ci interessa è trovare 1 valore (o 2, o 3) che ci dica di quanto è diversa la curva rispetto ad una che considereremo quella di riferimento (canali sinitro , linea 1 ad esempio).
Se consideriamo le curve come rette, il valore -parametro- da trovare è il K della retta, il bello è che ce ne serve uno per ogni LED-LDR da controllare.
.... una selezione manuale d'altronde non farebbe proprio questo?

marzio


_____________________
Se con 10 milioni di transistor non riesci a fare tutto sei un p**la!
_____________________
So di non sapere. Socrate
Avatar utente
UnixMan
sostenitore
Messaggi: 12096
Iscritto il: 27 ott 2005, 22:34
Località: L'Aquila (Italy)
Has thanked: 79 times
Been thanked: 48 times

Messaggio da UnixMan »

vedo che abbiamo tutti le idee chiare :D
idee poche, ma ben confuse... :D

scherzi a parte, x quanto mi riguarda sto` usando il forum un po` come un blocco x appunti x "pensare a voce alta" in modo da poter ragionare insieme... ovvio che i pensieri a ruota libera talvolta possono apparire confusi... :D pero`, anche se diversi dettagli restano ancora da definire il quadro complessivo tutto sommato mi pare abbastanza chiaro. :)
Per quanto riguarda l'impedenza a "naso" mi tranquillizza averla costante ma possiamo includere la "feature" per i passi non realizzabili delle impedenze più basse. Provo a buttare giù uno spreadsheet, ma vorrei sentire altre opinioni.
OK. direi che gia` da li` dovremmo renderci conto meglio.

BTW: se vuoi, posso mandarti via mail un paio di spreadsheet che avevamo preparato per l'attenuatore a scatti del "PowerTotem"... una delle versioni usava un attenuatore shunt, e puo` essere una base di partenza da cui partire x risparmiare tempo.

edit: P.S.: ok, troppo tardi... btw, te lo mando lo stesso, c'erano diverse cosine simpatiche. :)
La lunghezza differente è solo un falso problema comunque, ci metti il max valore di attenuazione o il mute per i valori inferiori a quelli realizzabili e sei a posto ;-)
si, ok... pero`, ripeto, onestamente non vedo perche` rinunciare alle attenuazioni piu` alte. Tantopiu` che (a meno di casi estremi con "catene" dal guadagno esagerato) corrisponderebbero comunque a livelli di ascolto da sottofondo, per cui chi se ne frega se le prestazioni non sono esattamente quelle "di targa" per via dell'impedenza di ingresso che da un certo punto in poi aumenta al diminuire del volume...
Per la grandezza della tabella, con 250k e 50 Ohm avremmo 74dB massimi, per cui coi passi da 0.5dB sarebbero oltre 140 passi.
onestamente, penso che -60dB max (piu` il mute) siano piu` che sufficenti per qualsiasi applicazione ragionevole...
Francamente mi sembrano tantini...se non altro per la velocità di "scorrimento", a meno di usare il trucco della tastiera che se premo un tasto per tot secondi comincia a sparare a raffica.
E` una cosa da fare senzaltro... ma riguarda la scheda master... ogni cosa a suo tempo. :)
Per gli usi "normali" direi 60dB (50k) possono andar bene.
ok, allora siamo daccordo. Solo che gli stessi -60dB li vogliamo ottenere anche con 5K di Zin, e senza far scendere Rldr sotto i 100ohm... per cui selezionando le Zin "nominali" piu` basse questa in effetti comincera` a salire abbastanza presto. Poco male... come dicevo, tipicamente le Zin basse si scelgono solo per avere Zout basse e questa condizione e` rispettata comunque.
Ma se lavoriamo a corrente costante che ce l'abbiamo a fare il DAC?
Volevo capire come intendevi usarlo perchè IMHO rappresenta una complessità in più che non è detto porti sti gran vantaggi in fase di calibrazione.
ahem... ok, mi sono espresso male ed ho creato confusione, sorry. :oops:

Con "lavoriamo a corrente costante" in questo caso non intendevo affatto dire che iniettiamo una corrente costante nel LDR!

L'espressione "corrente costante" si riferiva al fatto che, per ogni step, una volta che Rldr ha raggiunto il valore stabilito per lo step stesso, la corrente che scorre (Iset) e` la stessa. Ovviamente, visto che Rs e` costante e non cosi` alta da rendere la corrente quasi indipendente da Rldr (anzi, ovviamente deve essere vero il contrario!), per avere la stessa Iset con valori di Rldr diversi si deve fornire una Vref differente con il DAC.

E` piu` chiaro adesso?
Vediamo un po`... se utilizziamo l'ADC, una possibilita` per aumentare il range dinamico e migliorare la precisione e` quella di sfruttarlo per "cambiare scala" utilizzando diversi valori di Iset (e.g. 10uA, 100uA e 1mA) per i diversi range... a quel punto possiamo anche evitare il differenziale su Rs e leggere direttamente Vout con l'ADC.
Intendevi forse "se utilizziamo il DAC" ?
No, proprio l'ADC, utilizzato al posto del comparatore per determinare il raggiungimento del valore prefissato di Iset (o di Vout). Ovviamente sempre con il DAC a generare la Vref variabile (se commutiamo i DAC a valle del buffer+resistenza o del VCCS non dobbiamo far altro che attaccarlo all'Out e, programmando con il DAC "n" diversi livelli di corrente, otteniamo "n" range di misura... a quel punto anche un ADC da 8bit ci va` largo).

In pratica se vuoi e` una variante della tua idea delle resistenze commutate ma, anziche` commutare le resistenze, si utilizza il DAC per cambiare la tensione Vref (nel caso DAC + Rs) o "direttamente" la corrente nel caso di DAC + VCCS.

Mmmmh... c'e` ancora un'altra possibilita` (altra variazione sullo stesso tema).

Qualora (ammesso e non concesso che...) commutare i DAC dovesse rivelarsi complicato, possiamo evitare di usare un DAC vero e proprio e lavorare (stavolta veramente! :D ) a corrente costante con un CCS "programmabile" che fornisca i 3 o 4 diversi livelli di corrente che ci servono, selezionabili con un comando dal PIC (anche in questo caso poi si "legge" Vout con l'ADC). Oppure, analogamente, con un regolatore di tensione (ovviamente con adeguata Rs in serie) che possiamo programmare sui soliti 3 o 4 livelli.
Commutare i DAC non è complicato concettualmente (o sul LED o sulla R da misurare) ma bisogna capire se porta vantaggi reali.
mi sa` che di nuovo mi sono spiegato male... l'idea e`: se e` piu` semplice/economico "cambiare scala" commutando i DAC facciamo cosi`, viceversa commutiamo le resistenze oppure, sempre sulla base di considerazioni di semplicita`/economia (funzionalmente non cambia nulla) usiamo un CCS o un generatore di tensione "programmabili" (vedi sopra), cosi` che magari possiamo "commutarli" a stato solido evitando l'uso di altri rele`. :?:
Una cosa importante:per avere linearità tra la tensione di pilotaggio (DAC) e la corrente nei led siamo quasi obbligati, data la caratteristica V/I dei diodi e la tensione disponibile (5V tipica , a meno di amplificarla), a usare un VCCS. Altrimenti rischiamo di percorrere il range di correnti utili in pochi bit del DAC.
certamente... se optiamo per la soluzione buffer+resistenza il "buffer" deve avere necessariamente guadagno > 1. Daltronde, anche un VCCS e` un amplificatore (a transconduttanza...).
Per la calibrazione il VCCS comporta una complicazione nella gestione e un aumento (relativo) della tolleranza a valori alti di resistenza. Inoltre non vedo vantaggi rispetto al più semplice Vref + resistenza opportuna.
concordo.
A questo punto:

-pilotaggio del led col VCCS proposto, per 20-25mA max basta un opamp senza bjt, alimentato tra 0 (o -5) e 10V.

-calibrazione: Vref fissa e 3 res switchate o Vref variabile più Rs fissa.
stop. rewind. play. :grin: (vedi sopra...)

Se pilotiamo i LED con DAC+ampli+Rs (sempre di un op-amp e qualche R si tratta...) e commutiamo il tutto a valle della Rs, utilizziamo esattamente lo stesso circuito tanto per pilotare i LED quanto per "cambiare scala" durante la calibrazione!

Onestamente, questa mi sembra la soluzione migliore... :?:

In effetti, forse nell'implementare il software potrebbe "venire meglio" utilizzare una logica "invertita", nel senso che si potrebbe usare l'ADC come comparatore per "cambiare scala" ed il DAC per impostare i valori... ma comunque l'hardware non cambia, ne` cambia la sostanza del metodo o i risultati ottenibili... per cui questo si decidera` in fase di programmazione del firmware a seconda di come ci viene piu` comodo.

Si`, IMHO e` decisamente la soluzione migliore... semplice, elegante, versatile ed anche economica!

PS ecco un primo spreadsheet per poter calcolare (variando i valori in verde di Rnominale e Rmin) le resistenze target. La colonna "alternativa" indica la Rs (e non la Rp come scritto) calcolata secondo quanto proposto da Paolo per ottenere l'attenuazione desiderata a Rp = Rmin.
con 100 ohm di Rldr minima per 60dB si arriva a 100K e la Zin comincia a salire sopra i 34dB di attenuazione per 5k, 40Db per 10k, etc... ottimo e abbondante, IMHO.

Viste le differenze tra un valore e l'altro, temo che invece difficilmente gli LDR ci garantiranno la precisione necessaria per poter scendere a step minori di 1dB... :?:

BTW: ti sei dimenticato di considerare la minima resistenza in serie (che, nella migliore delle ipotesi, e` di 200 ohm).

Infilaci dentro la resistenza del carico (in parallelo alla R shunt).

Non so che risultati sonori possa portare, ma il 5k ad alti valori di attenuazione arriva addirittura a una decade oltre...
in generale, se la sorgente e` in grado di sopportare un carico di appena 5k senza "sedersi" o fare cose strane (il che significa che ha una Zout estremamente bassa ed una buona capacita` di erogazione di corrente), dubito che la cosa abbia una grande influenza. Tantopiu` che, a -60dB, quello che si sente (SE si sente) e` poco piu` di un flebile sussurro...

BTW: avete visto gli ultimi interventi sul diyaudio?

http://www.diyaudio.com/forums/showthread.php?postid=1259417#post1259417

ci stavo pensando anche io... che ci mettiamo a fare un altro LDR in ingresso? A questo punto NON serve + a niente!

OK, ci mettiamo anche noi una banale R da 100 ohm cosi` risparmiamo tanti LDR, i relativi circuiti di comando, la necessita` di calibrarli (a manina) con un trimmer e viviamo felici... :grin:

Bene!

Ci siamo?


Ciao,
Paolo.
Ciao, Paolo.

«Se tu hai una mela, e io ho una mela, e ce le scambiamo, tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee.»
Avatar utente
UnixMan
sostenitore
Messaggi: 12096
Iscritto il: 27 ott 2005, 22:34
Località: L'Aquila (Italy)
Has thanked: 79 times
Been thanked: 48 times

Messaggio da UnixMan »

eccoci qua!, è tornato il bastian contrario (io 8) )
bene... :)
perchè ci interessa la calibrazione? risposta: perchè i LED-LDR non sono tutti uguali, cioè? cioè con XmA uno misura YKohm l'altro ZKohm.....d'altrone una procedura manuale farebbe proprio questo: ne misuri 100 e scegli due con i valori più vicini.
dice: ah! .... allora perchè non facciamo uguale, perchè dobbiamo tracciare tutta la curva di trasferimento del LED-LDR?? per realizzare una attenuazione logaritmica perfetta??
beh, insomma, sni... avere un passo di attenuazione calibrato in dB abbastanza preciso e` comodo e puo` tornare utile... ed anche sapere con una buona approssimazione quanto valgono la Zin, la Zout, poterle variare al volo a piacimento, etc... insomma, per poter fare qualcosina di piu` (e di meglio) del lightspeed originale. Per tutte quelle che Andy ha definito "dream features". Altrimenti con due lire mi faccio un lightspeed clone con due potenziometri, controllo separatamente il volume dei due canali (come gia` faccio comunque ormai da anni...) e ci sto` largo con gli LDR preselezionati senza starmi a complicare la vita con PIC o altro.

Inoltre, tracciare tutta la curva di trasferimento permette di utilizzare nello stesso circuito e senza cambiare una virgola non solo i LED/LDR previsti in fase di progetto ma di fatto qualsiasi altro dispositivo analogo - presente o futuro - che sia comandabile con una corrente DC nel range coperto dal ns. sistema di controllo.

Cio` premesso...
la funzione di trasferimento non è lineare.
vero?? siamo sicuri???.... ma davvero non è proprio lineare????
[...]
io quasi quasi sarei portato a pensarla lieare...almeno per una buona parte del tratto che ci interessa....
beh, insomma... mica tanto... pero`...

una soluzione del genere, appena un po` piu` sofisticata mi era stata gia` suggerita da un collega qualche tempo fa`.

In buona sostanza si tratta di fare un "fit" della curva, ricavare (calibrare) e memorizzare nella EEPROM i (pochi) parametri necessari per caratterizzare ciascun LDR e poi di volta in volta ricalcolarsi al volo la corrente necessaria per ottenere la Rldr richiesta.

Informazioni utili in merito si possono trovare qui`:

http://www1.silonex.com/audiohm/constants.html

(qui` ci sono altre info interessanti: http://www1.silonex.com/audiohm/levelcontrol.html).

Se si fanno le cose x benino e` un po` come disporre di una tabella di calibrazione infinita... salvo che, anziche` tante grosse tabelle, in memoria ci si devono tenere solo pochi parametri per ciascun LDR (la funzione ovviamente e` implementata nel firmware).

Naturalmente tutto cio` non viene gratis, ma al prezzo di una minore precisione... pero` forse si puo` fare tutto anche cosi`.

Unico dubbio: ne vale la pena? qual'e` il vantaggio, risparmiare i pochi euro necessari per un paio di EEPROM in piu`?



Ciao,
Paolo.
Ciao, Paolo.

«Se tu hai una mela, e io ho una mela, e ce le scambiamo, tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee.»
Avatar utente
marziom
sostenitore
Messaggi: 3253
Iscritto il: 24 nov 2005, 18:06
Località: Ciociaria
Been thanked: 2 times
Contatta:

Messaggio da marziom »

Unico dubbio: ne vale la pena? qual'e` il vantaggio, risparmiare i pochi euro necessari per un paio di EEPROM in piu`?
semplicità circuitale e di realizzazione.
il software si fa molto più semplicemente dell'hardware
Visto che sul sito che hai postato c'è anche una bozza di equazione di controllo della curva, se fosse per me io farei come ho detto.
Con pochi valori salvati nell'EEPROM ti calcoli al volo quello che serve....di quanto sbaglieremmo?

marzio

_____________________
Se con 10 milioni di transistor non riesci a fare tutto sei un p**la!
_____________________
So di non sapere. Socrate
Avatar utente
UnixMan
sostenitore
Messaggi: 12096
Iscritto il: 27 ott 2005, 22:34
Località: L'Aquila (Italy)
Has thanked: 79 times
Been thanked: 48 times

Messaggio da UnixMan »

Unico dubbio: ne vale la pena? qual'e` il vantaggio, risparmiare i pochi euro necessari per un paio di EEPROM in piu`?
semplicità circuitale e di realizzazione.
il software si fa molto più semplicemente dell'hardware
onestamente tutta questa complicazione in piu` non la vedo (un chippettino a 8pin in piu`... due sole linee tra questo e la PIC...).

Cio` premesso...
Visto che sul sito che hai postato c'è anche una bozza di equazione di controllo della curva, se fosse per me io farei come ho detto.
Con pochi valori salvati nell'EEPROM ti calcoli al volo quello che serve....di quanto sbaglieremmo?
probabilmente non molto di piu` di quanto sbaglieremmo comunque per via di derive termiche, etc...

Per me va` bene anche cosi`.

BTW, in questo caso direi che convenga senzaltro calcolarsi al volo anche le tabelle di attenuazione.



Ciao,
Paolo.
Ciao, Paolo.

«Se tu hai una mela, e io ho una mela, e ce le scambiamo, tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee.»
Avatar utente
marziom
sostenitore
Messaggi: 3253
Iscritto il: 24 nov 2005, 18:06
Località: Ciociaria
Been thanked: 2 times
Contatta:

Messaggio da marziom »

tutto quello che si può precalcolare è meglio:
non consuma tempo CPU e lo mettiamo nella memoria di programma che è quella più grossa.

marzio

_____________________
Se con 10 milioni di transistor non riesci a fare tutto sei un p**la!
_____________________
So di non sapere. Socrate
andypairo
sostenitore
Messaggi: 689
Iscritto il: 03 nov 2005, 23:17
Località: Italy

Messaggio da andypairo »

Occhio che il fitting mostrato vale tra 3 e 75uA.

Se vogliamo usare seriamente il fitting dobbiamo misurare dei punti (Iled, Rldr) e interpolarli, linearmente o con una equazione di secondo grado (o le spline se sapete impostarle in un PIC :D ).
Con una decina di misure per oggetto (o meno, avendo l'accortezza di usare le stesse R per la misurazione) si possono inserire i coefficienti validi per il range resistivo necessario e usarli per il calcolo della Iled a partire dalla Rldr desiderata.

Questo però non toglie la necessità di calibrazione, a meno di costruire un oggetto (anche semi-manuale) per caratterizzare le LDR e calcolare i coefficienti, che possono essere inseriti nella EEPROM.

Ciao

Andrea
Avatar utente
UnixMan
sostenitore
Messaggi: 12096
Iscritto il: 27 ott 2005, 22:34
Località: L'Aquila (Italy)
Has thanked: 79 times
Been thanked: 48 times

Messaggio da UnixMan »

Questo però non toglie la necessità di calibrazione,
ovviamente. A parte la mancanza della EEPROM esterna, l'hardware e` lo stesso. Cambia solo il software.

mmmh... a pensarci bene, se nella PIC abbiamo la disponibilita` delle linee necessarie, IMHO nel disegno del PCB la EEPROM conviene infilarcela comunque... non si sa` mai...
a meno di costruire un oggetto (anche semi-manuale) per caratterizzare le LDR e calcolare i coefficienti, che possono essere inseriti nella EEPROM.
no, per l'amor del cielo. Lasciamo tutto com'e`, cosi` che chiunque voglia realizzarne un esemplare non ha che da montare le schede (magari facendosi spedire una PIC pre-programmata se non ha il necessario...), avviare la calibrazione e via, pronti all'uso.


Ciao,
Paolo.


Ciao,
Paolo.
Ciao, Paolo.

«Se tu hai una mela, e io ho una mela, e ce le scambiamo, tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee.»
andypairo
sostenitore
Messaggi: 689
Iscritto il: 03 nov 2005, 23:17
Località: Italy

Messaggio da andypairo »

Quindi se ho ben capito:

-Misuriamo "n" punti (Rldr e relativa corrente) e calcoliamo i coefficienti di interpolazione (lineare, quadratica, spline?) tratto per tratto.

A questo punto, partendo da Rtarget, vediamo dove sta e calcoliamo la relativa Iled... giusto?

L'idea è OK, vediamo se riusciamo a realizzarla :D

Una cosa da premettere: gli "switch" per la calibrazione possono benissimo essere dei jumper che l'amanuense di turno commuta su indicazione del display.
In quest'ottica la mia proposta dei 3 (o più) resistori rimane facilmente attuabile e toglie un sacco di grane e imprecisioni.

Flow chart:
L'utente chiude un jumper per la calibrazione

Display: Chiudere jumper 1 (cioè inserisco R1 nota tra il 5V e il punto di misura)
Utente: chiude jumper e preme un tasto
PIC: misuro qualche punto per ogni ldr e calcolo i coefficienti per il range
Display : chiudere jumper 2
....e così via.

Per generare le tabelle basta copiare le formule di excel, eventualmente acquisendo il valore di impedenza "nominale" durante la fase di calibrazione.

Mi sembra che abbiamo dato una bella semplificata!

Ciao

Andrea
Avatar utente
marziom
sostenitore
Messaggi: 3253
Iscritto il: 24 nov 2005, 18:06
Località: Ciociaria
Been thanked: 2 times
Contatta:

Messaggio da marziom »

secondo questo:http://www1.silonex.com/audiohm/constants.html
dobbiamo trovare Rs , Rb e K1, K2 dell'equazione Ron=K1/Iled*K2
Rs e Rb le troviamo facilmente= corrente massima sul led, corrente minima sul led.
K1 e K2.....bò qua mi serve una mano.

Per i i jumper va benissimo! era quello che dicevo da un'po.... la procedura la si fa una volta tantum, puo essere pure semimanuale e a case aperto...non importa ( e togliamo di mezzo rele, line di pilotaggio, linee di codice....)

marzio



_____________________
Se con 10 milioni di transistor non riesci a fare tutto sei un p**la!
_____________________
So di non sapere. Socrate
andypairo
sostenitore
Messaggi: 689
Iscritto il: 03 nov 2005, 23:17
Località: Italy

Messaggio da andypairo »

L'equazione in questione è una retta :D e vale appunto per correnti tra 3 e 75uA.

Io propongo invece un fitting "a spezzata"(nel caso più semplice) che unisca i punti che andiamo effettivamente a misurare.

Chiaramente abbiamo la necessità che la nostra uscita rappresenti la corrente e quindi useremo un VCCS.

Presi due punti si impone il passaggio tra essi e si ricavano K0 e K1 dell'equazione, alla faccia di Rs, Rv e Rb.
Inoltre pilotando il led con DAC+VCCS, l'interpolazione la fai direttamente col valore del DAC(proporzionale alla corrente)

Ciao

Andrea
Avatar utente
marziom
sostenitore
Messaggi: 3253
Iscritto il: 24 nov 2005, 18:06
Località: Ciociaria
Been thanked: 2 times
Contatta:

Messaggio da marziom »

scusa perchè fare la spezzata quando sappiamo che gli asintoti dipendono da Rs e Rb?

_____________________
Se con 10 milioni di transistor non riesci a fare tutto sei un p**la!
_____________________
So di non sapere. Socrate
Avatar utente
UnixMan
sostenitore
Messaggi: 12096
Iscritto il: 27 ott 2005, 22:34
Località: L'Aquila (Italy)
Has thanked: 79 times
Been thanked: 48 times

Messaggio da UnixMan »

Una cosa da premettere: gli "switch" per la calibrazione possono benissimo essere dei jumper che l'amanuense di turno commuta su indicazione del display. In quest'ottica la mia proposta dei 3 (o più) resistori rimane facilmente attuabile e toglie un sacco di grane e imprecisioni.
indubbiamente si potrebbe anche fare... ma... visto che abbiamo gia` il sistema di pilotaggio dei LED (DAC+op-amp+Rs) che e` semplicemente perfetto anche per fare le calibrazioni (con precisione a piacere!) e che in questa fase un canale rimarrebbe inutilizzato, perche` non usarlo invece???

Per quanto riguarda le commutazioni, per evitare pericolosi "errori di manovra" io cercherei di utilizzare per quanto possibile i rele` esistenti...

Casomai, se con quelli che ci sono gia` non ce la facciamo (oppure e` troppo scomodo da fare), mettiamo anche uno switch e/o qualche jumper.
Per generare le tabelle basta copiare le formule di excel,
non prima di averle corrette, pero`... ; ) mancano le compensazioni per la resistenza serie in ingresso e la impedenza del carico... se no` poi in pratica le attenuazioni non tornano precise.
eventualmente acquisendo il valore di impedenza "nominale" durante la fase di calibrazione.
:?: conoscere l'impedenza "nominale" durante la calibrazione non mi pare serva a niente...

mentre invece la si deve poter cambiare al volo durante il funzionamento normale!

Ovviamente, ci vuole una interfaccia di "setup" nella scheda principale che deve permettere (in qualsiasi momento) l'inserimento e la memorizzazione di:

impedenza di uscita della sorgente Zs (1)
impedenza di ingresso "nominale" desiderata Zin (1)
"offset" di attenuazione (1)(2)
impedenza di carico Zload

(1) per ciascun ingresso
(2) per compensare (equalizzare) i diversi livelli di uscita delle varie sorgenti, di modo che commutando dall'una all'altra l'attenuazione cambia automaticamente per garantire che il volume di ascolto rimanga lo stesso.

La scheda principale gestira` direttamente gli "offset di attenuazione" trasmettendo alle schede ingressi/attenuatore i valori di attenuazione gia` corretti in base all'ingresso selezionato, mentre Zs, Zin e Zload saranno ritrasmesse alle schede ingressi/attenuatore insieme ad ogni comando di selezione di ingresso.

I valori di Rldr serie/shunt necessari saranno calcolati "al volo" con un algoritmo furbo che tenga conto di Zs, Zin e Zload (se x qualche motivo non si vogliono le correzioni, basta porre Zs=0 e Zload>=1Meg). Da questi saranno poi calcolati i corrispondenti valori da impostare nei DAC di controllo dei LED.

N.B.: queste IMHO non sono "dream features", ma l'unico motivo reale per realizzare un oggetto del genere. Altrimenti per quanto mi riguarda tanto vale mettere due potenziometri e via andare.
Mi sembra che abbiamo dato una bella semplificata!
bah, a me sembra che abbiamo solo complicato notevolmente il software (e le procedure di calibrazione) per risparmiare un paio di chip da due euro... ma va` bene anche cosi`.



Ciao,
Paolo.
Ciao, Paolo.

«Se tu hai una mela, e io ho una mela, e ce le scambiamo, tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee.»
Avatar utente
UnixMan
sostenitore
Messaggi: 12096
Iscritto il: 27 ott 2005, 22:34
Località: L'Aquila (Italy)
Has thanked: 79 times
Been thanked: 48 times

Messaggio da UnixMan »

Io propongo invece un fitting "a spezzata"(nel caso più semplice) che unisca i punti che andiamo effettivamente a misurare.
la vedrei meglio con una polinomiale... guardando le curve, ad occhio e croce gia` con un secondo - terzo ordine si dovrebbe ottenere un fit praticamente perfetto su tutta la curva. :D
Presi due punti si impone il passaggio tra essi e si ricavano K0 e K1 dell'equazione, alla faccia di Rs, Rv e Rb.
mmh, l'idea non e` male... dovrebbe anche essere abbastanza semplice da implementare in pratica.

Come ti gestiresti poi il calcolo delle "Iled" (valori da dare in input ai DAC) a partire dalle Rldr calcolate?

BTW: una alternativa simpatica all'uso di "n" PIC potrebbe essere questa:

FOX Board, a complete Linux system in just 66 x 72 mm http://www.acmesystems.it/?id=4

ha l'I2S per pilotare il DAC, una marea di I/O, interfacciamenti e risorse sufficenti per fare qualsiasi cosa possa passare per la testa da qui` al prossimo secolo... :D

(va beh, x questa applicazione sarebbe solo "leggermente" esagerata... :grin: )


Ciao,
Paolo.
Ciao, Paolo.

«Se tu hai una mela, e io ho una mela, e ce le scambiamo, tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee.»
andypairo
sostenitore
Messaggi: 689
Iscritto il: 03 nov 2005, 23:17
Località: Italy

Messaggio da andypairo »

Ciao,
chi tira di quà... chi tira di là... :D vediamo di trovare un accordo ; )
indubbiamente si potrebbe anche fare... ma... visto che abbiamo gia` il sistema di pilotaggio dei LED (DAC+op-amp+Rs) che e` semplicemente perfetto anche per fare le calibrazioni (con precisione a piacere!) e che in questa fase un canale rimarrebbe inutilizzato, perche` non usarlo invece???
Per un po' di motivi:
1- Se vogliamo lavorare sulla relazione Iled-Rldr dobiamo avere un pilotaggio che imponga la corrente, quindi VCCS.
2- Il VCCS potrebbe essere usato anche per la calibrazione ma generare con precisione correnti tra 100uA e 20mA non è una bazzeccola, a meno di accettare un errore di circa il 10% a 100k.
L'impedenza del VCCS è alta ma finita.
Una resistenza adeguata non crea problemi, in quanto ragioniamo su un partitore.
Idem se avessimo Vref + resistenza come pilotaggio: essa sarebbe sempre costante e l'esito della misura è influenzato a seconda della resistenza con cui si confronta. Cambiando resistenze si usa invece un valore dello stesso ordine di grandezza e la precisione è più costante.
conoscere l'impedenza "nominale" durante la calibrazione non mi pare serva a niente...
In effetti basta impostarla.
impedenza di uscita della sorgente Zs (1)
impedenza di ingresso "nominale" desiderata Zin (1)
"offset" di attenuazione (1)(2)
impedenza di carico Zload

(1) per ciascun ingresso
(2) per compensare (equalizzare) i diversi livelli di uscita delle varie sorgenti, di modo che commutando dall'una all'altra l'attenuazione cambia automaticamente per garantire che il volume di ascolto rimanga lo stesso.
Direi che sono "feature" avanzate, sicuramente praticabili.
Essendo per la politica dei piccoli passi comincerei almeno all'inizio con le cose più semplici e vedrei di farle funzionare, per poi passare alle migliorie.
Sarebbe bruttissimo sviluppare una compensazione della miseria e poi vedere che non riusciamo a far trackare i pot virtuali!

La compensazione delle Zsource e Zcarico sono abbastanza banali, una è un serie a Rs e l'altra in parallelo a Rp.

bah, a me sembra che abbiamo solo complicato notevolmente il software (e le procedure di calibrazione) per risparmiare un paio di chip da due euro... ma va` bene anche cosi`.
Da parte mia il motivo non è il risparmio. Il software è più semplice perchè non devi gestire Vref per la corrente nella Rldr.
la vedrei meglio con una polinomiale... guardando le curve, ad occhio e croce gia` con un secondo - terzo ordine si dovrebbe ottenere un fit praticamente perfetto su tutta la curva.
Io dico di imparare prima a gattonare, poi provvederemo a correre.
Un secondo ordine dati 3 punti te la riesco a calcolare, se riesci a invertire un'eq. di terzo grado accomodati :D

Analisi numerica al poli mi è piaciuta poco, non ho intenzione di rifare il cosrso per implementare una polinomiale coi minimi quadrati. :?

Provo a buttare giù due equazioni per ricavare i k dai punti.
Come ti gestiresti poi il calcolo delle "Iled" (valori da dare in input ai DAC) a partire dalle Rldr calcolate?
Qui sta il fulcro del ragionamento: usando un VCCS il numerino che scrivi nel DAC è proporzionale alla corrente, per cui in realtà noi andremo a fare un fitting già "scalato" alle nostre esigenze, perchè dalle misurazioni avremo delle coppie di valori Rldr, DACout, con DACOut = k*Iled.

Per il primo grado: X=DAC Y=Rldr

Y= mX + q eq generale
Y1 = mX1+q 1° punto
Y2 = mX2 + q 2° punto

m = (Y1-Y2)/(X1-X2)
q= Y1 - mX1 oppure = Y2 - mX2

L'approssimazione lineare (e m e q calcolati) vale ovviamente solo per resistenze target comprese tra Y1 e Y2.

Analogamente si procede per il secondo grado, con 3 punti ovviamente :D :D

Ciao

Andrea
Avatar utente
UnixMan
sostenitore
Messaggi: 12096
Iscritto il: 27 ott 2005, 22:34
Località: L'Aquila (Italy)
Has thanked: 79 times
Been thanked: 48 times

Messaggio da UnixMan »

indubbiamente si potrebbe anche fare... ma... visto che abbiamo gia` il sistema di pilotaggio dei LED (DAC+op-amp+Rs) che e` semplicemente perfetto anche per fare le calibrazioni (con precisione a piacere!) e che in questa fase un canale rimarrebbe inutilizzato, perche` non usarlo invece???
Per un po' di motivi:
1- Se vogliamo lavorare sulla relazione Iled-Rldr dobiamo avere un pilotaggio che imponga la corrente, quindi VCCS.
perche`, un generatore di tensione con in serie una Rs >> Rload cos'e`? ; )

Gli unici inconvenienti sono la minore efficenza (potenza dissipata su Rs) e la necessita` di una tensione di alimentazione piu` elevata.

Quant'e` l'impedenza dei nostri LED quando conducono (max/min), e quindi quanto grande dovrebbe essere Rs?
Idem se avessimo Vref + resistenza come pilotaggio: essa sarebbe sempre costante e l'esito della misura è influenzato a seconda della resistenza con cui si confronta. Cambiando resistenze si usa invece un valore dello stesso ordine di grandezza e la precisione è più costante.
mmmh... vediamo...

In effetti, credo che la soluzione che non mi sono mai tolto dalla testa sia quella di "evitare" il partitore rendendo Rs trascurabile rispetto alla resistenza da misurare... visto che non dobbiamo misurare resistenze molto basse, Rldr>=100, e` semplice. Basta mettere Rs<=1. La tensione sull'LDR sara` sempre circa uguale a quella impostata sul DAC (con Rs=1 ==> 1% di errore max a 100 ohm, 0.1% ad 1k, 0.01% a 10K, etc...). La corrente la si legge ai capi di Rs con un differenziale la cui uscita va` all'ADC ed il gioco e` fatto.

Ovviamente, se si usa una tensione fissa si ha il solito problema del range dinamico... ma basta usare 3-4 tensioni diverse per "cambiare scala" e riportare la corrente in un range adeguato.

Oppure, come suggerivo, si puo` fare viceversa, cioe` utilizzare un comparatore programmabile (o l'ADC usato come tale) su 3-4 livelli di corrente diversi a seconda del range e "leggere" la Vout impostandola sul DAC. Per migliorare la sensibilita` alle correnti piu` basse (precisione sulle misure dell'estremo alto di Rldr) si puo` utilizzare una Rs un po` piu` grande e, ai valori di Rldr piu` bassi, compensarne l'effetto tenendo conto nei calcoli che per Rs ~ Rldr ==> Vout=Vdac+Iset*Rs (siamo tornati al partitore... ma solo per parte di range dove questo e` utile, visto che prima o poi l'effetto diventa comunque trascurabile).

Ecco, credo che l'idea fosse proprio questa... allora, ricapitoliamo:

Vdac=(Rldr+Rs)*Iset

Rs ed Rldr (che voglio ottenere) sono noti, Iset (soglia del comparatore) la imposto io in modo da avere una buona sensibilita` di Vdac rispetto alle variazioni di Rldr. Non mi resta che calcolarmi Vdac, impostarla sul DAC e quindi far crescere Iled fintanto che Ildr<Iset. Quando Ildr=Iset ho raggiunto il risultato, nel DAC che comanda il LED e` impostato il valore che sto` cercando (e tra l'altro tiene automaticamente conto delle imprecisioni del sistema di pilotaggio del LED).

Per tornare al discorso sulla precisione, in questo caso impostando Iset diverse per range di Rldr diversi si ottiene esattamente lo stesso effetto che si otterrebbe tenendo Vref fissa e cambiando Rs. Quello che ci interessa e` infatti la sensibilita` di Vdac rispetto ad Rldr, il cui fattore di proporzionalita` e` dato da Iset, indipendentemente da Rs (che stabilisce unicamente un "offset" rispetto al range del DAC).

Sbaglio? :| :?:

Detto questo... dal punto di vista dell'hardware in effetti forse tutto sommato e` piu` semplice mettere 3-4 resistenze con relativi jumper attaccate ad un regolatore fisso evitando di dover mettere il differenziale, commutare i DAC, etc...

Pero` questo non viene affatto gratis, perche` si complica ancora di piu` il firmware: cosi` facendo dobbiamo x forza gestire una qualche se pur minimale interfaccia utente interattiva per le calibrazioni, dovendo quindi "passare" in quache modo per la scheda principale che gestisce tasti e display.

Nella mia ipotesi invece la procedura sarebbe avviata con uno switch (o un jumper) sulla scheda e poi proseguirebbe in modo del tutto automatico, gestita interamente dal uC della scheda stessa. Per le segnalazioni (calibraz. in corso - completa) basterebbe banalmente un led montato sulla scheda stessa.

Oltre a questo, si rende piu` laboriosa la procedura di calibrazione... che, per forza di cose (visti i tempi di assestamento degli LDR), e` gia` di suo anche lunga e lenta... se si facesse come dicevo io (procedura totalmente automatica, gestita dal uC), si avvia la procedura e, mentre la si lascia andare, si va a fare altro... cosi`, invece, bisogna tenerla sotto controllo per cambiare i jumpers, etc. Speriamo che sia vero che la calibrazione andra` fatta solo una tantum...
conoscere l'impedenza "nominale" durante la calibrazione non mi pare serva a niente...
In effetti basta impostarla.
non ti seguo... :?: (sara` il caldo?!)

Se andiamo per la strada delle Iled "calcolate" (anziche` precalibrate), durante la calibrazione le tabelle di attenuazione non ci interessano affatto - non sappiamo (ne` ci interessa di sapere) quali saranno i valori di Rldr di cui avremo bisogno durante l'uso!

L'unica cosa che dobbiamo fare e` trovare i parametri della funzione prestabilita Iled=f(Rldr) che poi useremo per calcolare le Iled a partire dai valori di Rldr desiderati (a loro volta calcolati al volo a partire dai valori di attenuazione ed impedenza desiderati, Zs e Zload).

Sarebbe bruttissimo sviluppare una compensazione della miseria e poi vedere che non riusciamo a far trackare i pot virtuali!
eh, ma che uomo di poca fede... :D

onestamente l'unica cosa che mi preoccupa e` il grado di precisione che riusciremo ad ottenere, non tanto nel senso di calibrazioni e stime (quelle si possono sempre migliorare), quanto piuttosto rispetto alla precisione max "intrinseca" ottenibile dai LED/LDR. Questo pone un limite allo step di attenuazione minimo che potremo realizzare nonche` alla precisione di tracking che riusciremo ad ottenere... ma di certo non al punto di non riuscirci affatto: se selezionando un po` di dispositivi riescono a farlo con un potenziometro, non vedo proprio perche` non dovremmo riuscirci noi!

Comunque, va da se` che ovviamente non ho nulla in contrario a realizzare un primo prototipo "spartano" (eventualmente anche parziale) per verificare tutto prima di perdere troppo tempo ad affinare il software. Purche` non finisca come al solito che il provvisorio diventi definitivo... :evil:

(P.S.: mamma mia, che brutto neologismo "trackare" :grin: )
La compensazione delle Zsource e Zcarico sono abbastanza banali, una è un serie a Rs e l'altra in parallelo a Rp.
infatti, non ho mai detto che fossero complicate... altrimenti non sarei stato ad insistere x implementarle! ; )
bah, a me sembra che abbiamo solo complicato notevolmente il software (e le procedure di calibrazione) per risparmiare un paio di chip da due euro... ma va` bene anche cosi`.
Da parte mia il motivo non è il risparmio. Il software è più semplice perchè non devi gestire Vref per la corrente nella Rldr.
vedi sopra... dal punto di vista del software, usare le tabelle di calibrazione complete e la calibrazione con DAC e comparatore programmabile (o ADC usato come tale) IMHO e` in assoluto -e di gran lunga- la cosa piu` semplice possibile da fare. L'unica complicazione extra e` data dalla necessita` di comunicare con la mem esterna, ma e` ben poca cosa.

Provo a buttare giù due equazioni per ricavare i k dai punti.
ok...
Per il primo grado: X=DAC Y=Rldr
mmmmh... sara` il caldo, ma ho l'impressione che stai ragionando "al contrario"... noi conosciamo la Rldr che vogliamo ottenere ed abbiamo bisogno di determinare il corrispondente valore da dare al DAC, cioe` ci serve di determinare la funzione DAC=f(Rldr). Non converrebbe quindi invertire gli assi e partire ponendo X=Rldr ed Y=DAC ? :?:


Ciao,
Paolo.
Ciao, Paolo.

«Se tu hai una mela, e io ho una mela, e ce le scambiamo, tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee.»
Rispondi
  • Argomenti simili
    Risposte
    Visite
    Ultimo messaggio