Estoy tratando de 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 de TTL son de 0-5V, por lo que si quiero comunicarme con él usando mi Arduino, necesito nivelar los 12V para que coincidan con los 5V. El Arduino Mega proporciona un pin con una salida de 5V, así que pensé que podría usarlo, agregar un diodo y obtener unos 5V que puedo conectar a RX. Por ahora solo necesito leer los datos. El pin TX permanece intacto.
Hice un esquema, presentado a continuación:
Pensé que la caída en el diodo (alrededor de 1,8 V) me permitirá tener (~) 5 V en el pin RX cuando la señal del dispositivo sea de 12 V y 0, cuando sea de 0 V. 12V - 5V - 1,8V = 5,2V. El R1 es de 3kOhm. ¿Alguien podría explicarme por qué no funciona? ¿Es esta solución incluso adecuada? ¿Qué debo cambiar para que funcione?
EDITAR: Logré que funcionara. Modifiqué el circuito:
El diodo es un diodo rojo simple, que tiene una caída de 1.8V. Las tres resistencias son todas de 1kOhm. Según mis cálculos, si el voltaje máximo de la señal es de 12 V, ahora puedo obtener 5 V después de volver a conectar el diodo a GND.
Lo que no entiendo es que, cuando la línea roja de la imagen está desconectada, no obtengo nada, mi Arduino no responde. ¡PERO cuando conecto el RX del dispositivo con TX, leo los datos exactos que quería! Ahora eso no es muy obvio para mí, lo obtuve accidentalmente jugando con el tablero. ¿Hay alguna razón obvia por la que el dispositivo comience a transmitir después de conectar el cable rojo?
EDIT2: A continuación se muestra el esquema del dispositivo. SISTEMA DE CONTROL es el único conector al que puedo acceder. 12V proviene de un adaptador simple 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
Para la dirección de 12V->5V, un simple divisor de voltaje de 2 resistencias (por ejemplo, 7kOhm + 5kOhm) probablemente estará perfectamente bien.
Por lo general, no puede simplemente suponer que la fuente de + 5 V puede absorber 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 Schottky mitigan este problema.
Otra solución simple podría ser así (use Schottky si es posible):
simular este circuito : esquema creado con CircuitLab
Vea a continuación un circuito que funcionará.
La serie "RS232" es intrínsecamente muy simple, pero puede tener una cantidad sorprendentemente grande de "magia oscura" agregada que significa que no está viendo lo que cree que está viendo. Abordar sus requisitos de hardware es fácil. 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, algo de información sobre qué niveles ve, dónde/cuándo y cómo los midió puede ayudar.
Lo que está haciendo es "ilegal" y puede hacer que el procesador funcione mal o incluso que lo destruya. La base de su fórmula es oscura. El dropp de diodo que usa es incorrecto si es un diodo de silicio estándar y debe decir cuál es si es un zener u otro dispositivo. Y es casi seguro que su fórmula es incorrecta 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 +5 V MÁS una caída de diodo. Si usamos Vdiode = 0.6V entonces Vin_max =5+0.6 = 5.6V. Esto excede el voltaje operativo máximo permitido 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 en la oferta actual. Como se muestra, si se usa un zener 4V7, la corriente será de aproximadamente 0,7 mA y Voutmax será algo menor que 4V7, ya que los voltajes del zener generalmente se especifican en más de 0,7 mA.
Un zener de 5V1 probablemente dará <5V máx. como se muestra.
Si no tiene diodos zener y tiene varios diodos de silicio estándar, podría hacer una solución temporal usando varios diodos en serie. Aproximadamente 6 es probablemente correcto. Pruébelo y vea: cambie R1 (corriente que afecta) o la cantidad de diodos para ajustar.
simular este circuito : esquema creado con CircuitLab
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 un par por ciento de 12V, 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
bart
PedroJ
Russel McMahon
Russel McMahon
bart
bart