¿Conoces EIA - 485 y dmx - 512?Primera parte

En los años 80 y 90, un tema recurrente en las revistas informáticas se planteaba la interrogante de si era mejor la interfaz serie o la interfaz paralela para la transmisión de datos externos. La interfaz serie o RS232 (UART= Universal Asynchronous Receiver Transmitter) en el PC se utiliza principalmente para la transmisión de datos a distancia con módems (inicialmente en la red de télex), la interfaz paralela Centronics proporcionaba los datos a la impresora.

Ya conoce el resultado de la carrera por las velocidades más altas: internamente en el procesador y en la placa base, la anchura de los buses de datos es cada vez mayor, externamente la interfaz paralela ha sido reemplazada por el USB (= Universal Serial Bus) y las redes. Pero la interfaz RS-232 también ha desaparecido en gran medida porque tenía algunos puntos débiles considerables: alcance limitado y conexión sólo entre dos dispositivos exactamente.

Como paso intermedio a las redes actuales, se produjeron nuevos desarrollos de la interfaz serie RS-232, que se siguen utilizando hoy en día, entre otras, la interfaz RS-485 (la continuación de los estándares bajo el nombre actual de EIA-485 demuestra la actualidad) salva distancias mayores de hasta 1000 m gracias a la estructura simétrica de las señales en las dos líneas y permite la conexión en serie de hasta 32 dispositivos, siempre que los últimos dispositivos en cada caso tengan una resistencia de terminación. Como suele suceder en Wikipedia, puede encontrar diversas páginas informativas sobre UART, RS-232 Y EIA-485 para aquellos que quieren saber más.

Para utilizar la interfaz RS-485, que no está disponible en el hardware de los ordenadores actuales, compré un adaptador USB-RS-485 de bajo coste para la PC.

Adaptador USB RS - 485

Para los microcontroladores del tipo Arduino Uno o compatible, así como los similares D1 R1 (con ESP8266) y D1 R32 (con ESP32), hay un shield correspondiente, para la Raspberry Pi un HAT (Hardware Attached on Top).

Gorra de cuero RS - 485

Para familiarizarme con este tema, que era nuevo para mí, por ejemplo, en la página web de nuestro proveedor del  shield o del HAT: Fa.zihatec.

Desde allí descargué la hoja de datos, la nota de aplicación y los sketches de ejemplo. Pero como no pude conseguir que el ejemplo funcionara al principio, me gustaría dar un enfoque diferente a la explicación:

En primer lugar, ¿qué se quiere conseguir?

Este artículo introductorio trata de la realización de un esclavo MODBUS, ya que MODBUS es una de las aplicaciones más importantes de RS-485; es un protocolo abierto y se ha convertido en un estándar-de-facto para los controladores lógicos programables (PLC) en la industria.

Un sistema MODBUS necesita siempre un dispositivo maestro y al menos un dispositivo esclavo. Con el shield se puede realizar tanto un maestro como un esclavo. Sin embargo, cuando se utiliza un microcontrolador con Atmel 328, sólo es posible implementar un maestro hasta cierto punto, ya que la memoria RAM es muy limitada. Por lo tanto, en el ejemplo, se implementa un esclavo MODBUS y se utiliza un PC como maestro.

En la práctica, el maestro sería, por ejemplo, un PLC o un ordenador de control central al que se conectan como esclavos varias máquinas o dispositivos con interfaces RS485. El maestro puede ahora consultar y controlar secuencialmente todos los dispositivos conectados en el BUS RS485 a través del protocolo MODBUS. Para ello, todas las unidades tienen direcciones de bus diferentes.

El sketch de ejemplo transmite seis señales analógicas y la señal digital de un pulsador a través de la conexión RS-485 al PC y recibe de éste la información de si un LED debe estar encendido o apagado.

Para ello, conecté la shield al microcontrolador y conecté el siguiente circuito con seis potenciómetros en las entradas analógicas A0 a A5, un LED con una resistencia en serie en el pin digital 12 y un botón con una resistencia pull-down en el pin 7.

Circulación

Sistema de sinterización

Todavía se necesitan hacer algunos ajustes en el shield. Esto se hace, por un lado, con conectores de cortocircuito (jumpers) y, por otro, con la ayuda de pequeños interruptores (DIP switches, "Mouseklevier"). El etiquetado de la placa de circuito es muy útil.

Para nuestro microcontrolador con Atmega 328, conectamos el único jumper J1 a 5V, en la fila junto a los pines 0 a 7 conectamos la conexión de la línea RX al puerto 0 y la línea TX al puerto 1, el tercer jumper no es necesario para la conmutación automática RX / TX.

Transceptor asincrónico universal

Atención: En este experimento utilizamos los mismos pines que para la conexión USB con el Arduino IDE. Por lo tanto, se debe retirar el shield o estos dos pines durante la programación del microcontrolador (cargar el sketch). No se puede utilizar el monitor de serie en el IDE.


Por favor, ajuste los interruptores DIP como se muestra en la siguiente imagen:

Interruptor DIP

El microinterruptor más importante es el primero en el SW 3: Este activa la resistencia de terminación.

He modificado mínimamente el sketch de Hartmut Wendt, concretamente a la velocidad de transmisión 9600, y en el void setup () con un breve test de LEDs (Descargar la carpeta del sketch con 3 archivos):

 /*
  Procedimiento de ensayo de blindaje arduino rs422 / rs485
  Versión 1.0
  Copyright (c) 2018 Hartmut wendt www.zihatec.de
  *  
  (según la fuente)https://github.com/angeloc/simplemodbusng()
  *  
  *
  Este programa es gratuito: puede redistribuirlo y / o modificarlo
  Publicado bajo los términos de la licencia pública general GNU
  Free Software Foundation, License Version 3, or
  (A su elección) cualquier versión posterior.
  *
  El programa fue lanzado con la esperanza de que fuera útil,
  Pero no hay garantía; ni siquiera hay garantía.
  Comerciabilidad o idoneidad para un propósito específico.
  = = referencias = = = enlaces externos = = * GNU General Public License for more details.
  *
  Usted debe haber recibido una copia de la licencia pública general GNU
  Con este programa. Si no, veahttp://www.gnu.org/licenses/>.
 */  
 
 « 35; incluye "simplemodbus slave.h"
 « 35; definir el pin LED 12 Hielo
 35; definir botones en 7 Botón
 
 
 Usando la Directiva enum, puede a ñadir y
 Esto ahorra tiempo para definir el tamaño
 Cada vez que se a ñaden más registros, el
 Vea el diseño de su registro de esclavos en un vistazo.
 
 Su registro de esclavos / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
 1.
 {    
   Simplemente agregue o elimine el registro y su...
   El primer registro comienza en la dirección 0
   Adc0,    
   Adc1,        
   Adc2,
   Adc3,
   Adc4,
   Adc5,  
   Estado LED,
   Estado del botón,
   Error total,
   Deja esto.
   Registro de tamaño total
   Número total de registros de las funciones 3 y 16 que comparten la misma matriz de registros
 };
 
 Inapropiada Int Sociedad Holding[Registro de tamaño total]; Funciones 3 y 16 conjuntos de registros
 ////////////////////////////////////////////////////////////
 
 Vacío Configuración()
 {
   Configuración modbus(9600, 1, 6, Registro de tamaño total, 0);    // 115200
   Pinmode(Ledepin, Salida);
   Pinmode(Botón, Entrada);
 Añadir como primera prueba
   Escritura digital(Ledepin,Alto);
   Retraso(1000);
   Escritura digital(Ledepin,Baja);  
 }
 
 Vacío Ejecutar()
 {
   Modbus / u Update () es el único método utilizado en Loop (). Devuelve un error total
   No tienes que usarlo, pero es útil.
   Para la búsqueda de fallos del host modbus.
   Sociedad Holding[Error total] = Actualización modbus(Sociedad Holding);
   Para (Intercambio I = 0; I < 6; I++)
  {
     Sociedad Holding[I] = Simulación(I);
     Microsegundos retardados(50);        
  }
   
   Intercambio Botón = Lectura digital(Botón); Estado del botón de lectura
   
   Asignar el valor buttonstate al registro de retención
   Sociedad Holding[Estado del botón] = Botón;
   
   Lea el valor del registro de Estado LED y utilice la función 16 para ajustar el led del vehículo a alto o bajo
   Intercambio Guía = Sociedad Holding[Estado LED];
   
   Si (Guía) Establecer enlaces
  {          
     Escritura digital(Ledepin, Alto);
  }  
   Tiempo estimado de despegue Si (Guía == 0) Restablecer enlace
  {
     Escritura digital(Ledepin, Baja);
     Sociedad Holding[Estado LED] = 0;
  }
 }

En el lado del PC, conecté el adaptador USB-RS-485 a un puerto USB e instalé el programa ModbusTester.

La conexión serie es bastante sencilla: dos cables realizan la conexión de los respectivos puertos  A-A y B-B. Para los cables largos, los cables deben estar trenzados y la regla general es que la longitud del cable por la velocidad de transmisión no debe ser superior a 100 millones, por ejemplo, 50 m y un máximo de 2 Mbit/s.

Con el programa Modbus Tester, es importante establecer la misma tasa de baudios. El puerto COM virtual utilizado se muestra en la configuración de Windows y se debe seleccionar en el menú desplegable.

Salida de valores; En esta captura de pantalla, después de hacer clic en Leer (abajo a la derecha), se muestran los valores que ajusté en los potenciómetros en los registros 1 a 6, así como el estado del pulsador en el registro 8.

Introducción de comandos: La escritura envía el valor del registro 7 (aquí 1) al microcontrolador para encender el LED. Para desconectar, preseleccione 0, y pulse Escribir.

Probador modbus

Por supuesto, esto es sólo una primera prueba de los dispositivos utilizados. En el sitio web de zihatec se pueden encontrar aplicaciones serias como la integración de dispositivos en las embarcaciones según NMEA-083 (GPS, etc). En una segunda parte, me gustaría pasar a la tecnología de iluminación con DMX. También utilizo el Shield RS-485 para esto.

Para arduinoProyectos para principiantes

Deja un comentario

Todos los comentarios son moderados antes de ser publicados

Artículos de blog

  1. Ahora instalamos el esp32 a través de la administración.
  2. Lüftersteuerung Raspberry Pi
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1
  4. ESP32 - das Multitalent
  5. Transporte Aéreo - programación de ESP mediante redes locales inalámbricas