Как заставить 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 и управляет релейной платой.
Я боялся этого. Но когда я думаю о «простом обслуживании», я на самом деле хочу избежать еще одного микроконтроллера с программным обеспечением. Лучшим решением будет просто замена стандартных компонентов. Что-нибудь можете придумать?, @Matthijs van Hest
Я ничего не знаю. Спросите у Google о контроллере реле, совместимом с MODBUS RTU. Будьте готовы заплатить много., @Majenko
Ммм, правда. Промышленный.. Всегда дорогой. А как насчет того, чтобы продолжать использовать i2c с буфером/усилителем? Я также читал некоторые посты, в которых говорилось, что они могут иметь до 20 метров с низкой скоростью и правильными резисторами и т. д.?, @Matthijs van Hest
Вы начинаете входить в хакерскую и ненадежную (и, вероятно, вообще не работающую) область. Если вы собираетесь что-то взломать вместе, по крайней мере, делайте это в рамках вашего существующего протокола. Просто используйте Arduino на удаленном конце, как я и предлагал. Это, безусловно, лучший недорогой вариант. Все, что взломано вместе, чтобы попытаться заставить два протокола работать по одному набору проводов, будет намного хуже в долгосрочной перспективе, если это вообще возможно., @Majenko
Я имел в виду, когда используется 6 проводов (собственная пара для i2c), но на большем расстоянии. Но да, наверное, правильно, тогда лучше использовать другой микроконтроллер на шине 485. Я могу полностью потерять i2c., @Matthijs van Hest
- Когда дело доходит до связи 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 в число с плавающей запятой
I2C требует два сигнала, привязанных к земле, а RS485 требует витую пару. Это совсем другое. К тому времени, как вы преобразуете сигнал, вы, возможно, обнаружите, что было бы проще просто выбросить периферийные устройства I2C и купить новые периферийные устройства RS485. I2C, SPI и другие подобные протоколы были предназначены для уменьшения количества контактов на периферийных микросхемах, обычно расположенных на одной печатной плате. Они не предназначены для передачи на большие расстояния. Вы можете обнаружить, что вам нужно снизить скорость на шине I2C. А для отладки проблем вам, скорее всего, придется использовать осциллограф., @st2000
добавьте небольшой Arduino в качестве преобразователя RS485 в I2C или подключите к нему реле, @Juraj
Осциллограф слишком дорог для меня. Насколько плохо не использовать витую пару для rs485 на длине 3 метра?, @Matthijs van Hest
А если я использовал витую пару, можно ли использовать линию 5v и gnd на витой паре? Или это создаст падение напряжения?, @Matthijs van Hest
Витая пара предназначена для работы на больших расстояниях. Поскольку это витая пара, любой шум, улавливаемый одним проводом, на дальнем конце компенсируется дополнительным шумом, улавливаемым другим проводом. Вот почему она используется. Причина, по которой она не всегда используется: потому что витая пара требует дополнительного оборудования для передачи и дополнительного оборудования для приема. Это увеличивает стоимость продукта. Вы не можете просто подключить цифровой сигнал 5 В и заземление к витой паре. Чтобы воспользоваться помехоустойчивостью, вам нужно подавать на витую пару равные, но противоположные напряжения. Как USB или Ethernet., @st2000
Отвечая на ваш предыдущий комментарий, RS485 должен использовать витую пару. Если вы этого не сделаете, то отдельные провода пары могут не улавливать одинаковое, а противоположное количество шума. Поэтому на конце (дальнем конце) может быть шум. Витую пару легко получить, и она есть везде благодаря телефонной компании и кабелю Ethernet. Оба типа кабелей обычно представляют собой витую пару. И вы всегда можете использовать свой собственный провод и скрутить их вместе самостоятельно., @st2000
Осциллограф был нужен для проверки того, насколько плох сигнал I2C после нескольких метров кабеля. Для того, чтобы попробовать разные согласующие резисторы. Для того, чтобы увидеть, что может мешать сигналу (регуляторы яркости света, двигатели, вентиляторы, реле...). А не для проверки сигнала RS485., @st2000
Мне нужно использовать один и тот же кабель для питания и для rs485. Так что, я думаю, это витая пара. Питание не может быть преобразовано в -5 В. Так в чем же тогда недостатки 5 В и 0 В на витой паре? И я не могу скручивать провода сам, так как это должен быть один кабель, содержащий провода. Я знаю, что вы имели в виду под осциллографом., @Matthijs van Hest