Façons appropriées de déconnecter les circuits intégrés pendant les états de faible puissance pour éviter une alimentation parasite / retour


10

Je travaille sur un projet AVR basé sur une batterie basse consommation qui intègre quelques appareils différents, y compris une bande de néopixels et un lutin Adafruit . Lorsque l'appareil global est au repos, j'aimerais qu'il consomme moins de 0,1 mA pour maximiser la durée de vie de la batterie LiPo.

J'ai tout fait fonctionner (mesuré 0,035 mA) mais je ne suis pas sûr de l'avoir nécessairement fait de la «bonne» manière et je prévois de construire un produit basé sur cela, donc j'aimerais bien le faire.

entrez la description de l'image ici (Non illustré: une diode flyback pour le relais)

La principale préoccupation que j'ai est l'alimentation «parasite» des appareils lorsque le VCC est déconnecté via le courant provenant des broches de données. Par exemple, le Pixie (qui communique via série), n'a pas de mode de mise hors tension et même lorsqu'il est éteint, il draine environ un milliampère. J'ai donc placé un petit relais pour déconnecter son VCC et j'ai découvert que la broche série alimentait toujours le lutin.Des indices ailleurs suggèrent que de nombreuses puces ont une diode shuntant leurs broches d'entrée numérique au VCC comme protection d'alimentation. Pour résoudre ce problème, j'ai dû suspendre la bibliothèque série et en fait digitalWrite (PIN, LOW) pendant le sommeil.

Même chose avec la bande WS2812b - la déconnexion du VCC permet toujours à l'appareil d'être alimenté à partir de la broche de données. Et dans d'autres conceptions, lorsque j'ai déconnecté GND avec un MOSFET à canal N, j'ai vu l'inverse - un retour de courant à travers la ligne de données vers la terre! (Cela devait être résolu avec une diode par poste sur PJRC.) Les WS2812b prennent en fait environ un milliampère chacun même lorsqu'ils ne sont pas allumés,

La question est donc la suivante: existe-t-il un moyen général et «propre» de déconnecter VCC et GND des parties d'un projet pendant la mise en veille du système lorsqu'il y a des broches de données dans le mélange? Quelle est la meilleure pratique?

Quelques idées:

  1. Forcer VCC à GND (vous ne savez pas comment? Hbridge?). (Si je fais cela, qu'arrive-t-il aux broches de données qui sont hautes?)
  2. Placez un tampon à trois états entre toutes les broches de données et ces appareils, et pendant le sommeil, placez le tampon à trois états dans un état de haute impédance, déconnectez VCC ou GND uniquement avec P ou N mosfet
  3. Déconnectez GND uniquement avec N mosfet et placez des diodes sur toutes les broches de données
  4. Existe-t-il une sorte de verrou d'alimentation qui déconnecte à la fois VCC et GND et les met dans un état «haute impédance» (comme un tampon à trois états pour l'alimentation?) De cette façon, le courant n'a aucun moyen de s'écouler «hors» des lignes de données.

Quelqu'un peut-il m'éclairer sur la manière la plus propre et la plus reproductible de gérer ce type de problème de «déconnexion de charge»? (Inutile de dire que j'ai passé des heures à googler ce problème avec peu de chance, même si j'ai trouvé cette note technique sur le changement de charge, mais elle ne traite pas du retour d'alimentation et de la puissance parasite)


Ya c'est super ennuyeux, j'ai effectivement vu des cas où la puissance atteignant une broche GPIO peut allumer un AVR (exécuter du code) même sans que la puissance n'atteigne les broches VCC ...
vicatcu

2
Observation amusante: j'ai fait d'autres recherches sur Google depuis la publication de cette question et cette question sur SE est arrivée en tête. Google a indexé cette page en moins de 10 minutes.
Jeremy Gilbert

Commentaire uniquement: des interrupteurs d'isolement appropriés comme d'autres l'ont suggéré sont la meilleure solution lorsqu'une tension à distance ne peut pas être éliminée. Il se peut que l'utilisation de diodes Schottky pour entrer des broches avec des cathodes communes et généralement à Vcc et fixées à la masse lorsque l'isolation est souhaitée, fournira une élimination adéquate des tensions d'impédance élevées. De toute évidence, le serrage par Schottky d'une ligne d'alimentation à faible impédance est susceptible de gâcher votre journée.
Russell McMahon

Probablement Hi-Z-ing toutes vos connexions d'une certaine manière (broches µC à trois états, tampons à trois états, commutateurs analogiques, etc.), comme Peter Smith et CL l'ont suggéré, est le meilleur pari. Laquelle des méthodes est la meilleure, je ne suis pas sûr. Dans tous les cas: pourquoi utilisez-vous un relais pour la commutation, et non un P-MOSFET (ou un N-MOSFET bas d'ailleurs, bien que la commutation bas soit probablement un peu plus difficile ici)?
FlashCactus

Réponses:


5

Lorsque je fais cela, j'utilise généralement des commutateurs analogiques CMOS sur les lignes de données concernées.

Quelque chose comme l' ADG812 possède 4 canaux de commutateurs SPST qui conviennent facilement à une logique assez rapide et fournissent une impédance très élevée entre les nœuds de commutateur lorsqu'ils sont à l'état désactivé.

ADG812 hors fuite

La bonne chose à ce sujet est que la technique fonctionne à la fois unidirectionnelle et lignes de données bidirectionnelles.

Ces parties ont également un sourire éclatant:

Exigences d'alimentation ADG812

La séquence habituelle de mise hors tension:

  1. Désactiver les commutateurs de chemin de données

  2. Mettez le domaine hors tension.

La mise sous tension est bien sûr l'opposé.

[Mettre à jour]

Ceux-ci sont en effet connus sous d'autres noms, tels que les portes de passage et les portes de transmission .

Ceux-ci sont significativement différents d'un vrai tampon à trois états (comme vous pouvez le voir dans le schéma ci-dessus), mais pour la logique ordinaire, l'effet est meilleur (c'est intrinsèquement un périphérique bidirectionnel) mais avec une puissance inférieure.


Pardonnez l'ignorance de la question, mais est-ce nettement différent d'un tampon à trois états? (Et merci pour la réponse!)
Jeremy Gilbert

Celles-ci sont également connues sous le nom de «portes d'accès»
vicatcu

3

Si les signaux de données sont connectés à votre microcontrôleur, vous pouvez simplement les rendre à haute impédance en configurant ces broches comme entrées. (Si l'autre puce utilise très peu d'énergie, vous pouvez traiter son Vcc comme un signal de données.)

Sinon, vous pouvez utiliser des commutateurs analogiques (puces logiques 74x66) pour les déconnecter. Pour les signaux unidirectionnels, 74x125 fonctionnerait également.


En fait, vous n'avez pas besoin de les rendre élevés en Z, vous pouvez simplement réduire les lignes GPIO du micro.
DoxyLover

1
Ce serait plus dangereux si l'autre puce pouvait conduire le signal à un niveau élevé.
CL.

Juste pour que je comprenne bien, la commutation des broches sur les entrées est-elle toujours la même chose que de les mettre dans un état de haute impédance? Est-ce généralisé à la plupart des MCU ou uniquement aux AVR? Cet état est-il le même que celui obtenu avec le 74x125 lorsque OE est désactivé?
Jeremy Gilbert

@JeremyGilbert Toutes les entrées CMOS ont une impédance élevée (ce sont des portes MOSFET, qui se comportent comme de très petits condensateurs). Une sortie 125 désactivée n'a pas de porte, mais la différence est négligeable.
CL.

1
@JeremyGilbert Les entrées ont généralement un Z élevé dans la plupart des applications; après tout, il est difficile de sentir quoi que ce soit lorsque vous conduisez. Cela dit, avec les AVR au moins (et probablement d'autres aussi, mais je ne connais pas les détails), vous devez faire attention aux pullups internes: si la broche est en mode d'entrée (configuré via DDRx) et que vous écrivez LOW sur (via PORTx), il est en mode Hi-Z normal. Cependant, si vous écrivez HAUT en mode d'entrée, le pullup interne est activé et de l'extérieur, la broche ressemble à une résistance ~ 50K sur VCC au lieu d'une ligne flottante.
FlashCactus

1

Je ne pense pas qu'il existe malheureusement une stratégie unique. Mettez les sous-systèmes sous tension comme vous l'avez déjà fait. Dans le logiciel, les broches du lecteur sont faibles pour les états de faible puissance, à moins que cela ne provoque une condition de régime permanent de haute puissance. Dans ce cas, enfoncez la broche haut. Ne laissez jamais flotter les entrées. Séquencer l'alimentation si nécessaire pour établir des conditions initiales sûres.


1


je2C

Vous n'avez pas cette option - vous êtes obligé d'utiliser des E / S série asynchrones. Certains microcontrôleurs permettent une approche similaire à I2C pour résoudre le problème. Si vous pouvez programmer la broche de sortie série pour qu'elle soit uniquement vers le bas plutôt que vers le pull-up-for-1, pull-down-0 le plus courant , vous pouvez ajouter une résistance de pull-up à Vcc commuté pour établir une logique élevée.
Cette solution n'est pas aussi résistante au bruit que votre approche actuelle, mais elle devrait résoudre le problème de la rétro-alimentation de vos modules d'E / S à partir de l'AVR. Ce n'est pas vraiment une solution "propre", mais elle est beaucoup plus sûre pour les microcontrôleurs de vos modules d'E / S.

schématique

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

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.