8-900-374-94-44
[email protected]
Slide Image
Меню

Stm32 usart rs485: STM32 usart на прерываниях на примере RS485 / STM32 / Сообщество EasyElectronics.ru

Содержание

Подключение микроконтроллеров к шине RS-485


				

	
	
	
Дата: 6 Июля 2015. Автор: Алексей


	
	
По просьбе читателей, в теплый летний вечер, решил написать статейку на тему подключения микроконтроллеров к шине RS-485. Начнем я думаю с самого начала. Как известно на многих, да почти на всех микроконтроллерах присутствует периферийное устройство такое как Асинхронный Приемо/Передатчик или как он по буржуйски называется UART. Правда чаще встречается USART, но отличие лишь в линии синхроимпульсов, от чего в названии появляется Синхронно/Асинхронный Приемо/Передатчик. Но по сути для RS-485 это без разницы и сути шины не меняет. И так UART. UART имеет три основные линии RX, TX и GND. Линия RX занимается приемом данных из вне в МК.
Линия TX занимается отправкой данных во внешний мир. А линия GND служет для создания потенциала относительно которого бегут биты. Если рассматривать UART на уровне AVR то многие кто с ним сталкивался хорошо знают про такой регистр как UDR. Самый прикол в том, что это двойной регистр. Да, бред но по одному и томуже адресу адресуются два разных регистра. UDR чтения и UDR записи. Отчего сам UART является полно дуплексным. То есть прием и передача могут производится одновременно. Ведь у UART две линии, одна для чтения, другая для записи. Зачем я все это рассказываю. Смотрите, давайте рассмотрим физические уровни для UART. Например мы что-то передаем. Если мы посылаем единицу, то на линии RX относительно GND появляется напряжение питания, а если нам нужно передать ноль, то линия
RX
прижимается к GND. При чтении тоже самое. А как себя ведет RS-485. Во первых он полудуплексный. То есть может либо читать из линии, либо писать в линию. Обидно, да, но… Есть еще такая штука как RS-422. В принципе это близнецы RS-485, только один работает только на прием, а другой только на передачу, а по физическим уровням повторяют точно RS-485. Честно говоря я такие штуки ни разу не встречал. Чаще все таки используют RS-485. Замечательно, полудуплексный. И как это выглядит? А вот как. Для передачи данных в отличии от UART линии требуется лишь два провода А и В. Как происходит передача. На линии А всегда выходит прямой сигнал, то есть если ноль то на линии относительно
GND
питания тоже GND, а при единице напряжение питания. А в это же время на линии В выводится ровно противоположный уровень. Муторно, да. Вот для наглядности картинка линии А, линии В и как они выглядят вместе.




Следовательно мы имеем дифференциальную линию передачи. В чем прикол такой задумки. Дело в том что если мы будем передавать сигнал прямо с UART то информация будет идти относительно земли и при возникновении электромагнитной помехи, данные могут исказится, за счет поглощения ее общим проводом. А в случае дифференциальной передачи по витой паре при возникновении помехи данные не изменятся, так как передача синфазная и помеха наводится но обоих проводах одновременно одинаково. С теорией разобрались, переходим к железу. Для реализации линии
RS-485
существует масса микросхем. Есть с защитой, опторазвязкой. Короче этот огород сами разбирайте и пользуйте то что вам нужно, а здесь будем рассматривать работу шины на самой простой MAX485. Данная микросхема выпускается в 8-и ногом корпусе DIP и SOIC. Я чаще использую вторую, не люблю дырки сверлить)))




Поехали по порядку.


1 RO Выход приемника
2 RE Разрешение на прием
3 DE Разрешение на передачу
4 DI Вход передатчика
5 GND Общий
6 A Прямой вход/выход
7 B Инверсный вход/выход
8 Vcc Напряжение питания



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




В принципе все понятно кроме направления. Здесь все просто, когда на линии направления ноль, то микросхема переходит в режим приемника, а если на линии единица, то работает как передатчик. Отсюда следует что для передачи данных необходимо от МК три линии.
RX
для чтения, TX для передачи и PortX для направления. Теперь давайте рассмотрим как подключить два МК через шину RS-485.




Как видно из рисунка выше, обе микросхемы подключены каждая к своему МК и к своему питанию, а для связи используется лишь два провода которые соединены каждый к своему попарно. A к А, В к В. Такое подключение является самым простым и будет работать на небольших расстояниях. А что делать если нам нужно подключить два МК на большом расстоянии. Что может быть проще, делаем как было описано выше, только провод по длиннее. А вот и фигу. Так нельзя. Дело в том что два провода очень длинные и в них возникает волна при прохождении тока от передатчика до конца линии которая возвращается обратно. Это как в длинной трубе если один конец заткнут, а с другого заливать воду, то вода дойдя до конца отразится и вернется назад. Вот эта волна для шины является еще одной помехой. Решить данную проблему можно следующим образом. Берем два резистора и ставим их с обеих концов линии между
А
и В. Данные резисторы называются терминаторы и предназначены гасить эту волну.




Вроде бы все, да вот приспичило еще удлинить линию. И что? А вот что. Из-за длинного провода и отсутствия общего провода на линии может возникнуть небольшой потенциал. Эта пакость может прыгать и заставлять приемники ловить мусор. Что бы этого не происходило, производители микросхем рекомендуют удерживать на линии дельту в 200мв.
Это можно добиться подтягиванием линии А к питанию, а линии В к общему с каждой стороны резистором 560 Ом.




И это опять еще не все грабли. Теперь смотрим со стороны МК. При подаче питания на схему МК сначала рестартует и на некоторое время по умолчанию переводит все порты на чтение что приводит к подвешиванию линий в воздухе. При этом на линии направления передачи может возникнуть наводка и переключить микросхему шины на передачу и выплюнуть что-нибудь в эфир. Чтоб такой пакости не произошло, необходимо подтянуть резистором на 10К линию к общему проводу, дав железную команду на чтение из шины.




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




Вот теперь вроде бы как и все. Ах да, еще рекомендуют, если линия совсем длиннющая чуть ли не километр, то необходимо витую пару брать с экраном, а концы экранов соединить с общим проводом на обеих концах для выравнивания потенциалов. Так же между общим проводом и заземлением установить резистор где-нибудь в 100R с обеих сторон. Вот теперь кажись все. Будут вопросы пишите. 
Юрий    07.07.15 11:53

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


Андрей    10.09.15 12:01

«Линия RX занимается приемом данных из вне в МК. Линия RX занимается отправкой данных во внешний мир. А линия GND служет для создания потенциала относительно которого бегут биты.» — в статье опечатались, поравьте RX и TX.


Алексей    10.09.15 15:05

Спасибо. Точно, два раза RX написал. Поправил.


Владимир    16.11.15 13:40

Очень интересно! Спасибо! Буду пробовать!


Алексей    16.11.15 14:34

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


Андрей    11.01.16 13:25

Спасибо большое! Очень полезная статья!


Андрей    20.04.16 05:42

Есть ещё дуплексный вариант RS-485 (четыре провода). Хотелось, бы узнать ваше мнение и об этом варианте RS-485.


Алексей    20.04.16 08:13

Есть. Дай бог памяти он называется RS-422. Микросхема имеет четыре вывода, два на передачу и два на прием. Но в любом случае UART сам работает в полудуплексе и смысл использовать полный дуплекс не оправдан. Хотя я могу и ошибаться.


Дмитрий    20.06.16 13:45

>Чтоб такой пакости не произошло, необходимо подтянуть резистором на 10К линию к общему проводу, дав железную команду на чтение из шины. Для устройств Master и Slave подтяжка одинаковая? Или для Master лучше подтяжку к питанию, чтобы «по умолчанию» было вещание в шину? Линию DI не нужно подтягивать? А то на модулях от Aliexpress вообще все 4 линии подтянуты к питанию, а линии A и B подтянуты через 20k (у вас в статье 560 Ом): umnyjdomik.ru/wp-content/uploads/UART-TTL-RS-485-na-MAX485.jpg И как лучше всего сделать гальваническую развязку по питанию и опторазвязку по шине данных?


Алексей    20.06.16 17:48

Резисторы нужно ставить и на мастере и на слейве, так как при включении питания МК сначала ноги выставляет на чтение и через некоторое время инициализирует по программе. В это время можно наловит всякий мусор и послать на шину. Включающемуся МК это пофиг, а вот тем кто на шине сидит, не хорошо будет. Это как в кинотеатр зайти во время сеанса и громко разговаривая по телефону пробираться на свое место. Страшного ничего не произойдет только вот окружающие будут косо смотреть.))) » И как лучше всего сделать гальваническую развязку по питанию и опторазвязку по шине данных? » Использовать готовые микросхемы с гольваноразвязкой, а для питания использовать DC-DC преобразователи на физических трансформаторах. Либо использовать готовый драйвер с полной развязкой по шине и по питанию. Например такой ADM2582E


Руслан    20.04.17 22:25

Скажите пожалуйста, а про modbus протокол вам что нибудь извесно?


Алексей    21.04.17 13:33

Это промышленный протокол с открытым доступом. В сети много русскоязычной документации.


Дмитрий    26.
12.17 13:45

Кстати одна из не многих толковых стаей по форме изложения.
Спасибо.


Павел    08.06.18 23:23

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


Алексей    09.06.18 07:05

Нет.


Георгий    09.06.18 11:41

Здравствуйте, спасибо за отличную статью, как-раз сейчас делаю передатчик на max485cpa.

Вопрос — у вас в статье написано » а линии В к общему с каждой стороны резистором 560 Ом.». и так в нескольких местах в статье. А к чему «общему»?

или может быть «К общему» — имеется ввиду к общему GND?


Алексей    09.06.18 15:13

А к плюсу питания, а В к минусу питания. Эти резисторы нужны для зазора в 100мВ между линиями А и В.


Василий    16.06.18 13:05

Резисторы 560Ом вешаются на каждом устройстве в линии или только на одном или на обоих концах? Из логики описания в статье получается что эти резисторы нужны только на одном из концов линии. Но по картинке похоже что подключены к каждому из устройств.


Алексей    16.06.18 14:19

На одном. Нужно создать дельту для стабильности линии. А на конечных устройствах нужны терминаторы по 120Ом.


Василий    16.06.18 14:34

Понятно, спасибо за статью.


Ярослав    06.11.19 14:24

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


Алексей    06.
11.19 15:39

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


Аби    04.12.19 18:47

С полной ответственностью заявляю что на данный момент это единственная статья во всём интернете объясняющая ясно что и почему нужно . при чтении всех остальных сайтов по RS485 создаётся впечатление что люди пишут о том в чём они сами не разбираются . если оценивать по 5 бальной системе то статья написана на 5 с плюсом . Молодец и красавчик !


Аби    04.12.19 18:52

написано просто отлично и идеально . пожалуй во всём интернете единственная осмысленная статья по RS485. все остальные сайты написаны языком людей которые сами не понимают о чём идёт речь . Молодец и красавчик !








Интерфейс RS485.

Микросхема-конвертер RS485-UART.

Довольно-таки часто при разработке электронных устройств, а особенно, в тех случаях, когда необходима реализация длинной линии связи между несколькими устройствами, встает задача включения микроконтроллера в эту самую линию связи. В большинстве таких случаев я выбираю интерфейс RS485. Итак, пара слов об RS485!

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

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

Казалось бы – зачем это нужно? А вот зачем… Сигнал в стандарте RS485 передается разностью потенциалов(!) в этих проводах. И в этом то и состоит его фишка 🙂 Смотрите сами – пусть у нас есть помеха, которая оказывает влияние на передачу данных. При использовании RS485 эта помеха окажет одинаковое влияние на оба провода (особенно, если они “скручены” в витую пару). А поскольку полезный сигнал передается через разность потенциалов, то при вычитании потенциала одного провода из потенциала другого влияние помехи устранится.

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

Возможное количество приемников/передатчиков в одной сети для RS485 составляет 32 устройства. Возможная длина линии составляет примерно километр, даже чуть больше. Это одна из причин, по которой меня особенно привлекает этот интерфейс 🙂

Итак, сигнал передается разностью потенциалов. Соответственно, существуют определенные диапазоны значений, в пределах которых передаваемый цифровой сигнал считается равным нулю, либо единице. Для RS485 диапазон напряжений для 1 – (U > 0.2В), для 0 – (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 – туда подаем сигнал разрешения передачи, то есть RTS – Ready To Send – на практике подключается к любому незанятому выводу микроконтроллера, а затем в программе во время передачи выставляем на выводе 1, во время приема 0

Как видите, все несложно, практически никакой внешней обвязки эта микросхема не требует, а поставленную задачу решает на ура! Таким образом, мы разобрались сегодня с очень популярным стандартом RS485 и рассмотрели один из вариантов его реализации на практике. Думаю в ближайшее время можно будет развести небольшую печатную платку для RS485-UART конвертера.

serial — Связь STM32 RS485

Ответ, как найдено в некоторой случайной документации зарегистрировался в GitHub:

Управление потоками RS485 (Водитель активируют опцию) обработка возможно через следующую процедуру:

# Программируют Скорость в бодах, Длину слова = 8 битов, Стоповые биты, Паритет, Способы передатчика/Приемника и аппаратное управление потоками оценивают использование USART_Init () функция.

# Позволяют Водителю, Позволяют использовать USART_DECmd () функция.

# Формирует Водителя, Позволяют полярность, используя USART_DEPolarityConfig () функция.

# Формирует Водителя, Позволяют время утверждения, используя USART_SetDEAssertionTime () функционируйте и deassertion время, используя USART_SetDEDeassertionTime () функция.

# Позволяют USART использование USART_Cmd () функция.

Утверждение и времена дезертирства выражается в типовых единицах измерения времени (1/8 или 1/16 время передачи бита, в зависимости от темпа сверхвыборки).

https://github.com/szczys/stm32f0-discovery-basic-template/blob/master/Libraries/STM32F0xx_StdPeriph_Driver/src/stm32f0xx_usart.c

Это позволяет мне поиск Google команды USART_DECmd, которая в свою очередь приводит меня к следующим указаниям по применению:

http://www.st.com/content/ccc/resource/technical/document/application_note/c8/5f/ef/b7/f8/a5/48/15/DM00055208.pdf/files/DM00055208.pd f/jcr:content/translations/en. DM00055208.pdf

Это содержит заключительное предложение золотой медали:

The DE signal is mapped to the RTS pin of the USART, and in this application it is
connected with the pin 12 of port A (PA12).
(For STM32F05x)

Это должно быть это трудно, чтобы узнать это? Нет. Но мы живем в несовершенном мире.

«Получают, позволяют» вход сигнала на вашем приемопередатчике, может или быть телеграфирован к постоянному (вы получите свои собственные данные), или можно телеграфировать его к инверсии сигнала DE; как правило, используя подтягивание и МОП-транзистор N-канала (как БАКАЛАВР НАУК 138) с воротами, связанными с выходным сигналом DE. Или просто используйте приемопередатчик, который переключает оба направления с единственной булавкой:-),

[Исследование отмечает] аппаратное управление потоком STM32 USART

  Концепция управления потоком от стандарта RS232, определение которого содержит RS232 стандартный последовательный порт, управление потоком. Мы должны понимать, RS232 в «RS» Порекомендуйте Стандарт является аббревиатурой «рекомендуемого стандарта» означает, что он не является, как IEEE-1284, IEEE-1394 стандартов, побочно «Комитетом настройки.» Таким образом, различные производители в этом RS232, сколько будет отличаться, управление потоком также будет отличаться. Ниже мы с вами, чтобы обсудить роль управления потоком, и как настроить операцию.

  Эта статья фокусируется на аппаратное управление потоком.

  Почему управление потоком?

  Время передачи данных между двумя последовательными портами часто появляются явление потери данных, таких, как связь между двумя компьютерами или компьютером и микроконтроллером, когда принимающий конец буфера данных полон, на этот раз, если ей данные передаются по, так как приемник не успел обработать, и что такие данные, скорее всего, будут потеряны. В области промышленности и других областях, часто сталкиваются с этой проблемой, из-за характер рассогласования скорости, обработки возможности не совпадает. Например, на одном чипе с тактовой частотой только 20М или 30М, мощность процессора ARM может быть 200M, вычислительная мощность ПК составляет несколько G, не соответствует возможности обработки данных, вызванных, когда передача данных легко теряется.

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

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

  Как построить аппаратное управление потоком данных на STM32?

  

 

  ▲ 1, оконцеватели управление потоком схема фиг.

  На рисунке 1, которые ранее использовались в RX и TX, которая является простой трехпроводной последовательной связи, если аппаратное управление потоком включено, исходя из необходимости повышения контроля двух проводов, один называется CTS (к передаче входной сигнал, называемый РТС (требуют, чтобы послать сигнал выводится). в самом деле, можно видеть из названия, является контрольным получение, передача контролируется.

  Мы можем видеть из диаграммы аппаратного соединения, если переданное слово из УСАПП к USART 2, подключенное к TX и USART ПРМ УСАППЫ 1 2 подключены УСАППАМ ТТЫ 1 и 2 USART RTS, данные по направлению от TX к ПРМ, из порта 1 в порт 2, от контроля потока к RTS CTS т.е. от порта 1 к порту 2.

  направление линии данных противоположно направлению потока данных контрольной линии

  На рисунке 1 — аппаратное управление потоком схема соединений, вы можете найти направление линии данных и направление потока линии данных управления восстанавливаются, и почему в статье упоминалась ранее контроль потока основной концепции относятся к приемнику не время, чтобы иметь дело с этим? или обработки данных, емкость относительно слабы, так что надо ждать передающей стороны, принимающий конец сигнала, посылаемого к вызываемому сигнала RTS, на передающий конце штифта обнаружения под названием CTS. Таким образом, аппаратные средства, соединяющий нижнюю половину схематической и частичного верхней половины противоположной, приемный конец и TX 2 подключен к последовательному порту, последовательный порт подключен к RTS и CTS 2.

  Как именно данные при получении?

  

 

  ▲ фиг. 2, принимает сигнал схемы RTS

  На рисунке 2 — Схема принимает сигнал RTS, мы можем видеть, сигнал RTS не считываются перед записью данных проводятся на высоком государственном уровне, мы видим перед собой Старт высок, это сказать концу передачи, данные не были отняты, пожалуйста, подождите сторону передачи, когда данные считываются из ЦП или DMA DR регистра, РТС высвобождает высокий уровень на низкий уровень, в это время, если вы хотите отправить конец передачи если данные могут быть непосредственно направлены.

  Обобщенная в одном предложении, то есть RTS указывает USART ли готов к приему новых данных.

  Кроме того, необходимо отметить, что, когда режим буферной USART ФИФО включен, FIFO полон, когда вытащил будут идти на сигнал RTS.

  

 

  ▲ Рисунок 3, передает сигнал схемы CTS

  Рисунок 3 — схематический передают сигнал CTS, рефлектометр является УСАППАМИ передачи регистра, данные записываются в этом регистре, если на этот раз не в данном регистре сдвига, передаваемом в настоящее время, содержимые аппаратные средств будут двигаться сместить TDR битных регистров, непосредственно после передачи данных в соответствии с заданной скоростью передачи данных, формата данных и других данных. Это нормальный процесс отправленных данных.

  如果使能了硬件流控的功能,就会增加一个实时检测的步骤。在图3中,当没有收到CTS信号的时候,TX 发送线上数据是连续发送的,表现形式为:在 STOP 位后紧跟着就是下一个数据的 Start bit。

  当 Data 2 还在 TX 线上进行发送的时候,如果此时在 CTS 信号上检测到了高电平,即使在 Data 2 的 STOP 位发送完之前写入了 Data 3,在当前的字节发送完之后是不会马上发送新写入的数据的,而是要等待,直到在 CTS 管脚上检测为低电平后,TX脚上才会开启 Data 3 的 Start 信号。

  这里其实我们可以简单理解一下,在发送的时候要实时监测 CTS 的电平状态,如果发现是高电平,就不会再发送新的数据,直到 CTS 检测发现已经没有高电平信号了。

  需要注意的是在当前字节发送完之前的三个时钟周期,CTS 需要提前置位上,也就是在Data 2 结尾的地方如果只差一个 STOP bit,那有可能把 Data 3 连续发送出去。

  有人可能会有疑问,CTS 不是马上就置位了吗,而且 Data 2 还没有完全发送出去。其实它是去检查 CTS 的标志位,设置这个标志位至少需要两个时钟周期,设置好了 CTS 的标志位之后,硬件才会去检查进而不去发送 Data 3 的 Start bit。但如果设置的 CTS 或者是检查到的 CTS 已经是非常晚了,那后面的一个字节就已经发送过去了,因为在发送 Data 3 的时候没看到有 CTS 的标志位,所以就要求我们至少提前三个时钟周期把 RTS 信号释放出来,让 CTS 把这个信号检测到进而让后面的数据不再发送。RTS 是只要在接收缓冲区非空的时候就会被提前置位,也就是结果寄存器里面只要有一个东西就会把它置位,都会放在当前的移位缓冲寄存器里。

  在原则上是不会出现由于 RTS 置位比较晚,导致 CTS比较慢的现象。但是不排除一种情况,就是 CTS 和 RTS 之间的延迟特别大,或者说串口的波特率特别快,这个时候就容易出现由于 RTS 置位比较晚使得 CTS 比较慢的现象。

  软件配置

  

 

  ▲ 图4,软件配置

  在 CubeMX 里可以选择一个串口模式为异步模式,之后在它下面的硬件流控 RS232 中选择 CTS/RTS。这里要注意一下,CTS 和 RTS 是可以单独使能的,可以根据速度来选择使能 CTS 还是 RTS,如果我的速度比较慢的话就使能 RTS,因为 RTS 是给对方的信号,不需要考虑对方的处理能力。

  另外,在 CubeMX 里也可以使能 RS485 的硬件流控,这里的流控实际上流控的是数据的方向,因为 RS485 是一个半双工的通讯模式,它的数据收的时候就不能发,发的时候不能收。STM32 上有一个 DE 管脚和 RS485 的接收器芯片直接相连,控制数据的收发,所以我们要知道在 STM32 的硬件流控中其实包含两方面的内容,一方面是关于速度的,也就是 RS232 的 CTS、RTS;另一方面是关于数据的方向的控制,它是基于 RS485 的,在软件中只需要设置它的功能,其他使用功能和串口都是一样的。

  硬件流控和软件流控的区别

  软件流控是以特殊的字符来代表从机已经不能再接收新的数据了,基本的流程就是从机在接收数据很多的时候或主动给发送端发送一个特殊字符,当发送端接收到这个特殊字符后就不能再发送数据了。

  软件流控很方便,不需要增加新的硬件,还是以前的TX、RX,但是使用了软件流控,它本身的字符也是数据,这个数据只不过是说在软件里把它设置了一个特殊的含义。如果它是一个全双工的通讯,在给另一个串口发送数据的时候如果也包含了这样一个特殊字符,对方就会误以为我让它不要再发送数据了,会有一定的概率出现错误,而硬件流控就不需要考虑这方面,只需要使用 CTS 和 RTS,所有的数据都是由硬件来操作的。

  在实际的应用开发中,大家需要根据自己的实际情况来选择使用硬件流控还是软件流控。

 

视频学习资料

(零基础电子产品设计)
http://www. makeru.com.cn/live/3727_1388.html?s=45051
从0到1,设计自己的开发板
http://www.makeru.com.cn/live/4034_2016.html?s=45051

(stm32 USART串口应用)
http://www.makeru.com.cn/live/1392_1164.html?s=45051
PWM脉宽调制技术
http://www.makeru.com.cn/live/4034_2146.html?s=45051
基于STM32讲解串口操作
http://www.makeru.com.cn/live/1758_490.html?s=45051

(stm32直流电机驱动)
http://www.makeru.com.cn/live/1392_1218.html?s=45051

 

学习交流资料下载群:830802928

Делаем шлюз Ethernet-RS485 на STM32 для Mysensors

Данный пост посвящён DIY разработке Ethernet-RS485 шлюза. Цель данного шлюза – обеспечение централизованного управления нодами Mysensors со стороны контроллера умного дома.

Недавно меня таки достали провода, дюпоны, навесная пайка и т.п. и было принято давно оттягиваемое решение — сделать свои платы с нуля, т. е. всё по серьёзному. 🙂
Сказано — сделано!

Первым делом была разработана и нарисована принципиальная схема шлюза, в которой я постарался учесть все свои хотелки и пожелания. Далее произведена компоновка и подгонка платы под требуемые размеры (50×50мм). И последний этап, это заказ плат на производстве. Я заказывал на фабрике JLCPCB, 5 плат — 2$ + доставка.

Данный шлюз построен на базе МК STM32F103CB(8)T6. В качестве Ethernet чипа выступает достаточно известная микросхема от WIZnet — W5500. Транспортом данного шлюза в сети Mysensors является проводной интерфейс RS485. В качестве драйвера RS485 был выбран чип — MAX13488EESA+T, в том числе и в связи с наличием у него режима автоматического выбора направления приёма/передачи.

Итак пройдёмся поподробнее по основным частям шлюза.

Сердцем шлюза является МК STM32F103CBT6 в корпусе 48LQFN. МК построен на ядре Cortex-M3, имеет 128Кб встроенной флэш памяти и 20Кб ОЗУ. Штатная частота МК — 72МГц, но если не использовать встроенный USB порт, то частоту можно разогнать и до 128МГц, он на ней вполне стабильно работает. МК питается от 3.3В. Для полноценной работы нужны два кварца, на 8МГц и 32.768КГц. Для программирования и отладки имеется интерфейс SWD. МК можно заменить и на STM32F103C8T6, он на данный момент по памяти вполне проходит.

Ethernet чип W5500. Внутри имеет ядро Cortex M0, для связи с внешним миром присутствует порт SPI (скорость до 80 МГц). При скорости 100Mbps Full Link имеет потребление в 132мА. Есть поддержка Wake on LAN, для обозначения своего режима умеет управлять 4 светодиодами 4 (SPD / DUP / ACT / Link). В наличии 32 кбайт буферной памяти RAM для обеспечения процесса передачи TCP/IP пакетов, аппаратно обеспечивает до 8 независимых TCP/UDP сокетов (канальных соединений). Аппаратно поддерживает следующие коммутационные протоколы обработки проводного TCP/IP стека: TCP, UDP, MAC, ICMP, IPv4, ARP, IGMP, PPPoE. Диапазон рабочих температур -40…85°C. Напряжение питания — 3.3В.

И наконец драйвер RS485 — MAX13488EESA+T. Микросхема в корпусе SOIC-8 150mil. Скорость передачи данных до 16 Mb/s. Рабочее напряжение — 5В, потребляемый ток — 4.5 мA. Позволяет подключать до 128 узлов на одну линию RS485. Из главных особенностей это возможность включения режима автоматического определения направления приёма/передачи, т.е. данный драйвер может подключаться напрямую к порту UART и всё! Никаких лишних телодвижений совершать не надо.

Принципиальная схема шлюза разбита на три части:

Схема RS485 части шлюза.

Схема МК и его периферии.

Схема части Ethernet.


Т.к. шлюз в сети Mysensors является единой точкой отказа, то к нему предъявляются повышенные требования по надёжности и безопасности. И в первую очередь он должен быть гальванически развязан от самой линии RS485. Для гальванической развязки линии данных была установлена микросхема — цифровой изолятор от TEXAS INSTRUMENTS — ISO7321CDR. Для развязки по питанию был использован изолированный DC/DC преобразователь от Traco Power – TME0505S. Защита драйвера RS485 от высоковольтных импульсов при необходимости реализовывается отдельной платой. Единственно, в виду своей компактности был оставлен защитный диод (подавитель ЭСР) VD1.

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

Рендеринг шлюза

Верхний слой.

Нижний слой.

3D — вид сверху.

3D — вид снизу.


Теперь поподробнее о схеме. Для функционирования шлюза, от МК нам необходим один порт USART и один порт SPI. МК STM32F103CBT6 имеет 3 порта USART с максимальной скоростью до 4.5Mbits/s. И два SPI порта. В результате компромисса (компоновка деталей на плате), для взаимодействия с драйвером RS485 был выбран порт USART1 (ноги PB6, PB7 с ремапом). А для взаимодействия с W5500 — порт SPI1 (ноги PA4-7).

Подключение Ethernet контроллера W5500 выполнено в соответствии с рекомендациями производителя. Единственное, что может вызвать некоторые сложности, это высокоточные резисторы, которых может не оказаться в наличии в местном радиоларьке. Но на сайте lcsc.com и ему подобных с данными резисторами всё в порядке. Для Ethernet разъёма был выбран широко распространённый бюджетный модуль — HR911105A, имеющий на борту трансформатор и два светодиода.

Самое сложное в данной плате, это запаять две 48-ножечные lqfp микросхемы. Если с этим справились, то дальнейшая сборка не представляет никаких сложностей. Настроек плата не требует и сразу после сборки готова к работе.

Хоть это и шлюз, но чтобы не пропадать добру на плате были разведены практически все пины МК, разведён ресет, и два светодиода (один из них RGB). Сделаны две площадки под микросхемы, одна под I2C EEPROM и вторая для цифрового термометра/измерителя влажности HDC1080. Термометр конечно будет измерять общую температуру по больнице, так как он установлен рядом с двумя чипами, но мало ли, вдруг кому понадобиться.

В качестве разъёма для RS485 был выбран, трёх пиновый зелёный разъём DB2EV-5.08-3P, с шагом 5.08мм. Он конечно великоват, но удобен в использовании. Остальные разъёмы за исключение microUSB выбраны — 1.25мм JST, они достаточно компактны и хорошо фиксируются.

Фото собранного шлюза

Вид сверху

Вид снизу


Для питания платы необходимы 5В, которые можно подать через разъём microUSB, либо через разъём Power. 5В питание необходимо драйверу RS485, микросхеме гальванической развязки и DC/DC преобразователю. Т.к. МК STM32 и Ethernet чип требуют питания 3.3В, на плате предусмотрен LDO регулятор — на базе микросхемы LDL1117S33R. На линиях питания 5 и 3.3В установлены танталовые и керамические конденсаторы. Большинство используемых смд компонентов — 0603.

Т.к. у всех всегда ситуации и подходы бывают разные, то некоторые вещи оставлены на откуп пользователю. Если нам не нужна гальваническая развязка от линии RS485, то мы можем не устанавливать изолирующий DC/DC преобразователь — D1, микросхему опторазвязки — D3. В таком случае надо напаять «соплей» в предназначенные для этого места на плате.

Смотреть



По необходимости устанавливаем резисторы R31, R32 и R2, защитный диод VD3.

При первом включении на столе, шлюз нормально видел ноду, прошивки в неё залетали за 30 секунд, всё было хорошо. И да, планируемая мной скорость сети RS485 — 0.5-1Mbit. В доме будет 1Mbit, на улице 0.5Mbit. Так вот когда я поставил шлюз на его рабочее место в серверную, а ноду подключил к устройству на улице, я вполне ожидаемо столкнулся с тем, что они друг друга не увидели. С помощью осциллографа я мог наблюдать весьма удручающую картину линии RS485, но пара подтягивающих резисторов R31 и R32 быстро решила данную проблему. На фото шлюза, данные резисторы подпаяны проводками. Дело в том, что изначально я не планировал ставить их на шлюз, т.к. они нужны только на концах линии RS485, а шлюз у меня планировался в середине. Но когда подключена только одна нода, они всё же нужны и поэтому они были добавлены во второй ревизии. Терминирующий резистор на 120Ом устанавливается прямо в разъём RS485, так его проще переносить от устройства к устройству при наращивании линии.

Как это ни удивительно, но плата первой ревизии показала полную работоспособность и стабильную работу. За несколько месяцев не произошло ни одного зависания. Но с другой стороны ещё не было и гроз, а данный шлюз у меня смотрит как-раз на улицу.

Но — поживём увидим! 🙂

Таким образом была выполнена основная задача — создать компактный, высокоскоростной и надёжный Ethernet-RS485 шлюз. Чтобы не расплываться мыслями по древу, статья сосредоточена только на железной части, а программная часть сознательно вынесена за скобки.

Репозиторий с проектом шлюза.

С радостью отвечу на конструктивные вопросы.

Для интересующихся постройкой УД на базе Mysensors существует русскоязычная группа в телеграмм и русскоязычный сайт.

P.S. Цель данной статьи показать, что нет ничего сложного в разработке и создании своих собственных плат и готовых устройств. Главное ставить цель и идти к ней!

Почему бы не всегда использовать DMA в пользу прерываний с UART на STM32? [закрыто]

Я уже использовал STM32CubeMx / HAL в нескольких проектах и ​​обнаружил, что генерируемая им программа обработки UART имеет определенные недостатки на стороне приема.

При передаче вы обычно хотите отправить блок данных или строку текста. В этом случае вы заранее знаете, сколько времени занимает передача данных, и поэтому использование DMA является очевидным решением. Вы получаете прерывание после завершения передачи и можете использовать функцию обратного вызова UART TX complete, чтобы указать вашему основному коду, что передача завершена, и вы можете отправить другой блок данных.

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

Чтобы обойти это, я написал свою собственную функцию обработчика прерываний, которая хранит данные в небольшом локальном циклическом буфере и устанавливает счетчик, который читается основным кодом (семафор подсчета RTOS), чтобы указать, что полученные данные готовы. Затем основной код может собирать данные из этого буфера в свободное время, при этом не имеет значения, имеется ли некоторая задержка в сборе данных, при условии, что локальный буфер не переполняется до того, как данные собраны.

Применение приёмопередатчиков RS-485 в оборудовании стандарта DMX512

Оборудование сценического освещения и создания спецэффектов, применяемое в современных драматических и оперных театрах, концертных залах и на спортивных аренах, использует сложные сети передачи данных. Эти сети, протяжённость которых нередко достигает 1200 м, обеспечивают обмен данными между сотнями сетевых узлов, управляющих светорегуляторами, подвижными прожекторами, генераторами дыма и другим оборудованием для создания спецэффектов.Первым стандартом, описывающим методы надёжного обмена данными между устройствами такого рода, стал стандарт DMX512, разработанный в 1986 году инженерным комитетом Института Театральных Технологий США (United States Institute for Theatre Technology — USITT). В 1998 году поддержку этого стандарта взяла на себя ассоциация поставщиков услуг и технического обеспечения для индустрии развлечений (Entertainment Services and Technology Association — ESTA). Обновлённая версия стандарта в 2004 году была одобрена Американским национальным институтом стандартов (American National Standards Institute — ANSI). Стандарт был повторно пересмотрен в 2008 году и в настоящее время является официальным стандартом ANSIE1.11 2008, который называется «Entertainment Technology — USITTDMX512A — Asynchronous Serial Digital Data Transmission Standard for Controlling Lighting Equipment and Accessories», или, кратко, DMX512-A.

Топология

Сеть DMX512 использует многоточечную топологию, аналогичную описанной в стандарте RS-422. Такая топология предусматривает наличие одного контроллера (ведущего узла), который периодически отсылает управляющие данные множеству приёмников (ведомым узлам). Все узлы сети соединены последовательно (цепочкой): каждый ведомый узел имеет вход (разъём IN) и выход (разъём OUT). Контроллер, имеющий только разъём OUT, подключается к разъёму IN первого ведомого узла. Разъём OUT первого ведомого соединяется с разъёмом IN следующего ведомого, и т.д.
К разъёму OUT последнего ведомого в цепочке подключается оконечная нагрузка — резистор сопротивлением 100 или 120Ом.
Чтобы избежать путаницы между входящими и исходящими информационными сигналами портов DMX512, в качестве разъёмов IN используются вилки XLR-5, а в качестве разъёмов OUT — розетки XLR-5:

Протокол

Контроллер DMX512 передаёт пакеты последовательных данных в асинхронном режиме со скоростью 250 Кбит/с. Пакет данных начинается с сигнала паузы (break), имеющего НИЗКИЙ уровень, после которого передаётся сигнал маркера (mark) ВЫСОКОГО уровня. Эта последовательность называется «маркер после паузы» (Mark-After-Break — MAB). После MAB формируются временные слоты, в каждом из которых передаётся одно слово, состоящие из одного старт-бита, восьми битов данных и двух стоп-битов. Пакет DMX512 может содержать до 513 временных слотов, из которых 512 будут слотами данных. Первый слот, называемый стартовым кодом, определяет тип данных, содержащихся в пакете.

Физический уровень

Физический уровень сети стандарта DMAX512-A реализован на основе промышленного интерфейса EIA-485, который позволяет подключать к одному сегменту шины до 32 устройств при длине сегмента до 1200 м. Для соединения устройств обычно используется витая пара с волновым сопротивлением 120 Ом (кабель RS-485) или 100 Ом (кабель CAT5). На дальнем конце шины устанавливается согласующий резистор с сопротивлением, равным волновому сопротивлению кабеля.
В дополнение к требованиям стандарта EIA-485, стандарт DMX512-A рекомендует заземлять порты передатчиков и изолировать порты приёмников, чтобы избежать возникновения паразитных контуров заземления.

Кроме того, стандарт DMX512-A предусматривает возможность использования топологий с расширенной функциональностью (Enhanced-Functionality — EF), в рамках которых разрешается применение устройств-ответчиков (responders). Ответчиками называются приёмные узлы, которые могут возвращать контроллеру информацию о своём состоянии. Наиболее часто применяются топологии EF1 и EF2. В топологии EF1 для связи между контроллером сети DMX512 и ответчиками используется полудуплексный канал связи, тогда как топология EF2 обеспечивает дуплексную связь между узлами
сети. Но в любом случае ответчики, относящиеся к категории приёмных устройств, должны иметь изолированные порты приёма и передачи.
В приложениях подобного рода лучше всего задействовать дуплексные приёмопередатчики RS-485, поскольку их можно приспособить не только для обычных систем DMX512 (с устройствами, обеспечивающими только приём данных), но и для полудуплексной и дуплексной конфигураций, используемых в системах EF1 и EF2 соответственно.
Ниже показан законченный вариант схемы устройства-ответчика, удовлетворяющий требованиям стандарта DMX512-A. Изолированный малопотребляющий приёмопередатчик ISO35T компании Texas Instruments с напряжением питания 3.3 В формирует сигналы, соответствующие спецификации шины RS-485, обеспечивая дифференциальное выходное напряжение
с номинальным значением 2 В (минимум — 1.5 В) при полной дифференциальной и синфазной нагрузке. Максимальная скорость передачи этой микросхемы составляет 1 Мбит/с, что с лихвой перекрывает требуемые стандартом DMX512-A 250 Кбит/с, а относительно большие длительности фронтов (200 нс) гарантируют низкий уровень электромагнитных помех.

В приведённой схеме управляющие данные, полученные по шине DMX512, преобразуются компаратором и передаются через изоляционный барьер на выход R приёмника. С этого выхода данные поступают на вход интерфейса UART микроконтроллера MSP430F2132 компании Texas Instruments. Микроконтроллер передаёт полученные данные по высокоскоростному синхронному
последовательному интерфейсу в 8-канальный цифро-аналоговый преобразователь (ЦАП). Применённая микросхема ЦАП DAC7718 компании Texas Instruments может формировать на своих выходах двухполярные сигналы напряжением до ±16.5 В и однополярные сигналы напряжением до 33 В.
Остальные элементы схемы сетевого узла, включая ЦАП, микроконтроллер и приёмопередатчик, питаются от однополярного источника напряжением 3.3 В. Для питания изолированной части интерфейса используется линейный стабилизатор с малым падением напряжения (TPS76333 от TI), обеспечивающий ток до 150 мА, а также защиту от перегрева и короткого замыкания.

Из «Журнала по применению аналоговых компонентов» Третий квартал, 2011 Thomas Kugelstadt

Обсуждение на форуме

% PDF-1. 3 % 1 0 obj > поток конечный поток эндобдж 2 0 obj > эндобдж 8 0 объект > эндобдж 9 0 объект > эндобдж 10 0 obj > эндобдж 11 0 объект > эндобдж 12 0 объект > эндобдж 13 0 объект > эндобдж 14 0 объект > эндобдж 15 0 объект > эндобдж 16 0 объект > эндобдж 17 0 объект > эндобдж 18 0 объект > эндобдж 7 0 объект > / ProcSet [/ PDF / Text] / ColorSpace> / Font >>> эндобдж 5 0 obj > поток hWKo7 [`i4IH $ * z (z0VaIV o ܕ MRkpFtW ߿6 f {JVX0N, mGgZL: F; 0 + vZdoE (AY14DbHQ, GBetrK. XWRM6ʲrRefkiW9 $ G` HЦS1 «l-r: e 䪞 -bANrOil +5 kpeNZ1% up8 + SI ”SV (Y ## CBi

серийный — STM32 RS485 соединение

Ответ, который можно найти в какой-то случайной документации, проверенной на GitHub, таков:

Управление потоком

RS485 (функция включения драйвера) возможно с помощью следующей процедуры:

# Программирование скорости передачи, длина слова = 8 бит, стоповые биты, четность, Режимы передатчика / приемника и значения аппаратного управления потоком с использованием функция USART_Init ().

# Включите драйвер Enable с помощью функции USART_DECmd ().

# Настраивает полярность включения драйвера с помощью USART_DEPolarityConfig () функция.

# Настраивает время подтверждения включения драйвера с помощью USART_SetDEAssertionTime () функция и время отключения с помощью USART_SetDEDeassertionTime () функция.

# Включите USART с помощью функции USART_Cmd ().

Время утверждения и десертации выражается в единицах времени выборки (время 1/8 или 1/16 бита, в зависимости от частоты передискретизации).

https://github.com/szczys/stm32f0-discovery-basic-template/blob/master/Libraries/STM32F0xx_StdPeriph_Driver/src/stm32f0xx_usart.c

Это позволяет мне искать в Google команду USART_DECmd, что, в свою очередь, приводит меня к следующему примечанию к приложению:

http://www.st.com/content/ccc/resource/technical/document/application_note/c8/5f/ef/b7/f8/a5/48/15/DM00055208.pdf/files/DM00055208.pdf/jcr : content / translations / en.DM00055208.pdf

Это последнее предложение о золотой медали:

  Сигнал DE отображается на вывод RTS USART, и в этом приложении он
подключен к контакту 12 порта A (PA12).(Для STM32F05x)
  

Неужели так сложно это выяснить? Нет. Но мы живем в несовершенном мире.

Вход сигнала разрешения приема на вашем приемопередатчике может быть либо подключен к постоянному включению (вы получите свои собственные данные), либо вы можете подключить его к инверсному сигналу DE; обычно используется подтягивающий и N-канальный MOSFET (например, BS-138) с затвором, привязанным к выходному сигналу DE. Или просто используйте трансивер, который переключает оба направления одним контактом 🙂

stm32f4 — RS485 без регулятора потока

Можно ли отправлять / получать по RS485 без управления потоком.

Да, поскольку в RS-485 нет управления потоком.

RS-485 — одиночный сигнал, реализованный как дифференциальная пара. Это дает ему хорошую помехозащищенность и подавление синфазных помех, но это все равно одиночный сигнал. Нет никаких положений для управления потоком.

Как и все, кроме отправки одного символа по RS-485, остальное зависит от вашей реализации. Вам решать, когда узлы узнают, что им разрешено передавать, сколько им разрешено передавать за один раз и т. Д.

Лучший сценарий для управления потоком — убедиться, что все приемники способны принимать максимальную постоянную скорость передачи данных любого передатчика. Если это не так, то вам нужно каким-то образом реализовать регулирование данных, но это полностью выходит за рамки спецификации RS-485.

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

Если все это звучит слишком сложно, обратите внимание на CAN как на альтернативу вашей сети RS-485. CAN также использует одиночный сигнал, реализованный как дифференциальную пару, поэтому имеет аналогичную помехозащищенность и надежность. Однако CAN определяет несколько уровней выше сигнализации низкого уровня. Он включает в себя целые пакеты, проверку пакетов, обнаружение коллизий и повторную попытку, а также несколько других тонкостей.

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

Если вы сегодня разрабатываете новую систему, RS-485 редко бывает хорошим выбором. Вместо этого посмотрите серьезно на CAN.

atmega — Как найти линию UART бесплатно для отправки данных

Программное обеспечение управления потоком данных

Для программного и аппаратного управления потоком требуется программное обеспечение для выполнения задачи установления связи.Это вводит в заблуждение термин «управление потоком программного обеспечения». Имеется в виду, что при аппаратном управлении потоком в кабеле связи присутствуют дополнительные линии, которые сигнализируют об условиях установления связи. При программном управлении потоком, которое также известно под названием XON-XOFF flow control, байты отправляются отправителю по стандартным линиям связи.

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

Два байта были предопределены в наборе символов ASCII для использования с программным управлением потоком данных. Эти байты называются XOFF и XON, потому что они могут останавливать и перезапускать передачу.Значение байта XOFF равно 19, его можно смоделировать, нажав Ctrl-S на клавиатуре. XON имеет присвоенное значение 17, что эквивалентно Ctrl-Q.

Использование программного управления потоком очень просто. Если отправка символов должна быть отложена, в строке отправляется символ XOFF, для повторного перезапуска связи используется XON. Отправка символа XOFF останавливает связь только в направлении устройства, выдавшего XOFF.

У этого метода есть несколько недостатков. Один уже обсуждался: использование байтов в канале связи требует некоторой полосы пропускания.Еще одна причина более серьезная.

Подтверждение связи в основном используется для предотвращения переполнения буфера приемника, буфера в памяти, используемого для хранения недавно полученных байтов. Если происходит переполнение, это влияет на то, как обрабатываются новые персонажи в канале связи. В худшем случае, когда программное обеспечение было разработано плохо, эти символы выбрасываются без их проверки. Если такой символ — XOFF или XON, поток связи может быть серьезно нарушен. Отправитель будет постоянно предоставлять новую информацию, если XOFF потерян, или никогда не отправлять новую информацию, если XON не был получен.

Это также относится к линиям связи с плохим качеством сигнала. Что произойдет, если сообщение XOFF или XON не получено четко из-за шума на линии? Также необходимы особые меры предосторожности, чтобы отправляемая информация не содержала символов XON или XOFF в качестве информационных байтов.

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

высокоскоростной CSMA

Для высокой скорости, такой как Ethernet. CSMA : определение несущей, множественный доступ, обнаружение / предотвращение коллизий, со случайными таймерами отсрочки передачи были проанализированы на предмет вероятностной вероятности прохождения для оптимизации.

RS485 Последовательная связь между Arduino Mega и Arduino Pro Mini

В этом проекте я расскажу о том, как использовать Max485 для последовательной связи между двумя платами Arduino. Как эффективно настроить RS485 в режиме приема и передачи.Каковы преимущества использования протокола RS485 для последовательной связи, и, наконец, я представлю рабочую модель последовательной связи RS485 между Arduino Mega и Arduino Pro Mini.

RS485 Протокол последовательной связи

Протокол последовательной связи RS485 может передавать цифровые последовательные данные на максимальное расстояние до 4000 м или 4 км. Но обычно после 1200 м сигнал начинает спадать, и передаваемый сигнал начинает терять свою силу, из-за чего существует небольшая вероятность потери данных.Для достижения 4 км успешной передачи данных несущая среда должна быть гладкой, а длины линий A и B должны быть равными по длине. Внешняя ЭДС (электродвижущая сила) также влияет на линии, несущие данные.

Rs485 передает два дифференциальных сигнала по двум разным проводам, называемым линиями A и B. Поскольку сигналы имеют противоположную полярность (90 градусов по фазе), они могут распространяться на довольно большие расстояния. Передаваемые сигналы имеют противоположную полярность, и любой внешний сигнал, наведенный во время движения, можно легко отфильтровать на выходе.

Микроконтроллеры

сами по себе не могут выводить данные для передачи сигнала RS485. Скорее внешнее устройство / модуль должен быть сопряжен с микроконтроллером для достижения связи RS485. Max485 — популярный приемопередатчик RS485, который может быть сопряжен с любым микроконтроллером для связи RS485. Микроконтроллер отправляет данные на max485. Затем max485 отправляет данные по линиям rs485.

Max485 Распиновка и описание выводов

MAX485 Распиновка

  • DI (Data In) Данные на выводе DI передаются по линиям A и B, когда модуль находится в режиме передачи.Чтобы установить модуль в режим передачи, установите DE = 1 и RE = 1. Вывод DI подключен к выводу Tx UART главного микроконтроллера.
  • RE (разрешение приема ) Вывод RE Используется для настройки модуля в режиме приема.
  • DE (разрешение данных) Вывод DE используется для настройки модуля в режиме передачи
  • RO (Receive Out ) Данные, полученные на выводах A и B, передаются на выводы RO. Вывод RO подключен к выводу Rx микроконтроллера.
  • A & B (Дифференциальные входные и выходные выводы) Данные передаются и принимаются по линиям A и B.

Связь RS485 между Arduino Mega и Arduino Pro Mini

В демонстрационном проекте ниже объясняется, как на практике установить последовательную связь RS485. Последовательные данные передаются между Arduino Mega и Arduino Pro Mini, связь осуществляется в полнодуплексном режиме. Скорость передачи данных установлена ​​на 9600. Arduino Mega имеет 4 последовательных канала, я использую для своего приложения последовательный канал-1. Arduino Pro Mini имеет только один последовательный канал, поэтому я использую его в своем приложении. Контакт # 8 Arduino Mega и Arduino Pro Mini используется для управления контактами RE (разрешение приема) и DE (разрешение данных) MAX485.

Я использую в своем проекте дешевый модуль arduino rs485. Я купил их онлайн на aliexpress. Один модуль arduino rs485 обошелся мне примерно в 2,3 доллара. Предварительно собранные модули arduino rs485 сокращают время создания схемы max485 на макетной плате и всей другой беспорядочной проводки. Принципиальная схема проекта представлена ​​ниже.

Связь RS485 между Arduino Mega и Arduino ProMini, Leonardo и т. Д.

Изначально Mega находится в режиме передачи, а Pro Mini — в режиме приема. Mega передает символ «9» по последовательному каналу, а затем переходит в режим приема, Pro Mini принимает символ из последовательной линии, проверьте, является ли он «9».Если «9», то он, в свою очередь, отправляет строку «AcruxTekIsld» обратно в последовательную линию. Mega теперь в режиме приема получает строку и отображает ее на последовательном мониторе. Pro Mini поставляется с предварительно установленным светодиодом, подключенным к контакту № 13. Этот светодиод переключается через каждые 2 секунды.

Обратите внимание, что функция Serial.readString () не работала в Rs485 Communication, потому что последовательный буфер не получил завершающий символ. Это потому, что резисторы смещения и согласующие резисторы не откалиброваны по сопротивлению провода.Вот почему я использовал statemnet while (Serial1.available () && getdata! = ’D’). Это означает, что если данные доступны в буфере и не равны «d», то считайте данные. В то время как я читаю данные по одному символу из буфера. Serial.readString () идеально работает при обмене данными RS232.

Arduino Mega последовательный RS485 код связи

Вы также можете использовать приведенный ниже код для Arduino Uno, Arduino Lenardo, Arduino Mega и т. Д. Для использования кода с Леонардо просто измените появление Serial на Serial1.

Arduino Pro Mini, последовательный RS485, коммуникационный код

Загрузите файлы .ino arduino с кодом проекта и поделитесь с нами своими отзывами о проекте. Если у вас есть вопросы, напишите их ниже в разделе комментариев. Предложения и рекомендации приветствуются. Не стесняйтесь обсуждать любые вопросы.

Смотрите видео о проекте здесь

% PDF-1.6 % 588 0 объект > эндобдж xref 588 101 0000000016 00000 н. 0000003644 00000 п. 0000003965 00000 н. 0000004017 00000 н. 0000004418 00000 н. 0000004453 00000 п. 0000004610 00000 н. 0000004766 00000 н. 0000005487 00000 н. 0000005984 00000 п. 0000006907 00000 н. 0000007402 00000 н. 0000007791 00000 н. 0000009205 00000 н. 0000009653 00000 п. 0000014851 00000 п. 0000014888 00000 п. 0000014966 00000 п. 0000015313 00000 п. 0000015652 00000 п. 0000016010 00000 п. 0000016143 00000 п. 0000020600 00000 п. 0000020985 00000 п. 0000021309 00000 п. 0000022565 00000 п. 0000023201 00000 п. 0000023620 00000 п. 0000024087 00000 п. 0000024335 00000 п. 0000024469 00000 п. 0000025496 00000 п. 0000025818 00000 п. 0000026285 00000 п. 0000034480 00000 п. 0000035882 00000 п. 0000037316 00000 п. 0000038995 00000 п. 0000040362 00000 п. 0000040938 00000 п. 0000041192 00000 п. 0000042033 00000 п. 0000046562 00000 п. 0000046988 00000 п. 0000047356 00000 п. 0000047595 00000 п. 0000048122 00000 п. 0000048948 00000 н. 0000050461 00000 п. 0000071290 00000 п. 0000075481 00000 п. 0000075713 00000 п. 0000075945 00000 п. 0000087319 00000 п. 00000

00000 п. 00000

00000 п. 00000 00000 п. 00000 00000 п. 00000 00000 п. 00000 00000 п. 00000

  • 00000 п. 00000 00000 н. 00000
  • 00000 п. 00000
      00000 п. 00000
    • 00000 п. 0000090959 00000 н. 0000091129 00000 п. 0000091184 00000 п. 0000091302 00000 п. 0000091442 00000 п. 0000091540 00000 п. 0000091595 00000 п. 0000091717 00000 п. 0000091836 00000 п. 0000091892 00000 п. 0000092011 00000 н. 0000092066 00000 п. 0000092213 00000 п. 0000092267 00000 п. 0000092362 00000 п. 0000092416 00000 п. 0000092533 00000 п. ګ! N ~ Aqv.> 691 iX’GO? / KS

      UART против I2C против SPI — протоколы связи и их использование

      Когда мы говорим о протоколах связи, UART, SPI и I2C — это обычные аппаратные интерфейсы, которые люди используют при разработке микроконтроллеров.

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


      Интерфейс UART

      Что такое UART?

      • означает Универсальный асинхронный прием и передача (UART)
      • Простой протокол последовательной связи, который позволяет хосту обмениваться данными с вспомогательным устройством.
      • UART поддерживает двунаправленную, асинхронную и последовательную передачу данных.
      • Он имеет две линии данных, одну для передачи (TX), а другую для приема (RX), которые используются для связи через цифровой контакт 0, цифровой контакт 1.
      • TX и RX подключены между двумя устройствами. (например, USB и компьютер)
      • UART также может обрабатывать проблемы управления синхронизацией между компьютерами и внешними последовательными устройствами.

      Как это работает?

      • Он может работать между устройствами тремя способами:
        • Симплекс = передача данных в одном направлении
        • Полудуплекс = передача данных в любом направлении, но не одновременно
        • Полнодуплексный = передача данных в обоих направлениях одновременно
      • После подключения данные передаются от TX к RX принимающего UART.
      • Поскольку UART является асинхронной последовательной передачей = Нет часов
      • Передача UART преобразует параллельные данные от ведущего устройства (например, CPU) в последовательную форму и передает их последовательно в принимающий UART. Затем он преобразует последовательные данные обратно в параллельные данные для принимающего устройства.
      Ссылка: Основы связи UART.
      • Поскольку UART не имеет часов, UART добавляет стартовые и стоповые биты, которые передаются.
      • Это помогает принимающему UART узнать, когда начинать чтение битов, поскольку биты представляют начало и конец пакета данных.Когда принимающий UART обнаруживает стартовый бит, он будет читать биты со скоростью BAUD.
      • Скорость передачи данных UART называется скоростью передачи данных в формате BAUD и по умолчанию установлена ​​на 115200 (скорость передачи данных в формате BAUD основана на скорости передачи символов, но аналогична скорости передачи в битах).
      • Оба UART должны работать примерно с одинаковой скоростью передачи. Если разница в скорости передачи данных в формате BAUD составляет более 10%, синхронизация битов может быть отключена, и пользователь должен убедиться, что UART настроены для передачи и приема из одного и того же пакета данных.

      Рабочий протокол UART

      • UART передача данных будет получать данные из данных шина, по которой шина данных будет отправлять данные в UART другим устройством (например, CPU).
      • После передачи UART получает параллельные данные из шины данных, он добавит стартовый бит, четность бит и стоповый бит для создания пакета данных.
      • Пакет данных затем передается на выводе Tx, где принимающий UART будет читать пакет данных на его штифт Rx. Данные отправляются до тех пор, пока в передающем UART не останется данных.
      Передача данных и получение
      • После передачи данных по передающему FIFO флаг FIFO «BUSY» будет установлен и активен во время процесса.
        • FIFO = первым пришел, первым ушел. Это буфер UART, который заставляет каждый байт передачи передаваться принимающему UART.
      • Бит «BUSY» будет неактивен только после завершения передачи данных, когда FIFO пуст и все биты были переданы, включая стоповый бит.
      • Когда приемник UART находится в режиме ожидания и если после получения стартового бита на входе низкий уровень данных, счетчик приема начинает работать, и данные находятся в 8-м цикле Baud16.
      • Если Rx все еще находится на низком уровне в течение 8-го цикла Baud16, в то время как стартовый бит действителен, он будет обработан как неправильный стартовый бит и проигнорирован.
      • Если стартовый бит действителен, биты данных выбираются каждый 16-й цикл Baud16 в зависимости от длины символа данных. Если включен режим четности, также определяется бит четности.
      • Если Rx высокий, будет подтвержден действительный стоповый бит. В противном случае произойдет ошибка кадрирования.
      • Когда получен полный пакет данных, данные сохраняются в принимающем FIFO.
      Управление прерыванием
      • Прерывания предназначены для автоматической отправки содержимого буфера.
      • Пользователь может использовать прерывания в следующих случаях:
        • Ошибка разрыва строки (сигнал RX остается 0, включая контрольный и стоповый бит.)
        • Ошибка кадра (стоповый бит не 1)
        • Тайм-аут приема ( приемный FIFO содержит данные, но не полные, и последующие данные не передаются)
      Операция FIFO
      • Модуль UART семейства ARM Stellaris содержит два 16-байтовых FIFO: один для передачи и один для приема.
      • Их можно настроить на запуск прерываний на разной глубине. Например, глубина 1/8, 1/4, 1/2, 3/4 и 7/8. Если принимающий FIFO запускает прерывание на 1/4, прерывание приема запускается, когда UART получает 4 данных.
      • Рабочий процесс передачи FIFO:
        • Процесс запускается сразу после ввода данных. Передача занимает много времени, поэтому другие данные, которые необходимо отправить, можно продолжать вводить в передающий FIFO.
        • Когда передающий FIFO заполнится, пользователю придется подождать, иначе вы потеряете свои данные.
        • Передающий FIFO будет посылать данные побитно, пока передающий FIFO не станет полностью пустым. После очистки переданных данных в передающий FIFO будет добавлен дополнительный слот.
      • Рабочий процесс приема FIFO:
        • Когда оборудование получает данные, они будут сохранены в принимающем FIFO.Программа автоматически сотрет данные в принимающем FIFO, поэтому в принимающем FIFO останется место. Если данные в принимающем FIFO не стираются, а принимающий FIFO заполнен, данные будут потеряны.
        • FIFO приемопередатчика предназначен для решения проблемы, связанной с неэффективностью ЦП и слишком частым прерыванием работы приемопередатчика UART. Используя связь UART, режим прерывания проще и эффективнее, чем метод опроса. Без FIFO приемопередатчика все данные будут прерваны один раз, и это будет неэффективно.С FIFO приемопередатчика он может генерировать прерывание и постоянно передавать и принимать данные (до 14), что повышает эффективность передачи и приема.
        • Потеря данных не будет вызвана FIFO, поскольку он уже предвидел любые проблемы в процессе отправки и получения. Пока UART инициализирован, процедура прерывания будет делать все автоматически.
      Петля
      • UART имеет внутреннюю функцию обратной петли для диагностики или отладки, когда данные отправленный от Tx будет получен входом Rx.
      Последовательный инфракрасный порт протокол
      • UART имеет последовательный порт IrDA Модуль инфракрасного (SIR) кодера / декодера. Модуль IrDA SIR переводит между асинхронным потоком данных UART и полудуплексным последовательным интерфейсом SIR.
      • Используется для обеспечения цифровой кодированный выход и декодированный вход для UART. Сигнальный контакт UART может быть подключен к инфракрасному трансиверу для физического уровня IrDA SIR связь.

      Преимущества использования UART

      • Простота эксплуатации, хорошо задокументирован, поскольку это широко используемый метод с большим количеством ресурсов в Интернете
      • Часы не требуются
      • Бит четности для обеспечения проверка ошибок

      Недостатки использования UART

      • Размер кадра данных ограничен только 9 битами
      • Невозможно использовать несколько ведущих систем и ведомых устройств
      • Скорости передачи каждого UART должны быть в пределах 10% друг от друга, чтобы предотвратить потерю данных.
      • Низкая скорость

      Примеры UART в микроконтроллерах:

      Последовательный преобразователь USB CP2102
      • Высокоинтегрированный контроллер моста USB-UART, обеспечивающий простое решение для обновления конструкций RS-232 до USB с использованием минимального количества компонентов и места на печатной плате. Он обеспечивает USB-подключение к устройствам с интерфейсом UART.
        • В нем используется стандартный USB-штекер типа A и 6-контактный разъем TTL.
      • Этот последовательный преобразователь USB CP2102 представляет собой небольшой адаптер для платы Arduino / Seeeduino для приема обновлений прошивки с компьютера.
      FT232r USB UART / USB к UART 5 В
      • Компания Seeed предлагает аналогичный продукт: USB — UART 5V
      • Это интерфейс USB — последовательный UART, который упрощает переход от USB к последовательному интерфейсу.
      • Уменьшает количество внешних компонентов, при этом эффективно работая с хост-контроллером USB, используя как можно меньше общей доступной полосы пропускания USB.
      • Для USB в UART 5V он основан на Ch440, который представляет собой микросхему преобразования шины USB и может реализовать преобразование USB в последовательный интерфейс.
        • Этот USB-порт преобразуется в инфракрасный порт IrDA или USB-порт для преобразования в интерфейс принтера, а также может использоваться для загрузки кода или связи с микроконтроллерами.
      UART Seeeduino V4.2

      • Все платы Arduino имеют как минимум один последовательный порт (UART), который обменивается данными на цифровых выводах 0 (RX) и 1 (TX), а также с компьютером через USB.
      • Это Arduino-совместимая плата, основанная на микроконтроллере ATmga328P. С ATMEGA16U2 в качестве преобразователя UART-USB, плата может в основном работать как микросхема FTDI, и ее можно программировать через кабель micro-USB.
      Базовый щит V2
      • Arduino Uno — самая популярная плата Arduino на данный момент, однако иногда бывает неприятно, когда вашему проекту требуется много датчиков или светодиодов, а ваши перемычки находятся в беспорядке.
      • Назначение этого продукта — избавиться от макетной платы и соединительных проводов. Благодаря богатым разъемам Grove на плинтусе вы можете очень удобно добавлять все модули Grove в Arduino Uno!
      • Эти устройства могут быть подключены через UART и I2C (следующее коммуникационное периферийное устройство, которого я собираюсь коснуться!)

      Интерфейс I2C

      Что такое I2C?

      • Обозначает межинтегральную схему (I2C)
      • Это протокол последовательной связи, аналогичный UART, но не используется для связи между ПК и устройствами, а используется с модулями и датчиками.
      • Это простая двунаправленная двухпроводная синхронная последовательная шина, для которой требуется только два провода для передачи информации между устройствами, подключенными к шине.
      • Они полезны для проектов, требующих совместной работы множества различных частей (например, датчиков, выводов, расширений и драйверов), поскольку они могут подключать до 128 устройств к материнской плате, сохраняя при этом чистый канал связи!
      • Это похоже на то, что I2C использует адресную систему и общую шину = множество различных устройств могут быть подключены с использованием одних и тех же проводов, и все данные передаются по одному проводу и имеют небольшое количество контактов.Однако недостатком этого упрощенного подключения является то, что он медленнее, чем SPI.
      • Скорость I2C также зависит от скорости передачи данных, качества проводов и внешнего шума.
      • Протокол I2C также используется для двухпроводного интерфейса для подключения низкоскоростных устройств, таких как микроконтроллеры, EEPROM, аналого-цифровые и цифро-аналоговые преобразователи, Интерфейсы ввода-вывода и другие подобные периферийные устройства во встроенных системах.

      Как это работает?

      • Он имеет 2 линии: SCL (последовательная линия синхронизации) и SDA (порт приема последовательной линии данных).
      • CL — линия синхронизации для синхронизации передачи.SDA — это линия данных, по которой отправляются или принимаются биты данных.
      • Ведущее устройство инициирует передачу данных по шине и генерирует часы, чтобы открыть переданное устройство, и любое адресуемое устройство считается ведомым устройством.
      • Взаимосвязь между ведущим и ведомым устройствами, передающими и принимающими по шине, непостоянна. Это зависит от направления передачи данных в данный момент.
      • Если ведущее устройство хочет отправить данные ведомому, оно должно сначала обратиться к ведомому, прежде чем отправлять какие-либо данные.
      • Мастер завершит передачу данных. Если ведущий хочет получить данные от ведомого, ведущий должен снова сначала обратиться к ведомому.
      • Затем хост принимает данные, отправленные подчиненным, и, наконец, получатель завершает процесс приема. Хост также отвечает за генерацию тактовых импульсов и прекращение передачи данных.
      • Также необходимо подключить питание через подтягивающий резистор. Когда шина простаивает, обе линии на высоком уровне мощности.
      • Емкость линии влияет на скорость передачи данных по шине. Поскольку текущая мощность на шине мала, слишком большая емкость может вызвать ошибки передачи. Таким образом, его нагрузочная способность должна составлять 400 пФ, чтобы можно было оценить допустимую длину шины и количество подключенных устройств.

      Рабочий протокол I2C

      Передача данных метод
      • Ведущее устройство отправляет сигнал передачи каждому подключенному ведомому устройству, переключая линию SDA с высокого уровня напряжения на низкий уровень напряжения и линию SCL с высокого на низкий уровень после переключения линии SDA.
      • Ведущее устройство отправляет каждому ведомому устройству 7 или 10-битный адрес ведомого устройства и бит чтения / записи ведомому устройству, с которым он хочет связаться.
      • Затем ведомое устройство сравнивает адрес со своим собственным. Если адрес совпадает, ведомое устройство возвращает бит ACK, который переключает линию SDA на низкий уровень на один бит. Если адрес не совпадает с его адресом, ведомое устройство оставляет линию SDA на высоком уровне
      • Затем ведущее устройство отправляет или принимает фрейм данных. После передачи каждого кадра данных принимающее устройство возвращает отправителю еще один бит ACK, чтобы подтвердить успешную передачу.
      • Чтобы остановить передачу данных, ведущее устройство отправляет сигнал остановки ведомому, переключая высокий уровень SCL перед переключением высокого уровня SDA
      Синхронизация часов
      • Все мастера генерируют свои собственные часы на линии SCL для передачи сообщений на Шина I2C.
      • Данные действительно только в высокий период времени.
      • Часы синхронизация осуществляется подключением интерфейса I2C к линии SCL где переключатель идет с высокого на низкий. Когда часы устройства идут на низком уровне, он удерживает линию SCL в этом состоянии до тех пор, пока не достигнет высокого уровня Часы.
      • Если другие часы все еще находятся в низком периоде, переключатель низкого-высокого не изменяется состояние линии SCL. На линии SCL всегда поддерживается низкий уровень сигнала. самый длительный низкий период. На этот раз устройство с коротким и низким период перейдет в состояние высокого и ожидания.
      • Когда все соответствующие устройства завершили свой низкий период, линия часов идет высокая.
      • После что нет разницы в состоянии часов устройства и линии SCL, и все устройства начинают отсчитывать свой высокий период.Устройство, которое первое завершение периода максимума снова потянет за минимум линии SCL.
      • The низкий период синхронных часов SCL определяется устройством с самый длинный низкий тактовый период, в то время как высокий период определяется устройством с самым коротким высоким тактовым периодом.

      Режим передачи

      Быстро режим:
      • Устройства быстрого режима могут принимать и передавать со скоростью 400 кбит / с. Они должны быть способны синхронизироваться с передачей 400 кбит / с и увеличивать низкий период сигнала SCL, чтобы замедлить передачу.
      • Устройства быстрого режима обратно совместимы и могут обмениваться данными с устройствами стандартного режима от 0 до 100 кбит / с шинными системами I2C. Однако, поскольку устройства в стандартном режиме несовместимы снизу вверх, они не могут работать в системе быстрой шины I2C. Спецификация шины I2C для быстрого режима имеет следующие характеристики по сравнению со стандартным режимом:
        • Максимальная скорость передачи данных увеличена до 400 кбит / с;
        • Настроена синхронизация сигналов последовательных данных (SDA) и последовательных часов (SCL).
        • Имеет функцию подавления сбоев, а входы SDA и SCL имеют триггеры Шмитта.
        • Выходной буфер имеет функцию управления крутизной для спадающих фронтов сигналов SDA и SCL
        • После отключения питания устройства быстрого режима контакты ввода-вывода SDA и SCL должны быть остался без дела и не может заблокировать автобус.
        • Внешнее подтягивающее устройство, подключенное к шине, должно быть настроено на максимально короткое максимально допустимое время нарастания шины I2C в быстром режиме.Для шин с максимальной нагрузкой 200 пФ подтягивающим устройством каждой шины может быть резистор. Для шины с нагрузкой от 200 пФ до 400 пФ подтягивающим устройством может быть источник тока (максимум 3 мА) или цепь переключаемого резистора.
      Высокоскоростной режим:
        Устройства в режиме
      • Hs могут передавать информацию со скоростью до 3,4 Мбит / с и оставаться полностью обратно совместимыми с устройствами в быстром или стандартном режиме (режим F / S), которые могут обмениваться данными в двух направлениях в системе со смешанной скоростью.
      • Передача в режиме Hs имеет тот же принцип последовательной шины и формат данных, что и система в режиме F / S, за исключением арбитража и синхронизации часов, которые не выполняются.
      • Спецификация шины I2C в высокоскоростном режиме выглядит следующим образом:
        • В высокоскоростном режиме (Hs) ведущее устройство имеет выходной буфер с открытым стоком для высокоскоростного сигнала (SDAH) и вытягивание с открытым стоком. — цепь понижения и повышения напряжения источника тока на выходе высокоскоростной последовательной синхронизации (SCLH). Это сокращает время нарастания сигнала SCLH, и в любой момент активен только один источник тока хоста;
        • В режиме Hs системы с несколькими ведущими не выполняются арбитраж и тактовая синхронизация для ускорения возможности обработки битов.Процесс арбитража обычно заканчивается после того, как код хоста передан в режиме F / S.
        • Ведущее устройство в режиме Hs генерирует последовательный тактовый сигнал высокого и низкого уровня с соотношением 1: 2, что устраняет временные требования для времени установки и удержания.
        • Устройство, работающее в режиме HS, может иметь встроенный мост. Во время передачи в режиме Hs линии SDAH и SCLH устройства в режиме Hs отделены от линий SDA и SCL, что снижает емкостную нагрузку линий SDAH и SCLH и ускоряет подъем и спад.
        • Разница между подчиненными устройствами в режиме Hs и подчиненными устройствами F / S заключается в скорости, с которой они работают.
        • Устройство режима Hs может подавлять выбросы, а выходы SDAH и SCLH также имеют триггер Шмитта;
        • Выходной буфер устройства режима Hs имеет функцию управления крутизной спада сигналов SDAH и SCLH.

      Преимущества использования I2C

      • Имеет небольшое количество выводов / сигналов даже при наличии большого количества устройств на шине.
      • Гибкость, поскольку поддерживает связь с несколькими ведущими и несколькими ведомыми устройствами.
      • Просто, поскольку для установления связи между несколькими устройствами используются только 2 двунаправленных провода.
      • Приспосабливаемый, так как он может адаптироваться к потребностям различных ведомых устройств.
      • Поддержка нескольких мастеров.

      Недостатки использования I2C

      • Более низкая скорость, поскольку для этого требуются подтягивающие резисторы, а не двухтактные резисторы, используемые SPI. Он также имеет конструкцию с открытым стоком = ограниченная скорость.
      • Требуется больше места, поскольку резисторы занимают ценное пространство на печатной плате.
      • Может усложняться по мере увеличения количества устройств.

      Примеры использования I2C в микроконтроллерах

      Grove — концентратор I2C (6 портов)
      • I2C — очень популярный протокол связи. В системе Grove I2C используется более чем 80 датчиками для связи, 19 из которых связаны с мониторингом окружающей среды.
      • Сегодня все больше и больше микроконтроллеров используют уровни связи 3,3 В, но традиционный ArduinoUno по-прежнему использует 5 В, что приводит к тому, что многие модули, особенно сенсорные, при их использовании необходимо выравнивать.
      • Мы действительно работали в этой области, и теперь большинство сенсорных модулей Grove имеют функцию сдвига уровня, и пользователям не нужно учитывать использование микроконтроллера 3,3 В или 5 В при его использовании. Это соответствует девизу Гроув: плагин, и используйте его, это так просто. Для более подробного обзора совместимости датчиков вы можете просмотреть наше Руководство по выбору Grove.
      4-канальный 16-разрядный АЦП для Raspberry Pi (ADS1115)

      • Этот продукт от Seeed полностью совместим с Raspberry Pi.
      • Он используется для Raspberry Pi без аналого-цифрового преобразователя или когда вам нужен более точный АЦП.
      • Мы предоставляем 4-канальный 16-разрядный АЦП для Raspberry Pi (ADS1115) через I2C, 4-канальный АЦП на базе Texas Instrument ADS1115, который представляет собой высокоточный 16-разрядный чип АЦП с низким энергопотреблением.
      I2C Arduino
      • Связь I2C также может использоваться между двумя платами Arduino.
      • Используется только для связи на короткие расстояния и использует синхронизированный тактовый импульс.
      • В основном используется для связи с датчиками или другими устройствами, которые должны отправлять информацию мастеру.
      Драйвер I2C / Легко адаптируемый драйвер Устройства I2C
      • Драйвер I²C — это простой в использовании инструмент с открытым исходным кодом для управления устройствами I²C. Он работает с Windows, Mac и Linux и имеет встроенный цветной экран, на котором в реальном времени отображается вся деятельность I²C.
      • Благодаря встроенному дисплею, отображающему тепловую карту всех активных сетевых узлов, вы можете наблюдать из сети I²C с несколькими устройствами, какие из них являются наиболее активными.
      • Когда драйвер I²C подключен к существующей шине I²C, он «отслеживает» трафик и отображает его на экране.
      • Это отличный инструмент для отладки проблем с I²C, потому что вы можете подслушивать разговор, когда он происходит.
      MCP 23017
      Ссылка: Electronicwings, 16-разрядный расширитель GPIO MCP23017.
      • 16-битное расширение параллельного ввода-вывода общего назначения для шины I2C. Аналогичен MCP23S17, за исключением разницы в последовательном интерфейсе.(I2C и SPI).
      • Расширитель портов, который предоставляет пользователю практически идентичные порты по сравнению со стандартными микроконтроллерами.
      PCF 8574
      Ссылка: PCF8574 Плата модуля последовательного интерфейса, преобразователь ЖК-дисплея.
      • Обеспечивает расширение удаленного ввода-вывода общего назначения через двухпроводную двунаправленную шину I2C (последовательные часы (SCL), последовательные данные (SDA)).
      • Seeed будет использовать это в наших будущих продуктах, внимательно следите за ним!
      Grove Base Hat для Raspberry Pi
      • Что такое роща?
        • Это модульная стандартизированная система прототипирования соединителей.При сборке электроники Grove использует конструктивный подход. что упрощает подключение, экспериментирование и создание, а также упрощает систему обучения.
      • Сегодня серия датчиков, исполнительных механизмов и дисплеев Grove выросла в большое семейство, и сегодня мы представляем Raspberry Pi для всей системы Grove.
      • Шляпа Grove Base Hat для Raspberry Pi предоставляет цифровой / аналоговый / I2C / PWM / UART порт для удовлетворения всех ваших потребностей.
      • С помощью встроенного MCU для Raspberry Pi также доступен 12-битный 8-канальный АЦП.В настоящее время более 60 Groves поддержали Grove Base Hat для Raspberry Pi.

      Интерфейс SPI

      Что такое SPI?

      • Обозначает последовательный периферийный интерфейс (SPI)
      • Он похож на I2C и представляет собой другую форму протокола последовательной связи, специально разработанную для подключения микроконтроллеров.
      • Работает в полнодуплексном режиме, когда данные можно отправлять и получать одновременно.
      • Работать на более высоких скоростях передачи данных = 8 Мбит или более
      • Обычно это быстрее, чем I2C из-за простого протокола.Даже если линии данных / часов используются совместно между устройствами, каждому устройству потребуется уникальный адресный провод.
      • Используется там, где важна скорость. (например, SD-карты, модули дисплея или когда информация обновляется и меняется быстро, как термометры)

      Как это работает?

      • Двусторонняя связь ‘
        • Первый — это выбор каждого устройства в строке выбора микросхемы. Для каждого устройства требуется отдельная строка Chip Select. Это наиболее распространенный способ, которым в настоящее время RPi использует SPI.
        • Второй — через шлейфовое соединение, когда каждое устройство подключается к другому через свои данные, идущие к данным в строке следующего.
      • Количество подключаемых устройств SPI не ограничено. Однако существуют практические ограничения из-за количества линий выбора оборудования, доступных на главном устройстве с помощью метода выбора микросхемы, или сложности передачи данных через устройства в методе последовательного подключения.
      • При двухточечной связи интерфейс SPI не требует операций адресации и является полнодуплексным, что является простым и эффективным.

      Рабочий протокол SPI

      • SPI обменивается данными через 4 порта:
        • MOSI — вывод основных данных, ввод данных ведомого
        • MISO — ввод данных ведущего, вывод данных ведомого
        • SCLK — тактовый сигнал, генерируемый ведущим устройством, до fPCLK / 2, частота ведомого режима до fCPU / 2
        • NSS — сигнал с включенным ведомым устройством, управляемый ведущим устройством, некоторые ИС будут помечены как CS (выбор микросхемы) В системе каждое ведомое устройство требует отдельного разрешающего сигнала, что немного сложнее с точки зрения аппаратного обеспечения, чем система I2C.
        • Интерфейс SPI на самом деле представляет собой два простых сдвиговых регистра во внутреннем оборудовании. Передаваемые данные 8 бит. Он передается бит за битом под сигналом включения ведомого и импульсом сдвига, генерируемым ведущим устройством. Старший бит находится спереди, а младший — сзади.
        • Интерфейс SPI — это синхронная последовательная передача данных между ЦП и периферийным низкоскоростным устройством. Под импульсом сдвига ведущего устройства данные передаются бит за битом. Старший бит находится спереди, а младший — сзади.Это полнодуплексная связь, и скорость передачи данных в целом выше, чем у шины I2C, и может достигать скорости в несколько Мбит / с.

        Преимущества использования SPI

        • Протокол прост, поскольку нет сложной системы адресации ведомых устройств, такой как I2C.
        • Это самый быстрый протокол по сравнению с UART и I2C.
        • Нет стартовых и стоповых битов в отличие от UART, что означает, что данные могут передаваться непрерывно без прерывания
        • Отдельные линии MISO и MOSI, что означает, что данные могут передаваться и приниматься одновременно

        Недостатки использования SPI

        • Дополнительные порты с контактами заняты, практическое ограничение на количество устройств.
        • Не указано управление потоком, и механизм подтверждения не подтверждает, получены ли данные, в отличие от I2C
        • Использует четыре линии — MOSI, MISO, NCLK, NSS
        • Нет формы проверки ошибок, в отличие от UART (с использованием бита четности)
        • Всего 1 мастер

        Примеры SPI в микроконтроллерах:

        MCP 3008 / АЦП Grove I2C
        • Seeed предлагает аналогичный продукт, который имеет те же функции: Grove I2C ADC, но его коммуникационная периферия — I2C.
        • Это 10-битный 8-канальный аналого-цифровой преобразователь (АЦП).
        • Для MCP 3008 он подключается к Raspberry Pi с помощью последовательного соединения SPI. Выполняется с помощью аппаратной шины SPI или любых четырех контактов GPIO и программного SPI для подключения к MCP 3008.
        Модуль последовательной шины CAN на базе MCP2551 и MCP2515
        • Этот видимый продукт: Модуль последовательной шины CAN предоставляет вашему Arduino возможности шины CAN и позволяет взломать ваш автомобиль. Он позволяет читать и записывать сообщения на шину CAN.
        • CAN-шина — это система протокола обмена сообщениями, которая позволяет различным микроконтроллерам и датчикам в автомобиле общаться друг с другом. CAN обеспечивает междугородную, среднюю скорость передачи данных и высокую надежность.
        • Этот модуль последовательной шины CAN также может быть подключен к вашей Arduino через встроенный разъем Grove.
        • Интерфейсы с микроконтроллерами через SPI.
        SPI Seeeduino V4.2

        • Последовательная связь SPI может использоваться с Arduino для связи между двумя Arduino, где один Arduino будет действовать как ведущий, а другой — как ведомый.
        • Используется для связи на короткие расстояния на высокой скорости.
        • Это тот же продукт: Arduino v4.2 из приведенного выше примера UART
        ENC28J60 НАКЛАДКА ДЛЯ Raspberry pi

        • Этот продукт от Seeed, Pi zero ENC28J60 — это простой сетевой адаптер для Pi zero, который очень легко собрать и настроить.
        • Это позволяет вашему Raspberry Pi zero беспрепятственно получать доступ к сети, а также легко выполнять обновления системы и операции по установке программного обеспечения.
        • Microchip ENC28J60 — это 28-контактный автономный контроллер Ethernet 10BASE-T с интерфейсом SPI.
        • Интерфейс SPI служит каналом связи между главным контроллером и ENC28J60.
        Драйвер SPI / Легко управляемый адаптер Устройства SPI
        • Это аналогичный продукт I2C Driver / Adapter-Easy Driver I2C Device, но для SPI. Это простой в использовании инструмент для управления устройствами SPI. Он работает с Windows, Mac и Linux и имеет встроенный цветной экран, на котором в реальном времени отображается логический анализатор всего трафика SPI.
        • Точно так же он использует стандартный последовательный USB-чип FTDI для связи с ПК, поэтому установка специальных драйверов не требуется. На плате имеются блоки питания 3,3 и 5 В с контролем напряжения и тока.
        • Флэш-память SPI очень распространена, и с помощью тестового зажима SPIDriver позволяет удобно считывать и записывать флэш-память SPI в цепи. Короткий скрипт — это все, что нужно для чтения или записи вспышки Atmel, а светодиодные ленты SPI также легко подключить к драйверу SPI. Вы также можете управлять ими напрямую, что делает их намного более увлекательными!
        • Этого достаточно, чтобы плавно анимировать длинные полосы и добиться эффектов POV.Короткие полоски могут питаться напрямую от мощного встроенного источника питания SPIDriver 470 мА.

        Итак, какое из этих коммуникационных периферийных устройств является «лучшим»? UART SPI или I2C?

        К сожалению, «лучшей» коммуникационной периферии не существует. У каждого коммуникационного периферийного устройства есть свои преимущества и недостатки.

        Таким образом, пользователь должен выбрать коммуникационное периферийное устройство, наиболее подходящее для вашего проекта. Например, вам нужно самое быстрое периферийное устройство связи, SPI будет идеальным выбором.С другой стороны, если пользователь хочет подключить много устройств, не будучи слишком сложным, I2C будет идеальным выбором, поскольку он может подключать до 127 устройств и прост в управлении.


        Сводка

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

        UART I2C SPI
        Сложность Простой Легко
        объединить в цепочку множество
        устройств.
        Комплекс как устройство
        увеличивается
        Скорость Самый медленный Быстрее
        UART
        Самый быстрый
        Количество устройств До 2
        устройств
        До 127
        , но
        могут стать сложными
        по мере увеличения количества устройств
        Многие, но есть
        практических ограничений, и
        может усложниться
        Количество проводов 1 2 4
        Дуплекс Полнодуплекс Полудуплекс Полнодуплекс
        Количество мастеров и рабов Нет нескольких подчиненных и главных Несколько
        подчиненных и главных
        Только 1 главный, но может иметь несколько подчиненных.

        Добавить комментарий

        Ваш адрес email не будет опубликован. Обязательные поля помечены *