Как заставить 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 для управления инвертором и релейной платой. Таким образом, никаких дополнительных проводов не требуется. Но теоретически я не могу заставить это работать. Поэтому прежде чем я попытаюсь это изобрести.
Можно ли как-то реализовать связь I2C через RS485, поставив еще один преобразователь?
Если вы рекомендуете использовать только 6 проводов (питание, RS485 и I2C), насколько надежной будет моя линия I2C на 3 метрах? Какие значения подтяжки вы рекомендуете? (Имеется в виду провод 24AWG, но также использование близко расположенного светодиодного сегментного дисплея, поэтому 2 устройства I2C на разных расстояниях). Я читал посты, в которых говорилось:
Как правило, для обычной шины I2C с частотой от 100 кГц до 400 кГц длина составляет максимум 50 см.
Или я могу использовать какой-то другой протокол/трюк? Либо минимизировать провода, либо усилить сигнал буфером I2C? (рекомендации?)
1 ответ
Лучший ответ:
I2C и RS485 — это настолько разные протоколы с такими разными потребностями в передаче сигналов, что они не могут использовать одни и те же кабели.
Кроме того, I2C не предназначен для подключения с помощью длинных кабелей — он предназначен для использования между микросхемами на печатной плате.
Самым простым решением «Arduino» было бы создание нового устройства RS485 на вашей шине RS485 с использованием другого MAX485 и небольшого Arduino (микро, нано и т. д.), которое реагирует на инструкции MODBUS RTU и управляет релейной платой.
- Когда дело доходит до связи UART-RS485, в чем разница между модулем "MAX485" и модулем "HW-0519"?
- Управление VFD с помощью ModBus RTU через RS485 и Arduino
- Проблема со связью по Modbus между двумя Arduino при записи более 27 регистров.
- Основная связь Arduino ModBus RTU с проблемой измерителя мощности
- Мониторинг контроллера Modbus RTU с помощью Arduino и модуля RS485
- Последовательная связь между несколькими устройствами (или ардуино)
- Связь Arduino Uno и ESP32 с использованием RS485
- Преобразование десятичных данных rtu Modbus в число с плавающей запятой