Лучший способ сделать I2C / TWI на большом расстоянии


9

У меня есть проект, который требует сделать I²C / I2C / TWI на большом расстоянии (от 30 до 40 метров).

Я видел, как некоторые люди предлагали снизить тактовую частоту примерно до 500 Гц, чтобы смягчить влияние емкости такой длинной линии, я полагаю? Для компонентов, которые я использую, требуется как минимум стандартная тактовая частота 100 кГц. Я провел дополнительное исследование и нашел среди ответов на другой вопрос предложение использовать регулятор уровня P82B96. В техническом описании они приводят примеры использования их на линиях длиной даже 100 метров:

I2C_longDistance

я сталкивался с другим способом смещения уровней через разделительную доску от adafruit , который представляет собой просто mosfet (bss138) с двумя подтягивающими резисторами (один для каждая сторона / напряжение). Они получили идею отпримечание о применении от NXP (AN10441) и два канала там могут использоваться следующим образом:

смещение уровня Mosfet

Теперь мне интересно: какое решение лучше? Или я что-то упустил из виду? А также, достаточно ли 5 ​​В для обеспечения хорошего соединения? Будет ли преимущество в использовании еще более высокого напряжения, например, 12 В?


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

Я добавил резюме, оно узкое и достаточно конкретное?
DaJF

Вы также должны указать максимальную длину провода для датчиков и дать представление о том, что означает для вас «низкая стоимость». Вы ожидаете подать питание на датчики по тому же кабелю?
Джо Хасс

@JoeHass Вопрос теперь достаточно узок? Если нет, что еще мне нужно сделать?
DaJF

Привет, я знаю, что это старый вопрос, но что вы в итоге сделали? У меня точно такой же вопрос, как и у вас, схожие расстояния и минимальная тактовая частота 100 кГц. Мне было бы интересно узнать, что сработало для вас, спасибо.
pcdev

Ответы:


1

Я думаю, что вы на правильном пути с чем-то вроде NXP P82B96. Если вы посмотрите на рисунок 14 и соответствующий текст, в техническом описании обсуждается использование кабеля длиной до 250 м со скоростью передачи данных более 100 кГц.

Существует много датчиков температуры I2C, которые могут дать вам точность в несколько градусов Цельсия без калибровки и без каких-либо дополнительных аналоговых схем. Так как вы все равно возвращаете данные для обработки, отфильтровать шум будет очень просто.

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


Можно ли заменить P82B96 альтернативой Mosfet? По цене одного P82B96 я могу буквально купить 100 bss138 mosfets (я могу дать вам ссылки, если хотите). Действительно, как вы сказали, я нашел то, что похоже на подходящий датчик температуры: LM75A. Что касается выбора между экранированным или неэкранированным кабелем, то, похоже, вопрос какой проблемы вы хотите: возможные помехи (неэкранированные) или линейная емкость (экранированные), это правильное предположение? Является ли один более заметным, чем другой? Я понятия не имею, как это определить. Спасибо, кстати!
DaJF

Я не думаю, что вы можете заменить P82B96 MOSFET для длинных линий. Похоже, что ИС повторителя фактически обеспечивает некоторое усиление, где МОП-транзисторы в основном обеспечивают сдвиг уровня напряжения. Боюсь, я не уверен, как сделать вызов по кабелю ... вы должны посмотреть на примечание к приложению NXP AN255. Они говорят об использовании витой пары, но не упоминают щит. Для цифровых сигналов шум может представлять меньшую проблему, чем емкость.
Джо Хасс

2

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

Для использования в сетевых ресторанах я разработал так называемые элементы управления RTU (на крыше), которые работают на нескольких пассивных датчиках (они используют сменные термисторы NTC, которые не требуют калибровки для комфортного обогрева). Гораздо проще отфильтровать шум от пассивного датчика. Другой набор установок (крупный автомобильный комплекс в Северной Америке) использовал платиновые RTD с формирователями сигналов - очень точные и стабильные устройства. Сначала вы должны выбрать датчик, а затем посмотреть, как он может быть подключен - любой из этих параметров датчика подходит для вашего приложения (хотя RTD могут быть излишними).

В случае, если неясно, я предлагаю «звездную» конфигурацию датчиков вокруг вашего процессора.

Если вы действительно хотите использовать «шину» (кроме однопроводной или I2C), вам понадобятся смарты на концах, что означает процессор в некоторой форме. Если вы идете изо всех сил, вы можете рассмотреть возможность использования беспроводных датчиков, которые обмениваются данными через какую-то полосу ISM, которая разрешена в вашей местности. В качестве альтернативы, вы можете использовать один датчик на Pi и заставить их общаться друг с другом через вашу интранет-сеть WiFi.


Прямо сейчас я - стадия «определения, что купить», так что либо шина, либо датчик могут определить другую. Единственные требования, которые у меня есть к ним, просты в использовании и расширяемы. Причиной выбора шины является то, что я предпочитаю не прокладывать кабель к каждому датчику (что вы, похоже, предлагаете, или я неправильно истолковал «звезду»?). Является ли I²C жизнеспособным протоколом для использования на кабеле, который может быть 30M / 90FT?
DaJF

Да, вот что такое «звезда» - провода от контроллера к каждому датчику. I2C на 30 м ... ну ... я слышал, что это возможно на очень низких скоростях, но я бы не стал рассчитывать на то, что он работает хорошо.
Спехро Пефхани
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.