- Protokol sériové komunikace RS-485
- RS-485 v Arduinu
- Požadované komponenty
- Kruhový diagram
- Programování Arduino UNO a Arduino Nano pro sériovou komunikaci RS485
- Ovládání jasu LED pomocí sériové komunikace RS485
Volba komunikačního protokolu pro komunikaci mezi mikrokontroléry a periferními zařízeními je důležitou součástí zabudovaného systému. Je to důležité, protože celkový výkon jakékoli vestavěné aplikace závisí na komunikačních prostředcích, protože souvisí se snížením nákladů, rychlejším přenosem dat, pokrytím na dlouhé vzdálenosti atd.
V předchozích cvičeních jsme se dozvěděli o komunikačním protokolu I2C a komunikačních protokolech SPI v Arduinu. Nyní existuje další sériový komunikační protokol s názvem RS-485. Tento protokol používá asynchronní sériovou komunikaci. Hlavní výhodou RS-485 je dálkový přenos dat mezi dvěma zařízeními. A nejčastěji se používají v elektricky hlučném průmyslovém prostředí.
V tomto tutoriálu se dozvíme o sériové komunikaci RS-485 mezi dvěma Arduinos a poté ji předvedeme ovládáním jasu LED připojené k Slave Arduino z Master Arduino zasláním hodnot ADC přes modul RS-485. 10k potenciometr se používá ke změně hodnot ADC na Master Arduino.
Začněme pochopením fungování sériové komunikace RS-485.
Protokol sériové komunikace RS-485
RS-485 je asynchronní sériový komunikační protokol, který nevyžaduje taktovací impuls. 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 komunikaci Half-Duplex při použití dvou vodičů a Full-Duplex vyžaduje vodiče se čtyřmi čtyřmi vodiči.
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 1 200 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, že je imunní 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.
RS-485 v Arduinu
Pro použití RS-485 v Arduinu 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ý. V režimu polovičního duplexu má rychlost přenosu dat 2,5 Mb / s.
Modul 5V MAX485 TTL na RS485 vyžaduje napětí 5V a používá 5V logické úrovně, aby mohl být propojen s hardwarovými sériovými porty mikrokontrolérů, jako je Arduino.
Má následující funkce:
- 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
Pin-Out RS-485:
Název PIN |
Použití |
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) |
Tento modul RS-485 lze snadno propojit s Arduino. Pojďme použít hardwarové sériové porty Arduino 0 (RX) a 1 (TX) (v UNO, NANO). Programování je také jednoduché, stačí použít Serial.print () k zápisu na RS-485 a Serial.Read () ke čtení z RS-485.
Programovací část je vysvětlena později podrobně, ale nejprve si necháme zkontrolovat požadované komponenty a schéma zapojení.
Požadované komponenty
- Arduino UNO nebo Arduino NANO (2)
- Modul převodníku MAX485 TTL na RS485 - (2)
- 10K potenciometr
- 16x2 LCD displej
- VEDENÝ
- Nepájivá deska
- Připojení vodičů
V tomto tutoriálu se Arduino Uno používá jako Master a Arduino Nano se používá jako Slave. Zde se používají dvě desky Arduino, takže jsou vyžadovány dva moduly RS-485.
Kruhový diagram
Okruhové spojení mezi prvním RS-485 a Arduino UNO (Master):
RS-485 |
Arduino UNO |
DI |
1 (vysílání) |
DE RE |
8 |
R0 |
0 (RX) |
VCC |
5V |
GND |
GND |
A |
Na A slave RS-485 |
B |
Na B slave RS-485 |
Spojení mezi druhým RS-485 a Arduino Nano (Slave):
RS-485 |
Arduino UNO |
DI |
D1 (TX) |
DE RE |
D8 |
R0 |
D0 (RX) |
VCC |
5V |
GND |
GND |
A |
Na A Master RS-485 |
B |
Na B hlavního RS-485 |
Okruhové připojení mezi 16x2 LCD a Arduino Nano:
16x2 LCD |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
Na středový kolík potenciometru pro ovládání kontrastu LCD |
RS |
D2 |
RW |
GND |
E |
D3 |
D4 |
D4 |
D5 |
D5 |
D6 |
D6 |
D7 |
D7 |
A |
+ 5V |
K. |
GND |
10K potenciometr je připojen k analogovému pinu A0 Arduino UNO pro poskytování analogového vstupu a LED je připojena k pinu D10 Arduino Nano.
Programování Arduino UNO a Arduino Nano pro sériovou komunikaci RS485
Pro programování obou desek se používá Arduino IDE. Ujistěte se však, že jste vybrali odpovídající PORT z Nástroje-> Port a Deska z Nástroje-> Deska.
Kompletní kód s ukázkovým videem je uveden na konci tohoto kurzu. Zde vysvětlujeme důležitou část kódu. V tomto výukovém programu jsou dva programy, jeden pro Arduino UNO (Master) a druhý pro Arduino Nano (Slave).
Vysvětlení kódu pro Master: Arduino UNO
Na straně Master jednoduše vezměte analogový vstup na pin A0 změnou potenciometru a poté SerialWrite tyto hodnoty na sběrnici RS-485 přes hardwarové sériové porty (0,1) Arduino UNO.
Chcete-li zahájit sériovou komunikaci na hardwarových sériových pinech (0,1), použijte:
Serial.begin (9600);
Chcete-li načíst analogovou hodnotu na pinu A0 Arduino UNO a uložit ji do proměnného potvalu, použijte:
int potval = analogRead (pushval);
Před zápisem hodnoty potenciálu na sériový port by kolíky DE & RE RS-485 měly být VYSOKÉ, které jsou připojeny ke kolíku 8 Arduino UNO, aby byl kolík 8 HIGH:
digitalWrite (enablePin, HIGH);
Dále vložte tyto hodnoty do sériového portu připojeného k modulu RS-485, použijte následující příkaz
Serial.println (potval);
Vysvětlení kódu pro Slave: Arduino NANO
Na straně Slave je celočíselná hodnota přijímána z Master RS-485, který je k dispozici na hardwarovém sériovém portu Arduino Nano (piny -0,1). Jednoduše přečtěte tyto hodnoty a uložte je do proměnné. Hodnoty jsou ve formě (0-1023). Převádí se tedy na (0-255), protože k řízení jasu LED se používá technika PWM.
Pak AnalogWrite tyto převedené hodnoty na pin LED D10 (je to pin PWM). V závislosti na hodnotě PWM se tedy jas LED mění a také tyto hodnoty zobrazuje na 16x2 LCD displeji.
Aby RS-485 Slave Arduino přijímalo hodnoty z Masteru, stačí udělat piny DE & RE z RS-485 LOW. Takže pin D8 (enablePin) Arduino NANO je vyroben LOW.
digitalWrite (enablePin, LOW);
A číst celočíselná data dostupná na sériovém portu a ukládat je variabilně
int pwmval = Serial.parseInt ();
Dále převeďte hodnotu z (0-1023 na 0-255) a uložte je do proměnné:
int převést = mapa (pwmval, 0,1023,0,255);
Dále zapište analogovou hodnotu (PWM) na pin D10, kde je připojena LED anoda:
analogWrite (ledpin, convert);
Chcete-li tyto hodnoty PWM vytisknout na 16x2 LCD displeji, použijte
lcd.setCursor (0,0); lcd.print ("PWM FROM MASTER"); lcd.setCursor (0,1); lcd.print (převést);
Ovládání jasu LED pomocí sériové komunikace RS485
Když je hodnota PWM nastavena na 0 pomocí potenciometru, LED zhasne.
A když je hodnota PWM nastavena na 251 pomocí potenciometru: LED se rozsvítí s plným jasem, jak je znázorněno na následujícím obrázku:
Takto je možné použít RS485 pro sériovou komunikaci v Arduinu.