¿Cambiando una señal digital de 2.7V a niveles lógicos de Arduino?

Soy prácticamente un principiante en electrónica y actualmente estoy trabajando en un proyecto personal, donde tengo un dispositivo que emite una señal digital (onda cuadrada) que va de 0V a 2.7V y necesito leer eso. señal con mi Arduino. Eso, desafortunadamente, no es suficiente para el Arduino Mega 2560 ya que el voltaje mínimo para subir el pin digital es de al menos 3V.

He estado haciendo algunas "investigaciones" y encontré el cambiador de nivel hexagonal MC14504B que parecía la solución perfecta para mi problema. Sin embargo... tengo algunos problemas para interpretar la hoja de datos...

TL;DR: Necesito cambiar el nivel de mi señal de 2,7 V a al menos 3 V o más.

Este es el diagrama lógico del cambiador de nivel:

ingrese la descripción de la imagen aquí

Y estas son las características:

ingrese la descripción de la imagen aquí

No estoy exactamente seguro de cómo interpretar estos números. Planeo usar el modo TTL-CMOS.

Por lo que puedo decir, siempre que la entrada se considere 1 (alta), mi voltaje en la salida será ~ 5V si Vdd es 5V, lo cual es perfecto. ¿Estaría bien un Vdd de 3.3V ya que Arduino necesita al menos 3V para subir un pin?

Ahora a mi verdadera pregunta... No entiendo la parte de Vcc y Vin (Vol, Voh).

De la tabla, podemos ver que si Vcc es 5V y Vdd es 10V, el Vin será un 0 lógico si el voltaje aplicado a la entrada es <= 0.8V, lo mismo ocurre si Vcc es 5V y Vdd es 15V.

Ahora, por lo que puedo decir, la entrada se considerará alta si se aplican al menos 2 V o más a la entrada cuando Vcc = 5 V y Vdd = 10 V/15 V, pero tanto el Voh como el Vol cambian según el Vdd. ¿Qué significa esto para mi caso de uso?

¿Qué pasa si uso 5V para Vcc y Vdd ambos? ¿Qué pasa si uso 3.3V para Vcc y Vdd? ¿Qué pasa si uso 3.3V para Vcc y 5V para Vdd y viceversa? ¿Qué sucede en estos escenarios? ¿Alguien podría explicar esto de una manera muy simple, por favor? Parece que me estoy perdiendo algo aquí ya que mi interpretación no tiene sentido para mí.

¡Gracias!

¿Hay alguna razón por la que no quiera ejecutar el Mega a 2.7V?
¿Puedes confirmar que el Arduino está funcionando a 5V?
¿Por qué no funcionaría a 5V? ¿Y qué quiere decir exactamente con por qué no quiero ejecutar el Mega a 2.7V? ¿Mega usa lógica de 5V?
Solo quería estar totalmente seguro :) Por lo general, usaría los mismos rieles para cada lado del cambiador de nivel que los chips lógicos que se conectan a cada lado.
Parece que me estoy perdiendo algo aquí, soy un principiante. :) ¿Qué te hizo pensar que el Arduino no funciona a 5V y cuál sería la causa de que no sea así? Con su último comentario, ¿quiere decir que Vcc y Vdd en la palanca de cambios de nivel deben estar conectados al pin de 5V en el Arduino? :)
¿Qué frecuencia es esa onda cuadrada?

Respuestas (4)

TL; DR: use Vcc = 5V, Vdd = 5V, modo TTL-CMOS, y debería estar bien.

"Por lo que puedo decir, siempre que la entrada se considere 1 (alta), mi voltaje en la salida será ~ 5 V si Vdd es 5 V, lo cual es perfecto. ¿Estaría bien un Vdd de 3.3 V ya que Arduino necesita al menos 3 V para encender un pin alto?"

Correcto, obtendrá una salida de ~ 5V si usa Vdd = 5V. Sin embargo, en el modo TTL-CMOS, tanto Vdd como Vcc deben tener al menos 5 V (Figura 4 de la hoja de datos). Dado que el punto de conmutación de la lógica de entrada es de 1,5 V para Vcc = Vdd = 5 V, funcionará perfectamente con su entrada lógica de 2,7 V.

"Ahora mi verdadera pregunta... No entiendo la parte de Vcc y Vin (Vol, Voh)".

Esta hoja de datos enumera sus datos de una manera bastante extraña, y en realidad no está del todo claro lo que significa. Mi interpretación es que "VOL = 1.0VDC" significa que cuando se opera en esta condición, se garantiza que el voltaje de salida sea inferior a 1VDC. Afortunadamente, no creo que sea realmente un problema para su aplicación.

"La entrada se considerará alta si se aplican al menos 2 V o más a la entrada cuando Vcc = 5 V y Vdd = 10 V/15 V, pero tanto el Voh como el Vol cambian según el Vdd. ¿Qué significa esto para mi caso de uso?"

Sí, lo estás interpretando correctamente. Para su caso de uso, ignore los números "Voh y Vol" en la sección "Voltaje de entrada" y, en su lugar, preste más atención a la sección superior etiquetada como "Voltaje de salida", que solo dice que si usa Vdd = 5V obtenga una salida de ~ 5V.

"¿Qué pasa si uso 5 V para Vcc y Vdd? ¿Qué pasa si uso 3,3 V para Vcc y Vdd? ¿Qué pasa si uso 3,3 V para Vcc y 5 V para Vdd y viceversa".

Nuevamente, vea la Figura 4. En el modo TTL-CMOS, necesita usar 5V para Vcc y Vdd. Diría que usar 5V para ambos es la solución correcta para su aplicación.

Gracias por la respuesta a mi pregunta original. :) Voy a probar esto mañana y ver cómo va.
¿No debería estar " TL;DR: " en la parte inferior?
¿Y cómo es eso relevante?

Mientras no le importe una inversión lógica, puede usar algo simple como un transistor y dos resistencias.

esquemático

simular este circuito : esquema creado con CircuitLab

Los voltajes de salida del sensor por encima de aproximadamente 0,8 V encienden Q1. R2 lleva la entrada de Arduino a su riel de suministro cuando Q1 está apagado. Si usa una entrada de pin de E/S con una resistencia pull-up programable, puede omitir R2. La mayoría de los BJT NPN de señal pequeña servirán para Q1.

He estado pensando en esto antes, sin embargo, elegí usar el cambiador de nivel porque no estaba invirtiendo mi señal, bueno, una señal invertida realmente no representaría un problema. De todos modos, el R2 me estaba molestando... Por lo que he leído, los pines de Arduino tienen una impedancia de 100kOhm y conectar un pin de entrada a este circuito crearía una caída de voltaje en R2... ¿no es la resistencia interna del pin de una entrada suficiente para subir el pin, ¿por qué es necesario el R2? Gracias. :)
@ 0xd4v3, consulte la hoja de datos de su dispositivo en lugar de usar información de segunda mano'. La corriente de fuga de entrada de +/-10uA es más típica, por lo que el valor R2 está bien... pero consulte la hoja de datos en lugar de 'AFAIK'. Notaré que puede usar el pull-up programable, R2 simplemente hizo que el circuito sea universal para MCU que no sean Arduino, etc.

Las entradas de Arduino deben cumplir con los niveles lógicos especificados para el margen.

VIL <= 0,3 Vcc máx.
VIH >= 0,7 Vcc mín.

Por lo tanto, la onda cuadrada de entrada debe ser >= 0,4 Vcc y para 5 V, o 0,4 * 5 = 2,0 Vpp y tiene 2,7 V con un margen de 0,7 V.

Alternativamente, puede acoplar CA a la entrada con polarización R a Vcc/2.

Hay muchas soluciones de cambio de nivel para 2,7 V a 5 V.

Rev B.

esquemático

simular este circuito : esquema creado con CircuitLab

  • asumiendo suministro y señal libres de ruido.
Gracias por responder, pero como principiante, no estoy seguro de seguir lo que intentas explicar aquí. :) 0.3*5V = 1.5V y 0.7*5V = 3.5V. ¿Cómo es que la señal digital seguiría poniendo el pin alto si el pin necesita al menos 0.7 * Vcc para encenderse? Mega usa niveles lógicos de 5V, ¿verdad?
Los niveles lógicos se definen con márgenes de ruido adecuados sobre las tolerancias de temperatura y fabricación, pero nominalmente el umbral es Vcc/2. Se supone que la señal siempre está ahí. Para un traductor de búfer no inversor activo, vea mi enlace en azul (?)
Gracias por publicar el circuito. :) Revisé tu enlace pero me lleva a una página que me da un error.
Dado que OP no mencionó la frecuencia de la onda cuadrada, recomendaría no usar este enfoque.
lo siento por el enlace, pruebe digikey.com/products/en/integrated-circuits-ics/… y use los filtros para la pieza más barata que se ajuste a V1 = 2.7 V2 = 5
La señal es básicamente una señal de datos con una tasa de bits de 1200 bits/s. :) Ejecuté algunas simulaciones y parece haber un retraso hasta que el voltaje se estabiliza, lo que podría crear un problema al leer la señal, ya que podría perder algunos bits debido al retraso.
¿Qué causa el retraso? cable largo? latencia del programa?
¿Cuál es el propósito de D1? En LTspice, evita que Q1 se encienda (solo 5 µA a través de R4).

Los niveles de voltaje de entrada TTL son >=0.8V bajo y >=2.0V alto. El MC14504B acepta estos niveles lógicos cuando está en modo TTL con Vcc = +5V. Sus niveles de señal son 0V y 2.7V, así que todo está bien.

El MC14504B tiene salidas CMOS que van desde 0V hasta Vdd. El Arduino funciona a 5V, por lo que también debe configurar Vdd en +5V.