- Comunicación serial RS-485
- Componentes requeridos
- Diagrama de circuito
- Programación de STM32F103C8 y Arduino UNO para comunicación serie RS485
- Probando la comunicación RS485 entre STM32F103C8 y Arduino UNO:
Los protocolos de comunicación son la parte integral de una electrónica digital y un sistema integrado. Siempre que exista una interfaz de varios microcontroladores y periféricos, se debe utilizar el protocolo de comunicación para intercambiar un montón de datos. Hay muchos tipos de protocolos de comunicación en serie disponibles. El RS485 es uno de los protocolos de comunicación en serie y se utiliza en proyectos industriales y maquinarias pesadas.
Aprendimos sobre la comunicación serial RS485 entre Arduino Uno y Arduino Nano en el tutorial anterior . Este tutorial trata sobre el uso de una comunicación serie RS-485 en el microcontrolador STM32F103C8. Si es nuevo en el microcontrolador STM32, comience con Primeros pasos con STM32 usando Arduino IDE: LED parpadeante y verifique todos los proyectos STM32 aquí.
En este tutorial, el Maestro STM32F103C8 tiene tres botones pulsadores que se utilizan para controlar el estado de tres LED presentes en el Esclavo Arduino Uno mediante la comunicación serie RS-485.
Comencemos por comprender el funcionamiento de la comunicación serie RS-485.
Comunicación serial RS-485
RS-485 es un protocolo de comunicación en serie asíncrono que no requiere reloj. Utiliza una técnica llamada señal diferencial para transferir datos binarios de un dispositivo a otro.
Entonces, ¿qué es este método de transferencia de señal diferencial?
El método de señal diferencial funciona creando un voltaje diferencial usando 5V positivo y negativo. Proporciona una comunicación Half-Duplex cuando se utilizan dos cables y una comunicación Full-Duplex cuando se utilizan cuatro cables.
Usando este método:
- RS-485 admite una mayor velocidad de transferencia de datos de 30 Mbps como máximo.
- También proporciona una distancia máxima de transferencia de datos en comparación con el protocolo RS-232. Transfiere datos hasta un máximo de 1200 metros.
- La principal ventaja de RS-485 sobre RS-232 es el esclavo múltiple con un solo maestro, mientras que RS-232 admite solo un esclavo.
- Puede tener un máximo de 32 dispositivos conectados al protocolo RS-485.
- Otra ventaja del RS-485 es inmune al ruido, ya que utilizan el método de señal diferencial para transferir.
- RS-485 es más rápido en comparación con el protocolo I2C.
El módulo RS-485 se puede conectar a cualquier microcontrolador que tenga puerto serie. Para usar el módulo RS-485 con microcontroladores, se necesita un módulo llamado 5V MAX485 TTL a RS485 que se basa en Maxim MAX485 IC ya que permite la comunicación en serie a una larga distancia de 1200 metros y es bidireccional y semidúplex tiene una tasa de transferencia de datos de 2.5 Mbps. Este módulo requiere un voltaje de 5V.
Descripción del pin RS-485:
Nombre de PIN |
Descripción |
VCC |
5V |
UN |
Entrada de receptor no inversora Salida de controlador no inversora |
segundo |
Inversión de la entrada del receptor Inversión de la salida del controlador |
GND |
TIERRA (0 V) |
R0 |
Salida del receptor (pin RX) |
RE |
Salida del receptor (LOW-Enable) |
Delaware |
Salida del controlador (HIGH-Enable) |
DI |
Entrada del controlador (pin TX) |
El módulo RS485 tiene las siguientes características:
- Voltaje de funcionamiento: 5 V
- Chip MAX485 integrado
- Un bajo consumo de energía para la comunicación RS485
- Transceptor limitado de velocidad de respuesta
- Terminal 2P de paso de 5,08 mm
- Cómodo cableado de comunicación RS-485
- Todos los pines del chip se pueden controlar a través del microcontrolador.
- Tamaño de la placa: 44 x 14 mm
Usar este módulo con STM32F103C8 y Arduino UNO es muy fácil. Se utilizan los puertos serie de hardware de los microcontroladores. Los pines seriales de hardware en STM32 y arduino UNO se muestran a continuación.
- En STM32F103C8: Pines PA9 (TX) y PA10 (RX)
- En Arduino Uno: Pin 0 (RX) y 1 (TX)
La programación también es simple, solo use Serial.print () para escribir en RS-485 y Serial.Read () para leer desde RS-485 y los pines DE & RE de RS-485 se hacen BAJOS para recibir datos y ALTOS para escribir datos en el bus RS-485.
Componentes requeridos
- STM32F103C8
- Arduino UNO
- Módulo convertidor MAX485 TTL a RS485 - (2)
- Potenciómetro 10K
- Botón pulsador - 3
- LED - 3
- Resistencias
- Tablero de circuitos
- Conexión de cables
Diagrama de circuito
En este tutorial, STM32F103C8 se usa como maestro con un módulo RS-485 y Arduino UNO se usa como esclavo con otro módulo RS-485.
Conexión de circuito entre RS-485 y STM32F103C8 (maestro):
RS-485 |
STM32F103C8 |
DI |
PA9 (TX1) |
Delaware RE |
PA3 |
R0 |
PA10 (RX1) |
VCC |
5V |
GND |
GND |
UN |
A A del esclavo RS-485 |
segundo |
Hacia B del esclavo RS-485 |
STM32F103C8 con tres pulsadores:
Tres pulsadores con tres resistencias pull-down de 10k están conectados a los pines PA0, PA1, PA2 de STM32F103C8.
Conexión de circuito entre RS-485 y Arduino UNO (esclavo):
RS-485 |
Arduino UNO |
DI |
1 (TX) |
Delaware RE |
2 |
R0 |
0 (RX) |
VCC |
5V |
GND |
GND |
UN |
Hacia A del maestro RS-485 |
segundo |
Hacia B del RS-485 maestro |
Se utilizan tres LED donde los ánodos de los LED con resistencia de 330 ohmios están conectados a los pines 4, 7, 8 de Arduino UNO y el cátodo de los LED están conectados a GND.
Programación de STM32F103C8 y Arduino UNO para comunicación serie RS485
Arduino IDE se utiliza para el desarrollo y programación de ambas placas, es decir, STM32 y Arduino UNO. Pero asegúrese de haber seleccionado el PUERTO correspondiente desde Herramientas-> Puerto y placa desde Herramientas-> Placa. Si encuentra alguna dificultad o duda, simplemente consulte Programación de su STM32 en ARDUINO IDE. La programación de este tutorial consta de dos secciones, una para STM32F103C8 (Master) y otra para Arduino UNO (Slave). Ambos códigos se explicarán uno por uno a continuación.
STM32F103C8 como maestroEn el lado maestro, se lee el estado del botón pulsador y luego se escriben en serie esos valores en el bus RS-485 a través de los puertos serie de hardware 1 (PA9, PA10) de STM32F103C8. Además, no se necesita una biblioteca externa a partir de ahora. El Arduino tiene toda la biblioteca necesaria para la comunicación en serie.
Comience la comunicación en serie utilizando los pines de serie de hardware (PA9, PA10) a una velocidad de carga de 9600.
Serial1.begin (9600);
Leer el estado del pulsador en los pines PA0, PA1, PA2 del STM32F103C8 y almacenarlos en una variable button1val, button2val, button3val. El valor es ALTO si se presiona el botón y BAJO cuando no se presiona.
int button1val = digitalRead (button1); int button2val = digitalRead (button2); int button3val = digitalRead (button3);
Antes de enviar los valores del botón al puerto serie, los pines DE y RE de RS-485 deben estar ALTOS que están conectados al pin PA3 de STM32F103C8 (Para hacer que el pin PA3 ALTO):
digitalWrite (enablePin, HIGH);
A continuación, para poner esos valores en el puerto serie y enviar valores dependiendo de qué botón se presione, use la instrucción if else y envíe el valor correspondiente cuando se presione el botón.
Si se presiona el primer botón, la condición coincide y el valor '1' se envía al puerto serie donde está conectado Arduino UNO.
if (button1val == HIGH) { int num1 = 1; Serial1.println (num1); }
De manera similar, cuando se presiona el botón 2, el valor 2 se envía a través del puerto serie y cuando se presiona el botón 3, se envía el valor 3 a través del puerto serie.
else if (button2val == HIGH) { int num2 = 2; Serial1.println (num2); } else if (button3val == HIGH) { int num3 = 3; Serial1.println (num3); }
Y cuando no se presiona ningún botón, el valor 0 se envía a Arduino Uno.
else { int num = 0; Serial1.println (num); }
Esto finaliza la programación para configurar STM32 como maestro.
Arduino UNO como esclavoEn el lado esclavo, el Arduino UNO recibe un valor entero que se envía desde el maestro STM32F103C8 que está disponible en el puerto serie de hardware del Arduino UNO (P0, 1) donde está conectado el módulo RS-485.
Simplemente lea el valor y guárdelo en una variable. Dependiendo del valor recibido, el LED correspondiente se enciende o apaga conectado a Arduino GPIO.
Para recibir los valores del Maestro, simplemente haga que los pines DE & RE del módulo RS-485 estén BAJOS. Entonces, el pin-2 (enablePin) de Arduino UNO se hace BAJO.
digitalWrite (enablePin, LOW);
Ahora solo lea los datos enteros disponibles en el puerto serie y guárdelos en una variable.
int recibir = Serial.parseInt ();
Dependiendo del valor, es decir, (0, 1, 2, 3) recibido, el correspondiente de los tres LED se enciende.
if (recibir == 1) // Dependiendo del valor recibido el LED correspondiente se enciende o apaga { digitalWrite (ledpin1, HIGH); } else if (recibir == 2) { digitalWrite (ledpin2, HIGH); } else if (recibir == 3) { digitalWrite (ledpin3, HIGH); } else { digitalWrite (ledpin1, LOW); digitalWrite (ledpin2, BAJO); digitalWrite (ledpin3, BAJO); }
Esto termina de programar y configurar Arduino UNO como esclavo. También esto finaliza las configuraciones completas para Arduino UNO y STM32. El video de trabajo y todos los códigos se adjuntan al final de este tutorial.
Probando la comunicación RS485 entre STM32F103C8 y Arduino UNO:
1. Cuando se presiona el botón Push-1, que está conectado al Master STM32, se enciende el LED 1 conectado al Slave Arduino.
2. Cuando se presiona el botón 2, que está conectado al STM32 maestro, el LED 2 se enciende conectado al Arduino esclavo.
3. De manera similar, cuando se presiona el botón 3, el LED 3 se enciende conectado al Arduino esclavo.
Esto finaliza la comunicación serial RS485 entre STM32F103C8 y Arduino UNO. Las placas Arduino UNO y STM32 son placas ampliamente utilizadas para la creación rápida de prototipos y hemos realizado muchos proyectos útiles en estas placas. Si tiene alguna duda o tiene alguna sugerencia para nosotros, escriba y comente a continuación.