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.
Réponses:
Un traducteur de niveau bidirectionnel très simple peut être réalisé avec un seul N-mosfet:
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 )
Solution alternative de transistor
Articles pertinents que vous pourriez trouver utiles:
Ne payez pas pour les traducteurs de niveau dans les systèmes utilisant plusieurs tensions d'alimentation - EDN
3V Tips 'n Tricks - Microchip
la source
É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.
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.
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.
la source
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 )
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
la source
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:
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.
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.
la source
Eh bien, il y en a beaucoup. Vous devez spécifier quelle est votre fréquence maximale, combien de bits vous avez besoin, etc. En bref, vous pouvez utiliser n'importe quel traducteur de niveau de tension IC. Texas Instruments a un outil de sélection soigné dans le même but: http://www.ti.com/logic/docs/translationresults.tsp?sectionId=458&voltageIn=5.0&searchDirection=2&voltageOut=3.3#voltintf
la source
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.
la source
Vous pouvez trouver un bon résumé de toutes les méthodes ici
http://playground.arduino.cc/Main/I2CBi-directionalLevelShifter
la source
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.
la source
Une solution simple consiste à utiliser le SN74LVC244AN. Peut être alimenté avec 3V3 et est 5V tollerant sur les entrées.
la source