¿Es posible usar un diodo simple y una resistencia pullup para bajar el nivel en una dirección?

Estoy trabajando en un circuito que implica una interfaz con un microcontrolador de 3.3v (ESP8266) y me gustaría poder programarlo usando mi FTDI existente que funciona a 5v. Soy nuevo en el cambio de nivel y mirando a mi alrededor veo que hay varios enfoques diferentes. Mi pregunta se relaciona con un esquema que encontré para el desglose ESP8266 de Adafruit, visto aquí: https://cdn-learn.adafruit.com/assets/assets/000/024/745/original/adafruit_products_schem.png .

Para cambiar el nivel de las señales RST y RX de 5v a 3.3v, simplemente usan un diodo orientado "hacia atrás" y dejan que el pull-up interno haga el resto. Parece que funciona así:

ingrese la descripción de la imagen aquí

Entonces mi pregunta es, ¿es este un enfoque válido para el cambio de nivel unidireccional? ¿Hay algún peligro en hacerlo de esta manera? No pude encontrar ningún otro ejemplo de este enfoque en mis búsquedas, así que no estoy seguro de si esta es solo una forma "rápida y sucia" de hacerlo o si solo funciona en este escenario por alguna razón.

Respuestas (1)

Si la señal viaja de izquierda a derecha, salida FTDI de 5 V a entrada ESP8266 de 3,3 V, entonces, cuando la salida FTDI sea BAJA, la entrada al micro tendrá una caída de diodo añadida al voltaje de salida FTDI BAJO. Si el FTDI BAJO está en 100 metro V , entonces podría esperar agregar otro 600 metro V 700 metro V a ese. Debe verificar las especificaciones de entrada de su ESP8266 para ver si el peor de los casos 800 metro V todavía califica como una entrada BAJA. Mirándolos, veo que el máximo es 0.25 V C C = 825 metro V . Que está demasiado cerca para mucha comodidad. Sin embargo, el diodo puede estar en el extremo inferior. Así que quizás haya un pequeño margen allí. Aunque no es mucho.

EDITAR: Como se ha ido en la dirección del BSS138, agreguemos un esquema y lo expliquemos un poco:

esquemático

simular este circuito : esquema creado con CircuitLab

Agregué tres esquemas aquí usando el BSS138 y los tomé de lo que encontrará en las imágenes de Google, pero donde invertí las asignaciones de voltaje para que vaya de 5 V a 3.3 V . Agregué el diodo del cuerpo NMOS, porque es importante. (¡Estos circuitos están realmente diseñados para funcionar de 3,3 V a 5 V!) El esquema superior es la versión modificada. Los dos inferiores debajo muestran lo que sucede cuando el controlador FTDI está conduciendo 0 V en primera instancia (esquema de la izquierda) y está conduciendo 5 V en la segunda instancia (esquema de la derecha). Tenga en cuenta que hay un pequeño problema.

La mayoría de las entradas de 3,3 V (y supongo que esto es cierto para el ESP8266) tienen diodos de protección que aparecen como se muestra en el esquema de arriba a la derecha. Entonces, una solución sería colocar una resistencia en serie desde el drenaje NMOS hasta el pin de entrada. Esta resistencia tendría que ser lo suficientemente grande para limitar la corriente en los diodos de protección para cumplir con las especificaciones (que casi siempre son 2 metro A .) En este caso, puede elegir 4.4 V 3.3 V 600 metro V 500 m A = 1 k Ω .

Pero entonces la pregunta es... ¿por qué no usar simplemente la resistencia y depender de los diodos de protección?

Bueno, esto se hace a menudo cuando se va de 5 V a 3.3 V . Vaya a leer la hoja de datos, descubra los límites del diodo de protección (no pude encontrarlo allí) y luego calcule una resistencia adecuada. En este caso, probablemente asumiría que 500 m A es lo máximo que estaría dispuesto a probar, sin datos, y probablemente establecería un valor de prueba de 200 m A para ver qué tan bien funciona. Entonces, en este caso, solo probaría un valor de resistencia de 5 V 3.3 V 600 metro V 200 m A = 5.5 k Ω y decide usar un 4.7 k Ω o un 5.6 k Ω para la entrada de 3.3V al micro, dependiendo de los diodos de protección para hacer su trabajo.

O, si lo desea, puede obtener un BAV99 y usarlo externamente, con la idea de que no desea depender de los diodos de protección internos. Si hace esto, puede probar el último circuito en la esquina inferior derecha de los esquemas anteriores.

Podría usar un diodo Schottky allí para mejorar el margen. Otro problema es que con pull-ups tan grandes, el tiempo de subida será lento. Puede no ser importante en algunas aplicaciones, pero en otras puede ser crítico.
@JohnD: Pensé en agregar un comentario sobre los diodos Schottky. Me alegro de que lo hayas hecho. Se filtran mucho, pero probablemente no lo suficiente como para causar un problema con la resistencia de 10k. De acuerdo también sobre los posibles problemas de tiempo de subida. Pero eso requiere pensar más para ponerle cantidades, así que lo dejé fuera.
Ese es un buen punto. Esto ya me pareció una solución menos que ideal, pero ni siquiera pensé en el efecto de la caída del diodo. Curioso que Adafruit decidiera hacerlo de esta manera. ¿Qué recomendarías en su lugar? ¿Solo un simple divisor de voltaje?
@kcarbone: ¿Te importa si la señal está invertida? ¿Prefieres mosfets a BJT, o viceversa? ¿Qué tipo de cumplimiento actual admite el chip FTDI para su E/S?
@jonk: Preferiría no invertir la señal, ya que se usará para programar el ESP8266. Tiendo a usar mosfets cuando puedo. En cuanto al soporte actual, sinceramente no lo sé. Es un FTDI más antiguo que uso normalmente para programar chips atmega de 5v. Podría obtener un ftdi de 3.3v, pero tenía curiosidad sobre lo difícil que sería bajar el nivel de 5v.
@kcarbone: luego usa un mosfet. Es genial. ¿Ha buscado en Google "level shifter 3.3 5" y luego ha seleccionado lo de imágenes de Google? Encontrarás MUCHOS esquemas allí. Si cree que están bien, modificaré mi respuesta para incluir un diseño específico que debería estar bien aquí.
@jonk: Sí, veo mucho el bss138, así que probablemente probaré con uno de esos. ¡Gracias por toda su ayuda e información!
@kcarbone: vea mi discusión ampliada, entonces. Agregué mucho para que lo consideres.