Uso de un búfer no inversor para el cambio de nivel

Tengo un proyecto que involucra un Arduino de 5V y un Raspberry Pi Zero (3.3V) que necesitan comunicarse a través de una interfaz serial. La solución fácil aquí sería conectarlos a través de USB, pero usaré una placa tipo Arduino pro mini, que no tiene un adaptador de USB a serie y, por lo tanto, no tiene USB. Así que los conectaré directamente, pero he oído que a Raspberry Pi no le gusta recibir 5 V a través de sus pines seriales, lo que significa que debo tener un cambiador de nivel (al menos en la línea Arduino tx a Pi rx) .

Tengo algunos búferes hexadecimales no inversores (el CD4050BCN ), y por lo que entiendo, si tengo V DD configurado en el voltaje lógico de Pi (3.3V), solo generará un máximo de 3.3V. Luego, puedo conectar el pin tx de Arduino a V IN de los búferes no inversores para garantizar que la salida sea de 3,3 V como máximo.

¿No estoy entendiendo parte de esto? Solo quiero asegurarme: no tengo mucho conocimiento de electrónica más allá del cableado básico del microcontrolador.

¿Qué tan rápido estará operando la interfaz serial? Es un poco importante saberlo. Además, ¿las líneas son unidireccionales? ¿O alguno de ellos será bidireccional por alguna razón? Finalmente, este tipo de pregunta ha sido respondida un millón de veces en la web, si no un billón, es una necesidad muy, muy común. ¿Ya has mirado? Finalmente, ¿conoce las especificaciones máximas absolutas para las corrientes de diodo de protección en Raspberry Pi Zero?
He actualizado mi respuesta, verifíquela antes de implementar el hardware. Es importante agregar un divisor de voltaje similar en la línea Pi Tx.
Hay muchas maneras de resolver esto. Su CD4050BCN debería funcionar. La respuesta del divisor de voltaje probablemente también funcionará suponiendo que solo esté usando una velocidad de transmisión normal como 115200 baudios. Es posible agregar un condensador de "aceleración" en paralelo con R1 para mantener un ancho de banda de señal más alto.

Respuestas (1)

Use un divisor de voltaje de Arduino Tx a Pi Rx como este. Puede conectar el Pi Tx a Arduino Rx directamente.

Actualización importante: conecte un divisor de voltaje similar en la línea Pi Tx - Arduino Rx también. Esto es necesario para proteger Pi en caso de 5 V accidentales en el pin Arduino Rx (debido a un error en el código, etc.). He actualizado el circuito.

esquemático

simular este circuito : esquema creado con CircuitLab

Tengo mucha confianza en que funcionará. Pruebe esta solución y comparta los resultados en el comentario. Si funciona bien, seleccione mi respuesta como la respuesta correcta.
Muy bien, intentaré esto en una semana más o menos una vez que tenga todo configurado, gracias.
No ver cómo funciona la protección. Si Pi Tx es 5V, R4 no ayudará. R3 limitará la corriente y puede proporcionar cierta protección. Un pequeño capacitor en paralelo con R1 puede ayudar a preservar el ancho de banda. Como en algún lugar entre 2pF y 22pF. Puede ajustarlo con precisión con un osciloscopio. Si obtiene un sobreimpulso de voltaje, use un capacitor más pequeño.
@mkeith Esto es para proteger a Pi (lógica de 3,3 V) de la ira de Arduino (lógica de 5 V). Si el pin Arduino tiene 5V, los divisores de voltaje solo permitirán 3V en los pines Pi. Cuando el Pi envía 3.3 V en los pines, llegará ileso al Arduino (aunque un poco cargado). El OP tenía la intención de usar el circuito con puerto serie, por lo que asumí que la frecuencia máxima puede ser de 115,2 kHz. Este tipo de frecuencias no requieren ninguna consideración especial, por lo que traté de ser lo más simple posible sin dejar de proporcionar la funcionalidad prevista.
Oh, estaba pensando al revés. Pensé que tenías el divisor al revés, pero yo era el que estaba al revés. Acepto que el límite de aceleración puede no ser necesario para 115200, que es la velocidad de transmisión normal más rápida. Pero si se puede agregar un límite de aceleración, el divisor de resistencia podría aumentarse para reducir la carga. Sólo una sugerencia.
@AbdullahBaig ¡esto tiene mucho más sentido! Leí que el arduino Rx se mantenía en 5 V por alguna extraña razón, pero no estaba seguro de si eso importaba, ya que muchas fuentes en línea no lo mencionaron en ninguna parte. Este proyecto no usará un pi por un tiempo (tengo mucho que hacer antes de eso) y esto parece bueno, pero me aseguraré de actualizarlo si lo uso más adelante.