Как заставить I2C работать на RS485?

Я пытаюсь оптимизировать связь (минимизировать количество проводов) в проекте, где я могу управлять двигателем и переключать некоторые устройства на 230 В с помощью RS485 и I2C.

В этом проекте я использую Arduino (Mega) для панели управления (кнопки, потенциометры, светодиодный сегментный дисплей (I2C) и т. д.).

Я использую протокол RS485 (Modbus RTU) для управления инвертором с помощью преобразователя MAX485 TTL. Теперь у меня также есть релейная плата (8 каналов), чтобы иметь возможность переключать некоторые устройства освещения и звука. И инвертор, и релейная плата, а также блок питания находятся в другом ящике, который я называю силовым. Между панелью управления и силовым ящиком будет кабель.

[Панель управления (с arduino mega)] <--cable--> [блок питания (с инвертором, 8-канальной релейной платой и устройствами на 230 В)]

У меня следующие требования:

  • В кабеле должно быть минимальное количество проводов (5 В, заземление, 485+(A) и 485-(B) обязательно)
  • Общая длина кабеля варьируется от 1 до 3 метров.
  • Сигнал должен быть надежным.

Теперь релейная плата использует 8 каналов. Я купил расширитель I2C (PCF8574), чтобы минимизировать это до 2 проводов (SDA, SCL).

Я думаю об использовании существующих линий 485 для управления инвертором и релейной платой. Таким образом, никаких дополнительных проводов не требуется. Но теоретически я не могу заставить это работать. Поэтому прежде чем я попытаюсь это изобрести.

  1. Можно ли как-то реализовать связь I2C через RS485, поставив еще один преобразователь?

  2. Если вы рекомендуете использовать только 6 проводов (питание, RS485 и I2C), насколько надежной будет моя линия I2C на 3 метрах? Какие значения подтяжки вы рекомендуете? (Имеется в виду провод 24AWG, но также использование близко расположенного светодиодного сегментного дисплея, поэтому 2 устройства I2C на разных расстояниях). Я читал посты, в которых говорилось:

Как правило, для обычной шины I2C с частотой от 100 кГц до 400 кГц длина составляет максимум 50 см.

Или я могу использовать какой-то другой протокол/трюк? Либо минимизировать провода, либо усилить сигнал буфером I2C? (рекомендации?)

, 👍1


1 ответ


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

2

I2C и RS485 — это настолько разные протоколы с такими разными потребностями в передаче сигналов, что они не могут использовать одни и те же кабели.

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

Самым простым решением «Arduino» было бы создание нового устройства RS485 на вашей шине RS485 с использованием другого MAX485 и небольшого Arduino (микро, нано и т. д.), которое реагирует на инструкции MODBUS RTU и управляет релейной платой.

,