- RS-485 nuoseklaus ryšio protokolas
- RS-485 „Arduino“
- Būtini komponentai
- Grandinės schema
- „Arduino UNO“ ir „Arduino Nano“ programavimas RS485 nuosekliam ryšiui
- Šviesos diodų ryškumo valdymas naudojant nuoseklųjį ryšį RS485
Ryšio protokolo pasirinkimas ryšiui tarp mikrovaldiklių ir periferinių įrenginių yra svarbi įterptosios sistemos dalis. Tai svarbu, nes bendras bet kurios įterptosios programos veikimas priklauso nuo ryšio priemonių, nes tai susiję su sąnaudų mažinimu, greitesniu duomenų perdavimu, tolimojo ryšio aprėptimi ir kt.
Ankstesnėse pamokose sužinojome apie „Arduino“ I2C ryšio protokolą ir SPI ryšio protokolus. Dabar yra dar vienas serijinio ryšio protokolas, vadinamas RS-485. Šis protokolas naudoja asinchroninį nuoseklųjį ryšį. Pagrindinis „RS-485“ pranašumas yra duomenų perdavimas tarp dviejų įrenginių. Jie dažniausiai naudojami triukšmingoje pramoninėje aplinkoje.
Šioje pamokoje sužinosime apie RS-485 nuoseklų ryšį tarp dviejų „Arduinos“ ir tada pademonstruosime valdydami šviesos diodo, prijungto prie „Slave Arduino“ iš „Master Arduino“, ryškumą siunčiant ADC reikšmes per RS-485 modulį. „10k“ potenciometras naudojamas norint pakeisti „Master Arduino“ ADC reikšmes.
Pradėkime nuo supratimo apie RS-485 nuosekliojo ryšio veikimą.
RS-485 nuoseklaus ryšio protokolas
RS-485 yra asinchroninis nuoseklaus ryšio protokolas, kuriam nereikia pulso. Dvejetainiams duomenims iš vieno įrenginio į kitą perduoti naudojama diferencinio signalo technika.
Taigi, koks yra diferencinio signalo perdavimo metodas?
Diferencinio signalo metodas veikia kuriant diferencinę įtampą naudojant teigiamą ir neigiamą 5 V. Naudojant du laidus, jis teikia „ Half-Duplex“ ryšį, o „ Full-Duplex“ reikalingi 4 keturi laidai.
Taikant šį metodą
- RS-485 palaiko didesnį duomenų perdavimo greitį, maksimalų 30Mbps.
- Tai taip pat užtikrina didžiausią duomenų perdavimo atstumą, palyginti su RS-232 protokolu. Jis perduoda duomenis iki 1200 metrų.
- Pagrindinis RS-485 privalumas, palyginti su RS-232, yra daugybė vergų su vienu pagrindiniu, o RS-232 palaiko tik vieną vergą.
- Jame gali būti ne daugiau kaip 32 įrenginiai, prijungti prie RS-485 protokolo.
- Kitas RS-485 privalumas yra tas, kad jis yra apsaugotas nuo triukšmo, nes jie perduoda skirtingo signalo metodą.
- RS-485 yra greitesnis, palyginti su I2C protokolu.
RS-485 „Arduino“
Norint naudoti „RS-485“ sistemoje „Arduino“, reikalingas modulis, vadinamas „ 5V MAX485 TTL - RS485“, pagrįstas „Maxim MAX485 IC “, nes jis leidžia nuosekliai bendrauti dideliu atstumu 1200 metrų ir yra dvikryptis. Pusiau dvipusio režimo duomenų perdavimo greitis yra 2, 5Mbps.
5V MAX485 TTL - RS485 moduliui reikalinga 5 V įtampa ir naudojami 5 V logikos lygiai, kad jį būtų galima susieti su mikrovaldiklių, tokių kaip „Arduino“, aparatinės įrangos nuosekliaisiais prievadais.
Jis turi šias funkcijas:
- Darbinė įtampa: 5V
- Borto MAX485 lustas
- Mažai suvartojama RS485 ryšio energija
- Riboto greičio imtuvas
- 5,08 mm žingsnio 2P terminalas
- Patogus RS-485 ryšio laidas
- Visus lusto kaiščius galima valdyti per mikrovaldiklį
- Lentos dydis: 44 x 14 mm
RS-485 prisegimas:
PIN vardas |
Naudokite |
VCC |
5V |
A |
Neinvertuojantis imtuvo įėjimas Neišverčianti vairuotojo išvestis |
B |
Keisti imtuvo įvestį Keičiant tvarkyklės išvestį |
BND |
BND (0 V) |
R0 |
Imtuvo išėjimas (RX kaištis) |
RE |
Imtuvo išvestis (įjungta LOW) |
DE |
Tvarkyklės išvestis (įgalinta HIGH) |
DI |
Tvarkyklės įvestis (TX kaištis) |
Šį RS-485 modulį galima lengvai susieti su „Arduino“. Panaudokime „Arduino 0“ (RX) ir 1 (TX) aparatinės įrangos nuoseklius prievadus (UNO, NANO). Programavimas taip pat paprastas, tiesiog naudokite „Serial.print“ (), norėdami parašyti į RS-485, ir „Serial.Read“ (skaitykite) skaitydami iš RS-485.
Programavimo dalis paaiškinta vėliau, tačiau pirmiausia leidžia patikrinti reikalingus komponentus ir grandinės schemą.
Būtini komponentai
- „Arduino UNO“ arba „Arduino NANO“ (2)
- MAX485 TTL į RS485 keitiklio modulis - (2)
- 10K potenciometras
- 16x2 LCD ekranas
- LED
- Bandomoji Lenta
- Laidų sujungimas
Šioje pamokoje „ Arduino Uno“ naudojamas kaip pagrindinis, o „Arduino Nano“ - kaip vergas. Čia naudojamos dvi „Arduino“ plokštės, todėl reikalingi du „RS-485“ moduliai.
Grandinės schema
Grandinės jungtis tarp pirmojo RS-485 ir „Arduino UNO“ („Master“):
RS-485 |
„Arduino UNO“ |
DI |
1 (TX) |
DE RE |
8 |
R0 |
0 (RX) |
VCC |
5V |
BND |
BND |
A |
Vergo RS-485 A |
B |
Į vergo RS-485 B vietą |
Ryšys tarp antrojo RS-485 ir „Arduino Nano“ (vergas):
RS-485 |
„Arduino UNO“ |
DI |
D1 (TX) |
DE RE |
D8 |
R0 |
D0 (RX) |
VCC |
5V |
BND |
BND |
A |
RS-485 magistro A |
B |
RS-485 magistro B daliai |
Grandinės jungtis tarp 16x2 LCD ir „Arduino Nano“:
16x2 LCD ekranas |
„Arduino Nano“ |
VSS |
BND |
VDD |
+ 5 V |
V0 |
Į potenciometro centrinį kaištį, skirtą valdyti LCD kontrastą |
RS |
D2 |
RW |
BND |
E |
D3 |
D4 |
D4 |
D5 |
D5 |
D6 |
D6 |
D7 |
D7 |
A |
+ 5 V |
K. |
BND |
10K potenciometras yra prijungtas prie „Arduino UNO“ analoginio kaiščio A0, kad būtų teikiama analoginė įvestis, o LED yra prijungtas prie „Arduino Nano“ kaiščio D10.
„Arduino UNO“ ir „Arduino Nano“ programavimas RS485 nuosekliam ryšiui
Programuojant abi plokštes naudojamas „Arduino IDE“. Bet įsitikinkite, kad pasirinkote atitinkamą Uostą iš Įrankiai-> Prievadas ir lenta iš Įrankiai-> Lenta.
Pilnas kodas su demonstraciniu vaizdo įrašu pateikiamas šios pamokos pabaigoje. Čia mes paaiškiname svarbią kodo dalį. Šioje mokymo programoje yra dvi programos, viena skirta „Arduino UNO“ (magistras), kita - „Arduino Nano“ (vergas).
Kodo paaiškinimas meistrui: „Arduino UNO“
Pagrindinėje pusėje tiesiog paimkite analoginę įvestį A0 kaištyje , keisdami potenciometrą, tada SerialWrite šias reikšmes į RS-485 magistralę per „Arduino UNO“ aparatinės įrangos nuoseklius prievadus (0,1).
Norėdami pradėti nuoseklųjį ryšį aparatinės įrangos serijos kaiščiais (0,1), naudokite:
Serijos pradžia (9600);
Norėdami perskaityti „Arduino UNO“ kaiščio A0 analoginę vertę ir išsaugoti jas kintamame „ potval“ naudojime:
int potval = analogRead (pushval);
Prieš rašant potval vertę nuoseklųjį prievadą, smeigtukai DE & RE RS-485 turėtų būti DAUG kuris yra prijungtas prie kaiščio 8 d Arduino UNO taip padaryti PIN 8 didelis:
„digitalWrite“ („enablePin“, HIGH);
Norėdami įdėti tas vertes į nuoseklųjį prievadą, sujungtą su RS-485 moduliu, naudokite šį sakinį
Serial.println (potval);
Vergo kodo paaiškinimas: „Arduino NANO“
Vergo pusėje sveiko skaičiaus vertė gaunama iš „Master RS-485“, kurią galima rasti „Arduino Nano“ aparatinės įrangos serijos prievade (kaiščiai -0,1). Tiesiog perskaitykite tą vertę ir išsaugokite kintamajame. Reikšmės yra (0-1023) formos. Taigi jis paverčiamas į (0–255), nes PWM technika naudojama LED ryškumui valdyti.
Tada „ AnalogWrite“ konvertuotą vertę į LED kaištį D10 (tai PWM kaištis). Taigi, atsižvelgiant į PWM vertę, šviesos diodo ryškumas keičiasi ir šias vertes taip pat pateikite 16x2 LCD ekrane.
Norėdami, kad „Slave Arduino“ RS-485 gautų vertes iš magistro, tiesiog padarykite „RS & 485“ kaiščius DE ir RE žemu. Taigi „Arduino NANO“ kaištis D8 (enablePin) pagamintas LOW.
„digitalWrite“ („enablePin“, „LOW“);
Norėdami perskaityti „Serial Port“ turimus sveikojo skaičiaus duomenis ir saugoti juos kintamu būdu
int pwmval = Serial.parseInt ();
Kitas konvertuokite vertę nuo (0-1023 į 0-255) ir išsaugokite jas kintamajame:
int konvertuoti = žemėlapis (pwmval, 0,1023,0,255);
Tada užrašykite analoginę vertę (PWM) į kaištį D10, kur prijungtas LED anodas:
analogWrite (ledpin, konvertuoti);
Norėdami atspausdinti tą PWM vertę 16x2 LCD ekrane, naudokite
lcd.setCursor (0,0); lcd.print ("PWM IŠ MASTERO"); lcd.setCursor (0,1); lcd.print (konvertuoti);
Šviesos diodų ryškumo valdymas naudojant nuoseklųjį ryšį RS485
Kai naudojant potenciometrą nustatoma 0 PWM reikšmė, šviesos diodas išjungiamas.
Kai naudojant potenciometrą nustatoma 251 PWM vertė: LED įsijungia visu ryškumu, kaip parodyta paveikslėlyje:
Taigi RS485 galima naudoti nuosekliam ryšiui „Arduino“.