Convertir la señal serial (12V-5V) y leerla usando Arduino

1

Estoy intentando leer algunos comandos de un dispositivo que usa niveles de voltaje no estándar para la comunicación en serie. Utiliza 0V para 0 y 12V para 1. Por lo que sé, los niveles TTL son 0-5V, así que si quiero comunicarme con mi Arduino, necesito bajar los 12V para igualar los 5V. El Arduino Mega proporciona un pin con una salida de 5 V, así que pensé que podría usarlo, agregar un diodo y obtener unos 5 V que puedo conectar a RX. Por ahora solo necesito leer los datos. TX pin permanece sin tocar.

Hice un esquema, presentado a continuación:

Medicuentadequelacaídaeneldiodo(aproximadamente1.8V)mepermitirátener(~)5VenelpinRXcuandolaseñaldeldispositivoestáa12V,y0,cuandoes0V.12V-5V-1.8V=5.2V.ElR1es3kOhm.¿Alguienpodríaexplicarmeporquénofunciona?¿Esestasolucióninclusoadecuada?¿Quénecesitocambiarparaquefuncione?

EDITAR:Logréquefuncionara,modifiquéelcircuito:

El diodo es un diodo rojo simple, que tiene una caída de 1.8V. Las tres resistencias son todas de 1kOhm. De mis cálculos, si el voltaje máximo de la señal es 12V, ahora puedo obtener 5V después de volver a conectar el diodo a la GND.

Lo que no entiendo es que, cuando se desconecta la línea roja de la imagen, no obtengo nada, mi Arduino no responde. ¡PERO cuando conecto el RX del dispositivo con TX, leo los datos exactos que quería! Ahora que no es muy obvio para mí, lo conseguí accidentalmente jugando con el tablero. ¿Hay alguna razón obvia por la que el dispositivo comienza a transmitir después de conectar el cable rojo?

EDIT2: A continuación se muestra el esquema del dispositivo. El SISTEMA DE CONTROL es el único conector al que puedo llegar. 12V proviene de un simple adaptador de 12V, la tierra también está conectada al adaptador. Rx está conectado a arduino, el resto es exactamente como en la imagen con el cable rojo. Versión más grande en Imgur

    
pregunta Bart

3 respuestas

3

Para la dirección de 12V- > 5V, un simple divisor de voltaje de 2 resistencias (por ejemplo, 7kOhm + 5kOhm) estará perfectamente bien.

Por lo general, no se puede suponer que la fuente de + 5V puede hundir cualquier cantidad de corriente.

Además, los diodos normales tienen un ancho de banda relativamente bajo, por lo que sus señales pueden distorsionarse más o menos, incluso por unos pocos kBit / s. Los diodos de Schottky mitigan este problema.

Otra solución simple podría ser así (use Schottky si es posible):

simular este circuito : esquema creado usando CircuitLab

    
respondido por el JimmyB
2

Vea a continuación un circuito que funcionará.

La serie "RS232" es inherentemente muy simple pero puede tener una cantidad sorprendentemente grande de "magia oscura" agregada que significa que no estás viendo lo que crees que eres. Es fácil abordar los requisitos de hardware. Estar seguro de que realmente funciona como se indica puede ser más difícil.

Usted dice que "no funciona", pero no da información sobre lo que hace cuando no hace lo que esperaba. Y, puede ser útil cierta información sobre qué niveles ve dónde / cuándo y cómo los midió.

Lo que está haciendo es "ilegal" y puede hacer que el procesador no funcione correctamente o incluso lo destruya. La base de tu fórmula es oscura. El diodo dropp que usa es incorrecto si es un diodo de silicio estándar y debe decir qué es si es un dispositivo Zener u otro. Y su fórmula es casi errónea si el circuito es como se muestra O el circuito es incorrecto (o ambos).

Como se muestra, el diodo sujetará Vin a un máximo de + 5V MÁS una caída de diodo. Si usamos Vdiode = 0.6V, entonces Vin_max = 5 + 0.6 = 5.6V. Esto excede la tensión de operación máxima permitida en los pines de entrada y puede hacer que el procesador se comporte mal o muera.

A continuación se muestra un circuito 'más seguro'.
Vout max es Vzener a la corriente ofrecida. Como se muestra, si se usa un zener de 4V7, la corriente será de aproximadamente 0,7 mA y Voutmax será algo menor que 4V7, ya que los voltajes de zener generalmente se especifican a más de 0,7 mA.

Un zener 5V1 probablemente dará < 5V max como se muestra.

Si no tiene diodos Zener y tiene varios diodos de silicio estándar, podría hacer una solución temporal utilizando varios diodos en serie. Alrededor de 6 es probablemente la correcta. Pruébelo y vea: cambie R1 (que afecta a la corriente) o la cantidad de diodos para ajustar.

simular este circuito : esquema creado usando CircuitLab

    
respondido por el Russell McMahon
1

Suponiendo que las polaridades de "marca" y "espacio" son las mismas para la salida de la fuente de 12 voltios y la entrada de Arduino, que la señal de 12 V proviene de una fuente de voltaje que es lo suficientemente rígida como para generar al menos 1 mA y permanecer dentro de una un porcentaje de 12 V, y que la corriente en la E / S de Arduino es < < 1mA, esto funcionará:

    0-12V in
       |
     [10k]
       |
       +-->0 to 4.86V out to Arduino
       |
     [6k8]
       |
      GND
    
respondido por el EM Fields

Lea otras preguntas en las etiquetas