Misurazione della corrente DC con Arduino
Ci sono molte ragioni per cui dobbiamo misurare la corrente DC usando Arduino. Potremmo voler controllare quanta attuale Arduino e altre periferiche utilizzano o misurare la ricarica della batteria e lo scarico della corrente.
La maggior parte delle schede e dei microcontrollori Arduino hanno l'ADC incorporato, quindi prima di fattore di scala Durante la programmazione convertiamo quel valore di tensione ADC in corrente.
Per misurare la corrente DC utilizzando Arduino diversi sensori e moduli diversi sono disponibili sul mercato. Uno dei sensori più popolari ed economici disponibili sul mercato è il ACS712 Sensore dell'effetto Hall.
Sensore effetto ACS712 Hall
Entrambi AC E DC La corrente può essere misurata usando il sensore di effetto Hall ACS712. Oggi ci concentreremo solo sulla misurazione della corrente DC. ACS712 opera su 5 V, genera una tensione di uscita su VOUT Pin del sensore proporzionale al valore della corrente misurata da esso.
Sono disponibili tre diverse varianti di questo sensore in base al valore corrente che misura:
ACS712-5A: Il sensore 5a può misurare la corrente tra -5a a 5a. 185mv è il fattore di scala o la sensibilità del sensore che mostra 185mv La modifica della tensione iniziale rappresenta la modifica 1a nell'ingresso di corrente.
ACS712-20A: Il sensore 20A può misurare la corrente tra -20a a 20a. 100mv è il fattore di scala o la sensibilità del sensore che mostra 100mv La modifica della tensione iniziale rappresenta la modifica 1a nell'ingresso di corrente.
ACS712-30A: Il sensore 30A può misurare la corrente tra -30a a 30a. 66mv è il fattore di scala o la sensibilità del sensore che mostra 66mv La modifica della tensione iniziale rappresenta la modifica 1a nell'ingresso di corrente.
Il sensore emette 2.5V Quando non viene rilevata alcuna corrente, la tensione al di sotto di questa rappresenta la corrente negativa mentre la tensione sopra 2.5v mostra una corrente positiva.
Fattore di scala:
5a | 20A | 30a |
---|---|---|
185mv/amp | 100mv/amp | 66mv/amp |
Formula per misurare la corrente
Per verificare la presenza di un fattore di scala, guarda il chip ACS712 sul sensore dell'effetto Hall come mostrato di seguito nel diagramma. Qui nel nostro caso, useremo la versione 20A.
Schema elettrico
Assicurati che durante la connessione dei sensori di effetto Hall con il carico si collegano sempre in serie poiché la corrente rimane costante in serie. Collegare il sensore in parallelo può danneggiare la scheda Arduino o ACS712. Collegare il sensore nella configurazione sotto menzionata:
Arduino Pin | Pin ACS712 |
---|---|
5v | VCC |
GND | GND |
Pin analogico | Fuori |
Simulazione
Codice
/*Definito due variabili per il vout del sensore e corrente di carico misurata*/
doppio sensorevout = 0;
Double MotorCurrent = 0;
/*Costanti per fattore di scala in v*/
/*Per il sensore 5a prendi scala_factor = 0.185;*/
const doppio scala_factor = 0.1; /*Per sensore 20a*/
/*Per il sensore 30a prendi scala_factor = 0.066;*/
/* Variabili definite per convertire i dati analogici in digitale poiché Arduino ha ADC a 10 bit, quindi i valori massimi possibili sono 1024*/
/ * La tensione di riferimento è 5V */
/* Il valore di tensione predefinito per il sensore è la metà della tensione di riferimento che è 2.5V*/
const double refvolt = 5.00;
const double adcResolution = 1024;
doppio adcvalue = refvolt/adcResolution;
Double DefaultSenSorVout = refvolt/2;
void setup ()
Seriale.Inizia (9600);
void loop ()
/* 1000 letture prese per ottenere più precisione*/
per (int i = 0; i < 1000; i++)
SensorVout = (sensorVout + (adCValue * analogread (a0)));
ritardo (1);
// vout in mv
Sensorvout = sensorvout /1000;
/* Utilizzo della formula di corrente Converti VOUT dal sensore in corrente di carico*/
MotorCurrent = (SensoRVout - DefaultSensorVout)/ Scale_Factor;
Seriale.print ("sensorVout ="); /*Stamperà il vout del sensore sul monitor seriale*/
Seriale.stampa (sensorvout, 2);
Seriale.print ("volt");
Seriale.print ("\ t MotorCurrent ="); /*Stamparrà la corrente misurata DC*/
Seriale.stampare (motorincamere, 2);
Seriale.println ("amp");
ritardo (1000); /*Il ritardo di 1 sec è riportato*/
Qui nel codice precedente due variabili vengono inizializzate Sensorvout E Morrente motoriale, Entrambe queste variabili memorizzeranno i valori come tensione e corrente rispettivamente. Il fattore di scala successivo è impostato su 0.1 V (100mV) secondo il sensore 20A-ACS712. La tensione di riferimento è impostata su 5 V e per convertire l'ingresso analogico in risoluzione ADC digitale è inizializzato a 1024. Poiché Arduino ha ADC a 10 bit, il che significa che il massimo può archiviare è 1024 valori.
Come spiegato sopra fattore di scala prenderà la lettura in base alle tensioni deviate totali da 2.5v. Quindi, 0.1 V la modifica in vout del sensore sarà uguale a 1a di corrente di input.
Successivamente nel ciclo continuo sezione a per loop viene inizializzato per prendere 1000 letture per ottenere un valore più preciso della corrente di output. Il VOUT del sensore è diviso per 1000 per convertire i valori in MV. Usando la formula della corrente del motore, abbiamo determinato la nostra corrente di carico. L'ultima sezione del codice stamperà entrambe le tensioni di vout del sensore e la corrente misurata.
Produzione
Qui nel vout del sensore di uscita è inferiore a 2.5v Quindi la corrente del motore misurata dell'uscita è negativa. La corrente di uscita è negativa a causa della polarità inversa del motore CC.
Conclusione
La misurazione della corrente DC utilizzando Arduino ha richiesto un sensore o un modulo esterno. Uno dei sensori di effetto Hall ampiamente utilizzato è ACS712, che non solo ha una vasta gamma di misurazione di corrente per DC e corrente CA. Usando questo sensore, abbiamo misurato la corrente CC di un motore CC in esecuzione e il risultato di uscita è mostrato nella finestra terminale.