Question:
Comment puis-je lire une sortie à trois états avec un microcontrôleur?
RHaguiuda
2014-07-15 00:26:30 UTC
view on stackexchange narkive permalink

Je voudrais interfacer la ligne STAT d'un circuit intégré de gestion de charge lithium-ion MCP73831 à un microcontrôleur pour en lire l'état de charge actuel.

La fiche technique explique, dans la section 5.2.1, que la ligne STAT est une sortie à trois états et a l'état suivant:

  • High
  • Low
  • High-Impedance

et un tableau est fourni qui explique comment chaque niveau représente chaque état de charge de la batterie.

Comment puis-je connecter cette broche à un microcontrôleur E / S et lire ces trois états distincts?

La lecture de High et Low est assez simple, mais la détection d'une entrée est une impédance élevée que je n'ai jamais faite auparavant.

Cinq réponses:
#1
+11
Wouter van Ooijen
2014-07-15 00:34:33 UTC
view on stackexchange narkive permalink

Vous pouvez le lier à la masse et au Vcc avec deux résistances 10k, et utiliser une entrée A / N pour lire le niveau.

Si vous n'avez pas de A / N à épargner, connectez-le à une autre broche de votre uC avec une résistance de 10k. Si la broche est haute ou basse, elle sera bien sûr lue comme haute resp. faible (en supposant qu'il peut conduire une charge de 10k). S'il s'agit d'une impédance élevée, la lecture sera égale à ce que vous produisez sur l'autre broche.

+ J'aime la 2ème idée.Lecture avec sortie haute et sortie basse, quatre possibilités, dont trois seulement sont raisonnables.
Bonne idée en utilisant l'autre broche.Dans ce cas cependant, l'entrée peut / dépassera les processeurs Vcc.Ajout d'un message au lieu d'un commentaire étendu.
#2
+8
Turbo J
2014-07-15 01:04:50 UTC
view on stackexchange narkive permalink

De nombreux microcontrôleurs vous permettent de choisir entre une résistance de tirage faible et une résistance de pulldown faible sur une entrée GPIO - de l’ordre d’environ 50k-100k Ohm. Si l'entrée est high-z, une lecture avec un pulldown faible activé donnera une lecture basse et une lecture suivante avec un pullup faible sera un high.

N'oubliez pas d'attendre quelques µs entre le basculement de la résistance et la lecture du GPIO pour permettre à la tension sur la broche de se stabiliser.

Notez que les anciens AVR et 8051 peuvent n'avoir qu'un faible pullup mais pas de faibles résistances de pulldown.

+1 ... Pour les MPU qui n'ont pas une faible capacité de pullup et de pulldown faible, vous pouvez ajouter une seule résistance externe à une autre broche GPIO et l'utiliser pour piloter la résistance à un niveau haut ou bas.
#3
+4
placeholder
2014-07-15 01:34:05 UTC
view on stackexchange narkive permalink

Si vous lisez le document - section 3.3, vous voyez qu'il est destiné à être utilisé avec une résistance pull up.

En fait, avec n'importe quel drain ouvert ou tri- signal d'état que vous n'êtes pas censé lire lorsqu'il est en mode à trois états, il est conçu de cette façon afin que le signal puisse être partagé entre plusieurs appareils. Là où cela devient déroutant, c'est que si vous lisez le signal et qu'il est en mode à trois états (et vous ne le savez pas), vous pouvez obtenir des lectures erronées. le meilleur moyen est ensuite d'appliquer un tirage vers le haut faible de sorte que si le signal est dans un état ambigu, alors le signal est lu de manière appropriée. Puisque ce signal est destiné à conduire une LED pour indiquer un état de charge (c'est-à-dire que le niveau de charge est faible), alors avec un pull-up et il lit haut, cela signifie qu'il ne se charge pas.

enter image description here

Le tableau de la section 5.2.1 indique que (pour le MCP73831) qu'une sortie «HIGH Z» indique «Shutdown» ou «No Battery Present», tandis qu'une sortie «H» (high) indique «Charge Complete - Standby».Une résistance pull-up seule ne permettra pas au MCU de faire la différence.
Avec un pull up, les modes «shutdown», «no battery present» et «Charge-complete - standby» correspondent tous à la même lecture de High.Tout cela correspond à l'action "ne rien faire" semble que la fiche technique est cohérente.
@placeholder que la cartographie peut ne pas être souhaitée - la charge concurrente et aucune batterie présente sont des cas extrêmement différents.
#4
+2
Doug Inman
2020-06-30 12:19:29 UTC
view on stackexchange narkive permalink

J'utilise également le MCP73831 et je voulais connecter STAT à un MCU qui n'accepte que 3,3v sur ses broches d'entrée.J'avais également peur de mettre 5v sur une broche GPIO.

Plutôt que d'utiliser un diviseur de tension, j'ai utilisé une deuxième broche GPIO du MCU pour basculer une résistance pull-up / pulldown à l'aide d'un MOSFET à canal P et à canal N (voir le circuit ci-dessous - je pense que cela s'appelle un totempôle ;-)).J'ai ensuite pris STAT et l'ai mis dans un simple onduleur afin que le MCU puisse le lire en toute sécurité (c'est-à-dire ~ STAT entre 0 et 3.3v).

Pour que cela fonctionne, j'ai ensuite pris 2 lectures de la sortie (~ STAT), la première avec CTL low et la seconde avec CTL high.Si les lectures changent, alors STAT doit être flottant. Si vous aviez besoin d'une LED pour afficher l'état de charge, vous pouvez alors contrôler cela à partir du MCU lui-même si vous avez suffisamment de GPIO de rechange :-)

J'espère que cela vous aidera. enter image description here

#5
  0
carveone
2014-07-25 20:42:52 UTC
view on stackexchange narkive permalink

Si je peux ajouter un avertissement à ce message. Le MCP73831 est une puce de chargeur de batterie et donc son Vdd est plus élevé que son Vbat.

enter image description here

En supposant que votre microcontrôleur est connecté à Vbat et que Vdd est fourni par USB, alors Vdd pourrait être au moins 1,5 V plus haut que V ucontroller .

Le problème est que, sur le 73831 qui a des sorties de totem, STAT est appelé Vdd . Ne connectez donc pas STAT directement à une entrée uC. Utilisez quelque chose comme une résistance de 10k entre les deux. Pour un micro PIC, les pinces de diode d'entrée se fixent à son Vcc (consultez la fiche technique pour le courant maximum avant le verrouillage)

En complément - l'année dernière, je suis tombé sur un hack pour lire les entrées hi / low / z c'était pour un PIC mais cela pourrait (ou non) fonctionner pour vous. Quelque chose comme (pseudo code):

  STAT ---- [10k] ------ PICPIN démarre en tant que code PIN d'entrée, set PIN pour envoyer le code PIN vers le code PIN highvalue = lire PIN (en supposant 1 pour haut, 0 pour bas) value = value << 1set PIN à sortieset PIN à inputvalue | = lire PIN  

Ensuite, vous obtenez 0 pour bas, 1 pour Hi-Z et 3 pour haut . YMMV.

J'ai le même problème.Ce que je ne comprends pas, c'est pourquoi cela fonctionnerait avec le 10k et ne détruirait pas l'AVR?C'est un courant limite, mais la tension est toujours de 5 V, ce qui est au-delà de la tension d'E / S max spécifiée VCC + 0,5 V.
La tension sur un côté de la résistance est au-delà des spécifications mais, au niveau de la broche du micro, les diodes de protection d'entrée fixent la tension maximale à VCC + une chute de diode, ce qui est conforme aux spécifications.Si le courant est trop élevé, vous détruirez quand même les diodes.Donc, si vous aviez une résistance de 200V -> 10Mohm -> Pin, le courant serait de 20uA.Je ne ferais pas cela maintenant sans diodes Schottky externes, mais vous voyez l'idée.


Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...