Могу ли я использовать I2C более 2-х метровых кабелей?


24

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

Как вы думаете, возможно ли общаться в этой конфигурации? Какую информацию я должен искать, чтобы убедиться, что она может или не может быть возможной? У вас есть совет?

Я впервые общаюсь с IC за пределами PCB.


5
Пожалуйста, добавьте больше информации. Какой будет скорость i2c? Сопротивление подтягиванию? Используемый кабель и его емкость? Что такое главный микроконтроллер и какой датчик? Но в целом I2C работает на несколько метров по кабелям, таким как HDMI, поэтому он должен работать, когда все сделано правильно.
Justme


6
«Я не могу выбрать другой протокол». Вы можете установить второй микроконтроллер рядом с датчиком, прочитать данные и отправить их с любым протоколом, который вам нравится.
FooBar

1
У вас есть минимальная скорость в кбит / с?
Мачта

2
Если вы замедляете часы, вы можете пройти довольно большое расстояние.
copper.hat

Ответы:


36

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

Чтобы быть уверенным, что он будет работать, вы должны использовать удлинитель шины I2C, такой как P82B715.

Тем не менее, таблица данных PB2B715 говорит следующее в разделе 8.2:

Для типичной витой пары или плоских кабелей, используемых для телефонии или проводки Ethernet (Cat5e), эта емкость составляет от 50 пФ до 70 пФ / метр, поэтому теоретически длина кабеля может достигать 50 м . Из практического опыта 30 м доказали безопасную длину кабеля, которую можно провести простым способом, до 100 кГц, с указанными значениями. Возможны более длинные расстояния и более высокие скорости, но они требуют более тщательного проектирования.

Таким образом, эксперты (NXP - бывший Philips, изобретатель I2C) говорят, что 30 метров было доказано выполнимым расстоянием. Мой опыт говорит, что 2 метра - это выполнимое расстояние, и опыт, который мне сообщили, показывает, что также возможны более загруженные шины I2C без какого-либо удлинителя.

Ключевые моменты работы автобусов I2C на больших расстояниях:

  • Использование кабеля с низкой емкостью (витая пара / Ethernet);
  • Ограничение скорости шины;
  • Наличие подтягиваний правильного размера.

Расчет подтягивания

У Texas Instruments есть хорошая заметка по применению (SLVA689) о расчете подтягивания .

  • (3.6 V1 V) / 20 mA=130 Ω .
  • Rmax=tr/(0.8473Cb)trCbCbtrRmax=2950 Ω, В примечании к приложению TI есть графики, позволяющие быстро найти соответствующие значения.
  • Конечно, значение для подтягивания является эквивалентным значением для всех подтягиваний, соединенных параллельно. У вас может быть подтягивание на главном конце, ведомом конце и любом другом ведомом / главном на шине.
  • Чем больше вы находитесь «на пределе», тем больше вам также необходимо учитывать «паразитные факторы», такие как падение напряжения в кабеле.

Наличие подтягиваний правильного размера? Как определить значение и номинальную мощность?
Quantum0xE7

Как прокомментировал Ник Б. другой ответ, будьте осторожны с возможностью того, что микросхема удлинителя шины или что-либо еще может нагреть датчик температуры на пару градусов.
Питер Кордес

14

Как правило, максимальная емкость шины составляет 400 пФ.

Он должен работать нормально, если вы снизите частоту до 1 кГц и обеспечите разъединение источника питания рядом с датчиком.

Если вам нужно что-то более надежное, вы можете использовать дифференциальные преобразователи I2C на обоих концах, например, PCA9615 .


Я смутно помню некоторые датчики, имеющие минимальную частоту I2C (не знаю почему).
Майкл

14

Можно, но это не рекомендуется.

Разные автобусы для разных целей

I2C, как и SPI, предназначен для связи внутри платы или группы плат (вспомним Raspberry Pi и его шляпы или arduino и его щиты). Он может работать на больших расстояниях (см. Другие ответы), но его не следует использовать в этих случаях, просто потому, что он не был разработан, оптимизирован и квалифицирован.

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

То, что вы должны искать, это полевая шина, что-то вроде 1-wire, CAN, RS-485, Ethernet и т. Д.

Беспроводные системы, такие как Bluetooth или ZigBee, также могут быть опцией.


9

Как отмечает @filo, I2C обычно ограничен емкостью шины. Однако есть способы обойти это:

  1. Используйте удлинитель шины. P82B96 или PCA9600 бы оба хорошие варианты в вашем случае.
  2. Если вам нужны более высокие скорости или очень длинные кабели, вы можете использовать дифференциальный приемопередатчик I2C, например, PCA9600 . Однако это значительно усложнит вашу схему, и вам понадобится ИС на обоих концах кабеля.

Взгляните на AN10658 и AN11084 от NXP для получения дополнительной информации.


1
Это будет хорошо работать с расширителем шины, как сказали некоторые другие. Нечто не очевидное, что нужно следить за тем, чтобы удлинитель шины на конце датчика мог рассеивать достаточно тепла, чтобы повысить показания датчиков температуры на пару градусов, если датчик и удлинитель шины находятся близко друг к другу.
Ник Б

4

Мне нравятся ответы Фило и Калеба.

Another option is using one or multiple DS28E17 1-Wire-to-I2C Master Bridges at the individual sensors and wire up the bus as Onewire. This is good for >100m buses and well suited to low-throughput sensor array applications as distributed temperature and battery management.


Interesting thought, though it may introduce additional software overhead if the master does not have a 1-Wire interface.
Caleb Reister

В основном это вариант, если у вас есть хост Linux, так как он имеет полный стек драйверов для этого трюка. На Raspberry Pi вам просто нужно подключить GPIO4 к входу 1W DS28E17 через эти 100 м провода (плюс, конечно, GND), отредактируйте config.txt, и все готово. Он полностью прозрачен, выглядит как местный I²C. Просто медленнее.
Янка

Спасибо. Я был очень удивлен, что 1-Wire может пройти такое расстояние. Я думаю, это имеет смысл, так как резисторы меньше.
Домен

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