- Протокол последовательной связи RS-485
- RS-485 в Arduino
- Необходимые компоненты
- Принципиальная электрическая схема
- Программирование Arduino UNO и Arduino Nano для последовательной связи RS485
- Управление яркостью светодиода с помощью последовательной связи RS485
Выбор протокола связи между микроконтроллерами и периферийными устройствами является важной частью встроенной системы. Это важно, потому что общая производительность любого встроенного приложения зависит от средств связи, поскольку это связано со снижением затрат, более быстрой передачей данных, покрытием на большие расстояния и т. Д.
В предыдущих уроках мы узнали о протоколе связи I2C и протоколах связи SPI в Arduino. Теперь существует еще один протокол последовательной связи, называемый RS-485. Этот протокол использует асинхронную последовательную связь. Основное преимущество RS-485 - передача данных между двумя устройствами на большие расстояния. И они чаще всего используются в электрически шумной промышленной среде.
В этом руководстве мы узнаем о последовательной связи RS-485 между двумя Arduino, а затем продемонстрируем это, управляя яркостью светодиода, подключенного к ведомому Arduino, от Master Arduino, отправляя значения АЦП через модуль RS-485. Потенциометр 10k используется для изменения значений АЦП на Master Arduino.
Начнем с понимания работы последовательной связи RS-485.
Протокол последовательной связи RS-485
RS-485 - это протокол асинхронной последовательной связи, не требующий тактовых импульсов. Он использует технику, называемую дифференциальным сигналом, для передачи двоичных данных от одного устройства к другому.
Так что же это за метод передачи дифференциального сигнала ??
Метод дифференциального сигнала работает путем создания дифференциального напряжения с использованием положительного и отрицательного напряжения 5 В. Он обеспечивает полудуплексную связь при использовании двух проводов, а для полудуплексного режима требуется 4 четверти провода.
Используя этот метод
- RS-485 поддерживает более высокую скорость передачи данных до 30 Мбит / с.
- Он также обеспечивает максимальное расстояние передачи данных по сравнению с протоколом RS-232. Он передает данные на расстояние до 1200 метров максимум.
- Основным преимуществом RS-485 перед RS-232 является наличие нескольких ведомых устройств с одним ведущим устройством, в то время как RS-232 поддерживает только одно ведомое устройство.
- К нему может быть подключено до 32 устройств по протоколу RS-485.
- Еще одно преимущество RS-485 заключается в том, что он невосприимчив к шуму, поскольку для передачи используется метод дифференциального сигнала.
- RS-485 быстрее по сравнению с протоколом I2C.
RS-485 в Arduino
Для использования RS-485 в Arduino необходим модуль 5V MAX485 TTL to RS485, основанный на микросхеме Maxim MAX485, так как он обеспечивает последовательную связь на большом расстоянии до 1200 метров и является двунаправленной. В полудуплексном режиме скорость передачи данных составляет 2,5 Мбит / с.
Модуль 5V MAX485 TTL to RS485 требует напряжения 5 В и использует логические уровни 5 В, чтобы его можно было связать с аппаратными последовательными портами микроконтроллеров, таких как Arduino.
Он имеет следующие особенности:
- Рабочее напряжение: 5 В
- Встроенный чип MAX485
- Низкое энергопотребление для связи RS485
- Трансивер с ограничением скорости нарастания
- 2P клемма с шагом 5,08 мм
- Удобная проводка связи RS-485
- Все выводы микросхемы могут управляться через микроконтроллер.
- Размер платы: 44 х 14 мм
Распиновка RS-485:
Имя контакта |
Использовать |
VCC |
5В |
А |
Неинвертирующий вход приемника Выходной сигнал неинвертирующего драйвера |
B |
Инвертирование входа приемника Инвертирование выхода драйвера |
GND |
GND (0 В) |
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
- СВЕТОДИОД
- Макетная плата
- Подключение проводов
В этом руководстве Arduino Uno используется как ведущий, а Arduino Nano - как ведомый. Здесь используются две платы Arduino, поэтому требуются два модуля RS-485.
Принципиальная электрическая схема
Цепное соединение между первым RS-485 и Arduino UNO (Master):
RS-485 |
Arduino UNO |
DI |
1 (Техас) |
DE RE |
8 |
R0 |
0 (RX) |
VCC |
5В |
GND |
GND |
А |
К ведомому RS-485 |
B |
К B ведомого RS-485 |
Соединение между вторым RS-485 и Arduino Nano (Slave):
RS-485 |
Arduino UNO |
DI |
D1 (Техас) |
DE RE |
D8 |
R0 |
D0 (RX) |
VCC |
5В |
GND |
GND |
А |
К А Мастера RS-485 |
B |
К Б Мастера RS-485 |
Схема подключения ЖК-дисплея 16x2 к Arduino Nano:
ЖК-дисплей 16x2 |
Ардуино Нано |
VSS |
GND |
VDD |
+ 5В |
V0 |
К центральному штырю потенциометра для контроля контрастности ЖК-дисплея |
RS |
D2 |
RW |
GND |
E |
D3 |
D4 |
D4 |
D5 |
D5 |
D6 |
D6 |
D7 |
D7 |
А |
+ 5В |
K |
GND |
Потенциометр 10K подключен к аналоговому выводу A0 Arduino UNO для обеспечения аналогового входа, а светодиод подключается к выводу D10 Arduino Nano.
Программирование Arduino UNO и Arduino Nano для последовательной связи RS485
Для программирования обеих плат используется Arduino IDE. Но убедитесь, что вы выбрали соответствующий ПОРТ из Инструменты-> Порт и Плата из Инструменты-> Плата.
Полный код с демонстрационным видео приведен в конце этого руководства. Здесь мы объясняем важную часть кода. В этом руководстве есть две программы: одна для Arduino UNO (Master), а другая для Arduino Nano (Slave).
Пояснение кода для мастера: Arduino UNO
На стороне мастера просто возьмите аналоговый вход на выводе A0, изменяя потенциометр, а затем запишите эти значения в шину RS-485 через аппаратные последовательные порты (0,1) Arduino UNO.
Чтобы начать последовательную связь на последовательных выводах оборудования (0,1), используйте:
Serial.begin (9600);
Чтобы прочитать аналоговое значение на выводе A0 Arduino UNO и сохранить его в переменной potval, используйте:
int potval = analogRead (pushval);
Перед записью значения potval в последовательный порт, контакты DE и RE RS-485 должны быть ВЫСОКИМИ, которые подключены к контакту 8 Arduino UNO, чтобы сделать контакт 8 ВЫСОКИМ:
digitalWrite (enablePin, HIGH);
Затем, чтобы поместить эти значения в последовательный порт, подключенный к модулю RS-485, используйте следующую инструкцию
Serial.println (потваль);
Пояснение кода для ведомого устройства: Arduino NANO
На стороне ведомого устройства от ведущего устройства RS-485 принимается целое число, которое доступно на аппаратном последовательном порту Arduino Nano (контакты -0,1). Просто прочтите это значение и сохраните в переменной. Значения представлены в виде (0-1023). Таким образом, он преобразуется в (0-255), поскольку для управления яркостью светодиода используется метод ШИМ.
Затем выполните аналоговую запись преобразованного значения на вывод светодиода D10 (это вывод ШИМ). Таким образом, в зависимости от значения ШИМ яркость светодиода изменяется, а также отображаются эти значения на ЖК-дисплее 16x2.
Чтобы RS-485 ведомой Arduino принимал значения от ведущего, просто сделайте выводы DE и RE на RS-485 НИЗКИМИ. Таким образом, вывод D8 (enablePin) Arduino NANO имеет низкий уровень.
digitalWrite (enablePin, LOW);
А для чтения целочисленных данных, доступных на последовательном порту, и сохранения их в переменной используйте
int pwmval = Serial.parseInt ();
Затем преобразуйте значение из (0-1023 в 0-255) и сохраните их в переменной:
int convert = карта (pwmval, 0,1023,0,255);
Затем запишите аналоговое значение (ШИМ) на вывод D10, к которому подключен анод светодиода:
analogWrite (ledpin, преобразовать);
Чтобы распечатать это значение ШИМ на ЖК-дисплее 16x2, используйте
lcd.setCursor (0,0); lcd.print («ШИМ ОТ МАСТЕРА»); lcd.setCursor (0,1); lcd.print (конвертировать);
Управление яркостью светодиода с помощью последовательной связи RS485
Когда значение PWM установлено на 0 с помощью потенциометра, светодиод гаснет.
И когда значение PWM установлено на 251 с помощью потенциометра: светодиод включается с полной яркостью, как показано на рисунке ниже:
Вот как можно использовать RS485 для последовательной связи в Arduino.