- RS-485 serijska komunikacija
- Komponente potrebne
- Kružni dijagram
- Programiranje STM32F103C8 i Arduino UNO za serijsku komunikaciju RS485
- Testiranje RS485 komunikacije između STM32F103C8 i Arduino UNO:
Komunikacijski protokoli sastavni su dio digitalne elektronike i ugrađenog sustava. Gdje god postoji međusobno povezivanje više mikrokontrolera i perifernih uređaja, komunikacijski protokol mora se koristiti za razmjenu hrpe podataka. Dostupne su mnoge vrste protokola serijske komunikacije. RS485 jedan je od serijskih komunikacijskih protokola i koristi se u industrijskim projektima i teškim strojevima.
O serijskoj komunikaciji RS485 između Arduino Uno i Arduino Nano saznali smo u prethodnom vodiču . Ovaj se vodič bavi upotrebom serijske komunikacije RS-485 u mikrokontroleru STM32F103C8. Ako ste novi u STM32 mikrokontroleru, krenite s Početak rada sa STM32 koristeći Arduino IDE: Trepćuća LED i ovdje provjerite sve STM32 projekte.
U ovom uputstvu Master STM32F103C8 ima tri tipke koje se koriste za kontrolu statusa tri LED diode prisutne na Slave Arduino Uno pomoću serijske komunikacije RS-485.
Započnimo s razumijevanjem rada serijske komunikacije RS-485.
RS-485 serijska komunikacija
RS-485 je asinkroni serijski komunikacijski protokol koji ne zahtijeva sat. Koristi tehniku koja se naziva diferencijalni signal za prijenos binarnih podataka s jednog uređaja na drugi.
Pa što je to metoda diferencijalnog prijenosa signala ??
Metoda diferencijalnog signala djeluje stvaranjem diferencijalnog napona pomoću pozitivnih i negativnih 5V. Omogućuje Half-Duplex komunikaciju kada se koriste dvije žice i Full-Duplex komunikaciju kada se koriste četiri žice.
Korištenjem ove metode:
- RS-485 podržava veću brzinu prijenosa podataka od maksimalno 30 Mb / s.
- Također pruža maksimalnu udaljenost prijenosa podataka u usporedbi s RS-232 protokolom. Prenosi podatke do maksimalno 1200 metara.
- Glavna prednost RS-485 u odnosu na RS-232 je višestruki slave s jednim glavnim upravljačem, dok RS-232 podržava samo jednog slave.
- Može imati najviše 32 uređaja spojena na RS-485 protokol.
- Sljedeća prednost RS-485 je imuna na buku jer za prijenos koriste metodu diferencijalnog signala.
- RS-485 je brži u usporedbi s I2C protokolom.
RS-485 modul može se povezati s bilo kojim mikrokontrolerom koji ima serijski priključak. Za upotrebu RS-485 modula s mikrokontrolerima potreban je modul nazvan 5V MAX485 TTL do RS485 koji se temelji na Maxim MAX485 IC jer omogućuje serijsku komunikaciju na velike udaljenosti od 1200 metara i dvosmjeran je, a poludupleks ima brzinu prijenosa podataka od 2,5 Mbps. Ovaj modul zahtijeva napon od 5V.
Opis RS-485 pina:

|
Naziv pribadače |
Opis |
|
VCC |
5V |
|
A |
Neinvertirajući ulaz prijamnika Neinvertirajući izlaz vozača |
|
B |
Invertiranje ulaza prijemnika Invertiranje izlaza vozača |
|
GND |
GND (0 V) |
|
R0 |
Prijemnik izlaz (RX pin) |
|
PONOVNO |
Izlaz prijamnika (LOW-Enable) |
|
DE |
Izlaz za vozača (HIGH-Enable) |
|
DI |
Ulaz za vozača (TX pin) |
RS485 modul ima sljedeće značajke:
- Radni napon: 5V
- Ugrađeni čip MAX485
- Niska potrošnja energije za RS485 komunikaciju
- Primopredajnik s ograničenom brzinom porasta
- 2P terminal sa korakom 5,08 mm
- Prikladno RS-485 ožičenje za komunikaciju
- Svi dovedeni klinovi čipa mogu se kontrolirati putem mikrokontrolera
- Veličina ploče: 44 x 14mm
Korištenje ovog modula sa STM32F103C8 i Arduino UNO vrlo je jednostavno. Koriste se hardverski serijski priključci mikrokontrolera. Hardverske serijske igle u STM32 i arduino UNO date su u nastavku.
- U STM32F103C8: igle PA9 (TX) i PA10 (RX)
- U Arduino Uno: Pin 0 (RX) i 1 (TX)
Programiranje je također jednostavno, samo koristite Serial.print () za pisanje na RS-485 i Serial.Read () za čitanje s RS-485, a igle DE & RE RS-485 napravljene su NISKO za primanje podataka i VISOKO za upisati podatke na RS-485 sabirnicu.
Komponente potrebne
- STM32F103C8
- Arduino UNO
- Modul pretvarača MAX485 TTL u RS485 - (2)
- 10K potenciometar
- Gumb - 3
- LED - 3
- Otpornici
- Breadboard
- Spajanje žica
Kružni dijagram

U ovom se priručniku STM32F103C8 koristi kao Master s jednim RS-485 modulom, a Arduino UNO se koristi kao Slave s drugim RS-485 modulom.
Kružna veza između RS-485 i STM32F103C8 (glavni):
|
RS-485 |
STM32F103C8 |
|
DI |
PA9 (TX1) |
|
DE PONOVNO |
PA3 |
|
R0 |
PA10 (RX1) |
|
VCC |
5V |
|
GND |
GND |
|
A |
Do A podređenog RS-485 |
|
B |
Do B Slave RS-485 |
STM32F103C8 s tri tipke:
Tri tipke s tri otpornika za izvlačenje od 10 k povezana su na igle PA0, PA1, PA2 STM32F103C8.
Kružna veza između RS-485 i Arduino UNO (slave):
|
RS-485 |
Arduino UNO |
|
DI |
1 (TX) |
|
DE PONOVNO |
2 |
|
R0 |
0 (RX) |
|
VCC |
5V |
|
GND |
GND |
|
A |
Do A magistra RS-485 |
|
B |
Do B Master RS-485 |
Koriste se tri LED diode gdje su anode LED dioda s otpornikom od 330 ohma povezane na pinove 4, 7, 8 Arduino UNO, a katoda LED dioda spojena na GND.
Programiranje STM32F103C8 i Arduino UNO za serijsku komunikaciju RS485
Arduino IDE koristi se za razvoj i programiranje obje ploče, tj. STM32 i Arduino UNO. Ali provjerite jeste li odabrali odgovarajući LUKA u Alati-> Ulaz i Ploča u Alati-> Ploča. Ako naiđete na bilo kakve poteškoće ili sumnje, jednostavno pogledajte Programiranje vašeg STM32 u ARDUINO IDE. Programiranje ovog vodiča sastoji se od dva dijela, prvog za STM32F103C8 (Master) i drugog za Arduino UNO (Slave). U nastavku će se objasniti oba koda.
STM32F103C8 kao MasterNa strani Master, status gumba se čita, a zatim serijski upisuje te vrijednosti u RS-485 sabirnicu kroz hardverske serijske priključke 1 (PA9, PA10) STM32F103C8. Također od sada nije potrebna vanjska knjižnica. Arduino ima svu potrebnu knjižnicu za serijsku komunikaciju.
Započnite serijsku komunikaciju pomoću hardverskih serijskih pinova (PA9, PA10) na buadrateu od 9600.
Serial1.begin (9600);
Očitajte status tipke na klinovima PA0, PA1, PA2 na STM32F103C8 i pohranite ih u varijablu button1val, button2val, button3val. Vrijednost je HIGH ako se pritisne tipka i LOW kada se ne pritisne.
int button1val = digitalRead (button1); int button2val = digitalRead (button2); int button3val = digitalRead (button3);
Prije slanja vrijednosti gumba u serijski priključak, pinovi DE & RE RS-485 trebaju biti VISOKI i povezani su na pin PA3 STM32F103C8 (Da bi pin PA3 bio VISOK):
digitalWrite (enablePin, HIGH);
Zatim stavite te vrijednosti u serijski priključak i pošaljite vrijednosti, ovisno o tome koji je gumb pritisnut, upotrijebite izraz if if i pošaljite odgovarajuću vrijednost kad se pritisne gumb.
Ako se pritisne prva tipka, tada se stanje podudara i vrijednost '1' šalje se na serijski priključak na koji je spojen Arduino UNO.
if (button1val == HIGH) { int num1 = 1; Serial1.println (num1); }
Slično tome, kada se pritisne gumb 2, vrijednost 2 se šalje preko serijskog porta, a kada se pritisne gumb 3, vrijednost 3 se šalje preko serijskog porta.
inače if (button2val == HIGH) { int num2 = 2; Serial1.println (num2); } inače if (button3val == HIGH) { int num3 = 3; Serial1.println (num3); }
A kada se ne pritisne nijedan gumb, vrijednost 0 šalje se Arduino Uno.
else { int num = 0; Serial1.println (num); }
Ovim se završava programiranje za konfiguriranje STM32 kao glavnog.
Arduino UNO kao robNa podređenoj strani Arduino UNO prima cjelobrojnu vrijednost koja se šalje od glavnog STM32F103C8 koji je dostupan na serijskom priključku hardvera Arduino UNO (P0, 1) na koji je povezan RS-485 modul.
Jednostavno pročitajte vrijednost i spremite u varijablu. Ovisno o primljenoj vrijednosti, odgovarajuća LED dioda uključuje se ili isključuje spojena na Arduino GPIO.
Da biste primili vrijednosti od Master-a, samo napravite igle DE & RE modula RS-485 LOW. Dakle, pin-2 (enablePin) Arduina UNO napravljen je NISKO.
digitalWrite (enablePin, LOW);
Sada samo pročitajte cjelobrojne podatke dostupne na serijskom priključku i spremite ih u varijablu.
int primanje = Serial.parseInt ();
Ovisno o primljenoj vrijednosti, tj. (0, 1, 2, 3), odgovarajući jedan od tri LED-a uključuje se.
if (receive == 1) // Ovisno o primljenoj vrijednosti, odgovarajuća LED lampica se UKLJUČUJE ili ISKLJUČUJE { digitalWrite (ledpin1, HIGH); } inače if (primiti == 2) { digitalWrite (ledpin2, HIGH); } inače if (primiti == 3) { digitalWrite (ledpin3, HIGH); } else { digitalWrite (ledpin1, LOW); digitalWrite (ledpin2, LOW); digitalWrite (ledpin3, LOW); }
Time se završava programiranje i konfiguriranje Arduina UNO kao slave. Također se time dovršavaju kompletne konfiguracije za Arduino UNO i STM32. Radni video i svi kodovi priloženi su na kraju ovog vodiča.
Testiranje RS485 komunikacije između STM32F103C8 i Arduino UNO:
1. Kada se pritisne tipka-1, koja je spojena na glavni STM32, LED 1 se UKLJUČUJE povezan na podređeni Arduino.

2. Kada se pritisne tipka-2, koja je spojena na glavni STM32, LED 2 se UKLJUČUJE povezan na podređeni Arduino.

3. Slično tome kad se pritisne tipka-3, LED 3 se UKLJUČUJE povezan na slave Arduino.

Ovim je završena serijska komunikacija RS485 između STM32F103C8 i Arduino UNO. Ploče Arduino UNO i STM32 široko se koriste za brzo prototipiranje i na tim smo pločama napravili mnoge korisne projekte. Ako nađete bilo kakve sumnje ili imate bilo kakav prijedlog za nas, napišite i komentirajte u nastavku.
