- Sériová komunikace RS-485
- Požadované komponenty
- Kruhový diagram
- Programování STM32F103C8 a Arduino UNO pro sériovou komunikaci RS485
- Testování komunikace RS485 mezi STM32F103C8 a Arduino UNO:
Komunikační protokoly jsou nedílnou součástí digitální elektroniky a vestavěného systému. Kdekoli existuje propojení více mikrokontrolérů a periferních zařízení, je nutné použít komunikační protokol, aby bylo možné vyměnit spoustu dat. Existuje mnoho typů sériového komunikačního protokolu. RS485 je jedním ze sériových komunikačních protokolů a používá se v průmyslových projektech a těžkých strojích.
O sériové komunikaci RS485 mezi Arduino Uno a Arduino Nano jsme se dozvěděli v předchozím tutoriálu . Tento výukový program je o použití sériové komunikace RS-485 v mikrokontroléru STM32F103C8. Pokud jste v mikrokontroléru STM32 noví, začněte s Začínáme s STM32 pomocí Arduino IDE: Blikající LED a zde zkontrolujte všechny projekty STM32.
V tomto tutoriálu má Master STM32F103C8 tři tlačítka, která se používají k ovládání stavu tří LED diod přítomných na Slave Arduino Uno pomocí sériové komunikace RS-485.
Začněme pochopením fungování sériové komunikace RS-485.
Sériová komunikace RS-485
RS-485 je asynchronní sériový komunikační protokol, který nevyžaduje hodiny. K přenosu binárních dat z jednoho zařízení do druhého používá techniku zvanou diferenciální signál.
Jaká je tedy tato metoda přenosu diferenciálního signálu ??
Metoda diferenciálního signálu funguje vytvořením rozdílového napětí pomocí kladného a záporného 5V. Poskytuje Half-Duplex komunikaci při použití dvou vodičů a Full-Duplex komunikaci při použití čtyř vodičů.
Pomocí této metody:
- RS-485 podporuje vyšší rychlost přenosu dat, maximálně 30 Mb / s.
- Poskytuje také maximální vzdálenost pro přenos dat ve srovnání s protokolem RS-232. Přenáší data maximálně do 1200 metrů.
- Hlavní výhodou RS-485 oproti RS-232 je vícenásobný slave s jedním Masterem, zatímco RS-232 podporuje pouze jednoho slave.
- Může mít maximálně 32 zařízení připojených k protokolu RS-485.
- Další výhodou RS-485 je imunita vůči šumu, protože k přenosu používají metodu diferenciálního signálu.
- RS-485 je rychlejší ve srovnání s protokolem I2C.
Modul RS-485 lze připojit k jakémukoli mikrokontroléru se sériovým portem. Pro použití modulu RS-485 s mikrokontroléry je nutný modul s názvem 5V MAX485 TTL to RS485, který je založen na Maxim MAX485 IC, protože umožňuje sériovou komunikaci na velkou vzdálenost 1200 metrů a je obousměrný a poloduplexní s rychlostí přenosu dat 2,5 Mb / s. Tento modul vyžaduje napětí 5V.
Popis kolíku RS-485:
Název PIN |
Popis |
VCC |
5V |
A |
Neinvertující vstup přijímače Neinvertující výstup ovladače |
B |
Obrácení vstupu přijímače Obrácení výstupu ovladače |
GND |
GND (0V) |
R0 |
Přijímač Out (RX pin) |
RE |
Výstup přijímače (LOW-Enable) |
DE |
Výstup ovladače (HIGH-Enable) |
DI |
Driver Driver (TX pin) |
Modul RS485 má následující vlastnosti:
- Provozní napětí: 5V
- Integrovaný čip MAX485
- Nízká spotřeba energie pro komunikaci RS485
- Omezený vysílač / přijímač
- 2P terminál s roztečí 5,08 mm
- Pohodlné komunikační vedení RS-485
- Všechny piny čipu, ke kterým je veden, lze ovládat pomocí mikrokontroléru
- Velikost desky: 44 x 14 mm
Použití tohoto modulu s STM32F103C8 a Arduino UNO je velmi snadné. Používají se hardwarové sériové porty mikrokontrolérů. Hardwarové sériové piny v STM32 a arduino UNO jsou uvedeny níže.
- V STM32F103C8: Piny PA9 (TX) & PA10 (RX)
- V Arduino Uno: Pin 0 (RX) a 1 (TX)
Programování je také jednoduché, stačí použít Serial.print () k zápisu na RS-485 a Serial.Read () ke čtení z RS-485 a piny DE & RE RS-485 jsou nastaveny na LOW pro příjem dat a HIGH to zapisovat data na sběrnici RS-485.
Požadované komponenty
- STM32F103C8
- Arduino UNO
- Modul převodníku MAX485 TTL na RS485 - (2)
- 10K potenciometr
- Tlačítko - 3
- LED - 3
- Rezistory
- Nepájivá deska
- Připojení vodičů
Kruhový diagram
V tomto tutoriálu se STM32F103C8 používá jako Master s jedním modulem RS-485 a Arduino UNO se používá jako Slave s jiným modulem RS-485.
Zapojení obvodu mezi RS-485 a STM32F103C8 (Master):
RS-485 |
STM32F103C8 |
DI |
PA9 (TX1) |
DE RE |
PA3 |
R0 |
PA10 (RX1) |
VCC |
5V |
GND |
GND |
A |
Na A slave RS-485 |
B |
Na B slave RS-485 |
STM32F103C8 se třemi tlačítky:
Tři tlačítka se třemi Pull Down Resistor 10k jsou připojena k pinům PA0, PA1, PA2 na STM32F103C8.
Okruhové připojení mezi RS-485 a Arduino UNO (Slave):
RS-485 |
Arduino UNO |
DI |
1 (vysílání) |
DE RE |
2 |
R0 |
0 (RX) |
VCC |
5V |
GND |
GND |
A |
Na A Master RS-485 |
B |
Na B hlavního RS-485 |
Používají se tři LED, kde jsou anody LED s odporem 330 ohmů připojeny k pinům 4, 7, 8 Arduino UNO a katoda LED je připojena k GND.
Programování STM32F103C8 a Arduino UNO pro sériovou komunikaci RS485
Arduino IDE se používá pro vývoj a programování obou desek, tj. STM32 a Arduino UNO. Ujistěte se však, že jste vybrali odpovídající PORT z Nástroje-> Port a Deska z Nástroje-> Deska. Pokud narazíte na nějaké potíže nebo pochybnosti, stačí prostudovat Programování vašeho STM32 v ARDUINO IDE. Programování pro tento výukový program se skládá ze dvou částí, jedné pro STM32F103C8 (Master) a druhé pro Arduino UNO (Slave). Oba kódy budou vysvětleny jeden po druhém níže.
STM32F103C8 jako MasterNa straně Master se čte stav tlačítka a tyto hodnoty se sériově zapisují na sběrnici RS-485 přes hardwarové sériové porty 1 (PA9, PA10) STM32F103C8. Od této chvíle také není potřeba žádná externí knihovna. Arduino má veškerou knihovnu potřebnou pro sériovou komunikaci.
Zahajte sériovou komunikaci pomocí hardwarových sériových kolíků (PA9, PA10) na buadrate 9600.
Serial1.begin (9600);
Přečtěte si stav tlačítka na pinech PA0, PA1, PA2 na STM32F103C8 a uložte je do proměnné button1val, button2val, button3val. Hodnota je VYSOKÁ, pokud je stisknuto tlačítko a LOW, pokud není stisknuta.
int button1val = digitalRead (button1); int button2val = digitalRead (button2); int button3val = digitalRead (button3);
Před odesláním hodnot tlačítek na sériový port by kolíky DE & RE RS-485 měly být VYSOKÉ, které jsou připojeny ke kolíku PA3 STM32F103C8 (Chcete-li vytvořit kolík PA3 VYSOKÝ):
digitalWrite (enablePin, HIGH);
Dále vložte tyto hodnoty do sériového portu a odešlete hodnoty podle toho, které tlačítko je stisknuto, použijte příkaz if else a po stisknutí tlačítka odešlete odpovídající hodnotu.
Je-li stisknuto první tlačítko, pak se podmínka shoduje a hodnota '1' je odeslána na sériový port, kde je připojeno Arduino UNO.
if (button1val == HIGH) { int num1 = 1; Serial1.println (num1); }
Podobně, když je stisknuto tlačítko 2, hodnota 2 je odeslána přes sériový port a když je stisknuto tlačítko 3, hodnota 3 je odeslána přes sériový port.
else if (button2val == HIGH) { int num2 = 2; Serial1.println (num2); } else if (button3val == HIGH) { int num3 = 3; Serial1.println (num3); }
A když nestisknete žádné tlačítko, hodnota 0 se odešle do Arduino Uno.
else { int num = 0; Serial1.println (num); }
Tím je dokončeno programování pro konfiguraci STM32 jako Master.
Arduino UNO jako otrokNa straně Slave přijímá Arduino UNO celočíselnou hodnotu, která se odesílá z Master STM32F103C8, který je k dispozici na hardwarovém sériovém portu Arduino UNO (P0, 1), kde je připojen modul RS-485.
Jednoduše načtěte hodnotu a uložte ji do proměnné. V závislosti na přijaté hodnotě se příslušná LED rozsvítí nebo zhasne připojením k Arduino GPIO.
Chcete-li přijímat hodnoty z Masteru, stačí udělat piny DE & RE modulu RS-485 LOW. Takže pin-2 (enablePin) Arduino UNO je nastaven na LOW.
digitalWrite (enablePin, LOW);
Nyní si jen přečtěte celočíselná data dostupná na sériovém portu a uložte je do proměnné.
int receive = Serial.parseInt ();
V závislosti na přijaté hodnotě, tj. (0, 1, 2, 3), se příslušně jedna ze tří LED rozsvítí.
if (receive == 1) // V závislosti na přijaté hodnotě je příslušná LED zapnuta nebo vypnuta { digitalWrite (ledpin1, HIGH); } else if (receive == 2) { digitalWrite (ledpin2, HIGH); } else if (receive == 3) { digitalWrite (ledpin3, HIGH); } else { digitalWrite (ledpin1, LOW); digitalWrite (ledpin2, LOW); digitalWrite (ledpin3, LOW); }
Tím je programování a konfigurace Arduino UNO jako Slave dokončeno. Tímto je také dokončena kompletní konfigurace pro Arduino UNO a STM32. Pracovní video a všechny kódy jsou připojeny na konci tohoto tutoriálu.
Testování komunikace RS485 mezi STM32F103C8 a Arduino UNO:
1. Po stisknutí tlačítka 1, které je připojeno k Master STM32, se rozsvítí LED 1 připojená k Slave Arduino.
2. Po stisknutí tlačítka 2, které se připojilo k Master STM32, se rozsvítí LED 2 připojená k Slave Arduino.
3. Podobně, když je stisknuto tlačítko 3, rozsvítí se LED 3 připojená k Slave Arduino.
Tím je ukončena sériová komunikace RS485 mezi STM32F103C8 a Arduino UNO. Desky Arduino UNO a STM32 jsou široce používané desky pro rychlé prototypování a na těchto deskách jsme provedli mnoho užitečných projektů. Pokud zjistíte jakékoli pochybnosti nebo máte nějaké návrhy, napište nám a komentujte níže.