- Comunicació en sèrie RS-485
- Components necessaris
- Esquema de connexions
- Programació STM32F103C8 i Arduino UNO per a comunicacions en sèrie RS485
- Prova de la comunicació RS485 entre STM32F103C8 i Arduino UNO:
Els protocols de comunicació són la part integral d’una electrònica digital i d’un sistema incrustat. Sempre que hi hagi interfícies entre diversos microcontroladors i perifèrics, s’ha d’utilitzar el protocol de comunicació per intercanviar un munt de dades. Hi ha molts tipus de protocols de comunicació en sèrie disponibles. El RS485 és un dels protocols de comunicació en sèrie i s’utilitza en projectes industrials i maquinàries pesades.
Vam conèixer la comunicació serial RS485 entre Arduino Uno i Arduino Nano al tutorial anterior . Aquest tutorial tracta d’utilitzar una comunicació sèrie RS-485 al microcontrolador STM32F103C8. Si no coneixeu el microcontrolador STM32, comenceu per Introducció a STM32 amb Arduino IDE: LED parpellejant i comproveu aquí tots els projectes STM32.
En aquest tutorial, el Màster STM32F103C8 té tres botons polsadors que s’utilitzen per controlar l’estat de tres LED presents al Slave Arduino Uno mitjançant la comunicació sèrie RS-485.
Comencem per entendre el funcionament de la comunicació sèrie RS-485.
Comunicació en sèrie RS-485
RS-485 és un protocol de comunicació en sèrie asíncrona que no requereix rellotge. Utilitza una tècnica anomenada senyal diferencial per transferir dades binàries d’un dispositiu a un altre.
Llavors, què és aquest mètode de transferència de senyal diferencial ??
El mètode de senyal diferencial funciona creant una tensió diferencial mitjançant un 5V positiu i negatiu. Proporciona una comunicació Half-Duplex quan s’utilitzen dos cables i una comunicació Full-Duplex quan s’utilitzen quatre cables.
En utilitzar aquest mètode:
- El RS-485 admet una velocitat de transferència de dades superior a 30 Mbps com a màxim.
- També proporciona una distància màxima de transferència de dades en comparació amb el protocol RS-232. Transfereix dades fins a 1200 metres com a màxim.
- El principal avantatge de l'RS-485 respecte a l'RS-232 és l'esclau múltiple amb mestre únic, mentre que l'RS-232 només admet un esclau únic.
- Pot tenir un màxim de 32 dispositius connectats al protocol RS-485.
- Un altre avantatge del RS-485 és immune al soroll ja que utilitzen el mètode de senyal diferencial per transferir.
- El RS-485 és més ràpid en comparació amb el protocol I2C.
El mòdul RS-485 es pot connectar a qualsevol microcontrolador que tingui port sèrie. Per utilitzar mòduls RS-485 amb microcontroladors, es necessita un mòdul anomenat 5V MAX485 TTL a RS485 basat en IC Maxim MAX485, ja que permet la comunicació en sèrie a una distància llarga de 1200 metres i és bidireccional i mig dúplex amb una velocitat de transferència de dades de 2,5 Mbps. Aquest mòdul requereix una tensió de 5V.
Descripció del pin RS-485:

|
Nom del pin |
Descripció |
|
VCC |
5V |
|
A |
Entrada del receptor que no inverteix Sortida de controlador que no inverteix |
|
B |
Invertir l'entrada del receptor Invertint la sortida del controlador |
|
GND |
GND (0V) |
|
R0 |
Sortida del receptor (pin RX) |
|
RE |
Sortida del receptor (habilitació BAIXA) |
|
DE |
Sortida del controlador (activat per ALTA) |
|
DI |
Entrada del controlador (pin TX) |
El mòdul RS485 té les funcions següents:
- Tensió de funcionament: 5V
- Xip MAX485 a bord
- Un baix consum d’energia per a la comunicació RS485
- Transceptor limitat de velocitat de gir
- Terminal 2P de pas de 5,08 mm
- Cablatge de comunicació RS-485 còmode
- Tots els pins del xip han estat controlats a través del microcontrolador
- Mida del tauler: 44 x 14 mm
L’ús d’aquest mòdul amb STM32F103C8 i Arduino UNO és molt fàcil. S’utilitzen els ports sèrie de maquinari dels microcontroladors. A continuació es mostren els pins de sèrie del maquinari de STM32 i arduino UNO.
- A STM32F103C8: pins PA9 (TX) i PA10 (RX)
- A Arduino Uno: Pin 0 (RX) i 1 (TX)
La programació també és senzilla només ha d'utilitzar el Serial.print () per escriure a RS-485 i Serial.Read () per llegir de RS-485 i els passadors D'& RE de RS-485 es fa BAIXA per rebre dades i va fer ALT a escriure dades al bus RS-485.
Components necessaris
- STM32F103C8
- Arduino UNO
- Mòdul convertidor MAX485 TTL a RS485 - (2)
- Potenciòmetre de 10K
- Polsador: 3
- LED - 3
- Resistències
- Taula de pa
- Connexió de cables
Esquema de connexions

En aquest tutorial s'utilitza STM32F103C8 com a mestre amb un mòdul RS-485 i Arduino UNO s'utilitza com a esclau amb un altre mòdul RS-485.
Connexió del circuit entre el RS-485 i el STM32F103C8 (mestre):
|
EL-485 |
STM32F103C8 |
|
DI |
PA9 (TX1) |
|
DE RE |
PA3 |
|
R0 |
PA10 (RX1) |
|
VCC |
5V |
|
GND |
GND |
|
A |
A A de l'esclau RS-485 |
|
B |
A B de l’esclau RS-485 |
STM32F103C8 amb botó de tres pulsacions:
Tres botons polsadors amb tres resistències de tracció cap avall de 10 k estan connectats als pins PA0, PA1, PA2 de STM32F103C8.
Connexió de circuits entre el RS-485 i Arduino UNO (esclau):
|
EL-485 |
Arduino UNO |
|
DI |
1 (TX) |
|
DE RE |
2 |
|
R0 |
0 (RX) |
|
VCC |
5V |
|
GND |
GND |
|
A |
A A del mestre RS-485 |
|
B |
A B del mestre RS-485 |
S’utilitzen tres LEDs on els ànodes de LEDs amb resistència de 330 ohms estan connectats als pins 4, 7, 8 d’Arduino UNO i el càtode dels LED es connecta a GND.
Programació STM32F103C8 i Arduino UNO per a comunicacions en sèrie RS485
Arduino IDE s’utilitza per al desenvolupament i la programació d’ambdues plaques, és a dir, STM32 i Arduino UNO. Però assegureu-vos que heu seleccionat el PORT corresponent a Eines-> Port i tauler a Eines-> Tauler. Si teniu dificultats o dubtes, consulteu Programació del vostre STM32 a ARDUINO IDE. La programació d’aquest tutorial consta de dues seccions, una per a STM32F103C8 (Master) i una altra per a Arduino UNO (Slave). Tots dos codis s'explicaran un per un a continuació.
STM32F103C8 com a mestreAl costat mestre, es llegeix l’estat del botó i després s’escriu en sèrie aquests valors al bus RS-485 a través dels ports sèrie 1 de maquinari (PA9, PA10) de STM32F103C8. A més, no hi ha biblioteca externa necessària a partir d'ara. L'Arduino té tota la biblioteca necessària per a la comunicació en sèrie.
Comenceu la comunicació en sèrie utilitzant els pins serials de maquinari (PA9, PA10) a una bateria de 9600.
Serial1.begin (9600);
Llegiu l'estat del polsador als pins PA0, PA1, PA2 de STM32F103C8 i emmagatzemeu-los en una variable button1val, button2val, button3val. El valor és ALT si es prem el botó i BAIX quan no es prem.
int button1val = digitalRead (botó1); int button2val = digitalRead (botó2); int button3val = digitalRead (button3);
Abans d’enviar els valors del botó al port sèrie, els pins DE & RE de RS-485 haurien de ser ALTA connectats al pin PA3 de STM32F103C8 (Per fer pin PA3 HIGH):
digitalWrite (enablePin, HIGH);
A continuació, poseu aquests valors al port sèrie i envieu els valors en funció del botó polsador que utilitzeu la sentència if else i envieu el valor corresponent quan es prem el botó.
Si es prem el primer botó, la condició coincideix i el valor '1' s'envia al port sèrie on està connectat Arduino UNO.
if (botó1val == ALT) { int num1 = 1; Sèrie1.println (num1); }
De la mateixa manera, quan es prem el botó 2, el valor 2 s'envia pel port sèrie i quan es prem el botó 3, el valor 3 s'envia pel port sèrie.
else if (button2val == HIGH) { int num2 = 2; Sèrie1.println (num2); } else if (button3val == HIGH) { int num3 = 3; Sèrie1.println (num3); }
I quan no es prem cap botó, el valor 0 s'envia a Arduino Uno.
else { int num = 0; Serial1.println (num); }
S'acaba la programació per configurar STM32 com a Mestre.
Arduino UNO com a esclauAl costat esclau, Arduino UNO rep un valor enter que s’envia des del Master STM32F103C8 que està disponible al port sèrie de maquinari de l’Arduino UNO (P0, 1) on està connectat el mòdul RS-485.
Simplement heu de llegir el valor i emmagatzemar-lo en una variable. Depenent del valor rebut, el LED corresponent s'encén o s'apaga connectat a Arduino GPIO.
Per rebre els valors del mestre, només cal que els pins DE & RE del mòdul RS-485 siguin BAIXOS. Per tant, el pin-2 (enablePin) d'Arduino UNO es fa BAIX.
digitalWrite (enablePin, LOW);
Ara només heu de llegir les dades enteres disponibles al port sèrie i emmagatzemar-les en una variable.
int rebre = Serial.parseInt ();
Depenent del valor és a dir (0, 1, 2, 3) rebut, el LED corresponent s'encén.
si (rebre == 1) // Depenent del valor rebut, el LED corresponent s'encén o s'apaga { digitalWrite (ledpin1, HIGH); } else if (rebre == 2) { digitalWrite (ledpin2, HIGH); } else if (rebre == 3) { digitalWrite (ledpin3, HIGH); } else { digitalWrite (ledpin1, LOW); digitalWrite (ledpin2, BAIX); digitalWrite (ledpin3, BAIX); }
S'acaba de programar i configurar Arduino UNO com a esclau. També acaba les configuracions completes per a Arduino UNO i STM32. El vídeo de treball i tots els codis s’adjunten al final d’aquest tutorial.
Prova de la comunicació RS485 entre STM32F103C8 i Arduino UNO:
1. Quan es prem el polsador-1, que està connectat al Master STM32, el LED 1 s'encén connectat a l'Slave Arduino.

2. Quan es prem el botó-2, que es connecta al Master STM32, el LED 2 S’encén connectat al Slave Arduino.

3. De la mateixa manera, quan es prem el botó 3, el LED 3 S’encén connectat a l’Slave Arduino.

Amb això s’acaba la comunicació en sèrie RS485 entre STM32F103C8 i Arduino UNO. Les plaques Arduino UNO i STM32 són taules àmpliament utilitzades per fer prototips ràpids i hem fet molts projectes útils en aquestes plaques. Si teniu dubtes o teniu algun suggeriment per a nosaltres, escriviu i comenteu a continuació.
