¿Cómo funciona este convertidor de nivel lógico en Adafruit HUZZAH?

Estoy ocupado con un proyecto en el que estoy conectando un MCU de 5 V (Amtel ATMega328) a un 3 V (ESP8266) a través del puerto serie. Obviamente necesito algunos niveles lógicos convertidos. Miré los esquemas de varios de código abierto en el mercado para comprender cómo otras personas abordaron este problema. En una nota al margen, construí un circuito divisor de voltaje solo para comenzar con algo básico (solo quiero estar seguro de que entiendo el concepto).

Así que revisé el convertidor de nivel lógico FreeTronics que usa un BSS138LT3G para la conversión de nivel lógico. Esto tiene sentido, ya que parece que este diseño utiliza un transistor con una caída baja para convertir entre niveles de voltaje. Puede encontrar el esquema para el convertidor de nivel lógico freetronics aquí .

Luego miré la placa esquemática de Adafruit HUZZAH esperando encontrar uno de los siguientes componentes: un regulador de voltaje o un transistor MOSFET o un divisor de voltaje de algún tipo. Bueno, encontré el regulador de voltaje SPX3819 en la placa, pero luego me di cuenta de que los pines seriales no lo usaban en absoluto...

Cuando estudié el esquema, descubrí que un diodo 1N4148 estaba conectado al pin FTDI RX (recepción). Nunca me di cuenta de que podrías usar un diodo de esta manera (estoy aprendiendo). Entonces, dado que se trata de un diodo de alta velocidad, obviamente provoca una caída de voltaje de 5 V a alrededor de 3 V por la conmutación de alta velocidad casi como lo haría una función PWM (la suposición educada podría ser incorrecta). Parecía simple y elegante, pero luego noté que no hacían lo mismo en el pin FTDI TX (transmisión).

Entonces, en este punto, estoy confundido, ¿por qué convertiría una entrada de 5V al pin RX a 3.3V y luego no la convertiría en el pin de salida? Seguramente un puerto serial no puede acomodar ambos voltajes a menos que se especifique para manejarlo. Enviar 5V y recibir 3V se sentía mal.

Ahora estoy especulando en este punto, pero según tengo entendido, las transmisiones de datos en serie son esencialmente bits que se transmiten. Un 5V estando encendido y 0V estando apagado. Sin embargo, no creo que eso sea realista. ¿Cómo puedo tener siempre 5 V y 0 V con componentes que se calientan, variación de resistencia y todos los demás factores en la electrónica? Sospecho que este diseño funciona porque 3V está por encima de la marca de 2.5V y la MCU de AMTEL reacciona a este nivel de voltaje como si se estuviera transmitiendo un bit ON/1/YES.

Ahora bien, si mi teoría se mantiene, ¿existe algún riesgo al realizar comunicaciones en serie entre un chip AMTEL y un chip ESP a través de serie de esta manera?

O tal vez solo estoy enojado y me estoy perdiendo algo muy obvio.

Respuestas (2)

Cada vez que el dispositivo de 5 V transmite, tira del bus hacia abajo y el diodo conduce a 0,5 ~ 7 V, cuando libera o tira del bus ARRIBA a 5 V, el diodo bloquea el flujo de corriente y una resistencia en el dispositivo de 3,3 V debe tirar el bus en el lado de 3.3V vuelve a 3.3V.

Cada vez que el dispositivo de 3,3 V transmite, el "ALTO" (alrededor de 3,3 V o un poco menos) supuestamente está dentro de las especificaciones de ATMega328 para VinHIGH (3,0 V a 5 V) y el "BAJO" está dentro del umbral VinLOW (1,5 V a 0 V).

ingrese la descripción de la imagen aquí

pd: los riesgos que puedo ver son tener problemas con el bus si ESP VoutHIGH no es lo suficientemente alto, si el diodo no es lo suficientemente rápido o si la resistencia no es lo suficientemente fuerte para tirar del bus a la velocidad que necesita. Sin embargo, no creo que ninguno de estos corra el riesgo de quemar los puertos ...

Entonces, mi teoría de que 3V es suficiente para una señal ALTA parece válida. Debería haber estudiado esto más en la escuela. Aceptará la respuesta en un día más o menos si nadie da una respuesta mejor. Gracias por ayudarme a confirmar que no estoy completamente equivocado....

Para agregar a la respuesta de Wesley, la resistencia en el lado de 3,3 V del diodo es una resistencia pullup interna en el pin RX del ESP8266. Este pin está conectado al pin RXD en el módulo de conexión ESP12 que Adafruit usa en Huzzah.

Además, ViL para el ESP8266 es 0,25 Vcc o 0,825 V para Vcc = 3,3 V. Por lo tanto, un voltaje de 0.5~0.7V en el lado de 3.3V del diodo aún cuenta como una entrada BAJA.