- Протокол за последователна комуникация RS-485
- RS-485 в Arduino
- Необходими компоненти
- Електрическа схема
- Програмиране на Arduino UNO и Arduino Nano за последователна комуникация RS485
- Контролиране на яркостта на LED със серийна комуникация RS485
Изборът на комуникационен протокол за комуникация между микроконтролери и периферни устройства е важна част от вградената система. Важно е, защото цялостната производителност на всяко вградено приложение зависи от комуникационните средства, тъй като е свързана с намаляване на разходите, по-бърз трансфер на данни, покритие на дълги разстояния и т.н.
В предишните уроци научихме за I2C комуникационния протокол и SPI комуникационните протоколи в Arduino. Сега има друг протокол за серийна комуникация, наречен RS-485. Този протокол използва асинхронна серийна комуникация. Основното предимство на RS-485 е преносът на данни на дълги разстояния между две устройства. И най-често се използват в електрически шумна индустриална среда.
В този урок ще научим за серийната комуникация RS-485 между два Arduino и след това ще я демонстрираме, като контролираме яркостта на светодиода, свързан към Slave Arduino от Master Arduino, като изпратим ADC стойности чрез RS-485 модула. 10k потенциометър се използва за промяна на стойностите на ADC в Master Arduino.
Нека започнем с разбирането на работата на RS-485 серийната комуникация.
Протокол за последователна комуникация RS-485
RS-485 е асинхронен сериен комуникационен протокол, който не изисква импулс на часовника. Той използва техника, наречена диференциален сигнал за прехвърляне на двоични данни от едно устройство на друго.
И така, какъв е този метод за диференциално предаване на сигнал ??
Методът на диференциалния сигнал работи чрез създаване на диференциално напрежение чрез използване на положителни и отрицателни 5V. Той осигурява Half-Duplex комуникация, когато се използват два проводника, а Full-Duplex изисква 4 проводника.
Чрез използването на този метод
- RS-485 поддържа по-висока скорост на трансфер на данни от максимум 30Mbps.
- Той също така осигурява максимално разстояние за трансфер на данни в сравнение с протокола RS-232. Той прехвърля данни до максимум 1200 метра.
- Основното предимство на RS-485 пред RS-232 е множественото подчинено устройство с единичен Master, докато RS-232 поддържа само един подчинен.
- Може да има максимум 32 устройства, свързани към протокол RS-485.
- Друго предимство на RS-485 е, че той е имунизиран срещу шума, тъй като те използват метод на диференциален сигнал за трансфер.
- RS-485 е по-бърз в сравнение с протокола I2C.
RS-485 в Arduino
За използване на RS-485 в Arduino е необходим модул, наречен 5V MAX485 TTL до RS485, който се основава на Maxim MAX485 IC, тъй като позволява последователна комуникация на дълги разстояния от 1200 метра и е двупосочен. В режим на полудуплекс той има скорост на трансфер на данни от 2 5Mbps.
Модулът 5V MAX485 TTL към RS485 изисква напрежение 5V и използва 5V логически нива, така че да може да бъде свързан с хардуерни серийни портове на микроконтролери като Arduino.
Той има следните характеристики:
- Работно напрежение: 5V
- Вграден чип MAX485
- Ниска консумация на енергия за комуникация RS485
- Приемо-предавател с ограничена скорост
- 5.08mm стъпка 2P терминал
- Удобно RS-485 комуникационно окабеляване
- Всички изводи на чипа са доведени до могат да бъдат контролирани чрез микроконтролера
- Размер на дъската: 44 x 14 мм
Pin-Out на RS-485:
Име на ПИН |
Използвайте |
VCC |
5V |
A |
Неинвертиращ вход на приемника Неинвертиращ изход на драйвера |
Б. |
Обръщане на входа на приемника Обръщане на изхода на драйвера |
GND |
GND (0V) |
R0 |
Изход на приемника (RX щифт) |
RE |
Изход на приемника (LOW-Enable) |
DE |
Изход на драйвера (HIGH-Enable) |
DI |
Вход за водача (TX щифт) |
Този RS-485 модул може лесно да бъде свързан с Arduino. Нека използваме хардуерните серийни портове на Arduino 0 (RX) и 1 (TX) (В UNO, NANO). Програмирането също е лесно, просто използвайте Serial.print (), за да пишете в RS-485 и Serial.Read (), за да четете от RS-485.
Частта за програмиране е обяснена по-късно подробно, но първо позволява да се проверят необходимите компоненти и електрическа схема.
Необходими компоненти
- Arduino UNO или Arduino NANO (2)
- Преобразуващ модул MAX485 TTL към RS485 - (2)
- 10K потенциометър
- 16x2 LCD дисплей
- LED
- Макет
- Свързване на проводници
В този урок Arduino Uno се използва като Master, а Arduino Nano се използва като Slave. Тук се използват две платки Arduino, така че са необходими два модула RS-485.
Електрическа схема
Верижна връзка между първия RS-485 и Arduino UNO (Master):
RS-485 |
Arduino UNO |
DI |
1 (TX) |
DE RE |
8 |
R0 |
0 (RX) |
VCC |
5V |
GND |
GND |
A |
До A на Slave RS-485 |
Б. |
До B на Slave RS-485 |
Връзка между втори RS-485 и Arduino Nano (Slave):
RS-485 |
Arduino UNO |
DI |
D1 (TX) |
DE RE |
D8 |
R0 |
D0 (RX) |
VCC |
5V |
GND |
GND |
A |
Към A на Master RS-485 |
Б. |
Към B на Master RS-485 |
Връзка на веригата между 16x2 LCD и Arduino Nano:
16x2 LCD |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
Към централния щифт на потенциометъра за контрол на контраста на LCD |
RS |
D2 |
RW |
GND |
Е. |
D3 |
D4 |
D4 |
D5 |
D5 |
D6 |
D6 |
D7 |
D7 |
A |
+ 5V |
К |
GND |
10K потенциометър е свързан към аналоговия щифт A0 на Arduino UNO за осигуряване на аналогов вход и светодиод е свързан към пин D10 на Arduino Nano.
Програмиране на Arduino UNO и Arduino Nano за последователна комуникация RS485
За програмиране на двете платки се използва Arduino IDE. Но се уверете, че сте избрали съответния PORT от Tools-> Port and Board от Tools-> Board.
Пълният код с демонстрационно видео е даден в края на този урок. Тук обясняваме важна част от кода. В този урок има две програми, една за Arduino UNO (Master) и друга за Arduino Nano (Slave).
Обяснение на кода за Master: Arduino UNO
От страна на Master, просто вземете аналогов вход на щифт A0, като промените потенциометъра и след това SerialWrite тези стойности към RS-485 шината през хардуерните серийни портове (0,1) на Arduino UNO.
За да започнете серийна комуникация при хардуерни серийни щифтове (0,1) използвайте:
Serial.begin (9600);
За да прочетете аналогов стойност на ПИН A0 на Arduino UNO и да ги съхранявате в променлива potval употреба:
int potval = analogRead (pushval);
Преди да запишете стойността на потвала в сериен порт, щифтовете DE & RE на RS-485 трябва да бъдат ВИСОКИ, които са свързани към щифта 8 на Arduino UNO, така че да направят щифт 8 HIGH:
digitalWrite (enablePin, HIGH);
След това, за да поставите тези стойности в серийния порт, свързан с модула RS-485, използвайте следното изявление
Serial.println (potval);
Обяснение на кода за Slave: Arduino NANO
В подчинената страна се получава целочислена стойност от Master RS-485, която е достъпна в хардуерния сериен порт на Arduino Nano (Pins -0,1). Просто прочетете тези стойности и съхранявайте в променлива. Стойностите са под формата на (0 -1023). Така той се преобразува в (0-255), тъй като PWM техниката се използва за контрол на яркостта на LED.
След това AnalogWrite тези преобразувани стойности в LED пин D10 (Това е PWM щифт). Така че, в зависимост от стойността на ШИМ, яркостта на светодиода се променя и също показва тези стойности на 16x2 LCD дисплей.
За да може RS-485 на Slave Arduino да получи стойностите от Master, просто направете щифтовете DE & RE на RS-485 LOW. Така че щифтът D8 (enablePin) на Arduino NANO е направен НИСКО.
digitalWrite (enablePin, LOW);
И за да прочетете данните от цялото число, налични в Serial Port, и да ги съхранявате в променлива употреба
int pwmval = Serial.parseInt ();
След това преобразувайте стойността от (0-1023 в 0-255) и ги съхранявайте в променлива:
int convert = map (pwmval, 0,1023,0,255);
След това напишете аналоговата стойност (ШИМ) на пин D10, където е свързан LED анод:
analogWrite (ledpin, конвертиране);
За да отпечатате тези PWM стойности в 16x2 LCD дисплей, използвайте
lcd.setCursor (0,0); lcd.print ("PWM FROM MASTER"); lcd.setCursor (0,1); lcd.print (конвертиране);
Контролиране на яркостта на LED със серийна комуникация RS485
Когато стойността на ШИМ е зададена на 0 с помощта на потенциометър, светодиодът се изключва.
И когато стойността на ШИМ е зададена на 251 с помощта на потенциометър: Светодиодът се включва с пълна яркост, както е показано на снимката по-долу:
Така че по този начин RS485 може да се използва за серийна комуникация в Arduino.