Intercambio de datos a través de un cable de 5 metros

1

Tengo un microcontrolador que necesita comunicarse a través de un cable, que será de aprox. 5m de largo, con otro microcontrolador muy pequeño. Los dispositivos serán utilizados al aire libre en diversas condiciones. La tasa de datos no será muy alta. Cuando conecta la unidad uC pequeña con el cable a la unidad uC grande, se envía una cadena de identificación y actualizaciones periódicas (cada minuto) de la batería desde la unidad uC pequeña.

Pensé en I2C, pero no estoy seguro de si está diseñado para tales necesidades. CAN también es posible, pero creo que es un poco excesivo para mis necesidades. ¿Alguien tiene buenas ideas?

EDITAR: Quiero usar la menor cantidad posible de pines para el cable.

    
pregunta perotom

3 respuestas

1

Si bien CAN puede ser un poco "exagerado", siempre es preferible que tengas esa opción. Breve comparación o CAN versus RS232 / RS422 / RS485:

Ventajas CAN:

  • Mucho más robusto y tolerante a EMI. Pero en términos de la tecnología en sí y en términos de protección incorporada en un transceptor estándar.
  • Funcionará bien sin cables blindados a velocidades inferiores.
  • Manejo integrado de errores, CRC y sincronización de cuadros. Así que no hay necesidad de inventar otro protocolo oscuro basado en UART personalizado. Lo que significa que las CPU no tienen que perder tiempo codificando / decodificando, calculando CRC, etc.
  • Es fácil de mantener y de rediseñar desde un sistema punto a punto a un sistema de múltiples nodos, si fuera necesario en el futuro.

CAN desventajas:

  • No es realmente una opción sensata a menos que su MCU tenga un periférico CAN en el chip. Los controladores CAN externos son onerosos y una cosa del pasado.
  • Puede tener un consumo de corriente ligeramente mayor que las soluciones basadas en UART.

El costo de los transceptores CAN frente a los transceptores RS-xxx debería ser aproximadamente el mismo (excepto si se seleccionan transceptores de basura antiguos como MAX232 que necesitan 5x 1uF de tapas). Los niveles de voltaje de la señal no importan, hay transceptores CAN y RS-xxx para 3.3V y 5V.

El número de cables para un sistema semi-dúplex será 3 en cualquier caso. En el caso de CAN, tiene CAN H, CAN L y señal de masa. En el caso de, por ejemplo, RS-422, usted tiene T +, T- y señal de masa. En cualquier caso, no se recomienda omitir la señal de tierra, no escuches a las personas que te dicen lo contrario.

    
respondido por el Lundin
1

También votaré por RS232, debes tener cuidado con una cosa que nadie más ha mencionado. No dice qué microcontroladores está usando, pero lo siguiente es cierto para la mayoría de los que he usado ...

Su microcontrolador tendrá al menos una línea de transmisión de datos (TX) y al menos una línea de recepción de datos (RX). Estas líneas alternarán entre bajo y amp; alto a medida que transmite / recibe entre niveles de voltaje de 0 V y amp; ~ 5V o 0V & 3.3V dependiendo del dispositivo. Suponiendo que ambos microcontroladores utilizan los mismos niveles de voltaje, en principio, solo se puede conectar TX de un micro a RX del otro y viceversa. Esto funciona para distancias cortas y amp; bajas tasas de datos, pero creo que 5m es demasiado largo para esto y también creo que es una mala práctica hacer esto entre sistemas.

Es mejor utilizar un convertidor de nivel (como la familia MAX232 para sistemas de 0-5V o el MAX3232 para sistemas de 0-3V) en cada extremo. Estos convierten la lógica 0 a ~ + 12V y una lógica 1 a ~ -12V para que su línea de comunicaciones se ajuste eléctricamente al estándar RS232.

Espero que esto ayude,

Joe

    
respondido por el JMcC
1

Ignorando la cuestión de las mejores alternativas (realmente no lo recomiendo, pero puede funcionar), he ejecutado con éxito I2C largas distancias (entre edificios) en producción y funcionó durante años.

  • Puede reducir la frecuencia de reloj de I2C hasta 10kHz y poner límites de filtro adicionales en las líneas para filtrar la salida de RF.
  • Muchos de los chips están perfectamente contentos a corrientes superiores a 1.5 mA, ejecute 5,10 o 20mA, dependiendo de lo que puedan manejar sus chips
  • Asegúrese de que está utilizando chips I2C (umbrales de cmos schmitt) y no SMBUS (niveles de ttl) ya que son mucho más propensos al ruido.
  • alimente la alimentación por los mismos cables, tenga una derivación adecuada.
  • par trenzado / cables blindados. enlace
  • use el interruptor de bus para aislar este segmento de las partes locales de I2C
  • darse cuenta de que se esperan errores y diseñar software a su alrededor. (es decir, repite, por ejemplo, actualice su pantalla cada pocos segundos, en lugar de dejarlo durante horas entre actualizaciones)
  • Tenga cuidado con el interbloqueo del bus I2C, que puede ocurrir al inyectar ruido con un pulso de reloj adicional, y asegúrese de que su maestro lo detecte y lo resuelva. (Apuesto a que el código de stock de Arduino no lo hace)

Consulte la sección 19 Punto muerto en el bus I2C en enlace

    
respondido por el Henry Crun

Lea otras preguntas en las etiquetas