Является ли I2C хорошим вариантом для передачи данных на расстояние более 200 метров по кабелю?

i2c

Подходит ли I2C для такого применения или есть другие протоколы? Я знаю, что существуют такие модули, как эти, для расширения диапазона I2C, и я планирую использовать этот (P82B96).

Я хотел бы использовать частоту 100 кГц для I2C и использовать кабели DMX длиной 20 м, соединенные последовательно.

Итак, есть ли альтернатива, более адаптированная для передачи данных с Arduino на Arduino по кабелю?

EDIT: Решение здесь — CAN, поскольку он позволяет иметь несколько устройств на шине. Но если это простая связь между двумя arduino, то используйте RS-232. Решение, предложенное @Dmitry Grigoryev и @Joe S

Заранее спасибо.

, 👍1

Обсуждение

I2C предназначен для очень коротких расстояний. Емкость длинных кабелей делает сигнал непригодным для использования. Существуют другие стандарты связи, разработанные для больших расстояний, которые в основном используют дифференциальные сигналы. Вы не получите такой сигнал из самого Arduino, но вам понадобятся некоторые периферийные устройства, которые это сделают., @Kwasmich

И некоторые из этих периферийных устройств можно контролировать с помощью I2C,, @ratchet freak

@Kwasmich Так что же такое «другие стандарты связи, разработанные для больших расстояний»? :), @Storca

Что-то вроде RS-485 может быть излишним. Но RS-232 (вариант 12 В) также рассчитан на большие расстояния, чем I2C., @Kwasmich

Кроме того, 1Wire был разработан для больших расстояний., @Kwasmich

В данном случае лучше всего подойдет RS-485 или CAN., @Joe S


2 ответа


Лучший ответ:

3

С I2C вы вряд ли получите надежную связь по кабелю длиной более 1 м. Для справки, вот таблица, показывающая, чего можно добиться с помощью обычного RS-232:

Length (m)  Maximum Baud Rate
1600        600
800         1200
400         2400
200         4800
100         9600
50          19,200
25          38,400
16          57,600
8           115,200

Итак, если вам не нужна скорость передачи данных 100 кГц, вы можете использовать обычный RS-232 (который стоит дешево). Если RS-232 недостаточно быстр для вас, рассмотрите более сложные решения. RS-485 — это одна из возможностей. Другая возможность — CAN, которая поддерживает топологии до 500 м при 100 кГц. Ключевое отличие CAN в том, что это шина, а это значит, что все устройства будут использовать одну и ту же пару проводов.

,

Следует отметить, что обычный RS-232 использует сигналы +/-12 В, а не 5 В, как последовательные интерфейсы Arduino., @Craig

Проблема в том, что я управляю несколькими устройствами на шине, и они должны иметь возможность отправлять данные обратно «ведущему», а RS-232 не приспособлен для такого использования, но CAN, похоже, имеет такую функциональность., @Storca

@Storca CAN более сложен (вам придется иметь дело с приоритетом сообщений, арбитражем шины и т. д.), но его определенно стоит изучить, если ваш проект достаточно сложен. Кстати, [это](https://www.aliexpress.com/wholesale?catId=0&initiative_id=SB_20180624020644&SearchText=arduino+can) показывает, как выглядят типичные трансиверы CAN., @Dmitry Grigoryev


1

I2C, пожалуй, худший возможный выбор для этого типа связи. Вместо этого вам следует использовать что-то вроде RS-485 (который, кстати, использует DMX) с дифференциальной сигнализацией.

,