Solución para traducción de nivel (3.3V Arduino Due <-> 5V shield)

La nueva placa Arduino Due tiene su microcontrolador funcionando a 3,3 V, pero lamentablemente la mayoría de los escudos (placas) adicionales estándar de Arduino funcionan a 5 V, por lo que sus señales de E/S están en diferentes niveles lógicos.

El número de señales es de aproximadamente 20 e incluye:

  • líneas digitales estándar (algunas con capacidad de interrupción de hardware)
  • E/S analógica
  • Líneas UART serie
  • así como señales SPI e I2C

Ahora, me gustaría agregar un escudo intermedio (placa) para facilitar la compatibilidad entre la placa Arduino Due de 3.3V y todas las señales de cualquier escudo de 5V dado. Esta placa intermedia necesitaría permitir la interfaz entre las señales de 3,3 V y las señales de 5 V (es decir, en ambos sentidos).

¿Cuál es la mejor manera de crear una traducción de nivel bidireccional para un caso como el anterior? Aquí, por "mejor", solo me refiero a sencillo, económico y funcionaría sin problemas en los distintos tipos de escudos y señales.

Basado en mi investigación de este tipo de cambio de nivel hasta el momento, las opciones disponibles parecen ser:

  • Un conjunto de diodos que crean una caída de voltaje (pero esto sería unidireccional)
  • Un conjunto de divisores resistivos (nuevamente unidireccionales)
  • ¿Un chip de cambio de nivel especializado?...
Los divisores resistivos también son de naturaleza unidireccional. Los circuitos integrados de cambio de nivel son en su mayoría unidireccionales (aunque la dirección se puede cambiar con un pin), aunque algunos también son automáticos.
@gl3829: Hmm, ¿algún IC de cambio de nivel específico que tenga en mente que sea bidireccional (que no esté restringido a que todos se cambien de una forma u otra)? ¿U otra solución bidireccional?
Está la serie TI TXB para bidireccional, pero son caras. Ejemplo : ti.com/product/txb0108
@JoeBaker: No está mal; gracias. Buscando en la misma categoría que el TXB0108 en el catálogo de Digikey, encontré esto: GTL2000 . Tiene 22 canales, pero sus especificaciones dicen "Voltaje" para el tipo de entrada y el tipo de salida, mientras que las especificaciones para TXB0108, etc. dicen "Lógica" para el mismo. Estoy tratando de explorar si hay alguna diferencia.
Artículo útil aquí: eetimes.com/electronics-news/4169927/… - Ahora solo espere a que nuestro residente LMGTFY reformule eso en una respuesta "original" :-)
TI TXB son lo que también recomendaría, pero asegúrese de verificar las especificaciones de la hoja de datos. Su funcionalidad automática tiene algunos inconvenientes en cuanto a la corriente o la velocidad de la unidad, si no recuerdo mal.

Respuestas (2)

He diseñado un pequeño sistema que podría funcionar para su aplicación en particular. Aquí está el esquema:Traductor de niveles

Olvidé el nodo de referencia, debe estar conectado a la terminal 2 de BT1. ¿Cómo funciona esto?

De alto a bajo

En primer lugar, supongamos que podemos ignorar la corriente que fluye hacia/desde "bajo".

Cuando se eleva alto (5V) en R1, no fluye corriente, mientras que los tres diodos están conduciendo. Suponiendo una caída directa de voltaje de 0,6 V, el voltaje bajo será de 3,2 V, y la corriente que fluirá desde alto será de aproximadamente 320 uA.

Cuando se reduce el nivel alto (0 V), todos los diodos están bloqueados, por lo que R2 reducirá el voltaje en el nivel bajo. La corriente que debe hundir la alta es de aproximadamente 500uA.

De bajo a alto

Ahora supongamos que alto no consume corriente.

Cuando se eleva el nivel bajo (3,3 V), los diodos no pueden conducir porque el voltaje en el nivel alto sería más de 5 V, por lo que R1 eleva el nivel alto, los diodos están apagados y el nivel bajo debe proporcionar aproximadamente 330 uA.

Cuando se reduce el nivel bajo (0 V), los diodos están correctamente polarizados, R2 tiene cero voltios, el voltaje alto es de aproximadamente 1,8 V y la corriente absorbida por el nivel bajo es de aproximadamente 180 uA.

Como puede ver, el gran problema es que 1.8V es demasiado: un circuito CMOS probablemente leería eso "bajo", mientras que un TTL probablemente leería eso "alto". Un mejor enfoque podría utilizar un diodo zener de 1,5 V en lugar de los tres pequeños diodos de señal, con el cátodo conectado a R1 y el ánodo a R2. Probablemente será necesario reducir la resistencia para cumplir con la corriente de polarización mínima del diodo zener.

Una última cosa sobre los resistores es que puede usar cualquier valor de 1k a 100k, por supuesto, los valores de resistencia más altos corresponden a un consumo de corriente más bajo, pero también a una respuesta transitoria más lenta, y viceversa.

Muy fácil, solo coloque un protector y funcionará sin necesidad de corrección de voltaje. El Due funciona bien con Ethernet Shield y WiFi Shield. Si la entrada de energía a los escudos es de 3,3 voltios, los chips en esos escudos no tienen amplificadores de voltaje y luego generarán 3,3 voltios. Si está comprando un protector con un controlador, consulte la hoja de datos del dispositivo y verifique si es capaz de tener una entrada de energía de 3.3 voltios. CMOS alto es de 1,5 voltios y más, creo. (Sería casi imposible comunicarse con ese voltaje, diría que su bajo seguro es de 3 voltios). Si es capaz de una potencia de 3,3 voltios, conéctelo y verifique las salidas de los pines, si es todo de 3,3 voltios, conéctelo al Arduino y divertirse :)