По просьбе читателей, в теплый летний вечер, решил написать статейку на тему подключения микроконтроллеров к шине RS-485. Начнем я думаю с самого начала. Как известно на многих, да почти на всех микроконтроллерах присутствует периферийное устройство такое как Асинхронный Приемо/Передатчик или как он по буржуйски называется UART. Правда чаще встречается USART, но отличие лишь в линии синхроимпульсов, от чего в названии появляется Синхронно/Асинхронный Приемо/Передатчик. Но по сути для RS-485 это без разницы и сути шины не меняет. И так UART. UART имеет три основные линии RX, TX и GND. Линия RX занимается приемом данных из вне в МК.
Следовательно мы имеем дифференциальную линию передачи. В чем прикол такой задумки. Дело в том что если мы будем передавать сигнал прямо с 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К линию к общему проводу, дав железную команду на чтение из шины.
И вторая грабля по тем же соображения требует подтяжки линии чтения к питанию. Засада в том что когда микросхема работает в режиме передачи, то она ножку приемника вешает в воздухе и небольшая помеха может создать случайный старт,
Вот теперь вроде бы как и все. Ах да, еще рекомендуют, если линия совсем длиннющая чуть ли не километр, то необходимо витую пару брать с экраном, а концы экранов соединить с общим проводом на обеих концах для выравнивания потенциалов. Так же между общим проводом и заземлением установить резистор где-нибудь в 100R с обеих сторон. Вот теперь кажись все. Будут вопросы пишите.
Спасибо за статью. Статья получилась интересная и информативная, но расскажите как программно реализовать общение микроконтроллеров один главный, два ведомых. Спасибо.
«Линия RX занимается приемом данных из вне в МК. Линия RX занимается отправкой данных во внешний мир. А линия GND служет для создания потенциала относительно которого бегут биты.» — в статье опечатались, поравьте RX и TX.
Спасибо. Точно, два раза RX написал. Поправил.
Очень интересно! Спасибо! Буду пробовать!
Владимир, учтите, это только для внутренних связей. Если необходимо связывать модули на дальних расстояниях и по улице, то необходима гальваническая развязка по питанию и опторазвязка по шине данных.
Спасибо большое! Очень полезная статья!
Есть ещё дуплексный вариант RS-485 (четыре провода). Хотелось, бы узнать ваше мнение и об этом варианте RS-485.
Есть. Дай бог памяти он называется RS-422. Микросхема имеет четыре вывода, два на передачу и два на прием. Но в любом случае UART сам работает в полудуплексе и смысл использовать полный дуплекс не оправдан. Хотя я могу и ошибаться.
>Чтоб такой пакости не произошло, необходимо подтянуть резистором на 10К линию к общему проводу, дав железную команду на чтение из шины. Для устройств Master и Slave подтяжка одинаковая? Или для Master лучше подтяжку к питанию, чтобы «по умолчанию» было вещание в шину? Линию DI не нужно подтягивать? А то на модулях от Aliexpress вообще все 4 линии подтянуты к питанию, а линии A и B подтянуты через 20k (у вас в статье 560 Ом): umnyjdomik.ru/wp-content/uploads/UART-TTL-RS-485-na-MAX485.jpg И как лучше всего сделать гальваническую развязку по питанию и опторазвязку по шине данных?
Резисторы нужно ставить и на мастере и на слейве, так как при включении питания МК сначала ноги выставляет на чтение и через некоторое время инициализирует по программе. В это время можно наловит всякий мусор и послать на шину. Включающемуся МК это пофиг, а вот тем кто на шине сидит, не хорошо будет. Это как в кинотеатр зайти во время сеанса и громко разговаривая по телефону пробираться на свое место. Страшного ничего не произойдет только вот окружающие будут косо смотреть.))) » И как лучше всего сделать гальваническую развязку по питанию и опторазвязку по шине данных? » Использовать готовые микросхемы с гольваноразвязкой, а для питания использовать DC-DC преобразователи на физических трансформаторах. Либо использовать готовый драйвер с полной развязкой по шине и по питанию. Например такой ADM2582E
Скажите пожалуйста, а про modbus протокол вам что нибудь извесно?
Это промышленный протокол с открытым доступом. В сети много русскоязычной документации.
Кстати одна из не многих толковых стаей по форме изложения.
Спасибо.
Спасибо за статью для чайников, особенно за вот это постепенное приближение к правильной схеме. А конденсаторов не надо куда-нибудь навтыкать для защиты от наводок?
Нет.
Вопрос — у вас в статье написано » а линии В к общему с каждой стороны резистором 560 Ом.». и так в нескольких местах в статье. А к чему «общему»?
или может быть «К общему» — имеется ввиду к общему GND?
А к плюсу питания, а В к минусу питания. Эти резисторы нужны для зазора в 100мВ между линиями А и В.
Резисторы 560Ом вешаются на каждом устройстве в линии или только на одном или на обоих концах? Из логики описания в статье получается что эти резисторы нужны только на одном из концов линии. Но по картинке похоже что подключены к каждому из устройств.
На одном. Нужно создать дельту для стабильности линии. А на конечных устройствах нужны терминаторы по 120Ом.
Понятно, спасибо за статью.
У меня такой вопрос, мне нужно осуществить обмен что бы при нажатии на кнопку на пульте выполнялось действие а когда действие завершиться то нужно что бы на пульте загоралась индикация, я так понимаю что нужен постоянный обмен состояниями, как осуществить синхронизацию на atmega128
Для начала нужна схема. Что куда передавать, зачем, как. Нужен ли обмен данными или нет. Нажать на кнопку и получить включенный светодиод можно и одними проводами. В общем нет понимания задачи.
С полной ответственностью заявляю что на данный момент это единственная статья во всём интернете объясняющая ясно что и почему нужно . при чтении всех остальных сайтов по RS485 создаётся впечатление что люди пишут о том в чём они сами не разбираются . если оценивать по 5 бальной системе то статья написана на 5 с плюсом . Молодец и красавчик !
написано просто отлично и идеально . пожалуй во всём интернете единственная осмысленная статья по RS485. все остальные сайты написаны языком людей которые сами не понимают о чём идёт речь . Молодец и красавчик !
Довольно-таки часто при разработке электронных устройств, а особенно, в тех случаях, когда необходима реализация длинной линии связи между несколькими устройствами, встает задача включения микроконтроллера в эту самую линию связи. В большинстве таких случаев я выбираю интерфейс 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 ножек:
Как видите, все несложно, практически никакой внешней обвязки эта микросхема не требует, а поставленную задачу решает на ура! Таким образом, мы разобрались сегодня с очень популярным стандартом RS485 и рассмотрели один из вариантов его реализации на практике. Думаю в ближайшее время можно будет развести небольшую печатную платку для RS485-UART конвертера.
Ответ, как найдено в некоторой случайной документации зарегистрировался в 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. Или просто используйте приемопередатчик, который переключает оба направления с единственной булавкой:-),
Концепция управления потоком от стандарта 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
Недавно меня таки достали провода, дюпоны, навесная пайка и т.п. и было принято давно оттягиваемое решение — сделать свои платы с нуля, т. е. всё по серьёзному. 🙂
Сказано — сделано!
Первым делом была разработана и нарисована принципиальная схема шлюза, в которой я постарался учесть все свои хотелки и пожелания. Далее произведена компоновка и подгонка платы под требуемые размеры (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.
В результате многочисленных оптимизаций и передвижек, был получен следующий результат:
Рендеринг шлюза
Верхний слой.Нижний слой.
3D — вид сверху.
3D — вид снизу.
Подключение Ethernet контроллера W5500 выполнено в соответствии с рекомендациями производителя. Единственное, что может вызвать некоторые сложности, это высокоточные резисторы, которых может не оказаться в наличии в местном радиоларьке. Но на сайте lcsc.com и ему подобных с данными резисторами всё в порядке. Для Ethernet разъёма был выбран широко распространённый бюджетный модуль — HR911105A, имеющий на борту трансформатор и два светодиода.
Самое сложное в данной плате, это запаять две 48-ножечные lqfp микросхемы. Если с этим справились, то дальнейшая сборка не представляет никаких сложностей. Настроек плата не требует и сразу после сборки готова к работе.
Хоть это и шлюз, но чтобы не пропадать добру на плате были разведены практически все пины МК, разведён ресет, и два светодиода (один из них RGB). Сделаны две площадки под микросхемы, одна под I2C EEPROM и вторая для цифрового термометра/измерителя влажности HDC1080. Термометр конечно будет измерять общую температуру по больнице, так как он установлен рядом с двумя чипами, но мало ли, вдруг кому понадобиться.
В качестве разъёма для RS485 был выбран, трёх пиновый зелёный разъём DB2EV-5.08-3P, с шагом 5.08мм. Он конечно великоват, но удобен в использовании. Остальные разъёмы за исключение microUSB выбраны — 1.25мм JST, они достаточно компактны и хорошо фиксируются.
Фото собранного шлюза
Вид сверхуВид снизу
Т.к. у всех всегда ситуации и подходы бывают разные, то некоторые вещи оставлены на откуп пользователю. Если нам не нужна гальваническая развязка от линии RS485, то мы можем не устанавливать изолирующий DC/DC преобразователь — D1, микросхему опторазвязки — D3. В таком случае надо напаять «соплей» в предназначенные для этого места на плате.
Смотреть
При первом включении на столе, шлюз нормально видел ноду, прошивки в неё залетали за 30 секунд, всё было хорошо. И да, планируемая мной скорость сети RS485 — 0.5-1Mbit. В доме будет 1Mbit, на улице 0.5Mbit. Так вот когда я поставил шлюз на его рабочее место в серверную, а ноду подключил к устройству на улице, я вполне ожидаемо столкнулся с тем, что они друг друга не увидели. С помощью осциллографа я мог наблюдать весьма удручающую картину линии RS485, но пара подтягивающих резисторов R31 и R32 быстро решила данную проблему. На фото шлюза, данные резисторы подпаяны проводками. Дело в том, что изначально я не планировал ставить их на шлюз, т.к. они нужны только на концах линии RS485, а шлюз у меня планировался в середине. Но когда подключена только одна нода, они всё же нужны и поэтому они были добавлены во второй ревизии. Терминирующий резистор на 120Ом устанавливается прямо в разъём RS485, так его проще переносить от устройства к устройству при наращивании линии.
Как это ни удивительно, но плата первой ревизии показала полную работоспособность и стабильную работу. За несколько месяцев не произошло ни одного зависания. Но с другой стороны ещё не было и гроз, а данный шлюз у меня смотрит как-раз на улицу.
Но — поживём увидим! 🙂
Таким образом была выполнена основная задача — создать компактный, высокоскоростной и надёжный Ethernet-RS485 шлюз. Чтобы не расплываться мыслями по древу, статья сосредоточена только на железной части, а программная часть сознательно вынесена за скобки.
Репозиторий с проектом шлюза.
С радостью отвечу на конструктивные вопросы.
Для интересующихся постройкой УД на базе Mysensors существует русскоязычная группа в телеграмм и русскоязычный сайт.
P.S. Цель данной статьи показать, что нет ничего сложного в разработке и создании своих собственных плат и готовых устройств. Главное ставить цель и идти к ней!
Я уже использовал STM32CubeMx / HAL в нескольких проектах и обнаружил, что генерируемая им программа обработки UART имеет определенные недостатки на стороне приема.
При передаче вы обычно хотите отправить блок данных или строку текста. В этом случае вы заранее знаете, сколько времени занимает передача данных, и поэтому использование DMA является очевидным решением. Вы получаете прерывание после завершения передачи и можете использовать функцию обратного вызова UART TX complete, чтобы указать вашему основному коду, что передача завершена, и вы можете отправить другой блок данных.
Когда дело доходит до получения данных, все функции, предоставляемые ST, предполагают, что вы знаете, сколько символов будет выдано отправляющим устройством, прежде чем оно начнет отправлять. Обычно это не известно. Функция прерывания помещает полученные данные в буфер и указывает только на то, что данные доступны, когда получено заранее определенное количество символов. Если вы попытаетесь использовать DMA или функцию прерывания для получения данных путем настройки последовательных односимвольных передач, то время установки для каждого из них будет означать, что вы потеряете символы с любой скоростью, кроме самой низкой скорости передачи данных (скорость передачи данных, которую вы будете потеря данных будет зависеть от тактовой частоты вашего процессора) и будет чрезмерно загружать процессор, не оставляя циклов команд для какой-либо другой обработки
Чтобы обойти это, я написал свою собственную функцию обработчика прерываний, которая хранит данные в небольшом локальном циклическом буфере и устанавливает счетчик, который читается основным кодом (семафор подсчета RTOS), чтобы указать, что полученные данные готовы. Затем основной код может собирать данные из этого буфера в свободное время, при этом не имеет значения, имеется ли некоторая задержка в сборе данных, при условии, что локальный буфер не переполняется до того, как данные собраны.
Оборудование сценического освещения и создания спецэффектов, применяемое в современных драматических и оперных театрах, концертных залах и на спортивных аренах, использует сложные сети передачи данных. Эти сети, протяжённость которых нередко достигает 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
Ответ, который можно найти в какой-то случайной документации, проверенной на 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. Или просто используйте трансивер, который переключает оба направления одним контактом 🙂
Можно ли отправлять / получать по RS485 без управления потоком.
Да, поскольку в RS-485 нет управления потоком.
RS-485 — одиночный сигнал, реализованный как дифференциальная пара. Это дает ему хорошую помехозащищенность и подавление синфазных помех, но это все равно одиночный сигнал. Нет никаких положений для управления потоком.
Как и все, кроме отправки одного символа по RS-485, остальное зависит от вашей реализации. Вам решать, когда узлы узнают, что им разрешено передавать, сколько им разрешено передавать за один раз и т. Д.
Лучший сценарий для управления потоком — убедиться, что все приемники способны принимать максимальную постоянную скорость передачи данных любого передатчика. Если это не так, то вам нужно каким-то образом реализовать регулирование данных, но это полностью выходит за рамки спецификации RS-485.
Обычно регулирование данных реализуется как часть протокола более высокого уровня, который используется для принятия решения о том, кто может отправлять. Обычно отправителю разрешается отправлять только один пакет за раз. Обычно они имеют максимальную длину, поэтому есть максимум, который узел может отправить, не получив дополнительных разрешений, или другого временного интервала, или чего-то еще.Реализация дросселирования данных с помощью низкоуровневого управления потоком на многоточечной шине, такой как RS-485, не имеет большого смысла.
Если все это звучит слишком сложно, обратите внимание на CAN как на альтернативу вашей сети RS-485. CAN также использует одиночный сигнал, реализованный как дифференциальную пару, поэтому имеет аналогичную помехозащищенность и надежность. Однако CAN определяет несколько уровней выше сигнализации низкого уровня. Он включает в себя целые пакеты, проверку пакетов, обнаружение коллизий и повторную попытку, а также несколько других тонкостей.
Все эти части CAN являются стандартными, что позволяет реализовать их на готовых микросхемах. Существует множество микроконтроллеров, которые реализуют CAN аппаратно до уровня пакетов. Микропрограммное обеспечение отправляет и принимает целые пакеты, а оборудование берет на себя все остальное, включая создание и проверку контрольной суммы CRC.
Если вы сегодня разрабатываете новую систему, RS-485 редко бывает хорошим выбором. Вместо этого посмотрите серьезно на CAN.
Для программного и аппаратного управления потоком требуется программное обеспечение для выполнения задачи установления связи.Это вводит в заблуждение термин «управление потоком программного обеспечения». Имеется в виду, что при аппаратном управлении потоком в кабеле связи присутствуют дополнительные линии, которые сигнализируют об условиях установления связи. При программном управлении потоком, которое также известно под названием 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 в качестве информационных байтов.
Следовательно, последовательная связь с использованием программного управления потоком приемлема только тогда, когда скорости связи не слишком высоки, и вероятность переполнения буфера или повреждения данных минимальна.
Для высокой скорости, такой как Ethernet. CSMA : определение несущей, множественный доступ, обнаружение / предотвращение коллизий, со случайными таймерами отсрочки передачи были проанализированы на предмет вероятностной вероятности прохождения для оптимизации.
В этом проекте я расскажу о том, как использовать Max485 для последовательной связи между двумя платами Arduino. Как эффективно настроить RS485 в режиме приема и передачи.Каковы преимущества использования протокола RS485 для последовательной связи, и, наконец, я представлю рабочую модель последовательной связи RS485 между Arduino Mega и Arduino Pro Mini.
Rs485 передает два дифференциальных сигнала по двум разным проводам, называемым линиями A и B. Поскольку сигналы имеют противоположную полярность (90 градусов по фазе), они могут распространяться на довольно большие расстояния. Передаваемые сигналы имеют противоположную полярность, и любой внешний сигнал, наведенный во время движения, можно легко отфильтровать на выходе.
Микроконтроллерысами по себе не могут выводить данные для передачи сигнала RS485. Скорее внешнее устройство / модуль должен быть сопряжен с микроконтроллером для достижения связи RS485. Max485 — популярный приемопередатчик RS485, который может быть сопряжен с любым микроконтроллером для связи RS485. Микроконтроллер отправляет данные на max485. Затем max485 отправляет данные по линиям rs485.
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 Uno, Arduino Lenardo, Arduino Mega и т. Д. Для использования кода с Леонардо просто измените появление Serial на Serial1.
Загрузите файлы .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
Когда мы говорим о протоколах связи, UART, SPI и I2C — это обычные аппаратные интерфейсы, которые люди используют при разработке микроконтроллеров.
В этой статье сравнивается различные интерфейсы: UART, SPI и I2C и их отличия. Мы будем сравнивая их с различными факторами через их протоколы, преимущества и недостатки каждого интерфейса и т. д., и мы предоставим несколько примеров того, как эти интерфейсы используются в микроконтроллерах.
К сожалению, «лучшей» коммуникационной периферии не существует. У каждого коммуникационного периферийного устройства есть свои преимущества и недостатки.
Таким образом, пользователь должен выбрать коммуникационное периферийное устройство, наиболее подходящее для вашего проекта. Например, вам нужно самое быстрое периферийное устройство связи, SPI будет идеальным выбором.С другой стороны, если пользователь хочет подключить много устройств, не будучи слишком сложным, I2C будет идеальным выбором, поскольку он может подключать до 127 устройств и прост в управлении.
Таким образом, я собрал все преимущества / недостатки и функции различных коммуникационных периферийных устройств и сравнил их, чтобы вы могли легко выбрать, что лучше всего для вашего проекта. Имейте в виду, что используемое вами устройство должно также поддерживать коммуникационную периферию.
UART | I2C | SPI | |
Сложность | Простой | Легко объединить в цепочку множество устройств. | Комплекс как устройство увеличивается |
Скорость | Самый медленный | Быстрее UART | Самый быстрый |
Количество устройств | До 2 устройств | До 127 , но могут стать сложными по мере увеличения количества устройств | Многие, но есть практических ограничений, и может усложниться |
Количество проводов | 1 | 2 | 4 |
Дуплекс | Полнодуплекс | Полудуплекс | Полнодуплекс |
Количество мастеров и рабов | Нет нескольких подчиненных и главных | Несколько подчиненных и главных | Только 1 главный, но может иметь несколько подчиненных. |