Arduino: mesure la tension externe

10

J'ai un "problème" en essayant de mesurer la tension externe d'une pile bouton. J'ai simplifié mon circuit, mais fondamentalement, j'ai une horloge en temps réel DS1307 alimentée par la sortie Arduino 5v et une pile bouton connectée à vBat pour garder l'horloge en vie pendant que l'Arduino est éteint. Mon idée était de mesurer le niveau de la batterie avec Arduino en connectant son positif à une entrée analogique et de lire le niveau de tension. Donc, j'ai pensé, comme la tension maximale est de 3v, je peux utiliser le 3v3 comme AREF et définir une référence analogique sur externe, puis lire des résultats précis. Le résultat est assez cool et les lectures d'Arduino sont les mêmes que la lecture de la tension de la batterie de mon multimètre. Le problème survient lorsque je déconnecte l'alimentation de l'Arduino (une connexion USB). Pour ma surprise, l'Arduino ne s'arrête pas (certaines led restent allumées),

Pourquoi cela arrive-t-il? Comment l'Arduino prend-il le courant de la broche analogique? Ce petit circuit est-il une aberration électronique?

entrez la description de l'image ici

alvarolb
la source

Réponses:

10

La plupart, sinon la totalité, des broches d'entrée des contrôleurs AVR sont protégées en interne par des diodes de serrage. Ces diodes empêchent qu'une tension d'entrée puisse être supérieure à la tension d'alimentation.

Pourquoi ces diodes internes sont là:

Il est important de réaliser que lorsqu'une broche d'entrée ne monte au dessus de la tension d'alimentation et ces diodes sont pas là, la puce peut agir en tant que SCR, verrou, court la batterie et la puce elle - même serait probablement être endommagé par surintensité / surchauffe .

Pourquoi votre Arduino fonctionne à partir de la batterie Jetez un œil au schéma de circuit ci-dessous. Lorsque Vcc est déconnecté de la source d'alimentation normale, il y a un chemin entre la batterie, via D1, et Vcc. La tension de la batterie est juste assez élevée pour que le contrôleur fonctionne.

schématique

simuler ce circuit - Schéma créé à l'aide de CircuitLab

Comment le résoudre

La solution est simple, ajoutez une résistance de haute valeur en série entre la batterie et l'entrée du contrôleur. La plupart des AVR ont un courant de fuite d'entrée maximal spécifié (I IL ) de 1 μA, vous devez donc vous assurer que la chute de tension est acceptable avec ce courant, disons 100 kΩ.

Mais méfiez-vous!

Vous devez vous rendre compte que l'entrée peut tirer ce courant de votre pile bouton et raccourcir sa durée de vie.

jippie
la source
J'essaierais 10Mohm et verrais ce que l'ADC lit et l'utiliser comme référence pour une batterie chargée. C'est une mesure délicate si vous voulez éviter un drainage indésirable.
Andy aka
Cela pourrait fonctionner, bien qu'il soit spécifié comme courant d'entrée et non comme impédance d'entrée. La réponse peut être non linéaire, mais pas nécessairement inutile. Il pourrait avoir besoin d'une sorte d'étalonnage et peut-être que la référence de bande interdite 1V1 peut être utilisée (au lieu de la référence externe 3V3) lorsque la tension mesurée tombe en dessous de 1,1V.
jippie
Bonne réponse!! Je pensais si un diviseur de résistance avec 100kΩ et 50kΩ fonctionnerait. Dans ce cas, je suppose une tension de batterie maximale de 3,2 volts. Cela donne une tension de chute de 1,067 V, qui peut être compatible avec la référence analogique interne de 1 V1. Cela peut fonctionner? ou déchargera-t-il la batterie trop tôt?
alvarolb
2
Je ne connais pas la capacité de votre batterie. Il doit être spécifié en mAh. Une indication grossière de sa durée de vie serait . Une pile bouton peut ne pas durer très longtemps, mais vous devez vérifier la fiche technique pour en être sûr. T=mAh3V×1000100kΩ+50kΩ=mAh × (100kΩ+50kΩ)3V×1000
jippie
1
Ces diodes sont présentes sur la plupart des microcontrôleurs en général - pas seulement sur les AVR. Ils ne sont pas inconnus sur d'autres types de circuits intégrés également.
Adam Lawrence