Обмен данными по 5-метровому кабелю

У меня есть микроконтроллер, который должен общаться по кабелю, который будет прибл. 5 м в длину, с еще одним очень маленьким микроконтроллером. Устройства будут использоваться на открытом воздухе в различных условиях. Скорость передачи данных будет не очень высокой. Когда вы подключаете малый UC кабелем к большому UC, строка идентификации и периодические (каждую минуту) обновления батареи отправляются с маленького UC.

Думал про I2C но не уверен, что он рассчитан на такие нужды? CAN также возможен, но я думаю, что это немного избыточно для моих нужд. У кого-нибудь есть хорошие идеи?

РЕДАКТИРОВАТЬ: я хочу использовать как можно меньше контактов для кабеля.

Лично я бы выбрал RS422 или RS485.
@Majenko Я хочу использовать как можно меньше контактов для кабелей.
Для полудуплексного интерфейса RS-485 требуется как минимум два провода, хотя рекомендуется общее заземление.
(1) Я согласен с тем, что I2C не был разработан для такого варианта использования. Хорошо, что вы обращаете внимание на такие вещи с самого начала. Меньше шансов, что ты закончишь как тот парень . (2) Запись о RS-485 с точки зрения Arduino . (стилистическое примечание) Принятые аббревиатуры для микроконтроллера: uC, или MCU (блок микроконтроллера), или µC (причудливый). MC может означать мегаконтроллер.
В качестве альтернативы, поскольку это всего лишь сеть из двух устройств на расстоянии менее 50 футов, старый добрый RS-232 работает нормально и требует всего три провода для полного дуплекса (TX, RX и Ground).
@PeterK опередил меня, но RS232 звучит как хорошо подходящий для этого, 2 вывода данных + общая земля - ​​это примерно то, что вы можете получить для полного дуплекса, не усложняя электронику отправки / приема ( однопроводный полнодуплексный режим может быть достигнут с помощью передачи сигналов с частотной фильтрацией в стиле радиочастот, но здесь это будет действительно расточительно)
@PeterK Большое спасибо за ваш ответ. я начну читать о том, как протестировать его с arduinos!
Звучит так, как будто говорит только маленький UC. Есть ли вообще необходимость в общении в другом направлении? Или он строго односторонний? Я также думаю о внешних условиях, которые вы хотите поддерживать, а также о стоимости и доступности, а также о том, насколько хорошо все согласуется с программным обеспечением и доступным периферийным оборудованием в UC. Граничных условий здесь может быть предостаточно. Можете ли вы добавить больше информации об этих вещах, в том числе о внешних условиях и о том, как кабель будет транспортироваться и использоваться на практике? Сигнализация RS-232 и RS-485 очевидна. Но есть в виду и другие варианты.
Если мелкий делает периодические обновления, то можно просто сделать односторонний rs232. Только TX и Gnd. Тем не менее, вы думали о Bluetooth? 15 футов легко.
Bluetooth будет наименьшим возможным количеством контактов. 0.
@jonk да, на данный момент большой микроконтроллер просто слушает, но, возможно, в будущем он захочет интегрировать двунаправленную связь. Кабель должен быть очень прочным, потому что его будут перевозить в мешках и автомобилях. также это будет в очень пересеченной местности. он будет использоваться ежедневно в снег и дождь, а также в жаркие летние дни.
Так. Что вы думаете об использовании коаксиала? Это довольно прочный материал, и вы даже можете получить бронированный материал, если это необходимо. Вы можете выполнять двунаправленную передачу по общему проводу. Но вы уже знаете, что из I2C, я полагаю. Однако в основном я думаю здесь о надежной сигнализации. Пуленепробиваемый. (CAN такой, но, как вы сказали, это может быть излишеством. Но, черт возьми, вы можете закоротить CAN от автомобильного аккумулятора, и он все равно выживет. CAN чертовски хорошее лекарство, когда вы хотите «пуленепробиваемый».)
@jonk, шина CAN может показаться немного излишней, но для нее также потребуются 2 контакта и 3,3 В, верно? Я думаю, что мне также нужен трансивер для моего arduino
Я думаю, что CAN поставляется в вариантах 3,3 В и 5 В, а варианты 5 В, которые я видел, поставляются с отдельной разрешенной шиной, поэтому они нормально работают с 3,3 В uC даже при использовании сигнализации 5 В. Например, см. Microchip MCP25625. Также см. документ TI "SLLA337" по CAN 3,3 В.
@jonk большое спасибо! я буду тестировать шину CAN, а также MAX3232.
Думаю, я действительно думаю о ваших кабелях и разъемах как о большой проблеме. Вы можете хотеть, чтобы вещи были очень простыми в использовании и работали постоянно. Я как бы думаю об этих разъемах XLR для микрофона с фантомным питанием. У них есть они с функциями блокировки и без, и они довольно выносливы. Также доступны некоторые микрофонные кабели. Просто мысль. Понятия не имею, как они поведут себя на улице, но музыкантам, должно быть, приходится чем-то заниматься в плохую погоду. Так что, может быть, хорошо.
Другой подход может заключаться в использовании вилок для домашней проводки и подключении специальных кабелей с использованием наружного удлинительного провода и штекерных разъемов на обоих концах. Для этого также есть причудливые разъемы с замком на 30 А, а также в вариантах с 3 и 4 проводниками. Не слишком дорого. Доступно в Home Depot и Lowes. Ну, это моя последняя мысль на данный момент.
@jonk большое спасибо за вашу помощь! идея xlr неплохая идея. я посмотрю на это, но я могу себе представить, что разъем действительно большой.
@perotom: большой - это хорошо, когда ты на улице с неуклюжими людьми, помогающими соединить вещи. Мне также нравятся блокирующие разъемы для таких вещей. Ну просто мысль для размышления.

Ответы (3)

Хотя CAN может быть немного «излишним», всегда предпочтительнее, если у вас есть этот вариант. Краткое сравнение CAN и RS232/RS422/RS485:

Преимущества CAN:

  • Гораздо более надежный и устойчивый к электромагнитным помехам. Но с точки зрения самой технологии и с точки зрения встроенной защиты в стандартном трансивере.
  • Будет нормально работать без экранированных кабелей на более низких скоростях.
  • Встроенная обработка ошибок, CRC и синхронизация кадров. Так что нет необходимости изобретать еще один малоизвестный пользовательский протокол на основе UART. Это означает, что процессорам не нужно тратить время на кодирование/декодирование, вычисление CRC и т.д.
  • Простота обслуживания и простота перепроектирования из двухточечной в многоузловую систему, если в будущем возникнет такая необходимость.

Недостатки CAN:

  • Не совсем разумный выбор, если ваш MCU не имеет встроенного периферийного устройства CAN. Внешние контроллеры CAN обременительны и ушли в прошлое.
  • Может иметь несколько большее потребление тока, чем решения на основе UART.

Стоимость приемопередатчиков CAN по сравнению с приемопередатчиками RS-xxx должна быть примерно одинаковой (за исключением случаев, когда вы выбираете старые дрянные приемопередатчики, такие как MAX232, которым нужны развязывающие конденсаторы 5x 1 мкФ). Уровни напряжения сигнала не имеют значения, есть приемопередатчики CAN и RS-xxx как для 3,3 В, так и для 5 В.

Количество проводов для полудуплексной системы в любом случае будет равно 3. В случае CAN у вас есть CAN H, CAN L и сигнальная земля. В случае, например, RS-422 у вас есть T+, T- и сигнальная земля. Пропускать сигнальную землю действительно не рекомендуется ни в одном случае, не слушайте людей, говорящих вам иначе.

Незначительный момент: « ... приемопередатчики, такие как MAX232, которым нужны развязывающие колпачки 5x 1 мкФ ». Колпачки предназначены для удвоителей напряжения, чтобы генерировать (приблизительно) +7 и -7 В из источника питания +5 В. Есть ли известная проблема с MAX232?
@ Транзистор MAX202 работает так же хорошо, но ему нужно всего 100 нФ. То же самое для большинства вторых источников с именем something-232. Технологии юрского периода против технологий мелового периода... выберите своего любимого динозавра.
@Lundin, так что я думаю, что поеду на автобусе. это может быть немного сложнее в программировании, но более универсально.
@perotom Возможно, вы захотите проверить, есть ли для данного MCU какие-либо готовые драйверы. Это сэкономит вам много работы.
@Lundin Я думаю, что у arduino есть несколько готовых драйверов. Спасибо!

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

Ваш микроконтроллер будет иметь как минимум одну линию передачи данных (TX) и как минимум одну линию приема данных (RX). Эти линии будут переключаться между низким и высоким уровнем при передаче/приеме между уровнями напряжения 0 В и ~ 5 В или 0 В и 3,3 В в зависимости от устройства. Если предположить, что оба микроконтроллера используют одинаковые уровни напряжения, то, в принципе, вы можете просто подключить TX от одного микроконтроллера к RX другого и наоборот. Это работает для коротких расстояний и низких скоростей передачи данных, но я думаю, что 5 м слишком длинны для этого, и я также думаю, что это плохая практика между системами.

Лучше использовать преобразователь уровня (например, семейство MAX232 для систем 0–5 В или MAX3232 для систем 0–3 В) на каждом конце. Они преобразуют логический 0 в ~+12 В, а логическую 1 в ~-12 В, чтобы ваша линия связи электрически соответствовала стандарту RS232.

Надеюсь это поможет,

Джо

В настоящее время я использую микроконтроллер STM32F205 ARM Cortex M3. Еще одна проблема заключается в том, что это мобильное устройство с батареей только 3,3 В, поэтому нет источника питания 12 В.
Блок питания на 12 В не нужен. Упомянутые мной устройства генерируют требуемые уровни напряжения внутри (вам также понадобятся 4 конденсатора — значения зависят от устройства, поэтому смотрите техническое описание). Просто убедитесь, что вы используете версию MAX3232, которая может правильно работать с питанием 3,3 В, MAX232 работает с питанием 5 В. Добавлю, что и другие компании, помимо Максима, делают подобные устройства.
собирается быть жестко проводным с разъемами? например, RJ45 Чередующиеся заземления снижают импеданс линии и улучшают помехоустойчивость. Если существует риск образования контуров заземления или синфазных помех, ферритовый тороид с петлями из плоского провода или витыми парами вокруг него повышает помехозащищенность. Поскольку RS485 имеет гораздо более низкий импеданс и сбалансирован, это также значительно повышает помехоустойчивость CM. Тогда вы можете рассмотреть обычные кабели CAT с вилками для удобства.
В настоящее время RS-232 практически устарел для любых целей. Единственное преимущество этого старого барахла в том, что вы можете использовать его для связи со старыми ПК . Кроме того, нет причин выбирать RS-232 вместо RS-422. Использование UART с чистым уровнем TTL даже не вариант вне печатной платы, это просто совершенно непрофессионально, и тогда даже I2C был бы гораздо лучшим выбором.

Игнорируя вопрос о лучших альтернативах (я не очень рекомендую это, но это может сработать), я успешно запускал I2C на большие расстояния (между зданиями) в производстве, и это работало годами.

  • Вы можете снизить тактовую частоту I2C до 10 кГц и установить дополнительные колпачки фильтра на линии для фильтрации радиочастот.
  • Многие микросхемы прекрасно работают при более высоких токах, чем 1,5 мА, работают на 5, 10 или 20 мА, в зависимости от того, что могут выдержать ваши микросхемы.
  • Убедитесь, что вы используете чипы I2C (пороги cmos schmitt), а не SMBUS (уровни ttl), поскольку они гораздо более подвержены шуму.
  • подавайте питание по тем же проводам, используйте подходящий байпас.
  • витая пара/экранированные кабели. http://www.i2cchip.com/i2c_connector.html#Перекрестные помехи
  • используйте переключатель шины, чтобы изолировать этот сегмент от локальных частей I2C
  • осознайте, что ошибок следует ожидать, и разрабатывайте программное обеспечение с учетом этого. (т.е. делайте повторы, например, обновляйте дисплей каждые несколько секунд, а не оставляйте его на несколько часов между обновлениями)
  • Остерегайтесь взаимоблокировки шины I2C, которая может возникнуть из-за шума, вводящего дополнительный тактовый импульс, и убедитесь, что ваш мастер обнаруживает и устраняет это. (Бьюсь об заклад, код arduino не работает)

См. раздел 19 «Взаимная блокировка шины I2C» на странице http://www.i2cchip.com/pdfs/bl233_b.pdf .