Я подумываю о внедрении системы домашней автоматизации вокруг моего 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.
источник
Ответы:
Попытка сделать с 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 вы можете просто отправлять и получать пакеты, а оборудование заботится о деталях.
источник
I2C не путь. CAN-трансиверы стоят по доллару каждый, и вы можете использовать их в качестве UART-трансиверов и написать свой собственный протокол, так что вам не понадобится совместимый с банкой микро, из которого вы не хотите использовать полный стек.
Я всегда чувствую себя немного неловко, когда вижу, что проводники cat5 работают в параллельном режиме для большего тока. Меня это беспокоит, потому что, если один проводник сломается, другой будет нести полный системный ток. Текущие рейтинги cat5 очень консервативны, поэтому вероятность пожара довольно низкая, но мне просто не нравится такая возможность.
Безопасный способ сделать это - установить полифьюз на обе шины питания и присоединить заземление к источнику питания и подключить каждое устройство к одному и только одному набору питания / заземления. Таким образом, если один из проводов выходит из строя, устройства, использующие эту линию, теряют питание, а одна линия вынуждена нести мощность двух.
Многим людям нравится помещать питание и заземление в обе витые пары по причинам электромагнитных помех, вместо того, чтобы иметь одну пару сил и одну пару заземления. Если у вас есть две пары питания / заземления, линия электропередачи будет ближе к земле, и поля будут отменены, уменьшая любые передаваемые или принимаемые радиоволны от линий электропередачи. Ненужно, но приятно, если гудит много электрического шума.
12 В, на мой взгляд, слишком мало для распределения электроэнергии, когда 24 В все еще достаточно безопасно и намного более эффективно.
источник
Если бы автоматизация просто включала и выключала все вокруг, я бы упростила это следующим образом:
источник
смоделировать эту схему - схема, созданная с использованием CircuitLab
EUREKA! Догадаться! (непроверенный, проверим это в эти выходные)
Интерфейсными микросхемами являются NXP P82B96 I2C буфер / сплиттер и 2 микросхемы интерфейса шины TI SN65HVD251P CAN. По сути, я использую I2C на CAN PHY.
P82B96 понимает протокол I2C и выполняет для меня арбитраж по шине и дает мне отдельные выводы Tx и Rx, которые можно связать вместе. Я передаю их в CAN-трансивер SN65HVD251P, и он дает мне двунаправленную дифференциальную пару для отправки по проводам.
Силовые контакты поступают напрямую, без буферизации от 5V шины моего Пи. (Я не буду использовать напряжение питания и напряжение 12 В некоторое время)
источник
Независимо от достоинств IIC на уровне чипов, предложенная вами реализация будет очень сложной. Проблема в автобусном арбитраже. Несмотря на то, что несколько устройств могут быть подключены параллельно, например, через RS485, большой вопрос будет:
Как любой блок узнает, может ли он взять под контроль шину для отправки данных?
В IIC с сигнальными линиями с открытым стоком двунаправленная передача очень проста, но при использовании трехсторонних шин вам нужно каким-то образом убедиться, что только один блок пытается управлять шиной за раз. Это будет сложно. Вы можете сделать это, особенно если вы устанавливаете единый мастер и требуете, чтобы все ведомые устройства имели жесткие временные ограничения на отправку данных, и чтобы они отправляли данные только по запросу мастера, но это потребует значительных усилий с вашей стороны при разработке интерфейсные платы для мастера и рабов.
Что касается физических драйверов / приемников, RS485 подойдет вам, и есть много интерфейсных чипов. Просто гугл.
источник
Я не знаю, если вы заинтересованы в готовом решении, а не в создании собственной схемы, но я подумал, что хотел бы отметить, что Pololu продает эти I²C Long-дифференциальный удлинитель удлинителей, изготовленные SJTbits, которые, кажется, работают почти точно что ты ищешь. (Полное раскрытие: я работаю на Пололу.)
Даже если вы не хотите использовать его напрямую, возможно, взгляд на схему, которую он использует, может дать вам некоторые идеи. Вы можете увидеть схему в таблице данных; он использует буфер NXP PCA9600D, драйвер дифференциальной линии TI AM26LS31CDR и приемник дифференциальной линии TI AM26LS32ACDR.
источник
Я знаю, что это немного устарело, и решение, похоже, было найдено где-то среди ответов, но у меня было предложение предложить. Существуют такие устройства, как PCA9614 / 5/6 от NXP, которые я сейчас рассматриваю как решение для более надежной междугородной шины I2C (2-канальный многоточечный дифференциальный буфер I2C шины Fast-mode Plus PCA9614) . По сути, это правда, что он становится чем-то отличным от настоящего I2C, но на концах шины он невидим для устройств. Это конкретное семейство преобразует сигналы в 2 двунаправленные дифференциальные пары, и существуют также подобные устройства, как уже упоминалось в комментариях, которые преобразуют в 4 однонаправленные дифференциальные пары. Перевод только на 2 пары позволяет использовать кабель CAT и при этом иметь 2 пары для питания / заземления.
источник
Недурно! В настоящее время я пытаюсь решить почти ту же проблему. Я также пытаюсь использовать I2C поверх cat5 для домашней автоматизации с моей собственной распиновкой. Причина в стоимости, я хочу, чтобы она была очень экономичной, а компоненты I2C по крайней мере в 5 раз дешевле, чем даже attiny13 UC (AFAIU UC требуется для CAN и RS485).
1) В настоящее время я нахожусь в процессе испытания первой части системы, и теперь у меня получилось использовать кабель длиной 15 м с 5 В и прямое соединение SCL и SDA! Я использую PCF8574 и 2 реле для включения освещения моей комнаты. Распиновка есть
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 В, так как это уменьшает потребность в регуляторах и снижает стоимость ... вся идея многопроводной шины для снижения стоимости конечных точек, я также рассмотрю это для новой распиновки :)
источник