La vérification de la tension de sauvegarde sur un drain RTC sa batterie de secours?


8

Je travaille sur un projet ATMega qui gardera du temps et j'essaie de le faire pour que vous ayez une option de temps logiciel (basé sur millis ()), DS1307 ou DS3231 (ChronoDot) RTC.

À la base, ce que je voudrais faire, c'est d'avoir des en-têtes pour un ChronoDot disponibles à souder, puis en quelque sorte dans le logiciel de détecter si le ChronoDot est connecté et de passer à l'utilisation de cela. Il serait généralement assez facile de vérifier que le DS1307 ou DS3231 est présent car ils utilisent le même registre I2C, mais après cette vérification initiale, ils s'écartent un peu les uns des autres et ce dernier a plus de fonctionnalités. Je veux donc toujours déterminer lequel est connecté. En général, je prévois d'avoir une place directement à bord pour souder dans le DS1307 comme option par défaut et le support du DS3231 serait avec un ChronoDot complet uniquement via deux en-têtes à 4 broches. Le ChronoDot s'adapterait essentiellement à l'endroit où le DS1307 irait normalement (il ne serait pas rempli dans ce cas). La principale raison pour laquelle je me concentre spécifiquement sur le ChronoDot est qu'il ' s populaire, facile à acquérir et ne nécessite pas de soudure SMD pour l'utilisateur final (ceci pour un kit). Alors, voici ce que je pense ...

Les deux DS1307 et DS3231 ont une ligne Vbat sur la puce, mais ce n'est vraiment pas nécessaire pour rien. Cependant, le ChronoDot a une broche VBat réelle sur la carte de dérivation. Je pourrais peut-être brancher uniquement Vbat à partir de l'en-tête ChronoDot et non le DS1307 et le connecter à une broche d'entrée numérique sur mon ATMega. Mais faites abattre cette broche d'entrée à la masse par une résistance (vous ne savez pas vraiment quelle valeur ... peut-être 4,7 k?). Si ma théorie de l'EE est correcte, je peux alors lire cette broche et si j'obtiens un bas, il n'y a pas de chronodot mais si j'obtiens un haut, il y en a un.

Quelque chose comme ça:

schématique

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

Ma principale question ici est de savoir si cela va finir par vider la batterie de secours sur le RTC? Normalement, il n'y aurait pas de courant tiré de la batterie de secours pendant que l'alimentation principale, 5 V, est fournie, mais est-ce que le brancher à une entrée numérique lui permettrait de tirer tout le temps de la batterie? Ou, y a-t-il un mode dans lequel je devrais mettre la broche après l'avoir lue pour la "déconnecter", pour ainsi dire? Je sais que je pourrais le changer en sortie, mais je crois que si elle est définie comme sortie et faible, je mettrais essentiellement la batterie à la terre.

Quoi qu'il en soit, mes cours d'EE étaient il y a longtemps. Toute aide sur la théorie ici serait appréciée.

Réponses:


8

Vous allez certainement vider la batterie à travers la résistance. La quantité de courant que vous tirerez sera régie par la loi d'Ohm: I = V / R. Disons que la tension de votre batterie est de 3 V (c'est-à-dire le chronodot Vbat habituel). Avec une résistance de 4,7 kOhm, vous tirerez en continu 3/4700 = 638 microampères. Si vous créez une résistance de 1 MOhm, vous tirerez plutôt 3/1000000 = 3 microampères. Et si vous en faites une résistance de 10 MOhm, vous tirerez à la place 3 / 1e7 = 300 nanoampères.

Plus la résistance de valeur que vous choisissez est grande, moins vous tirerez de courant en continu, mais plus la transition de votre broche numérique prendra du temps (pensez à la constante de temps R * C régie par la résistance et la capacité des broches et des traces). Tant que vous attendez assez longtemps (ou revenez régulièrement) après le démarrage, vous devriez être OK avec une résistance de 10 MOhm. Théoriquement, vous pouvez également capter plus de bruit avec une valeur plus élevée (car cela commence à ressembler de plus en plus à un circuit ouvert), mais je pense que vous irez bien. Je pourrais même envisager de monter jusqu'à 100 MOhm.

Un CR1632 typique a 130 milliampères-heures (mAh) d'énergie stockées, et peut-être 80% de cela est la durée de vie utile, alors il suffit de l'appeler 100 mAh pour faciliter le calcul. Une estimation grossière de la durée de vie de votre batterie est alors tirée en milliampères-heures / milliampères.

  • Avec votre résistance de 4,7 kOhm, c'est 100 / 0,638 = 156 heures = 6,5 jours
  • Avec une résistance de 1 MOhm, 100 / 0,003 = 33333 heures = 3,8 ans
  • Avec une résistance de 10 MOhm, 100 / 0,0003 = 333333 heures = 38 ans

Ce sont des nombres supérieurs qui supposent que le reste de votre système ne consomme aucune puissance. Ils représentent la durée de vie de votre système lorsqu'il est éteint et la batterie est simplement drainée à travers la résistance. Il existe également de nombreux effets de second ordre qui ne sont pas pris en compte (baisse de tension, chimie des fuites internes de la batterie, etc.). Il est peu probable que la résistance soit votre plus gros problème en fonction de la durée de vie que vous espérez atteindre.


Duh ... je ne peux pas croire que j'ai négligé de remarquer le fait que je mettais la batterie à la terre directement: P Des suggestions sur une autre façon de faire?
Adam Haile

Je pense que votre approche est bonne, étant donné une résistance suffisamment grande, le courant de fuite n'aura pas d'impact significatif sur la durée de vie de votre batterie, je mettrai à jour avec un peu plus de mathématiques.
vicatcu

1
Upvote: Répondre à la question principale. @AdamHaile une technique qui peut vous être utile: les voltmètres numériques utilisent un FET qui présente un équivalent de drain insignifiant d'une résistance dans les ordres ou MOhms.
shimofuri

1
@AdamHaile une chose rapide ... J'ai remarqué votre commentaire que votre système est un 5V dans un autre commentaire. Attention, votre seuil de tension d'entrée numérique élevé est suffisamment élevé pour s'enregistrer avec une batterie déchargée (probablement jusqu'à environ 2 V pour un CR1632) - consultez la fiche technique de votre microcontrôleur
vicatcu

1

Presque tous ces schémas de mesure impliquant des résistances, s'ils sont connectés en permanence, entraîneront une consommation de courant inacceptable et une réduction de la durée de vie de la petite batterie au lithium qui alimente ces appareils.

La solution est alors de faire en sorte que le circuit de mesure ne consomme du courant que brièvement pendant des intervalles peu fréquents, lorsque vous effectuez réellement une mesure.

Pour un test numérique, cela pourrait être aussi simple que d'utiliser un menu déroulant interne configurable par logiciel et de le configurer uniquement en tant que menu déroulant pendant une brève période de temps entourant le test. Cependant, vous devrez examiner les complications possibles d'une tension sur la broche lorsque le microcontrôleur effectuant la mesure n'est pas alimenté / en mode veille.

Une mesure analogique deviendrait plus délicate, mais des idées similaires pourraient être appliquées. Par exemple, vous pouvez connecter la résistance inférieure d'un diviseur de tension (haute impédance par rapport aux E / S) à une broche de sortie, et la maintenir faible uniquement pendant un temps entourant la mesure. Ou vous pourriez même être en mesure de construire un circuit RC avec un petit condensateur à faible fuite et une seule broche d'E / S que vous pourriez piloter en sortie, puis configurer en tant qu'entrée analogique et mesurer la tension après un certain temps. Si la tension de seuil numérique de l'appareil est cohérente (attention à la température!), Vous pouvez même faire une mesure analogique avec une entrée numérique de cette façon, en mesurant le temps nécessaire au condensateur pour se charger à la tension de seuil.


Hmmm ... J'aimerais pouvoir faire le pull-down interne, mais malheureusement il n'y a que des résistances de pull-up internes. J'essaie peut-être de trop compliquer les choses. Un plot de soudure qui doit être ponté pour utiliser un mode ou l'autre serait probablement acceptable.
Adam Haile

Vous pouvez créer votre propre menu déroulant configurable par logiciel avec une résistance vers une autre broche d'E / S. Ou vous pouvez utiliser l'idée de circuit de circuit RC, en pilotant la même broche que vous reconfigurerez ensuite en entrée pour mesurer.
Chris Stratton

En fait, l'utilisation d'un menu déroulant interne est une très mauvaise idée. Les broches d'E / S sont généralement connectées à Vdd et GND avec des diodes pour empêcher la tension des broches de s'écarter de la tension d'alimentation. Lorsque la puce n'est pas alimentée, la broche sera fondamentalement liée à GND avec deux diodes parallèles et l'application d'une tension supérieure à la tension de seuil des diodes entraînera un flux de courant très important. Une meilleure idée serait d'utiliser un transistor PMOS série dont la grille est contrôlée par un transistor NMOS à la masse. Cela minimisera les fuites lorsque le microcontrôleur n'est pas alimenté.
alex.forencich

1

Le DS3231 a une température interne que vous pouvez lire. Vous pouvez émettre une commande sur I2C pour lire la température, si vous avez une réponse, vous avez le DS3231, sinon vous avez le DS1307.


1
Je ne pense pas que cela réponde à la question.
shimofuri

Je pense que oui. Adam dans l'OP veut déterminer si un DS3231 ou DS1307 est connecté à son circuit. Il pensait essayer de le faire avec la broche vbat. Je suggère qu'il le fasse en voyant si l'appareil retournera la température. Il me semble que cela devrait fonctionner très bien.
Scott Goldthwaite

Je pense que cela répond à la question: pas la question qui a été posée, mais l'énoncé du problème sous-jacent. Intéressant. Il obtiendrait mon vote positif s'il était un peu étoffé et avec des références ajoutées.
Anindo Ghosh

Dans la fiche technique de Maxim, voir la figure 1 à la page 11. Elle montre les registres (11 et 12) pour la température interne.
Scott Goldthwaite
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.