Go Down

Topic: Arduino può misurare la corrente? (Read 6 times) previous topic - next topic

symon

Ciao a tutti,
mi sono iscritto oggi, questo è il mio primo post e sono felice di far parte della Community di Arduino!!
 ;D

Ho scoperto da poco Arduino e credo sia proprio il mezzo che cercavo per realizzare quei tanti progetti che ho in mente.
Sono un appassionato di elettronica ma ho iniziato da poco a studiare il linguaggio di programmazione quindi mi scuso fin da ora se vi farò delle domande che posson sembrare banali.

Bene vengo al punto.. Ho un Arduino 2009 e vorrei sapere se è possibile interfacciarlo e programmarlo in modo che mi "legga" in tempo reale la corrente che scorre durante la carica di una batteria 12v e mi riporti il valore su un display lcd HD44780 (16x2).
Come posso fare per realizzarlo?  
Grazie a tutti  :)

pdor90

potresti usare una resistenza di valore basso e con una buona precisione messa in serie al circuito e la utilizzi come shunt leggi la caduta ai capi della risistenza con i pin analogici .
pero' la devi dimensionare bene in base alla corrente che fluira nel circuito e in base alla precisione della conversione analogica digitale che è di 4.9 mv per divisione utilizzando come riferimento 5 v

un esempio

con una corrente da misurare di 1A poniamo come caduta sulla resistenza 1V quindi devi usare una resistenza da 1 ohm e tu andrai a leggere con la funzione analogread():
1(tensione a i capi R)/0.0049 = 204 questo è il valore che dopo nel programma dovrai riconvertire in A per poterlo mostrare sul display facendo la proporzione:
lettura : X = 1024 :5
dove x e il valore della corrente che otterrai 1024 e il valore massimo della conversione analogica digitale e 5 e il valore massimo in volt che puoi leggere.
vedi che in questo caso la lettura non è molto accurata perche  al valore massimo della corrente leggiamo 200 su 1024 quindi potremmo ridurre il valore di riferimento dei pin analogici mettendo a 3 volt il pin aref cosi la precisione sara di = 3/1024=0.002929 V quindi 29,3 mV per unità
rifacendo il calcolo otterremo 1/0.00293=341 hai una precisione maggiore per quando si dovranno leggere correnti molto basse


spero di esser stato utile al tuo progetto

symon

Grazie di cuore pdor90, si sei stato utilissimo!! ;)
allora devo pensare di che valore e di che potenza scegliere la resistenza da collegare tra il generatore di carica e la batteria.
La corrente che fruirà nel circuito sarà massimo 10A.

ora mi metto sotto coi calcoli grazie ancora  ;)

pdor90

la corrente è sempre di 10 A o man mano andra calando ?
perche allora dovrai sfruttare tutto il range di lettura del convertitore analogico digitale per poter leggere anche valori di corrente piccoli pero devi anche contenere la potenza dissipata dalla resistenza altrimenti avrai un fornetto al posto di un caricabatteria e poi la tensione sulla batteria non sare quella esatta

symon

no la corrente sarà sempre variabile perchè proverrà da un generatore eolico o da un pannello fotovoltaico quindi la corrente dipenderà dal vento/sole.
in pratica sto cercando di capire a piccoli passi un po della logica arduino.. il mio obiettivo finale è quello di realizzare un regolatore di carica eolico/solare MPPT (inseguimento del punto di massima potenza) ad alta efficienza con controllo in logica fuzzy (la più veloce ed affidabile).

tornando ai calcoli.. prendiamo per esempio una resistenza R da 0,2ohm 1% 50W (tipo queste http://cgi.ebay.com/30-Dale-RH-50-Aluminium-Resistors-0-2-Ohm-50-Watt-1-/220696011256?pt=LH_DefaultDomain_0&hash=item336281e1f8)

con una corrente di 10A avrei una tensione ai capi di R di 10*0,2=2V
e con una corrente di 1A avrei una tensione di 0,2V
abbiamo detto che arduino ha 1024 finestre quindi impostando aref=2V con questa scelta avremmo una risoluzione di 2/1024 = 1,95mV
il primo livello di misurazione della corrente sarà di circa 10mA.

ho fatto un esempio di calcolo corretto oppure ho detto qualche castroneria?  ;D

quello che non ho capito è questo: analogread():
1(tensione a i capi R)/0.0049 = 204 questo è il valore che dopo nel programma dovrai riconvertire in A

se la corrente è V/R perchè hai messo 0.0049 come valore divisore?
grazie mille per l'aiuto.. se riuscirò nel mio intento sarei felice di pubblicare poi sul forum tutto il codice così chiunque fosse interessato può farsi un ottimo regolatore di carica eolico/solare a pochi euro  ;)

pdor90

1/0.0049 è il calcolo che ti dice cosa leggerai da arduino quando gli chiederai di fare l'analog read perche in quel caso
arduino ti restituisce il valore riferito ad una tensione
perche tu in quella formula fai   =  V/(k d itrasformazione)
questo k e quello che varia in base al AREF che imposti nel caso dei 2 V che hai scritto sara 0.00195 mV/div
cosi in caso di 1 A otterrai un valore restituito da AnalogRead() di
0.2/0.00195= 102 poi per poterlo mostrare sul dysplay dovrai riconvertire questo valore numerico in tensione e poi in corrente :
(valore analograd)*(K analogread)*(K shunt)
il K dello Shunt lo trovi facendi 1/(valore restivo) quindi 1/0.2 = 5
ricapitolando per il tuo 1A dovrai fare:
102*0.00192*5=0,9792 A  ;D
qui poi entrano in gioco tutti gli errori di approssimazione e di misura
però per avere una indicazione spannometrica della corrente il sistema dovrebbe andare al massimo potresti moltiplicare tutti i numeri * 1000
cosi ragioni con meno numeri decimali e guadagni come precisione e poi alla fine dividi per lo stesso fattore di moltiplicazione :) ;D

MauroTec

Se vuoi abbandonare la soluzione della R per misurare la corrente puoi dare occhiata al sito allegro cercando il chip ACS714, in base al modello può misurare fino a +-30A, con una R di Shunt di soli 1.2milliohm. Sul sito di sparkfun mi pare di ricordare di aver visto una schedina già pronta.

Ciao
AvrDudeQui front end per avrdude https://gitorious.org/avrdudequi/pages/Home

pdor90

urca bello questo
ma quindi posso misurare anche la corrente alternata?
o solo positiva o solo negativa?

MauroTec

Quote
ma quindi posso misurare anche la corrente alternata?
o solo positiva o solo negativa?


Da quello che riporta il datasheet sembra puoi fare entrambe le cose. Dalla DC fino a 80KHZ f-3db.

Frequency Bandwidth f -3 dB, TA = 25°C; IP is 10 A peak-to-peak - 80 - kHz.

Gli avevo dato un'occhiata in passato è volevo acquistarlo , ma poi tra ardu, bread, ecc ho sforato il badget, per di più robotitaly non c'è l'aveva ora non so.

Quote
il mio obiettivo finale è quello di realizzare un regolatore di carica eolico/solare MPPT (inseguimento del punto di massima potenza) ad alta efficienza con controllo in logica fuzzy (la più veloce ed affidabile).

Bello cos'è la logica fuzzy?
Comunque io farei l'inseguimento separato per ogni generatore, questo poi comunica tramite I2C con la centrale che dovrà gestire il pannello di controllo, questo comunica con il circuito di ricarica tramite I2C, il quale ha il compito di far convergere le fonti collegate in un'unica risorsa da fornire alle batterie.

Già se c'è molto sole e poco vento l'elolico fornirà una tensione/corrente bassa ma ancora utile, rispetto al pannello il far convergere le sorgenti in una lo vedo un compito abbastanza complesso.

Tempo a dietro buttai giù degli appunti che non trovo più, nel mito caso erà prevista la possibilità di ricaricare dalla 220, quando manca sole e vento, avevo anche pensato di attribuire alle sorgenti una priorità, la 220 avrebbe avuto priorità più bassa.

Ciao.

AvrDudeQui front end per avrdude https://gitorious.org/avrdudequi/pages/Home

symon

Grazie per la spiegazione pdor90, ora credo di aver capito!!
Grazie anche a MauroTech.. ottima soluzione il chip ACS714, ho curiosato sul sito di Allegro ed ho trovato il chip fratello che credo sia perfetto per il mio scopo (se non fosse per l'offset)  :)

Si chiama ACS715.
Misura la corrente dc fino a 30A (c'è la versione 20A ma meglio la 30A.. non si sa mai che in un futuro mi servirà maggiore corrente da misurare). Risoluzione 133mV/A. Tensione d'alimentazione 5V. Tensione di offset: 0,5V.
Quindi la tensione che misura in base alla corrente va da 0.5V (con 0A) a 4,49V (con 30A).

Per avere quindi una risoluzione di arduino di 1024 finestre ed iniziare a misurare da 0V dovrei portare la tensione di offset a zero tramite un circuito sommatore non invertente o c'è qualche altro sistema?

Per impostare aref con una tensione inferiore a 5V posso generarla e prelevarla da un uscita digitale pwm filtrata?

Quote
Bello cos'è la logica fuzzy?

La logica fuzzy nei regolatori MPPT è un sistema di ricerca del punto di massima potenza attraverso tre fasi (molto semplificate):
1) fuzzification (si misura P0 e P1 in un deltaT, si calcola la derivata di potenza sulla derivata di tensione e la differenza delle derivate al tempo T0 e T1, le variabili numeriche vengono trasformate in variabili linguistiche)
2) confronto con la tabella delle regole
3) defuzzification (variazione della potenza in base al risultato)
E' un processo iterativo e continuo e quando si ottengono valori vicini al punto di massima potenza, la potenza non viene variata ed il sistema non oscilla ma rimane fermo.
Maggiori info le puoi trovare qui: http://it.wikipedia.org/wiki/Logica_fuzzy

MauroTec il regolatore MPPT che vorrei realizzare gestisce la carica o da un generatore eolico ad asse verticale modello savonius o modello windside (quindi senza bisogno di sistemi frenanti o spinte iniziali) o da un pannello fotovoltaico, non tutti e due insieme.. quello magari più avanti  ;D
Bella l'idea della priorità!
Ragazzi il risultato sull'lcd sarà simile a questo: http://www.youtube.com/watch?v=1L86_fdsFKY
o ancora meglio a questo http://www.youtube.com/watch?v=mLmQk8IIGVM&feature=related
Salutoni :)

MauroTec

Quote
Per avere quindi una risoluzione di arduino di 1024 finestre ed iniziare a misurare da 0V dovrei portare la tensione di offset a zero tramite un circuito sommatore non invertente o c'è qualche altro sistema?


Se vuoi agire elettronicamente non vedo altra strada, però non capisco perchè tutta sta precisione.

Vediamo se fornisco 10A a una batteria da 100Ah la ricarico in 10 ore. Ora se anziche 10 ne fornisco 11 la batteria non si guasta ma si carica prima.

Cioè potresti pure fornire 20A la battteria specie se di tipo automobilistico tollera le extra correnti.

Quote
Per impostare aref con una tensione inferiore a 5V posso generarla e prelevarla da un uscita digitale pwm filtrata?


Ottima idea, così potresti anche fare autorange.

Grazie per le info su fuzzy.
Ciao.
AvrDudeQui front end per avrdude https://gitorious.org/avrdudequi/pages/Home

symon

Si sono d'accordo che un 10% di corrente di carica in più non danneggia la batteria. La precisione di cui stiamo parlando però non è per la corrente d'uscita dal regolatore ma per la lettura della corrente d'entrata nel regolatore, cioè quella variabile proveniente dalla fonte rinnovabile.
Se sbaglio la lettura della corrente d'entrata sbaglio tutto il sistema d'inseguimento del punto di massima potenza.

MauroTec

Quote
Se sbaglio la lettura della corrente d'entrata sbaglio tutto il sistema d'inseguimento del punto di massima potenza.

Non avevo capito che vuoi usare la corrente di carica in tal senso. Intanto non so come vuoi inseguire la massima potenza, posso ipotizzare che pannello fotovoltaico è motorizzato, ma per l'eolico questo non fà da se, cioè non si gira dove soffia pià vento o no.

Comunque dal momento che il risultato del miglior posizionamento si traduce in corrente in ingresso al regolatore perchè non misurare quella, quindi scelta logica, in questo caso si hai bisogno di precisione, però il 1/2 Amper può bastare o no. Quindi devi fare come hai detto prima.

Ok ciao.
AvrDudeQui front end per avrdude https://gitorious.org/avrdudequi/pages/Home

symon

Credo che non hai capito cosa sia la regolazione di carica mppt.
Non ha nulla a che fare con la motorizzazione del pannello o altre cose simili. L'mmpt è una tecnica per ottimizzare l'energia che il pannello o il generatore eolico stesso già produce. Con i sistemi pwm, parte di questa energia viene persa.
questo pdf ti potrà essere utile: http://www.wutel.net/schede/schede_tecniche/Regolatori%20di%20carica%20MPPT.pdf
Salutoni :)

uwefed

#14
Dec 11, 2010, 09:50 pm Last Edit: Dec 11, 2010, 10:06 pm by uwefed Reason: 1
Ciao a Tutti

scusate che rispondo solo ora:

@symon
Se non ho capito male hai un accumulatori di piombo e voresti misurare la corrente e farla vedere su un display.
Come giá consigliato un trasduttore di corrente come questo giá messo su basetta: http://www.watterott.com/en/ACS714-Current-Sensor-Carrier-30-to-30A hai una tensone in uscita che a 0A é di 2,5V e una segnale sopra di 185mV/A
La ditta é tedesca ma spedisce a costo di 10 ? anche in Italia.
Evitei la soluzione con la resistenza perché devi usare una resistenza piccola e il segnale deve essere amplificato. L' accumulatore di piombo viene caricato limitando la corrente ( perché l' alimentatore ha una potenza massima e anche l' accumulatore ha delle restrizioni, ma normalmente molto piú ampie rispetto l'alimentatore) e non superando una tensione ( 13,8V) per non fare gassare (produrre idrogeno e ossigeno per elettrolisi) che in un accumulatore aperto comporta perdita di acqua e fa necessitare un rabocco o in un sistema chiuso a gel fa aumentare la pressione interna e come conseguenza distrugge l'accumulatore.
Se aggiungi una resistenza il controllo della tensione non funziona perfettamente e di consequenza non distruggi l'accumulatore ma disturbi la regolazione di carica percui carica male e percui serve piú tempo.

@MauroTec

Un panello solare ha una certa curva U/I. Con poco carico (I < ) la tensione é alta ma visto che la corrente é piccola é la potenza piccola; la stessa cosa quando la corrente é alta, la tensione sará piccola.
Esiste un punto di lavoro dove il prodotto U*I ha il suo massimo e percui il panello da la massima potenza sempre in funzione della quantita di sole e l' angolo incidente. Praticamente un regolatore di carica é un alimentatore switching che regola la sua potenza per poter prendere al panello fotovoltaico la massima potenza e sul uscita é praticamente un caricabattera per batterie al piombo.

Ciao Uwe

Aggiunta:
Quote
Per impostare aref con una tensione inferiore a 5V posso generarla e prelevarla da un uscita digitale pwm filtrata?  

Non funziona con la precisione necessaria.
Se vuoi poter modificare in modo dinamico il range di misura aggiungi dei amplificatori operazionali e amplifica il sgnale in 2 o 3 step e metti ogni tensione su un entrata analogica (esempio: amplificazione 1x su A0, 5x su A1 e 10x su A2) cosí scegli l' entrata a secondo della amplificazione necessaria.

Ciao Uwe


Go Up