В моем текущем проекте мне нужно установить связь между микроконтроллером и некоторыми датчиками через I2C. Одним из них является датчик температуры, его необходимо разместить на расстоянии примерно 2 метра от микроконтроллера. Я не могу выбрать другой протокол (датчик находится на модуле с данным разъемом / контактами / протоколом).
Как вы думаете, возможно ли общаться в этой конфигурации? Какую информацию я должен искать, чтобы убедиться, что она может или не может быть возможной? У вас есть совет?
Я впервые общаюсь с IC за пределами PCB.
i2c
communication
cables
JackOfHearts
источник
источник
Ответы:
I2C не предназначен для использования на больших расстояниях, но я знаю несколько приложений, где он фактически используется на расстоянии около 2 метров. Я также знаю один случай, когда у них были проблемы с этим, и он был исправлен путем исправления контуров заземления, как мне кажется.
Чтобы быть уверенным, что он будет работать, вы должны использовать удлинитель шины I2C, такой как P82B715.
Тем не менее, таблица данных PB2B715 говорит следующее в разделе 8.2:
Таким образом, эксперты (NXP - бывший Philips, изобретатель I2C) говорят, что 30 метров было доказано выполнимым расстоянием. Мой опыт говорит, что 2 метра - это выполнимое расстояние, и опыт, который мне сообщили, показывает, что также возможны более загруженные шины I2C без какого-либо удлинителя.
Ключевые моменты работы автобусов I2C на больших расстояниях:
Расчет подтягивания
У Texas Instruments есть хорошая заметка по применению (SLVA689) о расчете подтягивания .
источник
Как правило, максимальная емкость шины составляет 400 пФ.
Он должен работать нормально, если вы снизите частоту до 1 кГц и обеспечите разъединение источника питания рядом с датчиком.
Если вам нужно что-то более надежное, вы можете использовать дифференциальные преобразователи I2C на обоих концах, например, PCA9615 .
источник
Можно, но это не рекомендуется.
Разные автобусы для разных целей
I2C, как и SPI, предназначен для связи внутри платы или группы плат (вспомним Raspberry Pi и его шляпы или arduino и его щиты). Он может работать на больших расстояниях (см. Другие ответы), но его не следует использовать в этих случаях, просто потому, что он не был разработан, оптимизирован и квалифицирован.
Риск, который вы берете на себя, заключается в том, что вы, возможно, не сможете добавить больше датчиков в будущем, или что ваша система не будет работать везде или выйдет из строя при определенных обстоятельствах.
То, что вы должны искать, это полевая шина, что-то вроде 1-wire, CAN, RS-485, Ethernet и т. Д.
Беспроводные системы, такие как Bluetooth или ZigBee, также могут быть опцией.
источник
Как отмечает @filo, I2C обычно ограничен емкостью шины. Однако есть способы обойти это:
Взгляните на AN10658 и AN11084 от NXP для получения дополнительной информации.
источник
Мне нравятся ответы Фило и Калеба.
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.
источник