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.
(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:
- 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?)
- 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
- Déconnectez GND uniquement avec N mosfet et placez des diodes sur toutes les broches de données
- 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)
Réponses:
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é.
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:
La séquence habituelle de mise hors tension:
Désactiver les commutateurs de chemin de données
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.
la source
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.
la source
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.
la source
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.
simuler ce circuit - Schéma créé à l'aide de CircuitLab
la source