¿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.
integrated-circuit
interface
logic-level
3bdalla
fuente
fuente
Respuestas:
Se puede hacer un traductor de nivel bidireccional muy simple con un solo N-mosfet:
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 )
Solución alternativa de transistores
Artículos relevantes que pueden resultarle útiles:
No pague por traductores de nivel en sistemas que usan múltiples voltajes de suministro de energía - EDN
Consejos y trucos de 3V - Microchip
fuente
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.
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.
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.
fuente
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 )
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
fuente
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:
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.
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.
fuente
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: http://www.ti.com/logic/docs/translationresults.tsp?sectionId=458&voltageIn=5.0&searchDirection=2&voltageOut=3.3#voltintf
fuente
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.
fuente
Puede encontrar un buen resumen de todos los métodos aquí
http://playground.arduino.cc/Main/I2CBi-directionalLevelShifter
fuente
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.
fuente
Una solución simple es usar el SN74LVC244AN. Se puede alimentar con 3V3 y tiene 5V de tolerancia en las entradas.
fuente