Arduino: mide el voltaje externo

10

Tengo un "problema" al intentar medir el voltaje externo de una celda de moneda. He simplificado mi circuito, pero básicamente tengo un reloj DS1307 en tiempo real alimentado por la salida Arduino 5v, y una celda de monedas conectada a vBat para mantener el reloj vivo mientras el Arduino está apagado. Mi idea era medir el nivel de la batería con Arduino conectando su entrada positiva a una analógica y leer el nivel de voltaje. Entonces, pensé, ya que el voltaje máximo es de 3v, puedo usar el 3v3 como AREF y configurar la referencia analógica a externa y luego leer resultados precisos. El resultado es bastante bueno y las lecturas de Arduino son las mismas que leer el voltaje de la batería de mi multímetro. El problema surge cuando desconecto la fuente de alimentación de Arduino (una conexión USB). Para mi sorpresa, el Arduino no se apaga (algunos leds se mantienen encendidos),

¿Por qué está pasando esto? ¿Cómo está tomando corriente el Arduino del Pin analógico? ¿Es este pequeño circuito una aberración electrónica?

ingrese la descripción de la imagen aquí

alvarolb
fuente

Respuestas:

10

La mayoría, si no todos, los pines de entrada en los controladores AVR están protegidos internamente por diodos de sujeción. Estos diodos evitan que un voltaje de entrada pueda ser más alto que el voltaje de suministro.

Por qué existen estos diodos internos:

Es importante darse cuenta de que cuando un pin de entrada hace elevarse por encima de la tensión de alimentación y de estos diodos no estuviese allí, el chip podría actuar como un SCR, pestillo, corta la batería, y el chip en sí probablemente ser dañado por sobrecorriente / sobrecalentamiento .

Por qué su Arduino funciona con la batería Eche un vistazo al siguiente diagrama de circuito. Cuando Vcc se desconecta de la fuente de alimentación normal, hay una ruta desde la batería, a través de D1, hasta Vcc. El voltaje de la batería es lo suficientemente alto como para que funcione el controlador.

esquemático

simular este circuito : esquema creado con CircuitLab

Cómo resolverlo

La solución es simple: agregue una resistencia de alto valor en serie entre la batería y la entrada del controlador. La mayoría de los AVR tienen una corriente de fuga de entrada máxima especificada (I IL ) de 1 μA, por lo que debe asegurarse de que la caída de voltaje sea aceptable con esa corriente, digamos 100kΩ.

¡Pero cuidado!

Debe darse cuenta de que la entrada puede extraer esta corriente de la celda de su botón y acortar su vida útil.

jippie
fuente
Probaría 10Mohm y vería lo que lee el ADC y lo usaría como referencia para una batería cargada. Es una medida difícil si desea evitar el drenaje no deseado.
Andy aka
Eso podría funcionar, aunque se especifica como una corriente de entrada y no como una impedancia de entrada. La respuesta puede ser no lineal, pero no necesariamente inútil. Es posible que necesite algún tipo de calibración y tal vez se pueda usar la referencia de separación de banda 1V1 (en lugar de la referencia externa 3V3) cuando el voltaje medido cae por debajo de 1.1V.
jippie
¡¡Buena respuesta!! Estaba pensando si un divisor de resistencia con 100kΩ y 50kΩ funcionará. En este caso, supongo un voltaje máximo de batería de 3.2 voltios. Esto proporciona un voltaje de caída de 1.067v, que puede ser compatible con la referencia analógica interna de 1v1. Esto puede funcionar? o va a agotar la batería demasiado pronto?
alvarolb
2
T=mAh3V×1000100kΩ+50kΩ=mAh × (100kΩ + 50kΩ)3V×1000
1
Estos diodos están presentes en la mayoría de los microcontroladores en general, no solo en AVR. Tampoco son desconocidos en otros tipos de circuitos integrados.
Adam Lawrence