Реле управления одновременно с Arduino и DAQ
Я хочу управлять реле с помощью Arduino и DAQ. Arduino используется как встроенное устройство для управления, в то время как DAQ подключается к компьютеру и выполняет управление через пользовательский интерфейс. Ниже приведена схема подключения цепи управления:
Два сигнальных контакта реле соединены с цифровыми контактами Arduino и DAQ. По некоторым причинам, когда в игру вступает Arduino, управление через DAQ не может быть достигнуто. Если к реле подключена только Arduino или DAQ, то проблем с управлением не возникает.
Мой план здесь состоит в том, чтобы позволить Arduino проинструктировать некоторые задачи. В некоторых особых случаях я хочу иметь управление с помощью DAQ. Кто-нибудь может отладить мою схему выше? Спасибо!
@jingweimo, 👍0
Обсуждение1 ответ
Я предполагаю, что вы управляете цифровым выводом Arduino напрямую с помощью digitalWrite()
для HIGH и LOW, и что DAQ делает то же самое (я не исследовал это).
В таком случае ваша схема опасна для устройств. Пока они оба выводят одинаково, все в порядке. Но возьмем случай, когда Arduino управляет своим выводом ВЫСОКИМ, а DAQ - НИЗКИМ. Это будет короткое замыкание в цепи возбуждения вывода обоих устройств, и, скорее всего, протекающий ток превысит максимальный номинальный ток вывода. Это может сжечь задействованное оборудование контактов или даже все устройства. Здесь вы получаете своего рода условие гонки: устройство, которое может обрабатывать больший ток стока/источника, будет победителем.
В общем, вы должны внедрить правила, как устройства должны работать вместе. Вам нужно, чтобы действия из DAQ выполнялись независимо от того, что делает Arduino? Или Ардуино должен быть хозяином здесь? Или что-то среднее? Непонятно, что вам здесь нужно.
Я дам вам 2 предложения о возможных способах:
Управлять реле можно было только с помощью Arduino. DAQ можно подключить к цифровому входу Arduino (чтобы он мог определять состояние выхода DAQ), а в коде Arduino вы можете реализовать всю логику, необходимую для управления реле по своему вкусу.
Вы можете определить неактивное состояние вашего релейного входа и установить его с помощью подтягивающего или подтягивающего резистора. Это гарантирует, что вход реле находится в определенном состоянии ожидания, пока ни одно устройство не переводит линию в противоположное состояние. Для этого вам нужно, чтобы выходы устройств имели высокое сопротивление (на Arduino это означает, что вывод настроен как вход; для сбора данных вам нужно знать это самостоятельно или исследовать его).
Допустим, состояние простоя будет ВЫСОКИМ. Мы бы подключили контакт реле с 5В через высокий резистор (это подтягивающий резистор) (может быть 10к, значение не критично). Оба устройства могут быть подключены напрямую. Если одному устройству необходимо изменить состояние на НИЗКИЙ, оно может перевести свой выходной контакт в активно низкий уровень, заставив контакт реле также перейти в НИЗКИЙ уровень. Если ему больше не нужно, чтобы состояние было НИЗКИМ, он должен перевести свой вывод в режим высокого импеданса. Подтягивающий резистор снова переведет состояние в ВЫСОКОЕ. Вы также можете добавить относительно низкие резисторы между устройствами для защиты от повреждений из-за случайного включения активного ВЫСОКОГО, в то время как другой НИЗКИЙ (их можно рассчитать по максимальному номинальному току для контактов; 20 мА для Arduino). Такую логику часто называют логикой открытого стока.
Если DAQ не может подключить свои выводы к высокому импедансу, вы можете настроить эту схему самостоятельно с помощью одного полевого МОП-транзистора:
Если вы используете эту схему на обоих устройствах, вам больше не нужны маленькие резисторы.
Вторая возможность уже реализует определенную логику. Вам нужно решить, подходит ли вам эта логика. Вы можете инвертировать его логику (состояние ожидания LOW). Лично я бы выбрал первый вариант, потому что он проще и гибче.
сигнальный контакт - это только логика TTL. почти нет тока., @Juraj
Вы имеете в виду контакт модуля реле? Тогда да, это так. Но когда вы напрямую подключаете 2 выходных контакта устройств к одному и тому же выводу релейного модуля, вы можете получить сильный перекрестный ток (от одного устройства к другому, а не через контакт реле). Это проблема, которую я описал. Что-то не так с этим?, @chrisl
извини. нет проблем, вы правы., @Juraj
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату
Линии управления активны по низкому или активному по высокому уровню? Другими словами, из Arduino вы делаете
digitalWrite(portnum, HIGH)
илиLOW
? Вы можете решить эту проблему с помощью пары диодов., @Jim Mack