Надежная отправка I2C через кабели Cat5


8

Я подумываю о внедрении системы домашней автоматизации вокруг моего Raspberry Pi, но я обнаружил, что для установки Pi в каждом месте требуются цена и пространство, поэтому для управления требуется слишком много, но кабели Cat5e, необходимые для этой конструкции, уже были установлены во время ремонта. У меня есть несколько PCF8574, PCF8591 и SSR, поэтому можно ли управлять ими с помощью кабелей Cat5e?

Все мои кабели Cat5e уже подключены с распиновкой TIA / EIA 568B. Они являются частью моего структурного кабеля и не экранированы, поэтому требуется более высокое напряжение сети. Я думаю об отправке линий питания и I2C по кабелю с этой распиновкой:

Pin 1 (Pair 1): SCL+
Pin 2 (Pair 1): SCL-
Pin 3 (Pair 2): SDA+
Pin 4 (Pair 3): +12V
Pin 5 (Pair 3): +12V
Pin 6 (Pair 2): SDA-
Pin 7 (Pair 4): GND
Pin 8 (Pair 4): GND

Расположение выводов питания такое же, как и в проводке 100BASE-TX PoE, поэтому номинальная мощность также будет такой же, а использование двунаправленной дифференциальной сигнализации можно найти в 1000BASE-T, для которого требуется Cat5e.

Исходные линии I2C SCL и SDA выводятся в виде двух двунаправленных дифференциальных пар на уровнях TTL (открытый сток не сохраняется на проводе, а восстанавливается в устройстве завершения / сдвига уровня, которое я проектирую)

Любое предложение по этому поводу? Кроме того, какую микросхему я должен использовать для преобразования линий I2C в дифференциальную сигнализацию? Пожалуйста, предложите мне фишки с DIP-сквозным отверстием. Я не знаю, как обращаться с SMT.

РЕДАКТИРОВАТЬ

Я нашел этот чип, SN65LBC180, это хороший выбор? Как подключить его в двунаправленный блок? Как сместить уровень (это часть BiCMOS, требующая уровня TTL, но Pi управляет на 3,3 В CMOS-уровнях) и сделать его совместимым с открытым стоком?

РЕДАКТИРОВАТЬ 2

Комментаторы предложили RS-485, который показался мне приемлемым, но все же две дифференциальные пары должны быть двунаправленными и иметь только две двунаправленные дифференциальные пары. Я переназначаю существующие кабели Ethernet.

РЕДАКТИРОВАТЬ 3

Поскольку кто-то поднял этот вопрос, я не могу использовать CAN. Я никак не могу установить CAN на RPi, не жертвуя чем-либо (SPI занят сенсорным экраном, поэтому нет конвертера SPI в CAN)

Мне известно об ограничении I2C PHY, поэтому я в основном пытаюсь приспособить 1000BASE-T PHY к нему - двунаправленную дифференциальную сигнализацию для сигналов SCL и SDA, но поверх этого работает протокол I2C.

РЕДАКТИРОВАТЬ 4

Мне пришла новая микросхема: NXP P82B96, которая разделяет I2C на 4 однонаправленные линии, которые, в свою очередь, могут использоваться для подачи в SN65LBC180 через оптоизоляцию (только на стороне Pi) для формирования 8-контактной сигнализации о готовности к дальней дистанции. Теперь мне просто нужно выяснить, как получить питание по проводам или как определить, отправляет ли шина, и сделать пары двунаправленными.

РЕДАКТИРОВАТЬ 5

Из предложений ответов, я думаю, мне нужно немного изменить распиновку питания:

Pin 1 (Pair 1): SCL+
Pin 2 (Pair 1): SCL-
Pin 3 (Pair 2): SDA+
Pin 4 (Pair 3): +5V
Pin 5 (Pair 3): GND
Pin 6 (Pair 2): SDA-
Pin 7 (Pair 4): GND
Pin 8 (Pair 4): +12V

Напряжение дифференциальной сигнализации I2C - TTL. + 5 В по паре 3 исходит от Пи, без буфера, но слитый. + 12 В по паре 4 может отсутствовать, используется только для управления некоторыми мощными устройствами. При необходимости устройство может использовать свой собственный источник питания и оставлять обе вешалки неподключенными или подавать свое более высокое напряжение, но использовать шину 5 В.

СОТРИТЕ ЭТО

Распиновка - все еще мой оригинальный дизайн, который совместим с 802.1af.


4
Почему не RS-485? Это промышленный, надежный стандарт.
Камил

У Пи нет RS485, и я хочу, чтобы схема взаимодействия была максимально простой. Также мне нужен PCF8574, который, исходя из моих экспериментов, может надежно подключать мой SSR при напряжении питания 5 В.
Maxthon Chan

В то время как сам RS-485 является двунаправленным, он не делает двунаправленным на односторонней стороне.
Игнасио Васкес-Абрамс

5
Если вы так решительно настроены делать то, что, как вы сказали, собирались делать изначально, почему вы вообще пришли сюда и спросили об этом?
Мэтт Янг

2
@maxthonchan Ethernet-провода Cat5 могут безопасно обрабатывать 360 мА при 50 В ( en.wikipedia.org/wiki/Power_over_Ethernet#Power_capacity_limits ). Вы можете легко получить полупроводниковые реле, которые потребляют <10 мА при 3-32 В на входной стороне, что вполне соответствует безопасным характеристикам.
Грант

Ответы:


18

Попытка сделать с IIC - плохая идея. IIC действительно предназначен для связи между чипами на одной плате. Поскольку максимальный ток, необходимый для затягивания линии, ограничен, линии имеют относительно высокое сопротивление (несколько кОм). Это означает, что они могут легко улавливать шум, что является серьезной проблемой при прокладке неэкранированного кабеля в стенах, возможно, прямо рядом с проводами переменного тока.

Я бы использовал CAN для этого. CAN использует одну витую пару, соединенную только с 60 Ом в любой точке, и сигнал является дифференциальным. Это означает, что большая часть неизбежного синфазного шума, который будет улавливаться из-за емкостной связи, может быть отменена приемниками. CAN, работающий со скоростью 500 кбит / с, может покрыть что-то размером с обычный дом.

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

Не поддавайтесь на RS-485. Это пережиток ушедшей эпохи. Он также использует один дифференциальный сигнал, такой как CAN, поэтому также имеет хорошую помехоустойчивость. Тем не менее, люди обычно влюбляются в RS-485, потому что он выглядит «проще». Это только потому, что они не смотрят на всю систему. Во-первых, на самом деле это не менее сложно в электрическом плане. Вам все еще понадобится какой-нибудь трансивер для управления и получения дифференциального сигнала. Независимо от того, есть ли у вас приемопередатчик RS-485, подключенный к UART микроконтроллера, или MCP2551, подключенный к периферийному устройству CAN, это в значительной степени не имеет значения с точки зрения стоимости и сложности оборудования. Большая разница в том, что RS-485 оставляет вас на уровне необработанных байтов (через UART). Это означает, что для реализации любой значимой и надежной системы вы должны изобрести свой собственный протокол для обнаружения коллизий, решить, как обрабатывать повторы, пакетирование, генерацию и проверку контрольных сумм, управление потоком и т. д. Вы можете использовать одну основную архитектуру, но получить правильные детали гораздо сложнее, чем люди думают, что не проанализировали все их тщательно. С помощью CAN вы можете просто отправлять и получать пакеты, а оборудование заботится о деталях.


У меня нет CAN, встроенного в RPi, у меня нет CAN-интерфейса, я не могу себе их позволить и не могу вписать их в существующее жилье. Так что, не могу. Я преобразовываю IIC в дифференциальную сигнализацию туда-сюда, чтобы избежать этой самой ловушки перекрестных помех и сопротивления. Устройство преобразования и IIC совместно используют одну плату.
Maxthon Chan

@Max: Микроконтроллер с CAN будет дешевле, меньше, потреблять меньше энергии, чем RPi. Если эти узлы в основном датчики и тому подобное, RPi в любом случае является избыточным.
Олин Латроп

ОК не обладает достаточной вычислительной мощностью для запуска другой стороны системы. Хотя у меня есть сенсорный экран в системе, предназначенный только для экстренного переопределения, все команды отправляются по домашней сети на Pi по HTTP (с довольно необычным пользовательским интерфейсом на основе AJAX), а Pi обрабатывает все аутентификации и другие вещи.
Maxthon Chan

3
@MaxthonChan Вы можете получить дешевые ИС контроллера, которые преобразуют CAN в SPI и / или I2C для взаимодействия с вашим RasPI. Пример из микрочипа .
Питер

Если это ваше предложение, то, пожалуйста, скажите мне, как я могу управлять моим SSR? В настоящее время у меня есть одна приемная плата с интерфейсом diff, 7805 и PCF8574, и она поддерживает до 8 SSR. (и обычно у меня два или три)
Maxthon Chan

7

I2C не путь. CAN-трансиверы стоят по доллару каждый, и вы можете использовать их в качестве UART-трансиверов и написать свой собственный протокол, так что вам не понадобится совместимый с банкой микро, из которого вы не хотите использовать полный стек.

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

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

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

12 В, на мой взгляд, слишком мало для распределения электроэнергии, когда 24 В все еще достаточно безопасно и намного более эффективно.


Мое решение как-то основано на этом. Я использую чип разветвителя NXP, чтобы разделить шину I2C на пару Tx / Rx (SDA и SCL) и мультиплексировать их как UART, используя микросхемы интерфейса CAN. Это дает мне две витые пары, несущие линии I2C SDA и SCL, подключенные к контактам TIA / EIA568B Cat5e 1/2 и 3/6.
Maxthon Chan

Это также должно работать, единственная проблема в том, что вам нужен чип NXP, два транквера и может быть ваш реальный чип ввода / вывода i2c. Это пять чипов на плату, и в последний раз я проверял, что чип NXP дороже, чем у atmega328, но это могло измениться. Это будет работать, и программирование будет простым, потому что это i2c, но использование UART поверх CAN обходится дешевле за немного больше работы.
EternityForest

Плата интерфейса со стороны Pi имеет 7 микросхем - буфер / разветвитель NXP I2C, два CAN PHY и четыре оптоизолатора. На стороне устройства находится 4-чиповый модуль - буфер / сплиттер NXP I2C, два CAN PHY и PCF8574 / 8591.
Maxthon Chan

Я нашел 4-канальный оптрон, который уменьшит цепь на стороне Pi до 4-чипового модуля.
Maxthon Chan

Переосмыслив контакты питания, я придерживаюсь своего первоначального дизайна, используя пару сил и пару заземления. Это совместимо с 802.3af, хотя я переопределил сигнальные выводы для SCL и SDA.
Maxthon Chan

3

Если бы автоматизация просто включала и выключала все вокруг, я бы упростила это следующим образом:

  • Хранение всех "мозгов" в одном месте. При необходимости используйте расширители ввода / вывода I2C, но держите их все вместе с Raspberry Pi. Вам также понадобится соответствующее оборудование, чтобы убедиться, что вы не пытаетесь получить слишком большой ток от выводов GPIO пи.
  • Используйте кабели Ethernet для простого управления реле. Вы можете построить свою собственную плату или установить монтируемые на панель твердотельные реле 120/240 В, которые будут установлены в электрическую коробку. Провода в кабелях Ethernet Cat5 могут выдерживать напряжение до 50 В при напряжении 320 мА, что более чем достаточно для управления реле. Фактически, вы можете подключить 7 реле от одного кабеля (плюс один провод для заземления). Или оставьте один провод для непереключаемого выхода 12 В, так что вы также можете установить ручной переключатель. Если они действительно долго работают, вам, возможно, придется учитывать падение напряжения, но вы можете получить реле, которые будут переключаться на 3-32В. 12В должно быть более чем достаточно даже при падении напряжения.
  • Вы также можете обратиться к местным строительным нормам и правилам для совмещения кабелей высокого и низкого напряжения в одной коробке.
  • Простые переключения также могут быть выполнены через кабели Ethernet, опять же до 7 на кабель, и просто подключены к входам Пи. Падение напряжения может быть проблемой для действительно длинных кабелей.
  • Вы также можете использовать оптоизоляторы для защиты пи от повреждений.
  • Для немногих устройств, которым требуется больше, чем реле (например, панель управления), используйте кабели Ethernet в качестве реальной сети Ethernet. Это не должно быть огромным расходом, если таких устройств не так много. Они могут быть либо другим пи, либо микроконтроллером с Ethernet.

Я не совсем уверен, каковы будут потребности моих конечных пользователей. Она капризная и очень быстро передумывает. Я должен быть в состоянии ответить достаточно быстро. Вот почему какой-то базовый протокол (здесь I2C) используется по проводам.
Maxthon Chan

2

схематический

смоделировать эту схему - схема, созданная с использованием CircuitLab

EUREKA! Догадаться! (непроверенный, проверим это в эти выходные)

Интерфейсными микросхемами являются NXP P82B96 I2C буфер / сплиттер и 2 микросхемы интерфейса шины TI SN65HVD251P CAN. По сути, я использую I2C на CAN PHY.

P82B96 понимает протокол I2C и выполняет для меня арбитраж по шине и дает мне отдельные выводы Tx и Rx, которые можно связать вместе. Я передаю их в CAN-трансивер SN65HVD251P, и он дает мне двунаправленную дифференциальную пару для отправки по проводам.

Силовые контакты поступают напрямую, без буферизации от 5V шины моего Пи. (Я не буду использовать напряжение питания и напряжение 12 В некоторое время)


Извините, но не. То, что это позволит вам сделать, это подключить два блока I2C на некотором расстоянии друг от друга. Это не позволит вам подключиться больше, чем 2.
WhatRoughBeast

@WhatRoughBeast Я посмотрел это на документации NXP, и он говорит, что это жизнеспособное решение (и оно каким-то образом попало в их AN), но для меня точка-точка - это нормально, так как мой дизайн сам требует одного пара единиц преобразования на сегмент Cat5e.
Maxthon Chan

CAN является проводным или двунаправленным, как i2c. Я не вижу причин, по которым это не должно работать с таким количеством устройств, как вы хотите в шине. Я видел приложение, которое он упоминает. Похоже, это описание автобуса, а не точка-точка.
EternityForest

@WhatRoughBeast - CAN является многоточечным, я не слишком внимательно посмотрел на то, что делает OP, но это должно быть теоретически возможно.
Коннор Вольф

1

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

Как любой блок узнает, может ли он взять под контроль шину для отправки данных?

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

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


1

Я не знаю, если вы заинтересованы в готовом решении, а не в создании собственной схемы, но я подумал, что хотел бы отметить, что Pololu продает эти I²C Long-дифференциальный удлинитель удлинителей, изготовленные SJTbits, которые, кажется, работают почти точно что ты ищешь. (Полное раскрытие: я работаю на Пололу.)

Даже если вы не хотите использовать его напрямую, возможно, взгляд на схему, которую он использует, может дать вам некоторые идеи. Вы можете увидеть схему в таблице данных; он использует буфер NXP PCA9600D, драйвер дифференциальной линии TI AM26LS31CDR и приемник дифференциальной линии TI AM26LS32ACDR.


Это не работает для меня. Мне нужно отправить и сигнал шины и питание по проводам.
Maxthon Chan

1

Я знаю, что это немного устарело, и решение, похоже, было найдено где-то среди ответов, но у меня было предложение предложить. Существуют такие устройства, как PCA9614 / 5/6 от NXP, которые я сейчас рассматриваю как решение для более надежной междугородной шины I2C (2-канальный многоточечный дифференциальный буфер I2C шины Fast-mode Plus PCA9614) . По сути, это правда, что он становится чем-то отличным от настоящего I2C, но на концах шины он невидим для устройств. Это конкретное семейство преобразует сигналы в 2 двунаправленные дифференциальные пары, и существуют также подобные устройства, как уже упоминалось в комментариях, которые преобразуют в 4 однонаправленные дифференциальные пары. Перевод только на 2 пары позволяет использовать кабель CAT и при этом иметь 2 пары для питания / заземления.


0

Недурно! В настоящее время я пытаюсь решить почти ту же проблему. Я также пытаюсь использовать I2C поверх cat5 для домашней автоматизации с моей собственной распиновкой. Причина в стоимости, я хочу, чтобы она была очень экономичной, а компоненты I2C по крайней мере в 5 раз дешевле, чем даже attiny13 UC (AFAIU UC требуется для CAN и RS485).

1) В настоящее время я нахожусь в процессе испытания первой части системы, и теперь у меня получилось использовать кабель длиной 15 м с 5 В и прямое соединение SCL и SDA! Я использую PCF8574 и 2 реле для включения освещения моей комнаты. Распиновка есть

1
2 INT
3 +5V
4 SCL
5 SDA
6 GND
7
8

2) Я понимаю, что это не даст пару дополнительных реле или лишних 10 метров ... Падение напряжения значительно (с 5,5 до 4,7). Поэтому для решения проблемы падения напряжения я собираюсь вместо этого поставить 12 В на линию и добавить 5 В регуляторы напряжения на платах, чтобы поддерживать точное напряжение везде, независимо от полного падения напряжения в сети. В любом случае я добавлю дополнительные источники питания на будущие линии.

3) Сам сигнал можно улучшить с помощью P82B96 или дешевого P82B715 без разделения на дифференциальные линии. Сам NXP использует Cat5 в некоторых презентациях, но я не могу найти их распиновку. Важной частью здесь является то, что они явно используют сигнальные линии в разных парах ... например, одна пара - GND + SDA, а другая - VCC + SCL.

4) Еще один интересный момент - эти буферы могут просто повысить амплитуду до 12 В, чтобы повысить помехоустойчивость. Итак, я, вероятно, попытаюсь подключить 12 В на сигнальных линиях, и это должно позволить направлять подтягивания из провода 12 В ... Но это заставит меня поставить что-то вроде P82B96 на каждое устройство.

Как вы могли заметить, я также использую отдельную линию прерываний ... В настоящее время Master находится на плате Arduino, подключенной к ПК. В любом случае основное программное обеспечение будет на ПК 24x7, поэтому Arduino просто транслирует сигнал и обрабатывает прерывания. Я могу отправить конкретную конфигурацию для обработки прерываний на борту, например, для удобного переключения переключателя через прерывание ... Это позволяет мне забыть о любых задержках при ручном переключении света. Обработка прерываний является дополнительным преимуществом i2c.

Таким образом, моя идея заключается в том, что I2C достаточно прост, чтобы его можно было использовать в городских кабелях <= 100 м. Вместо перехода на дифференциальный сигнал, я надеюсь, что вместо этого я смогу уменьшить частоту.

Мне нравится ваша идея поставить как 5 В, так и 12 В, так как это уменьшает потребность в регуляторах и снижает стоимость ... вся идея многопроводной шины для снижения стоимости конечных точек, я также рассмотрю это для новой распиновки :)


1
Это скорее расширенный комментарий к вопросу, чем ответ, поскольку ваша ситуация не совпадает с ситуацией ОП: другое основное оборудование, другая схема сигнализации. Но это достаточно тесно связано, что я собираюсь оставить это в силе.
Дэйв Твид
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.