33 votos

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

¿Hay algún IC que interconecte cualquier entrada/salida de 3,3V con 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 aconsejaron usar los IC SN74AHC125 y CD4050, pero no entiendo cómo funcionan o cómo interactuar con ellos.

0 votos

Será mejor que proporcione información sobre por qué o cómo no entiendes cómo funcionan o cómo interactuar con ellos...

2 votos

¿Cuál es la gama de frecuencias prevista?

1 votos

Por ejemplo supongamos que quiero conectar un dispositivo de 5V a un arduino de 3,3V. No he podido 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? ¿A qué te refieres con rango de frecuencias?

49voto

alexan_e Puntos 8256

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

enter image description here

El mosfet utilizado debe ser un modelo con un umbral Vgs bajo, para que pueda tener una Rds-ON (resistencia de encendido) relativamente baja al nivel de tensión de entrada previsto (3,3v en este caso).
BSS138 en uno de estos ejemplos, tiene un Vgs-th de 1,5v como máximo y está especificado para tener una baja resistencia de drenaje-fuente con voltajes Vgs tan bajos como 2,5v (quizás algo más bajos también).

El ejemplo mostrado 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 sólo 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 I2C-bus y otros sistemas
Nueva versión más corta: AN10441 Técnicas de cambio de nivel en el diseño del bus I2C

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

Cuando L1 se tira a bajo entonces 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 a la velocidad ( fuente de la imagen )

enter image description here

Alternativa solución de transistores enter image description here


Artículos relevantes que pueden ser útiles:

13voto

userid53 Puntos 116

Dado que la pregunta parece orientada a un CI que proporcione 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 más destacada de esta familia de circuitos integrados es que la dirección de la señal se detecta automáticamente, por lo que no es necesario un pin de ajuste de dirección independiente.

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 de lo que puedo determinar.

Tengo un TXB0108 trabajando entre un MSP430 Launchpad de 3,6 voltios y un Arduino Nano de 5 voltios, así que el caso de uso de la pregunta está cubierto.

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

8-channel Bi-directional Logic Level Converter - TXB0108

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

I2C level shifter

Este módulo utiliza MOSFET BSS138 s en la forma descrita en el respuesta de alexan_e . Aunque no se trata de un CI único como el que pide la pregunta, tal vez cumpla el propósito previsto. Como alternativa, es sencillo construir este circuito usted mismo utilizando MOSFETs.

0 votos

+1 ¡Buen hallazgo! ... Tu enlace al TXB0102 es en realidad al TXS0102. No he determinado la diferencia, pero esto se señala en la hoja de datos del TXS0102: "Su uso principal de aplicación es para la interconexión con controladores de drenaje abierto en las E/S de datos, como I2C o 1-wire, donde los datos son bidireccionales y no hay ninguna señal de control disponible. El TXS0102 también puede utilizarse en aplicaciones en las que se conecta un driver push-pull a las E/S de datos, pero el TXB0102 podría ser una mejor opción para dichas aplicaciones push-pull." Aquí está el enlace real a TXB0102

0 votos

@Tut Ups, lapsus, gracias. Mis propias necesidades se satisfacen con el TXB0108, así que los otros son más bien un "nice to know" para mí. :-)

11voto

Vicky Puntos 1

Otra cosa que deberías considerar es si realmente necesitas el cambio de nivel. Muchos chips tienen pines de entrada tolerantes a 5V incluso cuando funcionan a un voltaje inferior como el de 3,3. La CPU atmega también interpreta cualquier cosa por encima de 0,6*Vcc o 3V para un arduino como un alto lógico, por lo que una señal de 3,3V puede conducir directamente un pin del arduino sin cambio de nivel.

Asumiendo que estás usando un arduino de 5V y necesitas hablar con una parte de 3.3V, si la parte tiene entradas tolerantes a 5V (muchas lo hacen hoy en día), simplemente conéctalas y funcionará. Si su línea bidireccional es un diseño de colector abierto, como i2c, donde los dispositivos sólo tiran de la línea baja, entonces simplemente conecte las resistencias pull up a 3,3V en lugar de 5V y las cosas simplemente funcionarán.

Si no, todo lo que tienes que hacer es asegurarte de que la línea no supera los 3,3V, puedes hacerlo con una resistencia y un zener, pon una resistencia en la línea del arduino y luego un zener para sujetar la tensión a 3,3V. zener resistor clamp
(fuente: <a href="http://repetae.net/zenerresistor.png" rel="noreferrer">repetición.net </a>)

Puedes tener la tentación de vivir peligrosamente y sólo 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 intentas llevar toda la línea de 3,3V a 5V a través de él (además de cualquier daño causado por llevar esa línea a 5V), sin embargo con la resistencia no fluirá mucha corriente y asumiendo que tu línea de 3,3V tiene una carga no trivial en ella no cambiará el nivel de tu línea de alimentación sustancialmente pero hay muchas advertencias. Así que, en general, no hagas esto a menos que tengas un bus local y aislado de 3,3V y realmente no puedas prescindir de los dos centavos extra para el zener. Sólo lo menciono porque lo verás en los esquemas de las placas breakout baratas que consigues en ebay y puede que te sientas tentado a copiarlo, sólo que no dejes que se cuele en la protoboard en un diseño de producción :)

Editar Acabo de notar que estabas usando el nuevo arduino de 3.3V, así que solo invierte lo que dije arriba, el truco de la resistencia zener seguirá funcionando aunque aparentemente algunas de las líneas i/o en el debido pueden ser tolerantes a 5v, parece que hay algún desacuerdo en los foros. El teensy 3.1 es también una pequeña placa ARM que tiene todos los pines tolerantes a 5V y es menos de la mitad del costo de la due y mejor diseñado IMHO http://www.pjrc.com/store/teensy31.html

2voto

Lazarus Puntos 143

Bueno, hay muchos. Tienes que especificar cuál es tu frecuencia máxima, cuántos bits necesitas, etc. En resumen, puedes utilizar cualquier CI traductor de nivel de tensión. Texas Instruments tiene una herramienta de selección para el mismo propósito: http://www.ti.com/logic/docs/translationresults.tsp?sectionId=458&voltageIn=5.0&searchDirection=2&voltageOut=3.3#voltintf

2voto

UmaSankar Puntos 21

Puede encontrar un buen resumen de todos los métodos aquí

http://playground.arduino.cc/Main/I2CBi-directionalLevelShifter

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X