Go Down

Topic: Amperometro con Sensore ACS758 (Read 5920 times) previous topic - next topic

Rumberopie

Sto cercando inutilmente di rilevare il giusto valore di corrente con il sensore allegro ACS758.
Mi manda al diplay valori caso che fluttuano.
Ho letto che tale sensore funziona in modo bidirezionale,in condizioni di riposo con il multimetro leggo 2,27V se faccio scorrere la corrente per accendere una lampada leggo 2,32V,quindi ne deduco che il sensore funziona correttamente.
Il problema è indubbiamente sul lato software. =(
Chi mi da una mano ???

uwefed

Il sensore ACS758 esiste in diverse versioni con range di misura diverse (+50 a +200A e da +/-50 a +/-200A)

Presumo che hai un modello per alternata e misuri una corrente alternata.
Il valore che leggi dipende dal momento di lettura durante la sinusoidale. Devi fare una media e sottrarre l' offset.

Se le mie supposizioni sono sbaglaite descrivi meglio che sensore hai e che corrente misuri.

la differenza tra 2,27V e 2,32V sono 50mV percui malappena 10 ADC (con un riferimento di 5V). C'é una certo errore di misura che fa variare leggermente il valore letto.

Ciao Uwe

Rumberopie

Ecco il sensore che utilizzo:
http://it.rs-online.com/web/p/sensori/7248739/
Vorrei impiegarlo per misurare corrente continua proveniente da batterie ad alto amperaggio.
Grazie.

PaoloP

Dal datasheet nella pagina di RS (http://docs-europe.electrocomponents.com/webdocs/0d88/0900766b80d885f6.pdf) il sensore a 0 Ampere rende Vcc/2, quindi circa 2,5V,.
Se è superiore la corrente va in un verso se inferiore va nell'altro, a te serve la differenza con valore a 0 Ampere.
Nella prima pagina del datasheet c'è anche lo schema di collegamento e i valori di Rf e Cf sono indicati nella tabella a pagina 5.

Rumberopie

Il circuito adesso è OK.
Adesso avrei bisogno di qualche riga di codice. ]:)
Come faccio a settare il valore zero a 2,5V nell'ingresso analogico?

PaoloP


Il circuito adesso è OK.
Adesso avrei bisogno di qualche riga di codice. ]:)
Come faccio a settare il valore zero a 2,5V nell'ingresso analogico?


Con analogread tu leggi un valore compreso tra 0 e 1023. Se lo moltiplichi per 5 e dividi per 1024 ottieni il valore di tensione. A questo sottrai 2,5 e ottieni la tensione riferita allo zero.
Moltiplichi questo valore per mille per ottenere i milliVolt e lo divisi per 20 per ottenere gli Ampere. (dal datasheet la sensibilità del sensore è 20mV/A)
Sono col tabelt è non ho a disposizione l'IDE per scrivere e convalidare il codice. Comunque in giro qualche cosa dovresti trovarla. (cerca esempi sulle misure di temperatura, il procedimento è simile)


uwefed


Dal datasheet nella pagina di RS (http://docs-europe.electrocomponents.com/webdocs/0d88/0900766b80d885f6.pdf) il sensore a 0 Ampere rende Vcc/2, quindi circa 2,5V,.
Se è superiore la corrente va in un verso se inferiore va nell'altro, a te serve la differenza con valore a 0 Ampere.
Nella prima pagina del datasheet c'è anche lo schema di collegamento e i valori di Rf e Cf sono indicati nella tabella a pagina 5.


La versione unipolare cha ha Rumberopie é il ACS758ECB-200U-PFF-T; 200 A unipolare. Per quello vale:
VIOUT(QUNI) Unidirectional variant, IP = 0 A, TA = 25°C, VIOUT(QUNI) is ratiometric to VCC: Typ. 0.6 V

Percui a 0A dovrebbe dare 0,6V in uscita.

Ciao Uwe

PaoloP

#7
May 30, 2012, 09:38 am Last Edit: May 31, 2012, 07:19 pm by PaoloP Reason: 1
Seguendo l'esempio riportato qui (http://arduino.cc/forum/index.php/topic,103399.0.html) applicabile cambiando poche cose, il codice dovrebbe essere qualcosa del genere:
Code: [Select]
 // let's get measurin'
sensor = analogRead(analogpin);
millivoltage = (sensor*5*1000)/1024; // convert raw sensor value to millivolts
millivoltage = millivoltage-600;        // remove voltage offset (0,6V)
ampere = millivoltage/20;         // convert millivolts to Ampere

oppure tutto su una riga
Code: [Select]
float ampere = ((float)((analogRead(analogpin)*5000)/1024.0)-600)/20
riducendo
Code: [Select]
float ampere = (float)(analogRead(analogpin)/0.24414)-30

Rumberopie

Grazie PaoloP,domani mi fiondo a provarlo. Vi faccio sapere!

Rumberopie

Mi cospargo il capo di cenere!Ho sbagliato a postare il link.
Il sensore che sto usando può misurare 200A bidirezionali.
il link corretto:
http://it.rs-online.com/web/p/sensori-effetto-hall/6807551/?searchTerm=680-7551&relevancy-data=636F3D3126696E3D4931384E525353746F636B4E756D6265724D504E266C753D656E266D6D3D6D61746368616C6C26706D3D5E5C647B337D5B5C732D2F255C2E5D5C647B332C347D2426706F3D313426736E3D592673743D52535F53544F434B5F4E554D424552267573743D3638302D373535312677633D4E4F4E4526


PaoloP

#10
May 31, 2012, 11:27 am Last Edit: May 31, 2012, 07:20 pm by PaoloP Reason: 1

Mi cospargo il capo di cenere!Ho sbagliato a postare il link.
Il sensore che sto usando può misurare 200A bidirezionali.
il link corretto:
http://it.rs-online.com/web/p/sensori-effetto-hall/6807551/?searchTerm=680-7551&relevancy-data=636F3D3126696E3D4931384E525353746F636B4E756D6265724D504E266C753D656E266D6D3D6D61746368616C6C26706D3D5E5C647B337D5B5C732D2F255C2E5D5C647B332C347D2426706F3D313426736E3D592673743D52535F53544F434B5F4E554D424552267573743D3638302D373535312677633D4E4F4E4526

Bidirezionale con sensibilità di 10mV/A e zero a Vcc/2.
Code: [Select]
// let's get measurin'
sensor = analogRead(analogpin);
millivoltage = (sensor*5*1000)/1024; // convert raw sensor value to millivolts
millivoltage = millivoltage-2500;        // remove voltage offset (2,5V)
ampere = millivoltage/10;         // convert millivolts to Ampere

oppure
Code: [Select]
float ampere = (float)(analogRead(analogpin)/0.48828)-250

Rumberopie

Adesso fuonziona !!! :)
Ho confrontato i valori che mi restituisce con quelli misurati con un amperometro digitale.
L'unico problemico consiste in una fluttuazione anche di qualche ampere nella misura.
Cosa posso fare per avere una misura più stabile?

PaoloP

Campioni più volte e fai la media.

Rumberopie

Ho trasferito tutto dalla board ad un pcb e adesso le letture sono più stabili.
Ho integrato anche la lettura di tensione e con una semplice operazione adesso riesco a sapere il valore di potenza in watt.
Chiedo aiuto per implementare la funzione  di memorizzazione del massimo valore di corrente raggiunto durante una scarica.
Ho provato inutilmente con il comando "max()",ma come mi confermerete è un comando di confronto fra due valori ,quindi non utile al mio scopo.
Please help me! :smiley-roll-blue:

Rumberopie

Non ho idea di come fare...
Please help me!

Go Up