Lettura voltaggio su Analog IN: domanda

Ciao a tutti,

una domanda semplice ma giusto per sicurezza, sto leggendo sul pin A0 l'output di un modulo che da' in uscita un voltaggio DC compreso tra 2.15 volts circa fino a 0.1 volts (max 60ma) (proporzione inversa all'entrata del modulo). Ho collegato questo Vout positivo al pin A0 e poi letto e convertito in volts con la funzione dello sketch gia' presente. Sul monitor la lettura e' corretta ma mi chiedevo se era/e' necessario comunque una resistenza per proteggere gli ingressi analogici della UNO, magari per un discorso di corrente troppo alta (il voltaggio non sara' mai superiore a 2.2v circa.
Mi sembra di capire che di solito sulle uscite digitali una resistenza superiore a 125ohm deve esserci sempre e mi chiedevo se qualcosa di simile va fatto anche per gli ingressi analogici.

Inoltre volevo chiedervi, se alimento l' Arduino con la usb e il modulo esterno con la pila 9V classica, senza usare Vin alcuno, le masse vanno comunque tutte in comune? Come unica sicurezza ho messo un diodo IN4007 sull'uscita positiva della pila 9V per il modulo visto fare in altri progetti e comunque collegato i vari GND anche all' Arduino.

Grazie

f82:
Ho collegato questo Vout positivo al pin A0 e poi letto e convertito in volts con la funzione dello sketch gia' presente. Sul monitor la lettura e' corretta ma mi chiedevo se era/e' necessario comunque una resistenza per proteggere gli ingressi analogici della UNO

Gli ingressi analogici di Arduino solo ad alta impedenza. Il che significa che assorbono una corrente insignificante. Sono però sensibili alla tensione, Se questa supera i 5V si rischia di "bruciare" quel pin. Se sei SICURO che la tensione non supererà MAI i 5V positivi e che non diventerà MAI negativa puoi lasciare il collegamento diretto. Altrimenti ci sono tutta una serie di tecniche per "proteggere" i pin di ingresso.

f82:
se alimento l' Arduino con la usb e il modulo esterno con la pila 9V classica, senza usare Vin alcuno, le masse vanno comunque tutte in comune?

Sì, tutte.

f82:
Come unica sicurezza ho messo un diodo IN4007 sull'uscita positiva della pila 9V

Stai semplicemente riducendo la tensione di alimentazione di circa 0,7V ed è una sicurezza contro l'inversione di polarità. Altrimenti è inutile.

Ciao,
P.

Gli ingressi analogici di Arduino solo ad alta impedenza. Il che significa che assorbono una corrente insignificante. Sono però sensibili alla tensione, Se questa supera i 5V si rischia di "bruciare" quel pin. Se sei SICURO che la tensione non supererà MAI i 5V positivi e che non diventerà MAI negativa puoi lasciare il collegamento diretto. Altrimenti ci sono tutta una serie di tecniche per "proteggere" i pin di ingresso.

Non sono d' accordo del tutto.
Le entrate analogiche sono un po miste.
Le entrate analogiche vanno internamente su un multiplexer analogico che seleziona l'entrata attiva. poi c'é un circuito di carica del condensatore Sample and Hold. Questo viene caricato con la tensione d' ingresso per un determinato tempo. Poi viene usata la tensione del condensatore S&H per la conversione che avviene in diversi step. La carica del condensatore S&H in un determinato tempo e con una determinata resistenza del circuito di carica e del multiplexer significa che serve una corrente minima di carica che deve garantire le fonte della tensione analogica. La impedenza massima della fonte della tensione di carica deve essere minore di 10kOhm. Se é piú alta il condensatore S&H non si caricherá del tutto e la lettura é errata (Troppo alta o troppo bassa in funzione della lettura precedente).

Riassumendo l' impedenza statica del ingresso analogico é alta (su qualche MOhm) come di tutti i Pin del ATmega328. L' impedenza dinamica nel momento della camionamento della tensione analogica da convertire é bassina. La corrente risultate deve essere fornita dalla fonte della tensione da misurare o da un condensatore che la "memorizza".

Non serve nessuna resistenza di protezione.

Puó essere necessario mettere un piccolo condensatore da 0,1µF nel caso che la tensione da misurare non cambia velocemente o un amplificatore operazionale Rail to Rail in configurazione inseguitore di tensione.

Ciao Uwe

pgiagno:
Stai semplicemente riducendo la tensione di alimentazione di circa 0,7V ed è una sicurezza contro l'inversione di polarità. Altrimenti è inutile.

Ciao,
P.

Grazie delle risposte. Di sicuro non dovrebbe superare i 2.2 volts ma sul fatto che non scenda sotto i 0 anche di poco non ne sono del tutto sicuro mi devo rileggere il difficile datasheet.

La tensione dovrebbe diminuire logaritmicamente in proporzione ai db rilevati dall'antenna del modulo. Ho invertito nel software il valore presunto massimo del voltaggio sottraendo il valore letto per avere una approssimata pessima lettura proporzionale.
Ma credo che la tensione cambi davvero molto velocemente perche' dal monitor praticamente i cambiamenti nel voltaggio sono minimi quasi impercettibili.

Premesso che l'Absolute Maximim Rating, per l'ATmega328P, indica un Vcc di 6.0V (tensione dalla quale è bene stare distanti), su ogni pin si può applicare al massimo senza danneggiarlo una tesnione che va da -0.5V a Vcc +0.5V, il che significa, essendo Arduino alimentato a 5V, che su ogni pin puoi dare, senza provocare danni, al massimo da -0.5V a 5.5V ... qualsiasi valore oltre questo range può danneggare irreparabilmente il chip.

Questo vale per qualsiasi pin (escluso il reset, ma per il momento la cosa non è di tuo interesse).

Guglielmo

gpb01:
Questo vale per qualsiasi pin (escluso il reset, ma per il momento la cosa non è di tuo interesse).

Guglielmo

Grazie. Una ulteriore curiosita', e' possibile che ci siano margini di errore da un giorno all'altro nella lettura? Dal multimetro il modulo legge 2.10 volts, ieri l' arduino uno leggeva 2.15 volts, oggi legge (sempre con 2.10 al multimetro) 2.00 volts?
EDIT: Errore nel codice, moltiplicavo per 5 invece che per 5.0 nella classica formula. :slight_smile:

Inoltre come fare ad accelerare la lettura del valore in ingresso A0 senza dover togliere il delay ()? Conviene un ciclo for che legge piu' volte l'ingresso e ne memorizza che so' gli ultimi n valori? Perche' non riesco a capire se il modulo varia il voltaggio d'uscita piu' velocemente di quanto l'arduino legga il valore su A0.

Purtroppo, se si usa il riferimento dei 5V di Arduino, si hanno valori che, anche se di poco, variano spesso. Questo è dovuto al fatto che, per quanto abbastanza stabile, l'alimentazione di Arduino NON è ottimale e, cambiando in continuazione il "riferimento" cambia ovviamente il risultato.

Se non vuoi usare un "generatore di tensione di precisione" esterno per fornire il riferimento (cose che si fa solo se veramente servono determinate precisioni), la cosa più semplice è la "media" ... acquisici un certo numero di valori, mano mano li sommi e alla fine dividi per il numero di acquisizioni ... questo ti dovrebbe portare ad un risultato un po' più stabile.

Guglielmo

uwefed:
... serve una corrente minima di carica che deve garantire le fonte della tensione analogica. La impedenza massima della fonte della tensione di carica deve essere minore di 10kOhm...

Non lo sapevo. Importante soprattutto il fatto dei 10kOhm. Grazie Uwe.

Ciao,
P.