Arduino y las comunicaciones con RS485

arduino-comunicaciones-con-rs485
¡Haz clic para puntuar esta entrada!
(Votos: 1 Promedio: 5)

Las comunicaciones con RS485 fueron desarrolladas para proporcionar datos de alta velocidad sobre un simple par de líneas de cobre.

Si bien RS232 es sin duda la interfaz de comunicaciones seriales más conocida, porque esta interfaz en serie se implementa en casi todos los ordenadores disponibles en la actualidad mediante el uso de adaptadores USB, existen algunas aplicaciones y situaciones en las que RS232 no es apropiado.

 

¿Qué son las comunicaciones con RS485?

El estándar está definido por los organismos de telecomunicaciones de la industria y puede denominarse más comúnmente como RS485, pero también pueden verse referencias a EIA485 o TIA-485.

red-rs485
Diagrama de una red básica con interfaces RS485

Las comunicaciones con RS485 pueden proporcionar una velocidad de datos de hasta 10 Mbps a distancias de hasta 15 metros, pero esta distancia se puede extender hasta 1.2 Km con una velocidad de datos más baja de 100 kbps.

Aunque RS485 nunca fue diseñado para uso doméstico, encontró muchas aplicaciones donde se requería la adquisición remota de datos.

 

¿Cuál es la diferencia entre comunicaciones con RS485 y RS232?

Uno de los principales problemas con RS232 es la falta de inmunidad al ruido en sus líneas de señales. El transmisor y el receptor comparan los voltajes de las líneas de datos y de comunicación con una línea común (para nuestro caso, GND).

Los cambios en el nivel del suelo pueden tener efectos desastrosos. Por lo tanto, el nivel de activación de la interfaz RS232 se establece relativamente alto a ± 3 voltios. El ruido se capta fácilmente y limita la distancia máxima y la velocidad de comunicación.

niveles-voltaje-transmision-recepcion-rs232
Niveles de voltaje para transmisión y recepción de datos en RS232

Con las comunicaciones con RS485, por el contrario, no existe línea común como referencia de señal. La diferencia de varios voltios en el nivel del suelo del transmisor y receptor RS485 no causa ningún problema.

Las señales RS485 están flotando y cada señal se transmite a través de una línea SIGNAL+ y una línea SIGNAL-. Ambas líneas conforman un par diferencial.

El receptor RS485 compara la diferencia de voltaje entre ambas líneas, en lugar del nivel de voltaje absoluto en una línea de señal.

Esto funciona bien y evita la existencia de bucles de tierra, una fuente común de problemas de comunicaciones. Los mejores resultados se logran si las líneas SIGNAL+ y SIGNAL- están trenzadas.

transmision-recepcion-diferencial-rs485
Inmunidad al ruido usando cable trenzado

En la imagen se muestra las líneas de campo magnético, que es la fuente de ruido, y la corriente de ruido en las líneas de datos RS485 que es el resultado de ese campo magnético.

En el cable directo, toda la corriente de ruido fluye en la misma dirección, generando prácticamente una corriente de bucle al igual que en un transformador ordinario.

Cuando el cable está trenzado, vemos que, en algunas partes de las líneas de señal, la dirección de la corriente de ruido es opuesta a la corriente en otras partes del cable.

Debido a esto, la corriente de ruido resultante es mucho más baja que con un cable directo ordinario.

El blindaje, que es un método común para evitar el ruido en las líneas RS232, intenta mantener los campos magnéticos hostiles lejos de las líneas de señal.

Sin embargo, los pares trenzados en la comunicación RS485 agregan inmunidad, que es una forma mucho mejor de combatir el ruido.

Los campos magnéticos pueden pasar, pero no hacen daño. Si se necesita una alta inmunidad al ruido, a menudo se usa una combinación de trenzado y blindaje.

Las señales diferenciales y el trenzado permiten que las comunicaciones con RS485 alcancen distancias de comunicación mucho más largas que las que se pueden lograr con RS232. Con RS485 son posibles distancias de comunicación de hasta 1.2 Km.

conexion-rs485-half-duplex
Ejemplo de comunicacion Half-Duplex con RS485

Las líneas de señal diferencial también permiten velocidades de bits más altas que las posibles con conexiones no diferenciales. Por lo tanto, las comunicaciones con RS485 puede superar el límite práctico de velocidad de comunicación de RS232.

El protocolo RS485 contempla una resistencia de terminación. La conexión en cadena recomendada es de nodos de punto-a-punto (multipunto) como un modo BUS (línea). Estrella, anillo o multiplicar la conexión de red no se recomienda.

En el lado opuesto es necesario montar una resistencia en el último dispositivo de cada cadena.

Sin resistencias de terminación los controladores rápidos (alta velocidad) pueden causar múltiples reflexiones de señal en su punto de conexión y, en consecuencia, la corrupción de datos.

Las resistencias de terminación también reducen la sensibilidad al ruido eléctrico. El valor de cada resistencia de terminación debe ser igual a la impedancia característica del cable (normalmente, 120? para pares trenzados y por una sola cadena).

 

RS422 vs RS485

El estándar TIA/EIA-422, conocido como RS422, describe una interfaz de comunicación a través de múltiples pares de cables para establecer la comunicación desde un transmisor hasta 10 receptores.

Se utilizan al menos dos pares de cables trenzados, uno para la comunicación del transmisor (generalmente el maestro) a los receptores (generalmente los esclavos) y el otro para la transmisión de los esclavos al maestro.

Dado que varios esclavos comparten los mismos cables para la transmisión, deben mantener sus controladores de línea apagados (en estado de alta impedancia) la mayor parte del tiempo.

Cuando se solicitan datos de un esclavo, enciende su controlador de línea, transmite datos y lo apaga nuevamente para permitir la transmisión desde otro esclavo.

rs422-rs485
Conexiones típicas con RS422

Lo que tienen en común los estándares de los buses RS422 y RS485 es que ambos usan técnicas de señalización diferencial de hardware para permitir una combinación de comunicación de alta velocidad a largas distancias, las diferencias de potencial de tierra pueden ser distintas de cero.

Sin embargo, desde el punto de vista de la dirección de comunicación, RS422 no es compatible con RS485, pero RS485 puede hacerse compatible con RS422.

La mayor diferencia entre RS422 y RS485 es cómo se comunican con los dispositivos en un solo par de cables diferenciales.

En RS422 cada bus solo ofrece comunicación unidireccional. Un único dispositivo transmisor (maestro) a uno o más dispositivos receptores (esclavos) en un solo par de cables.

La comunicación bidireccional requiere dos buses RS422 en paralelo. Uno para cada dirección. Por lo tanto, un bus RS422 de dos vías requiere 4 cables.

En RS485 cada bus ofrece comunicación bidireccional. Varios dispositivos pueden compartir un solo par de cables. Cada dispositivo tiene un transceptor que permite capacidades de transmisión y recepción.

Esto permite la comunicación bidireccional punto a punto entre cualquier dispositivo dado en cualquier lugar del bus a cualquier otro dispositivo en cualquier lugar del bus RS485. Por lo tanto, la comunicación bidireccional requiere, como mínimo, un bus RS485.

 

RS232 vs RS485

El RS-232 es el mejor para los requisitos de baja velocidad a corta distancia. Es simple y de bajo costo, y muchos componentes como controladores y receptores de línea, UART y conectores están disponibles para construir la interfaz.

rs485-rs232
Conexiones típicas con RS232

RS-232 solo permite un transmisor y un receptor en cada línea. RS-232 también utiliza un método de transmisión Full-Duplex

El RS-485 es para velocidades más altas en rangos más largos o si se requiere capacidad de red dúplex. Nuevamente, muchas partes estándar están disponibles para crear la interfaz.

El RS-485 fue creado para abordar la limitación de múltiples caídas del RS-422, permitiendo que hasta 32 dispositivos se comuniquen a través de la misma línea de datos.

Cualquiera de los dispositivos esclavos en un bus RS-485 puede comunicarse con otros 32 dispositivos esclavos sin pasar por un dispositivo maestro.

Tabla comparativa RS485 y RS232

Características de RS232, RS422 y RS485
  RS232 RS422 RS485
Diferencial no si si
Num. max. de manejadores 1 1 32
Num. max. de receptores 1 10 32
Modos de operación Half & Full duplex Half duplex Half duplex
Topología de red Punto a punto Entrega múltiple multipunto
Distancia máxima 15m 1200m 1200m
Velocidad máxima a 12 metros 20kbps 10Mbps 35Mbps
Velocidad máxima a 1200 metros 1kbps 100kbps 100kbp
Sensibilidad del receptor +-3V +-200mV +-200mV

¿Qué nos dice toda la información en esta tabla? En primer lugar, vemos que la velocidad de las interfaces diferenciales RS422 y RS485 es muy superior a RS232. También vemos que hay una velocidad de respuesta máxima definida para RS232.

Esto se ha hecho para evitar reflejos de señales. La velocidad de respuesta máxima también limita la velocidad máxima de comunicación en la línea.

Para las otras dos interfaces, RS422 y RS485, la velocidad de respuesta es indefinida. Para evitar reflejos en cables más largos, es necesario utilizar resistencias de terminación adecuadas.

También vemos que los niveles de voltaje máximos permitidos para todas las interfaces están en el mismo rango, pero que el nivel de señal es más bajo para las interfaces más rápidas.

Debido a esto, RS485 y los otros pueden usarse en situaciones con un cambio severo del nivel del suelo de varios voltios, donde al mismo tiempo son posibles altas velocidades de bits porque la transición entre el 0 lógico y el 1 lógico es solo de unos pocos cientos de milivoltios.

Interesante es que RS232 es la única interfaz capaz de comunicación full duplex. Esto se debe a que en las otras interfaces el canal de comunicación es compartido por múltiples receptores y, en el caso de RS485, por múltiples remitentes.

RS232 tiene una línea de comunicación separada para transmitir y recibir que, con un protocolo bien escrito, permite velocidades de datos efectivas más altas a la misma velocidad de bits que las otras interfaces.

Los datos de solicitud y reconocimiento necesarios en la mayoría de los protocolos no consumen ancho de banda en el canal de datos primario de RS232.

 

Protocolo Modbus y RS485

Modbus es un protocolo de comunicaciones en serie originalmente publicado por Modicon (ahora Schneider Electric) en 1979 para su uso con sus controladores lógicos programables (PLC).

Modbus es un protocolo que (tradicionalmente) utiliza líneas de comunicación en serie. Estas líneas en serie conectan el maestro a los dispositivos esclavos Modbus para recopilar datos.

Modbus se ha convertido en un protocolo de comunicación estándar de facto y ahora es un medio comúnmente disponible para conectar dispositivos electrónicos industriales.

Modbus se soporta sobre RS-485 y RS-232 para recopilar datos de los dispositivos esclavos. De los dos, Modbus RS-485 es más común que RS-232 debido a su soporte para comunicación multipunto.

El protocolo Modbus es un tema mucho más amplio y escapa del alcance de este artículo. Al final de esta publicación podrás ver algunos enlaces para más información sobre este protocolo.

 

Aplicaciones de RS485

Por lo general los enlaces RS-485 se utilizan para redes simples, y pueden conectarse en modo de 2 o 4 hilos.

En una aplicación típica, varios dispositivos RS485 con una dirección predefinida pueden estar vinculados a una sola PC controladora, y de esta manera se puede usar una solo par de líneas para las comunicaciones con RS485.

También es posible convertir entre RS485 y RS232 utilizando convertidores de interfaz simples que pueden incluir aislamiento óptico entre los dos circuitos, así como supresión de sobretensiones para cualquier perturbación eléctrica que pueda detectarse.

aplicacion-tipica-red-comunicaciones-rs485
Aplicación típica de una red RS485

Usando las comunicaciones con RS-485, es posible construir una red de comunicaciones de datos multipunto. El estándar especifica que se pueden usar hasta 32 controladores o transmisores junto con 32 receptores en un sistema.

Esto significa que puede haber 32 nodos capaces de transmitir y recibir. Esto se puede extender aún más utilizando repetidores automáticos y controladores/receptores de alta impedancia.

De esta manera, es posible tener cientos de nodos en una red. Además de esto, RS485 extiende el rango de modo común tanto para los controladores como para los receptores en el modo tri-estado y con la alimentación apagada.

Además, los controladores RS-485 pueden soportar problemas de colisión de datos (contención del bus) y condiciones de falla del bus.

A medida que las redes RS485 se hacen más grandes, el problema de las colisiones de datos se hace mayor. Esto se puede resolver, al menos en parte, asegurando que las unidades de hardware (convertidores, repetidores, controles de microprocesador) estén diseñadas para permanecer en modo de recepción hasta que estén listas para transmitir datos.

Otro enfoque es diseñar un sistema de maestro único. Aquí el maestro inicia una solicitud de comunicaciones a un nodo esclavo dirigiéndose a esa unidad. El hardware detecta el bit de inicio de la transmisión y, por lo tanto, habilita el transmisor. Una vez que se envían los datos solicitados, el hardware vuelve al modo de recepción.

 

Arduino y RS485

Usar comunicaciones con RS485 y la placa Arduino es realmente simple. Lo único que se necesita para ello es un adaptador UART-RS485.

Este adaptador es un interfaz generalmente basado en el chip MAX485 o el SP3485 , u otros chips, que se encarga de adaptar los voltajes.

sp3485-rs485-maxlinear
Tarjeta de pruebas RS485 con chip MaxLinear SP3485
max485-rs485
Tarjeta de pruebas RS485 con chip Maxim MAX485

Básicamente, usaremos una comunicación básica serial entre dos placas Arduino, con la salvedad de incorporar entre ambas los necesarios módulos de adaptación y escribir el programa que permita controlar los adaptadores.

 

MaxLinear SP3485

El MaxLinear SP3485 es un transceiver Half-Duplex de baja potencia (3.3V y soporta hasta 5V) que cumple con las especificaciones de los protocolos seriales RS-485 y RS-422.

El SP3485 puede cumplir con las especificaciones eléctricas de los protocolos seriales RS-485 y RS-422 hasta 10Mbps bajo carga.

sp3485-pin
Chip SP3485

La forma más accesible de usar este chip en nuestros proyectos con Arduino es usando el módulo Breakout Board SP3485.

sp3485-anverso
Anverso SP3485
sp3485-reverso
Reverso SP3485
PIN FUNCION
3-5V Entrada de alimentación (3.3V a 5V)
RX-I Entrada de datos TTL desde la UART
TX-O Salida de datos TTL hacia la UART
RTS Selector de modo TX/RX
GND Común a masa (tierra)
B Entrada/Salida diferencial inversora
A Entrada/Salida diferencial no inversora
G Común a masa (tierra)

 

El SP3485 opera a una velocidad de hasta 10Mbps. La carga máxima es de 250mA en la salida del chip, lo que permite que resista un cortocircuito infinito en el rango de modo común de -7.0V a + 2V sin daños catastróficos al chip.

 

Maxim MAX485

El chip MAX485 fabricado por Maxim es un transceiver TTL a RS485, soporta una distancia máxima de comunicaciones de 1200 metros.

maxim-max485
Chip Maxim MAX485

El MAX485 es un chip bidireccional en modo Half-Duplex, y tiene una tasa máxima de trasferencia de datos de 2.5Mbps.

El voltaje de alimentación es de 5V lo cual lo hace una opción ideal para su uso en proyectos basados en placas Arduino.

Una forma fácil y como de usar este chip es mediante el módulo RS485-MAX485.

ttl-rs485-max485
Módulo RS485-MAX485
PIN FUNCION
VCC Alimentación 5V
A TX/RX no inversor
B TX/RX inversor
GND Común a masa (tierra)
R0 Receiver Out (RX)
RE Receiver Output (activo a nivel bajo)
DE Driver Output (activo a nivel alto)
DI Driver Input (TX)

Este módulo es muy fácil de conectar a la placa Arduino, así como su programación. Simplemente hay que conectar las líneas RO y DI del módulo a RX y TX de la placa Arduino respectivamente, además de la necesaria conexión a 5V y GND.

 

Ejemplos de programación con RS485 para Arduino

Veremos los tres posibles casos de comunicaciones punto a punto usando RS485:

  • Comunicación simplex: en esta modalidad la transferencia de datos es en un solo sentido. Es la más sencilla de usar.
  • Comunicación half-duplex: en esta modalidad la transferencia de datos es bidireccional, pero no simultánea, es necesario establecer un control de flujo para transmitir información en un sentido u otro.
  • Comunicación full-duplex: esta es la modalidad mas compleja, y es la que necesita mayor cantidad de hardware. Permite la comunicación bidireccional en forma simultánea, similar a la usada en RS232.

El experimento de prueba consistirá en enviar números del 0 al 9 del emisor al receptor, con eco en la consola.

Para ello, usaremos dos puertos seriales en cada placa Arduino. Dado que estos ejemplos se harán en placas Arduino UNO, se usará la librería SoftwareSerial para crear un puerto serie por software en los pines 3 y 4 (RX y TX respectivamente) que se comunicará con el transceiver RS485. El puerto serie estándar de la placa Arduino (en el conector USB) se usará para la consola.

El programa para cada ejemplo es exactamente el mismo para ambos chips (MaxLinear y Maxim) y funciona perfectamente igual en ambos chips sin ningún tipo de modificación adicional.

 

Comunicaciones con RS485 en modo Simplex

arduino-comunicaciones-rs485-sp3485-simplex
Montaje ejemplo con Arduino y SP3485 para comunicación Simplex
arduino-comunicaciones-rs485-max485-simplex
Montaje ejemplo con Arduino y MAX485 para comunicación Simplex

Para este caso la comunicación se establece en un solo sentido. Una de las placas Arduino es la emisora (master) y la otra es la receptora (slave).

 

Comunicaciones con RS485 en modo Half-Duplex

Para este caso la comunicación es bidireccional, pero no simultánea. Ambas placas Arduino son emisoras y receptoras.

arduino-comunicaciones-rs485-sp3485-half-duplex
Montaje ejemplo con Arduino y SP3485 para comunicación Half-Duplex
arduino-comunicaciones-rs485-max485-half-duplex
Montaje ejemplo con Arduino y MAX485 para comunicación Half-Duplex

Para evitar que las placas Arduino transmitan a la vez, ambas inician en modo recepción, y una de las placas Arduino inicia la transmisión (master), conmutando el pin 2 de modo LOW a modo HIGH, haciendo que el transceiver pase a modo transmisión.

Una vez emite el dato, el pin 2 conmuta al modo LOW, pasando el transceiver a modo recepción.

La otra placa Arduino está en estado de recepción (slave). Al recibir un dato, le suma el valor de 1 y procede a transmitirlo.

Para ello, al igual que caso anterior, conmuta el pin 2 a modo HIGH, pasando el transceiver a modo transmisión, y una vez finalizada, el Pin 2 conmuta nuevamente a modo LOW, quedando el transceiver en modo recepción.

 

Comunicaciones con RS485 en modo Full-Duplex

Este es el caso más complejo a nivel de hardware, ya que requiere 4 transceivers, dos dedicados al modo TX-RX y el otro par para el modo RX-TX. De esta forma se obtiene comunicación bidireccional continua.

arduino-comunicaciones-rs485-sp3485-full-duplex
Montaje ejemplo con Arduino y SP3485 para comunicación Full-Duplex
arduino-comunicaciones-rs485-max485-full-duplex
Montaje ejemplo con Arduino y MAX485 para comunicación Full-Duplex

Por otro lado, el programa es mucho más sencillo, ya que no es necesario tener pin de control RX/TX, y las comunicaciones se hacen transparentes, de modo similar a como se el puerto serial estándar.

 

Referencias

Protocolo Modbus:

https://www.ni.com/es-es/innovations/white-papers/14/the-modbus-protocol-in-depth.html

http://www.bb-elec.com/Learning-Center/All-White-Papers/Modbus/The-Answer-to-the-14-Most-Frequently-Asked-Modbus.aspx

https://www.prosoft-technology.com/kb/assets/intro_modbustcp.pdf

También te puede interesar