Arduino uart длина кабеля

ОБОРУДОВАНИЕ
ТЕХНОЛОГИИ
РАЗРАБОТКИ

Блог технической поддержки моих разработок

Урок 50. Помехоустойчивость и физическая среда стандартного интерфейса UART.

В уроке затрону общие вопросы помехозащищенности распределенных систем. Подробно расскажу о помехоустойчивости и физической среде интерфейса UART.

В предыдущих уроках мы обменивались данными между платами Ардуино через стандартный интерфейс UART. Аппаратная реализация связи не требовала ни одного дополнительного компонента. Просто соединили платы 3 проводами.

Но о допустимой длине проводов связи UART я сознательно умолчал. Об этом поговорим сейчас.

Физическая среда локальной сети.

Когда мы говорим о локальной сети, то подразумеваем объединение в сеть как минимум плат, чаще модулей или отдельных, конструктивно законченных устройств. Эти компоненты сети (абоненты) физически могут быть расположены на разном, часто значительном, расстоянии друг от друга, соединены различными линиями связи.

Данные между абонентами передаются через физическую среду локальной сети. Именно физическая среда во многом определяет пользовательские свойства сети. Если первый вопрос, который мы задаем по поводу того или иного сетевого интерфейса, — какую скорость он обеспечивает. То вторая серия вопросов обычно:

  • какое максимальное расстояние между абонентами;
  • каким кабелем подключаются устройства;
  • насколько система подвержена воздействию помех;
  • есть ли гальваническая развязка и т.п.

Все эти вопросы касаются физической среды передачи данных. У каждого типа интерфейса свои требования к физической среде. Эти требования могут меняться для одного и того же интерфейса в зависимости от скорости передачи данных.

Далее я для каждого типа интерфейса приведу таблицу с параметрами. И вы увидите, что практически все параметры либо прямо описывают физическую среду, либо определяют требования к ней.

Общие вопросы помехозащищенности сигналов передачи данных.

Электромагнитная совместимость радиоэлектронных устройств очень сложная тема. Ей надо посвящать отдельный сайт. Книжки по этому вопросу изобилуют законами ТОЭ (теоретические основы электротехники), формулами, схемами, диаграммами. Но на практике это все имеет мало значения, потому что приходится бороться с явлением, которое невозможно измерить, оценить. Конечно, уровень электромагнитных помех измеряют, но для этого требуется очень сложное дорогое оборудование. Измерения происходят в конкретных условиях. Затем устройство работает в совершенно других условиях, с другим уровнем помех и с другим конечным результатом.

Мне кажется, вполне достаточно понимания того, каким образом электромагнитные помехи влияют на электронные устройства, и как с этим бороться. Я постараюсь рассказывать ближе к практике и именно так, как я это вижу. Я не претендую на полноту освещения этого вопроса.

Я бы выделил следующие факторы, которые мешают правильно передавать данные по линии связи:

  • искажения сигнала в линии передачи данных, связанные с паразитными параметрами линии: активным сопротивлением, индуктивностью, емкостью;
  • взаимное влияние линий разных сигналов, связанное с взаимной индуктивностью и емкостью;
  • помехи, наводки от внешних или внутренних электромагнитных полей;
  • земляные токи, которые возникают в общем проводе гальванически не развязанных устройств из-за токов заземления или утечек блоков питания.

На ошибки передачи данных влияет то, как мы их передаем по линиям связи и то, как мы их принимаем. Т.е. именно параметры интерфейса определяют, насколько допустимо искажение сигналов при передаче, а физическая среда должна обеспечить эти требования. Поэтому я перечислю параметры сетевых интерфейсов, которые определяют помехозащищенность системы. Это:

  • Уровень входных сигналов. Один из самых главных параметров, определяющих помехозащищенность. Чем больше амплитуда сигнала в линии связи, тем менее на его фоне заметны помехи, тем проще их отделить.
  • Быстродействие приемников. Быстродействующие входы реагируют на короткие помехи, что значительно уменьшает помехоустойчивость. Это свойство вступает в противоречие с требованиями по скорости передачи данных. При высокой скорости без быстродействующих приемников не обойтись. Но и при скорости 9600 не стоит ставить ультрабыстрые оптроны, которые будут ловить все помехи.
  • Входное сопротивление приемников сигналов. Чем оно меньше, тем больший ток необходимо навести помехе для срабатывания, тем выше помехозащищенность входа. Но низкое входное сопротивление приемников требует от передатчиков больших выходных токов. Также входное сопротивление влияет на искажение сигналов в длинных линиях. Но об этом разговор позже.
  • Выходное сопротивление передатчиков. Кроме замечания из предыдущего пункта, этот параметр также влияет на искажение сигнала в линии. Иногда его сознательно повышают.
  • Применение дифференциальных сигналов значительно повышает помехоустойчивость сети. Об этом позже, когда будем использовать интерфейсы с таким способом передачи данных.
  • Гальваническая развязка устройств и отдельно сигналов друг от друга – один из лучших и универсальных способов повышения помехозащищенности.

В качестве физической среды, т.е. линий связи в ближайших уроках мы будем рассматривать:

  • простой кабель, провода, соединяющие сигналы плат ;
  • экранированный кабель;
  • витую пару;
  • экранированную витую пару.

Для соединения плат Ардуино этих вариантов вполне достаточно.

Помехозащищенность и физическая среда стандартного интерфейса UART.

Нет интерфейса менее помехозащищенного, чем стандартный порт UART. В качестве физической среды в нем обычно используются простые провода.

Я попробовал изобразить схему соединения 2 UART устройств с помощью отдельных проводов, и показать каким образом помехи влияют на сигналы интерфейса.

Для передачи данных в UART используются две сигнальные линии и общий провод. На рисунке показаны 3 вида помех и наводок:

  • Наводки и помехи на сигнальные линии от внешних электромагнитных полей. Вызывают токи в линиях связи, которые приводят к появлению импульсов напряжения на входах приемников. В результате происходят ложные срабатывания приемников, а значит искажение принятых данных. Источниками электромагнитных помех могут служить самые разные устройства: провода с большими токами переменного напряжения, мощные источники питания и тиристорные выпрямители, радиопередатчики, электродвигатели, элементы коммутации электрического тока и т.п.
  • Взаимные помехи между линиями связи. Линии связи обладают взаимной индуктивностью и емкостью, а значит, могут наводить помехи на соседние линии.
  • Помехи в общем проводе. Общий провод входит в электрический контур передачи сигналов для обеих линий связи. Поэтому, все броски тока в общем проводе вызывают импульсы напряжения на входах приемников. Скорее всего, это самое узкое место в помехоустойчивости интерфейса UART.

Я бы выделил две причины появления паразитных токов в общем проводе:

  • В случае если оба устройства подключены к своим землям, то возникает не контролируемый земляной контур. По сути, линия заземления подключена параллельно общему проводу между устройствами. В этом же контуре заземления, как правило, присутствуют токи, вызванные другими мощными потребителями электроэнергии. В земле всегда есть токи. В результате между выводами GND разных абонентов сети прикладывается напряжение между заземлителями, которое не может скомпенсировать общий провод. И все это напряжение смещает уровень сигналов на входах приемников. Поэтому интерфейс UART практически никогда не применяется для связи устройств с разными заземлениями.
  • Другой случай это не заземленные устройства UART (или только одно заземленное устройство), но с питанием от разных сетевых блоков питания. Сетевые блоки питания подключены входами к общей сети, а их выходы получаются соединенными через общий провод. В результате через общий провод абонентов сети текут всевозможные токи утечек, токи через сетевые фильтры блоков питания, высокочастотные импульсные токи коммутации и т.п. Конечно, эти токи зависят от параметров блоков питания. Но, например, токи сетевых фильтров радиопомех вполне допускаются даже в качественных блоках питания.

Все вышесказанное справедливо для достаточно длинных линий связи, обладающих значительной паразитной индуктивностью.

Можно сделать вывод, что в топологии физической среде передачи данных интерфейса UART не сделано ничего для повышения помехоустойчивости.

Также плохо дела обстоят и с параметрами входов и выходов интерфейса UART:

  • уровень сигналов 0 – 5 В, порог срабатывания примерно 2,5 В;
  • высокое входное сопротивление приемной части.

В результате я бы рекомендовал использовать интерфейс UART:

  • Только с гальванически связанными платами с общей землей и желательно с общим питанием.
  • Расстояние между устройствами зависит от уровня помех, но я не рискнул бы размещать их друг от друга дальше, чем 2 м.
  • Использование витых пар особого эффекта не дает из-за общего провода сигналов. Хотя это позволяет несколько увеличить расстояние линий связи.
  • Экранированные провода значительно снижают уровень электрических помех, но не защищают от магнитной составляющей.
  • Несколько повышают помехоустойчивость интерфейса UART резисторы, подключенные между входами приемников и питанием 5 В. Происходит это за счет уменьшения входного сопротивления приемников. Но все это полумеры.
  • В согласовании линий связи UART обычно необходимости нет. Линии не могут быть длинными по другим, вышеперечисленным причинам.

Общие свойства и параметры интерфейса UART я свел в таблицу.

Параметр Значение
Топология Радиальный интерфейс
Линия связи 2 сигнала с общим проводом
Гальваническая развязка нет
Режим обмена данными Асинхронный, полный дуплекс
Уровень сигналов CMOS, 0 – 5 В
Стандартное применение Обмен данными между гальванически связанными устройствами с общим питанием.

В следующих уроках поговорим о других радиальных интерфейсах, позволяющих значительно увеличить расстояние между абонентами локальной сети.

Источник

UART — Универсальный Асинхронный Приёмопередатчик

Общие сведения:

Универсальный асинхронный приёмопередатчик (Univsersal Asynchronos Reciever-Transmitter) — это физическое устройство приёма и передачи данных по двум проводам. Оно позволяет двум устройствам обмениваться данными на различных скоростях. В спецификацию UART не входят аналоговые уровни на которых ведётся общение между устройствами, UART это протокол передачи единиц и нулей, электрическую спецификацию на себя берут другие стандарты, такие как TTL (transistor-transistor logic — транзисторно-транзисторная логика), RS-232, RS-422, RS-485 и другие (RS [англ.recommended standard] — рекомендованный стандарт). На данный момент в микроконтроллерах используется в основном TTL (или точнее CMOS) UART для соединения не более двух устройств. В наших примерах мы часто называем его последовательным портом.

Подключение:

У каждого устройства, поддерживающего UART обычно обозначены два вывода: RX и TX. TX — означает transmit (передаю), RX — receive (принимаю). Отсюда становится понятно что RX одного устройства нужно подключать к TX другого. Если Вы подключите RX одного устройства к RX другого, то оба устройства будут слушать друг друга, вы соединили их входы. Если соединить TX и TX — это уже более опасно, это выходы низкого сопротивления устройств и если на одном будет логическая единица, а на втором ноль — по проводу пойдёт ток короткого замыкания (это зависит от конкретной программной или аппаратной реализации). Хотя в современных чипах от этого есть защита, на всякий случай, не стоит на неё ориентироваться. Так же необходимо объединить референсные уровни двух устройств (GNDGND), если не подразумевается гальваническая развязка.

Пример соединения двух UNO:

UART на Arduino:

На Arduino и Arduino-совместимых платах аппаратный UART обозначается символами RX и TX рядом с соответствующими выводами. На Arduino UNO/Piranha UNO это 0 и 1 цифровые выводы:

Arduino UNO/Piranha UNO

В скетче инициализируется функцией begin() в коде функции setup():

Пример:

Piranha ULTRA

На Piranha ULTRA присутствуют два аппаратных UART. Один на тех же выводах, что и UNO, второй на 8 (RX) и 9 (TX) выводах:

В Arduino IDE второй аппаратный UART называется Serial1 (Сериал один), и инициализируется так же как и первый:

Простой пример для копирования буфера первого UART’а во второй и наоборот:

Arduino MEGA

У Arduino MEGA, помимо UART’a на цифровых выводах 0 и 1 как и у UNO, присутствуют ещё три аппаратных UART. На плате это выводы 19 (RX1), 18 (TX1), 17 (RX2), 16 (TX2) и 15 (RX3), 14 (TX3) соответственно. UART совместимый по расположению с UNO обозначен RX0, TX0:

На заметку: На многих Arduino и Arduino-совместимых платах UART0 используется для загрузки скетчей, так что если Ваш скетч не загружается, проверьте эти выводы. Во время загрузки скетча к ним ничего не должно быть подключено.

Отладка проектов при помощи UART

В совокупности с монитором последовательного порта UART может быть очень полезен для отладки кода. Например, если не понятно доходит ли Ваш код до определённого места или какие значения принимает переменная, можно вызвать функцию println() и вывести значение переменной или какое-нибудь сообщение в монитор порта. В Arduino IDE монитор порта находится в меню Инструменты -> Монитор порта, так же его можно вызвать нажав пиктограмму лупы в правом верхнем углу главного окна Arduino IDE или вызвать с клавиатуры комбинацией клавиш Ctrl+Shift+M. Перед вызовом монитора порта необходимо выбрать порт с которым Вы хотите работать. Сделать это можно в меню Инструменты -> Порт.

Для удобства отладки можно указать директивы препроцессора языка Си #define , #ifdef , #ifndef

Пример:

Программный UART на Arduino

Помимо аппаратного UART в Arduino можно использовать программный. Программный порт хорошо подходит для простых проектов, не критичных к времени работы кода или для отладки проектов, позволяя не отключать модули использующие UART во время загрузки сетчей. При его использовании нужно лишь помнить что никакой другой код не может выполняться пока программа занимается считыванием данных из него и передача может осуществляться только в полудуплексном или симплексном режимах. Так же на программный RX можно назначать только те выводы, которые поддерживают прерывание по смене уровней. На UNO, например, это все цифровые выводы, кроме 13-го. Прежде чем собирать свой проект, проконсультируйтесь с инструкцией к конкретной плате.

Пример использования программного порта:

Далее к программному порту нужно обращаться через объект mySerial . Например: mySerial.write(data); .

UART на Raspberry Pi:

На Raspberry Pi UART находится на выводах колодки 8 — TX (GPIO14) и 10 — RX (GPIO15)

Перед работой с последовательным портом необходимо его включить. Сделать это можно из эмулятора терминала командой sudo raspi-config -> Interfacing options -> Serial -> No -> Yes -> OK -> Finish или из графической среды в главном меню -> Параметры -> Raspberry Pi Configuration -> Interfaces -> Serial Port

Пример работы с последовательным портом на Python:

Данный пример выводит строку «iArduino.ru» в последовательный порт Raspberry и ждёт данных из последовательного порта.

Подробнее о UART:

Параметры

При обозначении параметров UART принято использовать короткую запись ЦИФРАБУКВАЦИФРА

  • ЦИФРА — количество бит в кадре
    • от 5 до 9 бит. Обычно 8.
  • БУКВА — наличие и тип бита чётности
    • N — None (Отсутствует) без бита чётности
    • E — Even (Чётный). Проверка данных на чётность. Перед стоп-битом в кадр добавляется бит: 0 если в кадре было нечётное количество единиц, 1 — если чётное.
    • O — Odd (Нечётный). Проверка данных на нечётность. Перед стоп-битом в кадр добавляется бит: 1 если в кадре было нечётное количество единиц, 0 — если чётное.
  • ЦИФРА — длительность стоп-бита
    • 1, 1.5, 2. Продолжительность стоп-бита (1, 1.5 или 2 битовых интервала)

Таким образом, стандартные настройки в Arduino: 8-N-1

Кадрирование данных

При приёме-передаче данных каждое устройство ориентируется на своё внутреннее тактирование. Обычно это тактирование от 8 до 16 раз быстрее скорости передачи данных и обычно отсчитывается от стартового бита. Именно поэтому необходимо чтобы оба устройства были настроены на одну и ту же скорость передачи.

Так же при передаче данных присутствуют синхронизирующие биты, именуемые старт-бит и стоп-бит. Старт-бит сигнализирует о начале передачи данных и стоп-бит, соответственно об окончании.

Рассмотрим кадр данных:

При разговорах о серийный протоколах принято использовать такие слова как кадр и пакет. Кадр — интервал от старт-бита до стоп-бита. Пакет — количество кадров полезных данных. При этом не стоит путать кадр и байт: байт — это только сами данные, не включающие в себя синхронизирующие и проверочные биты.

Старт-бит:

При отсутствии передачи линия удерживается в состоянии логической единицы (в случае TTL Arduino это 5 вольт или Vcc). Как только передающее устройство притягивает линию к 0 (GND или 0 вольт в случае Arduino), это сигнализирует принимающему устройству о том что сейчас будет передача данных.

Данные:

При появлении старт-бита на линии принимающее устройство начинает отсчитывать время в соответствии с установленной скоростью и считывать состояния линии через определённые промежутки времени в соответствии с установленным количеством бит данных, после этого.

Стоп-бит:

По завершении передачи данных принимающее устройство ожидает стоп-бит, который должен быть на уровне логической единицы. Если по завершении кадра удерживается логический ноль, значит данные неверны. Если логический ноль удерживается время, превышающее длину кадра в 1,5 раза, такое состояние именуется break (разрыв линии, исторически пошло от устройств, использующих токовую петлю для передачи данных). Некоторые передатчики вызывают это состояния специально перед посылкой пакета данных. Некоторые приёмники считают такое состояние за неправильно выставленную скорость и сбрасывают свои настройки на установки «по умолчанию».

Скорость передачи данных

Скорость изменения логических уровней (импульсов) на линии принято измерять в бодах. Единица измерения названа так в честь французского изобретателя Жана Мориса Эмиля Бодо.

Скорость при использовании UART может быть любой, единственное требование — скорости передающего и принимающего должны быть одинаковы. Стандартная скорость UART принята за 9600 бод. Arduino без проблем и лишних настроек может принимать и передавать данные на скоростях до 115200 бод.

Так как при передаче данных присутствуют синхронизирующие биты, именуемые старт-бит и стоп-бит, не совсем корректно говорить, что скорость 9600 бод равна 9600 битам в секунду. Если речь идёт о полезных данных, то реальная скорость на 20% ниже. Например, если выставлены параметры 8-N-1 и 9600 бод, то на передачу одного байта уходит десять бит, и 9600/10 = 960 байт, что равно 7680 битам в секунду.

Методы связи

UART позволяет одновременно передавать и принимать данные, однако не всегда это возможно или нужно. Например, если Вам нужно только получать не критические данные (которые можно проверить следующим пакетом, например расстояние, посылаемое лидаром каждые несколько сотен миллисекунд) от цифрового датчика или любого другого устройства и не нужно ничего передавать, такой метод называется симплексным. Всего различают три метода связи:

  • Полнодуплексная — когда ведущий и ведомый могут одновременно принимать и передавать (одновременная передача в обе стороны)
  • Полудуплексная — когда ведущий и ведомый поочерёдно принимают и передают (Поочерёдная передача в обе стороны)
  • Симплексная — когда ведущий или ведомый только передают (Передача в одну сторону)

Источник

Adblock
detector