Existe-t-il un décalage de niveau bidirectionnel 5v-3.3v?

27

Existe-t-il un circuit intégré qui relie une entrée / sortie 3,3 V à une sortie / entrée 5 V? J'en ai besoin principalement pour un Arduino Due mais s'il y a un circuit intégré bidirectionnel qui fonctionne comme ça, ce serait génial.

Certaines personnes m'ont conseillé d'utiliser les circuits intégrés SN74AHC125 et CD4050, mais je ne comprends pas comment ils fonctionnent ni comment s'interfacer avec eux.

3bdalla
la source
2
Quelle est la gamme de fréquences prévue?
alexan_e
1
Par exemple, supposons que je souhaite connecter un appareil 5V à un Arduino 3,3V. Je ne pouvais pas savoir où connecter la sortie 5V et l'entrée 3,3V. Et qu'en est-il de la sortie d'un 3,3 V d'un arduino par exemple vers un appareil 5 V? Qu'entendez-vous par plage de fréquences?
3bdalla
1
Je ne suis pas sûr d'avoir compris votre point, je n'ai jamais traité de fréquences auparavant, mon but est pour l'électronique simple: |
3bdalla
3
sparkfun a une carte, son appelé un «convertisseur de niveau»
geometrikal
1
Habituellement, j'utilisais des circuits intégrés d'instruments du Texas. Les séries TXS et TXB ont des convertisseurs de tension bidirectionnels (par exemple, le TXS0102 a deux canaux)
frarugi87

Réponses:

44

Un traducteur de niveau bidirectionnel très simple peut être réalisé avec un seul N-mosfet:

entrez la description de l'image ici

Le mosfet utilisé doit être un modèle avec un seuil Vgs bas, de sorte qu'il puisse avoir un Rds-ON (résistance ON) relativement faible au niveau de tension d'entrée prévu (3,3 V dans ce cas).
BSS138 dans un tel exemple, il a une Vgs-th de 1,5 v max et est spécifié pour avoir une faible résistance drain-source avec des tensions Vgs aussi basses que 2,5 v (peut-être légèrement plus bas aussi).

L'exemple illustré utilise la traduction 3.3v <-> 5v mais il peut également fonctionner avec 2.5v <-> 3.3v ou 2.5v <-> 5v, même entre 2.5v <-> 12v. La portée n'est limitée que par les caractéristiques du mosfet utilisé.

Le circuit illustré est basé sur une note d'application de NXP
AN97055 Décaleur de niveau bidirectionnel pour bus I2C et autres systèmes
Nouvelle version plus courte: AN10441 Techniques de décalage de niveau dans la conception de bus I2C

Lorsque L1 est élevé (3v3) ou flottant, R1 maintient le mosfet hors tension, de sorte que R2 tire le côté drain haut (jusqu'à 5v).

Lorsque L1 est tiré bas, le mosfet conduit et le drain devient bas.

Lorsqu'un niveau bas (0) est appliqué à H1, cette tension est transférée à travers la diode du substrat vers le côté source (L1)

Veuillez noter que la taille de la résistance peut affecter la vitesse ( source d'image )

entrez la description de l'image ici

Solution alternative de transistor entrez la description de l'image ici


Articles pertinents que vous pourriez trouver utiles:

alexan_e
la source
11

Étant donné que la question semble orientée vers un circuit intégré qui offre un décalage de niveau bidirectionnel, considérons la famille de pièces Texas Instruments TXB010x: TXB0102 a 2 canaux, TXB0104 a 4 canaux et TXB0108 a 8 canaux.

La caractéristique remarquable de cette famille de circuits intégrés est que la direction du signal est automatiquement détectée, donc une broche de réglage de direction séparée n'est pas nécessaire.

Des vitesses de commutation allant jusqu'à 10 MHz fonctionnent de manière fiable. La vitesse maximale théorique peut être plus élevée - les fiches techniques ne sont pas explicites à ce sujet d'après ce que je peux déterminer.

J'ai un TXB0108 fonctionnant entre un Launchpad MSP430 3,6 Volts et un Arduino Nano 5 Volts, donc le cas d'utilisation de la question est couvert.

Dans le but de l'essayer, Adafruit propose un module préconstruit intégrant le TXB0108 , ce qui vous évite d'avoir à souder une pièce SMD. Il peut y avoir des options similaires pour les 0102 et 0104 d'eux ou d'autres.

Convertisseur de niveau logique bidirectionnel à 8 canaux - TXB0108

Si l'intention est de décaler le niveau d'un signal I2C , qui n'est pas idéalement adapté aux circuits intégrés de la série TXB, une option qui traite spécifiquement de la résistance de pull-up et de la topologie à collecteur ouvert d'I2C est un module comme celui-ci , vendu à nouveau par Adafruit et d'autres fournisseurs.

Décalage de niveau I2C

Ce module utilise des MOSFET BSS138 de la manière décrite dans la réponse de alexan_e . Bien qu'il ne s'agisse pas d'un seul CI comme le demande la question, il remplit peut-être le but recherché. Alternativement, il est simple de construire ce circuit vous-même à l'aide de MOSFET.

Anindo Ghosh
la source
+1 Belle trouvaille! ... Votre lien vers le TXB0102 est en fait vers le TXS0102. Je n'ai pas déterminé la différence, mais cela est noté dans la fiche technique du TXS0102: "Son application cible principale est d'interfacer avec les pilotes à drain ouvert sur les E / S de données telles que I2C ou 1 fil, où les données est bidirectionnel et aucun signal de commande n'est disponible. Le TXS0102 peut également être utilisé dans des applications où un pilote push-pull est connecté aux E / S de données, mais le TXB0102 pourrait être une meilleure option pour de telles applications push-pull. " Voici le lien réel vers TXB0102
Tut
@Tut Oups, dérapage, merci. Mes propres besoins sont satisfaits par le TXB0108, donc les autres sont plus "agréables à savoir" pour moi. :-)
Anindo Ghosh
10

Une autre chose que vous devriez considérer est de savoir si vous avez réellement besoin d'un changement de niveau. De nombreuses puces ont des broches d'entrée tolérantes à 5 V même lorsqu'elles fonctionnent à une tension inférieure à 3,3. Le CPU atmega interprète également tout ce qui est supérieur à 0,6 * Vcc ou 3V pour un arduino comme un niveau logique élevé, donc un signal de 3,3 V peut directement piloter une broche arduino sans changement de niveau.

En supposant que vous utilisez un arduino 5V et que vous devez parler à une partie 3,3V, si la partie a des entrées tolérantes 5V (beaucoup le font de nos jours), connectez-les simplement et cela fonctionnera. Si votre ligne bidirectionnelle est une conception à collecteur ouvert, comme i2c où les appareils ne tirent que la ligne basse, attachez simplement les résistances de traction à 3,3 V au lieu de 5 V et les choses fonctionneront simplement.

Sinon, tout ce que vous devez faire est de vous assurer que la ligne ne dépasse pas 3,3 V, vous pouvez le faire avec une résistance et un zener, mettre une résistance sur la ligne Arduino puis un Zener pour fixer la tension à 3,3 V. (source: repetae.net )pince de résistance zener

Vous pourriez être tenté de vivre dangereusement et d'utiliser simplement la résistance 10k et rien d'autre. La raison pour laquelle cela fonctionne (parfois!) Est qu'il y a une diode de serrage à l'intérieur de la puce de réception qui dérive la tension excessive à vcc ou 3,3 V. Cette diode s'éteindra si vous essayez de tirer toute la ligne 3,3 V jusqu'à 5 V à travers elle (en plus des dommages causés en tirant cette ligne à 5 V), mais avec la résistance, pas beaucoup de courant ne circulera et en supposant que votre ligne 3,3 V a une charge non triviale, cela ne changera pas substantiellement le niveau de votre ligne électrique, mais il y a beaucoup de mises en garde. Donc, en général, ne faites pas cela sauf si vous avez un bus 3,3 V local et isolé et que vous ne pouvez vraiment pas épargner les deux cents supplémentaires pour le zener. Je ne le mentionne que parce que vous le verrez dans les schémas des panneaux de dérivation bon marché que vous obtenez sur ebay et pourriez être tenté de le copier, ne le laissez pas passer la planche à pain dans une conception de production. :)

Edit vient de remarquer que vous utilisiez le nouvel arduino 3.3V, alors inversez simplement ce que j'ai dit ci-dessus, l'astuce de résistance zener fonctionnera toujours bien qu'apparemment certaines des lignes d'E / S sur la raison puissent être tolérantes à 5v, il semble y avoir un désaccord sur les forums. Le teensy 3.1 est également une jolie petite carte ARM qui a toutes les broches tolérantes 5V et est moins de la moitié du coût de l'IMHO dû et mieux conçu http://www.pjrc.com/store/teensy31.html

John Meacham
la source
3

Du département de solutions bon marché, le FET (de la réponse acceptée basée sur la note NXP) peut être remplacé par une diode BJT et Schottky comme dans Silicon Labs AN883 . Leur schéma est un peu compliqué avec d'autres choses, j'ai donc extrait le bit essentiel ici et l'ai réorienté pour qu'il ressemble à la réponse acceptée pour une comparaison facile des deux schémas:

entrez la description de l'image ici

Le BJT effectue la traduction uniquement dans le sens bas -> haut, exactement comme indiqué dans Décalage de niveau à transistor simple . Le Schottky remplace la diode du corps du FET pour la traduction haut-> bas.

Ci-dessous se trouve leur zoom agrandi pour un traducteur 3,3 <-> 1,8 V; ils proposent également ce schéma pour une traduction de 5 <-> 1,8V, etc. Lors de la traduction de 3,3 <-> 1,8V, un MMBT3904 n'avait qu'une chute de 150mV (saturation). La diode BAS40 avait une chute de 350 mV dans le sens opposé. Ces décalages affectent (évidemment) la sortie de niveau logique bas du côté respectivement bas et haut du traducteur.

entrez la description de l'image ici

Ils avaient de beaux appareils CMOS des deux côtés, donc l'impédance d'entrée n'était pas vraiment un problème. Il n'y avait pas de dégradation / décalage visible des marges logiquement élevées dans leur trace 1V / div, donc je n'ai pas pris la peine de l'inclure ici. L'impédance d'entrée de leurs appareils était d'au moins 1Mohm de ce que je peux dire d'une simulation. Les marges logiques élevées commencent à se dégrader en dessous de 100K d'impédance d'entrée environ.

En outre, ils recommandent ce traducteur basé sur BJT uniquement jusqu'à 300 kHz ou plus.

Je ne sais pas laquelle de ces solutions est moins chère dans la pratique, FET ou Schottky + BJT ... mais celle-ci a certainement besoin de plus de pièces ... à moins que vous n'utilisiez l'un de ces packages diode + transistor, qui existent, par exemple PZMT1101 . Mais vous avez également besoin de 3 résistances.

Pétiller
la source
Quelle est la consommation de courant / consommation de courant attendue de cette méthode par rapport à la méthode basée sur le FET?
KyranF
@ KyranF: Je ne les ai pas comparés, mais si cela vous inquiète, ce ne sera pas rose à cause des tractions. Les versions CMOS à faible puissance ressemblent à m.eet.com/media/1103155/Fig2.gif C'est de eetimes.com/document.asp?doc_id=1231111 qui est un bon article comparant différentes approches.
Fizz
Merci pour les liens. Je soupçonne que l'approche BJT serait une puissance très élevée en comparaison pendant les périodes où la base est saturée. La charge constante des résistances de tirage est en effet inquiétante pour n'importe quelle conception, en particulier les conceptions à piles.
KyranF
@ KyranF: Je l'ai regardé en simulation: le transistor et la diode dissipent uW de puissance tandis que les résistances dissipent mW. En fait le BJT dissipe environ 100uW, la diode 1uW. Le FET ou le BJT n'auront pas d'importance ici ... les résistances ayant un chemin vers la terre pour la dissipation statique sont ce qui compte. C'est avec des impédances d'entrée de 1Meg.
Fizz
@KyranF: J'ai essayé d'utiliser le modèle ON BSS138LT1, mais cela donne une disspation de puissance moyenne négative dans LTspice (de -63uW) ... donc je pense que leur modèle peut être problématique. Déchets dedans ... déchets dehors. Il a également commencé à osciller (à une fréquence beaucoup plus élevée que le signal) lorsqu'il était entraîné du côté haut. C'est un modèle subckt plutôt qu'un simple modèle MOS, il est donc difficile de comprendre ce qui se passe. [suite]
Fizz
2

De plus, si vous recherchez une excellente isolation électrique ainsi qu'une fonctionnalité de décalage de niveau bidirectionnel, je recommanderais ISO1541 . Il est assez bon marché et offre une bonne protection grâce à l'isolement.

dr3patel
la source
1

La solution la plus simple est de faire fonctionner tous vos circuits à 3,3 V. Les puces HC fonctionneront avec plaisir à ce niveau.

Lorsque cela n'est pas possible, vous pouvez rendre les choses beaucoup plus simples lorsque vous vous limitez à une seule direction. Une puce HCT à 5 V acceptera très bien les niveaux de 3,3 V, et un simple diviseur à deux résistances peut réduire de 5 V à 3,3 V. Certains uC sont tolérants à 5 V sur leurs broches, vous n'avez donc pas besoin du diviseur. Et si vous mettez des tractions 5V sur les broches et que vous basculez entre la masse et l'ouverture (= entrée), vous avez une sortie 0-5V passable.

Pour coupler des bus à collecteur ouvert (I2C, dallas 1 fil), l'astuce BS138 est une solution. Il y a de petites puces pour I2C qui mettent les deux transistors FET dans un seul boîtier. (PCA9306 etc.)

Mais si vous voulez vraiment une traduction de niveau bi-drection: de telles puces existent, vérifiez par exemple TXB0108.

Wouter van Ooijen
la source
-4

Une solution simple consiste à utiliser le SN74LVC244AN. Peut être alimenté avec 3V3 et est 5V tollerant sur les entrées.

Grad
la source
5
Ce n'est pas bidirectionnel.
Matt Young
Non, mais le 74LVC4245 l'est.
Bregalad