ESP8266 battery status monitoring

https://github.com/emanbuc/ESP8266_VCC_Monitoring

Il micro ESP8266 prevede una funziona dedicata al monitoraggio delle tensione di alimentazione. L’applicazione più comune è la gestione del livello di carica delle batterie.

float system_getVdd(void)

Nell SDK originale del produttore la funzione restituisce il livello della tensione di ingresso letto attraverso l’ADC collegato all’ingresso analogico.

Utilizzando il FW Arduino Core la funzione viene rimappata come

float ESP.getVcc(void)

Questa funzione quindi utilizza l’unico ingresso analogico disponibile e restituisce valori attendibili solo se il PIN ADC è lasciato floating

Pinout modulo ESP-12
Pinout modulo ESP-12

ADC_MODE

Per leggere la tensione di alimentazione attraverso l’ADC è necessario configurare il micro durante la fare di setup iniziale. Usando ArduinoCore deve essere aggiunta la riga seguente in testa allo sketch

ADC_MODE(ADC_VCC);

Se non viene aggiunta questa riga la tesione in ingresso la funzione restituisce sempre 65535 e la lettura sull’ingresso A0 un valore prossimo allo zero (floating).

In modalità ADC_VDC la funzione analogRead(A0) restituisce sempre 65535.

In qualche forum ho letto che la tensione di alimentazione viene riportata sull’ingresso dell’ADC attraverso un diodo. Questa informazione, che non ho trovato nella documentazione ufficiale,  è coerente con i valori misurati. Utilizzando una scheda NodeMCU (modulo ESP-12) ho ottenuto un valore pari 2,7V misurati dalla ADC con una tensione di 3.3V in ingresso. La differenza di 0,6V è compatibile con la caduta di tensione dovuta ad un diodo nel circuito.

ESP8266 Internal ADC

Il campo di misura dell’ADC è 0-1.0V  con valori di uscita tra 0 e 1024, mentre la tensione di alimentazione è tipicamente intorno ai 3.3V. Il valore restituito da ESP.getVcc() è scalato  in modo da ottenere la misura in Volt dividendo il risultato per 1024 come per qualsiasi altra lettura dell’ADC.

 
 currentVcc = ESP.getVcc();
 Serial.print("GetVcc: ");
 Serial.print(currentVcc);
 Serial.print(" => ");
 Serial.print(currentVcc/1024.00f);
 Serial.println(" V");

 

Annunci

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...