Sensore di corrente e A/D

Ciao a tutti, ho acquistato un sensore di corrente, questo (il 15 NP di seguito datasheet) http://www.lem.com/docs/products/casr%20series.pdf stavo cercando di farlo funzionare e capire qualcosa in più. Qualcuno di voi lo conosce ?

C'è un supply voltage indicato tra 4.75 e 5.25 (typical 5) quindi lo alimento con la 5V dell'Arduino. Poi, a corrente nulla, 0A, restituisce un 2.5V sul pin Vout e io da lì lo faccio arrivare in A0 dell'Arduino. Diversamente quando passano degli ampere il valore varia da 0.375 a 4.625

Ora dal poco che so l'/AD di arduino è a 10 bit quindi va da 0 a 1023 il segnale in ingresso su A0 verrà rimappato ad un valore compreso in quel range e quindi a 0 quando esce 0V e 1023 quando esce 5V Ora... io ho collegato il mio sensore e a corrente nulla esce 2.5V (misurato con il tester), ma perchè se faccio una analogRead mi restituisce 550 ? (io mi aspetterei un valore esattamente a metà tra 0 e 1023 quindi 510-511)

dove sto sbagliando ?

Ciao, fra un pò dovrò studiarmi anche io la questione, ma comunque ad occhio potrebbe essere dovuto alla tensione di alimentazione.

Se a 5 Volt il trasduttore con 0 corrente dà in uscita 2,5 Volt, se tu lo alimenti a 5,2 Volt, sempre a corrente 0, il trasduttore dà in uscita 2,6 volt.

Fai una misura possibilmente con un multimetro preciso.

Probabilmente devi solo compensare a livello software la lettura.

kikko_965: Se a 5 Volt il trasduttore con 0 corrente dà in uscita 2,5 Volt, se tu lo alimenti a 5,2 Volt, sempre a corrente 0, il trasduttore dà in uscita 2,6 volt. Fai una misura possibilmente con un multimetro preciso.

Cioè secondo te segna 550 perchè non sono 2,5 V che escono ma 2,6 V ? e quindi il mio tester è errato ? eppure il mio tester sembra abbastanza preciso tanto tra l'altro la misura oscilla sempre tra 2,49V e 2,50V

Prova a collegare i 5V con cui alimenti il sensore sul pin AREF. ATTENZIONE!, prima di fare la analogRead devi eseguire una analogReference(EXTERNAL), sennò puoi cuocere il micro. http://arduino.cc/en/Reference/AnalogReference

Dovrebbe bastare l'impostazione di un offset via software... se moltiplichi tra loro le tolleranze del sensore e quelle dell'ADC, questa discrepanza rientra nella norma, comunque è sempre meglio usare un Vref più stabile, ad esempio puoi dividere con un partitore la tensione in ingresso dal sensore e usare il Vref interno a 1.1V

Per controllare che tutto sia in regola farei una prova sul differenziale... fai scorrere 1A nel sensore e vedi se la variazione del valore corrisponde a quello che ti aspetti. Ciao

Disaccoppia anche l'alimentazione del pin AREF con un piccolo condensatore da 0.1uF. Aiuta a stabilizzare il segnale in ingresso.

Grazie a tutti per le numerose risposte. Non avevo messo in premessa che sono un novizio quindi ad ogni vostra risposta segue mia ricerca su Google per capire al meglio il consiglio :cold_sweat:

Nel frattempo ho fatto altri test e ho scoperto queste cose (scusate se per voi sono già scontate, per me no):

  • (alimento arduino con USB collegata al PC) Ho misurato con il tester varie tensioni in particolare quella fornita da Arduino e ho scoperto con sorpresa che non sono 5V ma 4.63V (quindi componente sottoalimentato rispetto al datasheet), al chè, ho provato la 3.3V e mi dà correttamente 3.3V precisi.

  • ho provato allora ad alimentare arduino esternamente con batteria 9V, ho misurato il pin 5V e questa volta mi ha dato esattamente 5.00 V

  • ho ricollegato il tutto e riprovato il sensore ed ora segnala corretamente 511/512 :)

A questo punto (vado un po' off topic) mi par di capire che alimentare l'Arduino con la porta USB non è proprio la cosa migliore, oppure la mia USB non fornisce una tensione adeguata ? Ho provato anche con un alimentatore esterno USB a presa la tensione si alza un po' ma rimane sui 4.8 V ma non arriva ai 5V. Voi cosa usate per alimentare l'Arduino ?

Grazie

Io uso un alimentatore da 9 Volt, in questo modo la tensione di 5 Volt dei arduino è più stabile.

Di solito è sconsigliato alimentare l’arduino con 12 Volt, tende a surriscaldarsi il regolatore… non stò a spiegare il perchè… rischierei di addentrarmi in considerazioni troppo tecniche.

Buono il consiglio di mettere un condensatore in parallelo all’ingresso analogico, questo ti evita dei transitori che falserebbero la misura.

kikko_965: Ciao, fra un pò dovrò studiarmi anche io la questione, ma comunque ad occhio potrebbe essere dovuto alla tensione di alimentazione. Se a 5 Volt il trasduttore con 0 corrente dà in uscita 2,5 Volt, se tu lo alimenti a 5,2 Volt, sempre a corrente 0, il trasduttore dà in uscita 2,6 volt. Fai una misura possibilmente con un multimetro preciso. Probabilmente devi solo compensare a livello software la lettura.

Non é il problema di tensione troppo alta di alimentazione del sensore ma di tensione troppo bassa del ATmega. Normalmente la tensione di alimentazione viene usata come tensione di riferimento del ATmega. Se, come Brainkiller ha misurato, la tensione é un pocchetino piú bassa comporta che una tensione letta da analogRead é sovrastimata. @Brainkiller Tra conettore USB e il ATmega éci sono alcuni componenti: il fusibile e il transistore di comutazione automatica di alimentazione. Tutti 2 comportano una leggera perdita di tensione. Se alimenti l'Arduino con 9V lo stabilizzatore porta i 5V direttamente al ATmega.

Per la lettura analogica non c'é regola assoluta. Se hai sensori che danno una tensione che dipende solo dalla valore letto é meglio usare una tensione di riferimento stabilizzata (Aref 1,1V interna o 3,3V esterna) se si usano sensori come termistori, LDr che variano la resistenza e vengono messo come parte di un partitore resistivo é meglio i 5V del alimentazione come riferimento.

Ciao Uwe

uwefed: Se hai sensori che danno una tensione che dipende solo dalla valore letto é meglio usare una tensione di riferimento stabilizzata (Aref 1,1V interna o 3,3V esterna) se si usano sensori come termistori, LDr che variano la resistenza e vengono messo come parte di un partitore resistivo é meglio i 5V del alimentazione come riferimento.

Ciao Uwe

Sicuramente il suggerimento di Uwe è il migliore: ossia utilizzare il voltaggio interno di riferimento, che nell'Atmega328 è 1,1V stabile. Devi solo aggiungere 2 resistenze sul segnale in ingresso. Così non ti serve neanche il condensatore di decoupling sul pin Aref dato che usi il riferimento interno. Esegui anche una serie di letture una dietro l'altra (campionamento), tipo 10/20, e prendi poi o l'ultima lettura o la media delle letture, così da permettere al circuito interno di leggere per bene il segnale in ingresso.