- Разница между коммуникациями UART и RS485
- Необходимые компоненты
- Принципиальная схема для проводной связи на большие расстояния
- Модуль преобразователя MAX485 UART-RS485
- Кабель Ethernet CAT-6E
- Пояснение кода Arduino
- Заключение
Мы уже давно используем платы для разработки микроконтроллеров, такие как Arduino, Raspberry Pi, NodeMCU, ESP8266, MSP430 и т. Д., В наших небольших проектах, где в большинстве случаев расстояние между датчиками и платой составляет не более нескольких сантиметров и на таких расстояниях связь между различными модулями датчиков, реле, исполнительными механизмами и контроллерами может быть легко осуществлена с помощью простых перемычек, не беспокоясь об искажении сигнала в среде и проникновении в нее электрических шумов. Но если вы строите систему управления с этими макетными платами на расстоянии более 10-15 метров, тогда вы должны учитывать шум и мощность сигнала, потому что если вы хотите, чтобы ваша система работала надежно, вы не можете позволить себе потерять данные при передаче.
Существует множество различных типов протоколов последовательной связи, таких как I2C и SPI, которые можно легко реализовать с помощью Arduino, и сегодня мы рассмотрим другой наиболее часто используемый протокол под названием RS485, который очень часто используется в промышленных средах с высоким уровнем шума для передачи данных. большое расстояние. В этом руководстве мы узнаем о протоколе связи RS485 и о том, как реализовать его с двумя имеющимися у нас Arduino Nano, а также о том, как использовать модуль преобразования MAX485 RS485 в UART. Ранее мы также выполняли связь MAX485 с Arduino, а также связь MAX485 с Raspberry pi, вы также можете проверить их, если хотите.
Разница между коммуникациями UART и RS485
Большинство недорогих датчиков и других модулей, таких как GPS, Bluetooth, RFID, ESP8266 и т. Д., Которые обычно используются с Arduino, Raspberry Pi на рынке, используют связь на основе UART TTL, потому что для этого требуется только 2 провода TX (передатчик) и RX. (Приемник). Это не стандартный протокол связи, но это физическая схема, с помощью которой вы можете передавать и получать последовательные данные с другими периферийными устройствами. Он может передавать / получать данные только последовательно, поэтому сначала он преобразует параллельные данные в последовательные, а затем передает данные.
UART - это устройство асинхронной передачи, поэтому нет тактового сигнала для синхронизации данных между двумя устройствами, вместо этого он использует стартовые и стоповые биты в начале и конце каждого пакета данных соответственно, чтобы отмечать конечные точки передаваемых данных. Данные, передаваемые UART, организованы в пакеты. Каждый пакет содержит 1 стартовый бит, от 5 до 9 битов данных (в зависимости от UART), дополнительный бит четности и 1 или 2 стоповых бита. Он очень хорошо документирован и широко используется, а также имеет бит четности для проверки ошибок. Но у него есть некоторые ограничения, так как он не может поддерживать несколько ведомых устройств и несколько мастеров. а максимальный кадр данных ограничен 9 битами. Для передачи данных скорости передачи как ведущего, так и ведомого должны быть в пределах 10% друг от друга. Ниже показан пример того, как персонаж является передатчиком по линии данных UART. Высокий и низкий уровень сигнала измеряется относительно уровня GND, поэтому смещение уровня GND будет иметь катастрофические последствия для передачи данных.
С другой стороны, RS485 - это более отраслевая связь, которая разработана для сети из нескольких устройств, которые могут использоваться на больших расстояниях и с большей скоростью. Он работает по методу измерения дифференциальной сигнализации, а не по измерению напряжения относительно контакта GND. Сигналы RS485 являются плавающими, и каждый сигнал передается по линии Sig + и линии Sig-.
Приемник RS485 сравнивает разность напряжений между обеими линиями, а не абсолютный уровень напряжения на сигнальной линии. Это хорошо работает и предотвращает существование контуров заземления, которые являются частым источником проблем связи. Наилучшие результаты достигаются, если линии Sig + и Sig- скручены, поскольку скручивание сводит к нулю эффект электромагнитного шума, наведенного в кабеле, и обеспечивает гораздо лучшую устойчивость к шуму, что позволяет RS485 передавать данные на расстояние до 1200 м.. Витая пара также позволяет значительно повысить скорость передачи данных по сравнению с прямыми кабелями. На небольших расстояниях передачи можно реализовать скорость до 35 Мбит / с с помощью RS485, хотя скорость передачи будет уменьшаться с расстоянием. При скорости передачи 1200 м вы можете использовать только скорость передачи 100 кбит / с. Для реализации этого протокола связи вам понадобится специальный кабель Ethernet. Есть много категорий кабелей Ethernet, которые мы можем использовать, например CAT-4, CAT-5, CAT-5E, CAT-6, CAT-6A и т. Д. В нашем руководстве мы собираемся использовать кабель CAT-6E. который имеет 4 витые пары проводов 24AWG и может поддерживать до 600 МГц. На обоих концах он заканчивается разъемом RJ45. Типичные уровни линейного напряжения от линейных драйверов составляют от минимум ± 1,5 В до максимум примерно ± 6 В. Чувствительность входа приемника составляет ± 200 мВ. Шум в диапазоне ± 200 мВ по существу блокируется за счет подавления синфазного шума. Пример того, как байт (0x3E) передается по двум линиям связи RS485.
Необходимые компоненты
- Модуль преобразователя 2 × MAX485
- 2 × Arduino Nano
- 2 × 16 * 2 буквенно-цифровой ЖК-дисплей
- 2 × 10к потенциометров стеклоочистителя
- Кабель Ethernet Cat-6E
- Макеты
- Перемычки
Принципиальная схема для проводной связи на большие расстояния
На изображении ниже показана принципиальная схема передатчика и приемника для проводной связи Arduino на большие расстояния. Обратите внимание, что схемы передатчика и приемника выглядят одинаково, единственное, что отличается, - это код, написанный в них. Также для демонстрации мы используем одну плату в качестве передатчика и одну плату в качестве приемника, но мы можем легко запрограммировать платы для работы как передатчика, так и приемника с одинаковой настройкой.
Схема подключения для указанной выше цепи также приведена ниже.
Как вы можете видеть выше, есть две почти идентичные пары схем, каждая из которых имеет Arduino nano, буквенно-цифровой ЖК-дисплей 16 * 2 и микросхему преобразователя MAX485 UART в RS485, подключенную к каждому концу кабеля Ethernet Cat-6E через разъем RJ45. Кабель, который я использовал в уроке, имеет длину 25 м. Мы отправим некоторые данные со стороны передатчика по кабелю от Nano, который преобразуется в сигналы RS485 через модуль MAX RS485, работающий в режиме Master.
На принимающей стороне модуль преобразователя MAX485 работает как ведомое устройство и, прослушивая передачу от ведущего устройства, он снова преобразует полученные данные RS485 в стандартные 5-вольтовые сигналы TTL UART, которые будут считаны принимающим Nano и отображены на экране 16 *. К нему подключен 2 буквенно-цифровой ЖК-дисплей.
Модуль преобразователя MAX485 UART-RS485
Этот модуль преобразователя UART-RS485 имеет встроенную микросхему MAX485, которая представляет собой маломощный приемопередатчик с ограниченной скоростью нарастания, используемый для связи RS-485. Работает от одинарного источника питания + 5В, номинальный ток 300 мкА. Он работает по полудуплексной связи, чтобы реализовать функцию преобразования уровня TTL в уровень RS-485, что означает, что он может либо передавать, либо принимать в любое время, а не оба, он может достичь максимальной скорости передачи 2,5 Мбит / с. Приемопередатчик MAX485 потребляет ток питания от 120 мкА до 500 мкА в ненагруженном или полностью загруженном состоянии, когда драйвер отключен. Драйвер ограничен по току короткого замыкания, и выходы драйвера могут быть переведены в состояние с высоким импедансом через цепь теплового отключения. Вход приемника имеет функцию отказоустойчивости, которая гарантирует высокий логический уровень на выходе, если на входе разомкнута цепь.Кроме того, он обладает сильной защитой от помех. Он также имеет встроенные светодиоды для отображения текущего состояния чипа, то есть того, запитан ли чип или он передает или получает данные, что упрощает отладку и использование.
Приведенная выше принципиальная схема объясняет, как встроенная микросхема MAX485 подключается к различным компонентам, и предоставляет 0,1-дюймовые стандартные интервалы для заголовков, которые можно использовать с макетной платой, если хотите.
Кабель Ethernet CAT-6E
Когда мы думаем о передаче данных на большие расстояния, мы сразу же думаем о подключении к Интернету через кабель Ethernet. В настоящее время мы в основном используем Wi-Fi для подключения к Интернету, но раньше мы использовали кабели Ethernet, идущие к каждому персональному компьютеру, чтобы подключить его к Интернету. Основная причина использования этих кабелей Ethernet вместо обычных проводов заключается в том, что они обеспечивают гораздо лучшую защиту от проникновения шума и искажения сигнала на больших расстояниях. У них есть экранирующая куртка поверх изоляционного слоя для защиты от электромагнитных помех, а также каждая пара проводов скручена вместе, чтобы предотвратить образование токовой петли и, таким образом, гораздо лучшую защиту от шума. Они часто заканчиваются 8-контактными разъемами RJ45 на обоих концах. Есть много категорий кабелей Ethernet, которые мы можем использовать, например CAT-4, CAT-5,CAT-5E, CAT-6, CAT-6A и т. Д. В нашем руководстве мы собираемся использовать кабель CAT-6E, который имеет 4 витые пары проводов 24AWG и может поддерживать частоту до 600 МГц.
Изображение, показывающее, как пара проводов скручена внутри изоляционного слоя кабеля CAT-6E.
Разъем RJ-45 для кабеля Ethernet CAT-6E
Пояснение кода Arduino
В этом проекте мы используем два Arduino Nano, один в качестве передатчика и один в качестве приемника, каждый из которых управляет буквенно-цифровым ЖК-дисплеем 16 * 2 для отображения результатов. Итак, в коде Arduino мы сосредоточимся на отправке данных и отображении отправленных или полученных данных на ЖК-экране.
Для стороны передатчика:
Мы начинаем с включения стандартной библиотеки для управления ЖК-дисплеем и объявляем вывод D8 Arduino Nano как выходной вывод, который мы позже будем использовать для объявления модуля MAX485 как передатчика или приемника.
int enablePin = 8; int potval = 0; #включают
Теперь перейдем к настройке. Чтобы перевести модуль MAX485 в режим передатчика, подтянем контакт включения к высокому уровню. Поскольку это полудуплексная ИС, она не может одновременно передавать и принимать. Здесь мы также инициализируем ЖК-дисплей и распечатаем приветственное сообщение.
Serial.begin (9600); // инициализируем последовательный порт со скоростью 9600 бод: pinMode (enablePin, OUTPUT); lcd.begin (16,2); lcd.print ("ДАЙДЖЕСТ ЦЕПИ"); lcd.setCursor (0,1); lcd.print («Передатчик Nano»); задержка (3000); lcd.clear ();
Теперь в цикле мы записываем непрерывно увеличивающееся целочисленное значение в последовательных строках, которое затем передается другому nano. Это значение также печатается на ЖК-дисплее для отображения и отладки.
Serial.print ("Отправленное значение ="); Serial.println (потваль); // Последовательная запись POTval в шину RS-485 lcd.setCursor (0,0); lcd.print («Отправленное значение»); lcd.setCursor (0,1); жк. принт (потвал); задержка (1000); lcd.clear (); потвал + = 1;
Сторона приемника:
Здесь мы снова начинаем с включения стандартной библиотеки для управления ЖК-дисплеем и объявляем вывод D8 Arduino Nano как выходной контакт, который мы позже будем использовать для объявления модуля MAX485 как передатчика или приемника.
int enablePin = 8; #включают
Теперь перейдем к настройке. Чтобы перевести модуль MAX485 в режим приемника, потянем вверх контакт включения. Поскольку это полудуплексная ИС, она не может одновременно передавать и принимать. Здесь мы также инициализируем ЖК-дисплей и распечатаем приветственное сообщение.
Serial.begin (9600); // инициализируем последовательный порт со скоростью 9600 бод: pinMode (enablePin, OUTPUT); lcd.begin (16,2); lcd.print ("ДАЙДЖЕСТ ЦЕПИ"); lcd.setCursor (0,1); lcd.print («Ресивер Nano»); задержка (3000); digitalWrite (enablePin, LOW); // (Вывод 8 всегда НИЗКИЙ для получения значения от Мастера)
Теперь в цикле мы проверяем, есть ли что-нибудь доступное на последовательном порту, а затем читаем данные, и, поскольку входящие данные являются целыми числами, мы анализируем их и отображаем на подключенном ЖК-дисплее.
int pwmval = Serial.parseInt (); // Получение значения INTEGER от Мастера через RS-485 Serial.print («Я получил значение»); Serial.println (pwmval); lcd.setCursor (0,0); lcd.print («Полученное значение»); lcd.setCursor (0,1); lcd.print (pwmval); задержка (1000); lcd.clear ();
Заключение
Ниже представлена тестовая установка, которую мы использовали для этого проекта.
Полную работу этого проекта можно найти в видео по ссылке ниже. Этот метод является одним из простых и легко реализуемых методов передачи данных на большие расстояния. В этом проекте мы использовали только скорость передачи 9600 бод, что значительно ниже максимальной скорости передачи, которую мы можем достичь с модулем MAX-485, но эта скорость подходит для большинства сенсорных модулей и нам действительно не нужна все максимальные скорости при работе с Arduino и другими платами для разработки, если вы не используете кабель в качестве Ethernet-соединения и не требуете всю полосу пропускания и скорость передачи, которые вы можете получить. Поиграйте со скоростью передачи данных самостоятельно и попробуйте также другие типы кабелей Ethernet. Если у вас есть какие-либо вопросы, оставьте их в разделе комментариев ниже или воспользуйтесь нашим форумом, и я постараюсь ответить на них как можно лучше. А пока, прощай!