Довольно-таки часто при разработке электронных устройств, а особенно в тех случаях, когда необходима реализация длинной линии связи между несколькими устройствами, встает задача включения микроконтроллера в эту самую линию связи. В большинстве таких случаев я выбираю интерфейс RS485. Собственно поэтому пара слов об RS485.
Физически сеть RS485 представляет из себя две линии. Особенность заключается в том, что один и тот же сигнал передается сразу по этим двум упомянутым линиям за тем лишь исключением, что сигналы инвертированы друг относительно друга. Вот как это выглядит:
Казалось бы - зачем это нужно? А идея тут следующая - полезный сигнал в RS485 определяется разностью(!) потенциалов этих линий. В этом и кроется основной смысл. Смотрите сами - пусть у нас есть помеха, которая оказывает влияние на передачу данных. При использовании RS485 эта помеха окажет одинаковое влияние на обе линии (особенно, если они "скручены" в витую пару). А поскольку полезный сигнал передается через разность потенциалов, то при вычитании потенциала одной линии из потенциала другой влияние помехи самоустранится 👍
Но, поскольку используются всего две линии, то, естественно, прием и передача должны быть разделены во времени. Возможное количество приемников/передатчиков в одной сети для RS485 составляет 32 устройства. Возможная длина линии - примерно километр, даже чуть больше.
Итак, сигнал передается разностью потенциалов. Соответственно, существуют определенные диапазоны значений, в пределах которых передаваемый цифровой сигнал считается либо равным нулю, либо единице. Для RS485 диапазон напряжений для единицы - (U > 0.2В), для нуля - (U < -0.2 В). При значениях разности потенциалов, лежащих в пределах от (-200) мВ до 200 мВ сигнал считается неопределенным.
С основной теорией разобрались, теперь обсудим как все это реализовать на практике. А вопрос тут заключается скорее в том, что необходимо каким-то образом включить микроконтроллер в сеть RS485. То есть необходим некий переходник с UART'a на RS485. Возможны разные реализации, но я сегодня остановлюсь на одной, а именно на использовании микросхемы SP3485, которая представляет из себя практически законченное устройство - трансивер RS485. Причем она может легко питаться всего от +3.3 В.
Микросхема имеет 8 ножек:
- Vcc
- GND
- A и B - те самые два сигнальных провода для RS485
- DI - подключаем к Tx контроллера
- RO - подключаем к Rx UART'а
- RE и DE - подаем сигнал разрешения передачи - на практике подключаем к любому незанятому выводу микроконтроллера, а затем в программе во время передачи выставляем на выводе 1, во время приема 0
Как видите, все несложно, практически никакой внешней обвязки эта микросхема не требует, а поставленную задачу решает на ура. И на этом на сегодня заканчиваем краткий обзор, до скорого 🤝