¿Hay algún cambio de nivel bidireccional 5v-3.3v?

24

¿Hay algún IC que interconecte una entrada / salida de 3.3V a una salida / entrada de 5V? Lo necesito principalmente para un Arduino Due, pero si hay algún IC bidireccional que funcione así, sería genial.

Algunas personas me recomendaron que usara los circuitos integrados SN74AHC125 y CD4050, pero no entiendo cómo funcionan o cómo interactuar con ellos.

    
pregunta 3bdalla

9 respuestas

40

Se puede hacer un traductor de nivel bidireccional muy simple con un solo N-mosfet:

ElmosfetutilizadodebeserunmodeloconunumbraldeVgsbajo,demodoquepuedatenerunRds-ON(resistenciaON)relativamentebajoenelniveldevoltajedeentradadeseado(3.3venestecaso).
BSS138 en uno de estos ejemplos, tiene un Vgs-th de 1.5v max y se especifica que tiene un baja resistencia de la fuente de drenaje con voltajes Vgs tan bajos como 2.5v (quizás también un poco más bajos).

El ejemplo mostrado utiliza 3.3v < - > Traducción de 5v, pero también puede funcionar con 2.5v < - > 3.3v o 2.5v < - > 5v, incluso entre 2.5v < - > 12v. El rango solo está limitado por las características del mosfet utilizado.

El circuito mostrado se basa en una nota de aplicación de NXP
AN97055 Palanca de cambios bidireccional de nivel para I2C-bus y otros sistemas
Nueva versión más corta: AN10441 Técnicas de cambio de nivel en el diseño de bus I2C.

Cuando L1 está alto (3v3) o flotante, R1 mantiene el mosfet fuera, por lo que R2 saca el lado de drenaje alto (a 5v).

Cuando se baja L1, el mosfet conduce y el drenaje se vuelve bajo.

Cuando se aplica un nivel bajo (0) a H1, esa tensión se transfiere a través del diodo del sustrato al lado de la fuente (L1)

Tenga en cuenta que el tamaño de la resistencia puede afectar la velocidad ( fuente de imagen )

Alternativa solución de transistor

Artículosrelevantesquepuedenresultarteútiles:

respondido por el alexan_e
10

Otra cosa que debes considerar es si realmente necesitas un cambio de nivel. Muchos chips tienen pines de entrada tolerantes a 5 V, incluso cuando se ejecutan a un voltaje menor, como 3.3. La CPU atmega también interpreta cualquier cosa por encima de 0.6 * Vcc o 3V para un arduino como una lógica alta, por lo que una señal de 3.3V puede conducir directamente un pin arduino sin cambio de nivel.

Suponiendo que está usando un arduino de 5V y necesita hablar con una parte de 3.3V, si la parte tiene entradas tolerantes de 5V (muchos lo hacen hoy en día), simplemente conéctelos y funcionará. Si su línea bidireccional es un diseño de colector abierto, como i2c, donde los dispositivos solo bajan la línea, simplemente conecte las resistencias de extracción a 3.3V en lugar de 5V y las cosas simplemente funcionarán.

De lo contrario, todo lo que debe hacer es asegurarse de que la línea no supere los 3,3 V, puede hacerlo con una resistencia y un zener, colocar una resistencia en la línea arduino y luego un zener para fijar la tensión a 3,3V. abrazadera de resistencia Zener http://repetae.net/zenerresistor.png

Puede sentirse tentado a vivir peligrosamente y simplemente usar la resistencia de 10k y nada más. La razón por la que esto (a veces!) Funciona es que hay un diodo de sujeción dentro del chip receptor que desvía el exceso de voltaje a vcc o 3.3V. Este diodo se quemará si intenta arrastrar toda la línea de 3.3V hasta 5V a través de ella (además del daño causado al tirar esa línea a 5V), sin embargo, con la resistencia no fluirá mucha corriente y supondrá su línea de 3.3V tiene una carga no trivial, no cambiará sustancialmente el nivel de su línea eléctrica, pero hay muchas advertencias. Entonces, en general, no haga esto a menos que tenga un bus local de 3.3 V aislado y realmente no pueda ahorrar los dos centavos adicionales para el Zener. Solo lo menciono porque lo verá en los esquemas de los tableros de ruptura baratos que obtiene en ebay y podría tener la tentación de copiarlo, pero no deje que se deslice más allá de la placa de pruebas hacia un diseño de producción. :)

Editar acabo de notar que estabas usando el nuevo arduino de 3.3 V, así que simplemente invierte lo que dije anteriormente, el truco de resistencia Zener seguirá funcionando aunque, aparentemente, algunas de las líneas de entrada / salida pueden vencer. Sea tolerante a 5v, parece haber algún desacuerdo en los foros. El teensy 3.1 es también una bonita y pequeña placa ARM que tiene todos los pines tolerantes a 5 V y es menos de la mitad del costo de la IMHO adecuada y mejor diseñada enlace

    
respondido por el John Meacham
9

Dado que la pregunta parece orientada hacia un IC que proporciona cambio de nivel bidireccional, considere la familia de partes TXB010x de Texas Instruments: TXB0102 tiene 2 canales, TXB0104 tiene 4 canales, y TXB0108 tiene 8 canales.

La característica destacada de esta familia de circuitos integrados es que la dirección de la señal se detecta automáticamente, por lo que no se necesita un pin de configuración de dirección separado.

Las velocidades de conmutación de hasta 10 MHz funcionan de forma fiable. La velocidad máxima teórica puede ser más alta; las hojas de datos no son explícitas sobre esto por lo que puedo determinar.

Tengo un TXB0108 trabajando entre un Launchpad MSP430 de 3.6 voltios y un Arduino Nano de 5 voltios, por lo que se cubre el caso de uso de la pregunta.

A los efectos de probarlo, Adafruit ofrece un módulo precompilado que incorpora el TXB0108 , que le ahorra la molestia de soldadura de una pieza SMD. Puede haber opciones similares para el 0102 y 0104 de ellos u otros.

SilaintenciónescambiardenivelunaseñalI2C,quenoesidealparalosCIdelaserieTXB,unaopciónquetrataespecíficamentelaresistenciadepull-upylatopologíadecolectorabiertodeI2Cesun módulo como este , nuevamente vendido por Adafruit y otros proveedores.

Estemóduloutiliza MOSFET BSS138 s de la forma descrita en answer by alexan_e . Si bien no es un solo IC como el que pregunta la pregunta, tal vez cumpla con el propósito previsto. Alternativamente, es simple construir este circuito usted mismo usando MOSFET.

    
respondido por el Anindo Ghosh
3

Desde el departamento de soluciones baratas [er?], el FET (de la respuesta aceptada basada en la nota NXP) se puede reemplazar con un BJT y un diodo Schottky como en Silicon Labs AN883 . Su esquema es un poco complicado con otras cosas, así que extraje el bit esencial aquí y lo reorienté para que parezca en la respuesta aceptada para una fácil comparación de los dos esquemas:

ElBJTrealizalatraducciónenladirecciónbajayaltasolamente...exactamentecomoseexplicaen solo transistor nivel arriba palanca de cambios . El Schottky reemplaza el diodo del cuerpo del FET para la traducción alta y baja.

A continuación se muestra su medida de alcance ampliada para un traductor 3.3 < - > 1.8V; también proponen este esquema para la traducción 5 < - > 1.8V, etc. Al realizar la traducción 3.3 < - > 1.8V, un MMBT3904 tuvo una caída de solo 150mV (saturación). El diodo BAS40 tuvo una caída de 350mV en la dirección opuesta. Estas compensaciones afectan (obviamente) la salida de nivel lógico bajo en el lado bajo y en el lado superior del traductor.

TeníanbuenosdispositivosCMOSenamboslados,porloquelaimpedanciadeentradanoeraungranproblema.Nohubounadegradación/desplazamientovisibledelosmárgenesdelógicaaltaensutraza1V/div,porloquenomemolestéenincluirlaaquí.Laimpedanciadeentradadesusdispositivosfuedealmenos1Mohmporloquepuedodecirdeunasimulación.Losmárgenesdealtalógicacomienzanadegradarsepordebajode100Kdeimpedanciadeentradaomenos.

Además,recomiendanestetraductorbasadoenBJTsolohasta300KHzomenos.

Noestoysegurodecuáldeestassolucionesesmásbarataenlapráctica,FEToSchottky+BJT...peroestaciertamentenecesitamáspartes...amenosqueuseunodeesospaquetesdediodo+transistor,quesíexisten,p.ej PZMT1101 . Pero también necesitas 3 resistencias.

    
respondido por el Fizz
2

Bueno, hay muchos. Debe especificar cuál es su frecuencia máxima, cuántos bits necesita, etc. En resumen, puede usar cualquier IC de traductor de nivel de voltaje. Texas Instruments tiene una herramienta de selección ordenada para el mismo propósito: enlace

    
respondido por el Ali Alavi
2

Además, si está buscando un excelente aislamiento eléctrico así como una función de cambio de nivel bidireccional, recomendaría ISO1541 . Es bastante barato y proporciona una buena protección a través del aislamiento.

    
respondido por el dr3patel
1

Aquí puedes encontrar un buen resumen de todos los métodos

enlace

    
respondido por el UmaSankar
1

La solución más simple es ejecutar todos sus circuitos a 3.3V. Los chips HC se ejecutarán a ese nivel.

Cuando eso no es posible, puedes hacer las cosas mucho más simples cuando te restringes en una dirección. Un chip HCT a 5V aceptará niveles de 3.3V muy bien, y un simple divisor de dos resistencias puede reducir 5V a 3.3V. Algunos uC son tolerantes a 5V en sus pines, por lo que no necesita el divisor. Y si pones pullups de 5V en los pines, y cambias entre tierra y abierto (= entrada), tienes una salida pasable de 0-5V.

Para acoplar buses de colector abierto (I2C, dallas 1-wire), el truco BS138 es un camino a seguir. Hay pequeños chips para I2C que ponen los dos FET en una carcasa. (PCA9306 etc.)

Pero si realmente desea una traducción de nivel de bifurcación: tales chips existen, verifique, por ejemplo, TXB0108.

    
respondido por el Wouter van Ooijen
-4

Una solución simple es usar el SN74LVC244AN. Se puede alimentar con 3V3 y tiene 5V de peaje en las entradas.

    
respondido por el Grad

Lea otras preguntas en las etiquetas