¿Hay alguna palanca de cambio de nivel bidireccional 5v-3.3v?

27

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

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

3bdalla
fuente
2
¿Cuál es el rango de frecuencia previsto?
alexan_e
1
Por ejemplo, suponga que quiero conectar un dispositivo de 5V a un arduino de 3.3V. No pude averiguar dónde conectar la salida de 5V y la entrada de 3.3V. ¿Y qué pasa con la salida de 3.3V de un arduino, por ejemplo, a un dispositivo de 5V? ¿Qué quieres decir con rango de frecuencia?
3bdalla
1
No estoy seguro de haber entendido su punto, no he tratado con frecuencias antes, mi propósito es la electrónica simple: |
3bdalla
3
sparkfun tiene una placa, se llama 'convertidor de nivel'
geometrikal
1
Por lo general, usé circuitos integrados de instrumentos de Texas. Las series TXS y TXB tienen traductores de voltaje bidireccionales (por ejemplo, TXS0102 tiene dos canales)
frarugi87

Respuestas:

44

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

ingrese la descripción de la imagen aquí

El mosfet utilizado debe ser un modelo con un umbral Vgs bajo, de modo que pueda tener un Rds-ON (resistencia ON) relativamente bajo al nivel de voltaje de entrada previsto (3.3v en este caso).
BSS138 en un ejemplo de este tipo, tiene un Vgs-th de 1.5v max y se especifica que tiene una baja resistencia de la fuente de drenaje con voltajes Vgs tan bajos como 2.5v (quizás también un poco más bajo).

El ejemplo que se muestra utiliza la traducción 3.3v <-> 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 Cambiador de nivel bidireccional para bus I2C y otros sistemas
Nueva versión más corta: AN10441 Técnicas de cambio de nivel en diseño de bus I2C

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

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

Cuando se aplica un nivel bajo (0) a H1, entonces ese voltaje 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 la imagen )

ingrese la descripción de la imagen aquí

Solución alternativa de transistores ingrese la descripción de la imagen aquí


Artículos relevantes que pueden resultarle útiles:

alexan_e
fuente
11

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

La característica sobresaliente 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 manera confiable. La velocidad máxima teórica puede ser mayor: las hojas de datos no son explícitas sobre esto a partir de lo que puedo determinar.

Tengo un TXB0108 que funciona entre un Launchpad MSP430 de 3.6 voltios y un Arduino Nano de 5 voltios, por lo que el caso de uso de la pregunta está cubierto.

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

Convertidor de nivel lógico bidireccional de 8 canales - TXB0108

Si la intención es cambiar de nivel una señal I2C , que no es ideal para los circuitos integrados de la serie TXB, una opción que aborda específicamente la resistencia pull-up y la topología de colector abierto de I2C es un módulo como este , nuevamente vendido por Adafruit y otros vendedores.

Desplazador de nivel I2C

Este módulo utiliza MOSFET BSS138 de la manera descrita en la respuesta de alexan_e . Si bien no se trata de un solo CI, como se hace en la pregunta, tal vez cumple con el propósito previsto. Alternativamente, es simple construir este circuito usted mismo usando MOSFET.

Anindo Ghosh
fuente
+1 ¡Buen hallazgo! ... Su enlace a TXB0102 es en realidad al TXS0102. No he determinado la diferencia, pero esto se observa en la hoja de datos del TXS0102: "Su uso principal de la aplicación de destino es para interactuar con controladores de drenaje abierto en las E / S de datos como I2C o 1 cable, donde los datos es bidireccional y no hay señal de control disponible. El TXS0102 también se puede usar en aplicaciones donde un controlador push-pull está conectado a las E / S de datos, pero el TXB0102 podría ser una mejor opción para tales aplicaciones push-pull ". Aquí está el enlace real a TXB0102
Tut
@Tut Oops, deslizamiento, gracias. El TXB0108 satisface mis propias necesidades, por lo que los otros son más "agradables de conocer" para mí. :-)
Anindo Ghosh
10

Otra cosa que debe considerar es si realmente necesita un cambio de nivel. Muchos chips tienen pines de entrada tolerantes a 5V incluso cuando funcionan a un voltaje más bajo, como 3.3. La CPU atmega también interpreta cualquier cosa por encima de 0.6 * Vcc o 3V para un arduino como un nivel lógico alto, por lo que una señal de 3.3V puede conducir directamente un pin arduino sin cambio de nivel.

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

De lo contrario, todo lo que necesita hacer es asegurarse de que la línea no supere los 3.3V, puede hacerlo con una resistencia y Zener, colocar una resistencia en la línea Arduino y luego un Zener para sujetar el voltaje a 3.3V. (fuente: repetae.net )abrazadera de resistencia zener

Puede sentirse tentado a vivir peligrosamente y simplemente usar la resistencia de 10k y nada más. La razón de que esto (¡a veces!) Funcione 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 pasar toda la línea de 3.3V hasta 5V a través de él (además de cualquier daño causado por tirar de esa línea a 5V), sin embargo, con la resistencia no fluirá mucha corriente y asumiendo su línea de 3.3V tiene una carga no trivial, no cambiará sustancialmente el nivel de su línea de alimentación, pero hay muchas advertencias. Por lo tanto, en general, no haga esto a menos que tenga un bus local aislado de 3.3V y realmente no pueda ahorrar los dos centavos adicionales para el zener. Solo lo menciono porque lo verán en esquemas para tableros de ruptura muy baratos que obtienes en ebay y podrías tener la tentación de copiarlo, simplemente no dejes que se cuela más allá del tablero en un diseño de producción. :)

Edit se dio cuenta de que estaba usando el nuevo arduino de 3.3V, así que simplemente invierta lo que dije anteriormente, el truco de la resistencia zener todavía funcionará, aunque aparentemente algunas de las líneas de E / S en el debido pueden ser 5v tolerantes, parece haber algún desacuerdo en los foros El teensy 3.1 también es una pequeña placa ARM que tiene todos los pines tolerantes a 5V y es menos de la mitad del costo del IMHO debido y mejor diseñado http://www.pjrc.com/store/teensy31.html

John Meacham
fuente
3

Desde el departamento de soluciones baratas [er?], El FET (de la respuesta aceptada basada en la nota de aplicación NXP) puede reemplazarse con un diodo BJT y 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:

ingrese la descripción de la imagen aquí

El BJT realiza la traducción en la dirección baja-> alta solo ... exactamente como se discutió en el cambio de nivel de un solo transistor . El Schottky reemplaza el diodo del cuerpo del FET para la traducción alta-> baja.

A continuación se muestra su medición de alcance ampliada para un traductor 3.3 <-> 1.8V; También proponen este esquema para la traducción de 5 <-> 1.8V, etc. El diodo BAS40 tenía una caída de 350 mV en la dirección opuesta. Estas compensaciones afectan (obviamente) a la salida de nivel lógico bajo en el lado bajo y respectivamente alto del traductor.

ingrese la descripción de la imagen aquí

Tenían buenos dispositivos CMOS en ambos lados, por lo que la impedancia de entrada no era un gran problema. No hubo degradación / compensación visible de los márgenes lógicamente altos en su trazo 1V / div, por lo que no me he molestado en incluirlo aquí. La impedancia de entrada de sus dispositivos era de al menos 1Mohm de lo que puedo decir de una simulación. Los márgenes lógicamente altos comienzan a degradarse por debajo de la impedancia de entrada de 100K más o menos.

Además, recomiendan este traductor basado en BJT solo hasta 300KHz más o menos.

No estoy seguro de cuál de estas soluciones es más barata en la práctica, FET o Schottky + BJT ... pero esta ciertamente necesita más partes ... a menos que use uno de esos paquetes de diodos + transistores, que existen, por ejemplo, PZMT1101 . Pero también necesitas 3 resistencias.

Efervescencia
fuente
¿Cuál es el consumo de energía / consumo de corriente esperado de este método en comparación con el método basado en FET?
KyranF
@KyranF: No los he comparado, pero si te preocupa eso, tampoco será color de rosa debido a las dominadas. Las versiones CMOS de baja potencia se parecen a m.eet.com/media/1103155/Fig2.gif. Eso es de eetimes.com/document.asp?doc_id=1231111, que es un buen artículo que compara varios enfoques.
Fizz
Gracias por los enlaces. Sospecho que el enfoque BJT sería de muy alta potencia en comparación durante los tiempos en que la base está saturada. La carga constante de resistencias pull up es realmente preocupante para cualquier diseño, especialmente los diseños que funcionan con baterías.
KyranF
@KyranF: Lo he visto en simulación: el transistor y el diodo disipan uW de potencia mientras que las resistencias disipan mW. En realidad, el BJT se disipa alrededor de 100uW, el diodo 1uW. FET o BJT no importan aquí ... lo que importa son las resistencias que tienen camino a tierra para la disipación estática. Esto es con impedancias de entrada de 1 Meg.
Fizz
@KyranF: Intenté usar el modelo BSS138LT1 de ON, pero eso da una disipación de potencia promedio negativa en LTspice (de -63uW) ... así que creo que su modelo puede ser problemático. Basura dentro basura fuera. También comenzó a oscilar (a una frecuencia mucho más alta que la señal) cuando se maneja desde el lado alto. Es un modelo subckt en lugar de un simple modelo MOS, por lo que es difícil darse cuenta de lo que está sucediendo. [continuación]
Fizz
2

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

dr3patel
fuente
1

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

Cuando eso no es posible, puede hacer las cosas mucho más simples cuando se restringe a una sola dirección. Un chip HCT a 5V aceptará niveles de 3.3V perfectamente, 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 coloca pullups de 5V en los pines y cambia entre tierra y abierto (= entrada), tiene 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 colocan los dos FET en una carcasa. (PCA9306 etc.)

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

Wouter van Ooijen
fuente
-4

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

Grad
fuente
55
Eso no es bidireccional.
Matt Young
No, pero el 74LVC4245 es.
Bregalad