DMX на Arduino без дополнительной микросхемы драйвера
Недавно я видел это видео, где создатель управлял светом DMX через Arduino. Там он использовал контакты 3 и 4 для данных на Arduino Duemilanove. В качестве библиотеки DMX он использовал DmxSimple.
Исходя из моих исследований, DMX — это RS-485, и для этого требуется микросхема драйвера.
Итак, у меня есть три вопроса по этому поводу:
Почему во всех источниках, которые я нашел, говорится, что требуется чип драйвера, хотя кажется, что он работает без него?
У меня есть устройство, совместимое с Arduino Leonardo (Devduino). Можно ли на этой платформе управлять DMX, как указано выше?
@Noir, 👍2
3 ответа
Физический уровень интерфейса DMX основан на дифференциальной передаче сигналов по ссылка на RS485. Это именно то, что сказано здесь, на странице DMX Arduino.cc.
Дифференциальный сигнал (например, RS485 или USB) может передаваться на большие расстояния, чем сигналы, которые относятся к земле (например, RS232, I2C или SPI). Это связано с тем, что шум, который влияет на обе стороны дифференциального сигнала, может быть подавлен на дальнем конце, когда один из сигналов инвертируется, а затем добавляется к другому дифференциальным приемником.
Не рекомендуется подключать одну сторону дифференциального приемника к земле, а на другую сторону подавать напряжение логического уровня. Даже если это сработало и не причинило вреда ни передающему процессору, ни дифференциальному приемнику, сигнал, скорее всего, будет подвержен нежелательному шуму.
RS485 — это повсеместно распространенный стандарт, и, вероятно, для Arduino существует несколько легкодоступных конструкций.
На самом деле это возможно. Дифференциальный сигнал может формироваться с помощью стандартного Arduino, хотя здесь все еще необходимо учитывать логический уровень 5 В. Я предполагаю, что его лампа могла выдавать сигнал качания 5 В (всего 10 В), но это не гарантия, особенно если стандарт обычно этого не поддерживает. В таком случае вы уверены, что производитель сделал устройство достаточно прочным/усиленным, чтобы более высокие напряжения не вызывали повреждений.
Из связанного видео видно, что сигнальные провода оба подключены к контактам GPIO платы Arduino. Если один потянуть ВЫСОКИЙ (5 В), а другой НИЗКИЙ (Земля), вы производите сигнал. Другой дифференциальный сигнал обеспечивается заменой контактов LOW и HIGH.
EDIT: это Duemilanove, а НЕ Uno, поэтому результаты могут отличаться. (Тем не менее, одна из новых плат 3 на 3, вероятно, будет безопаснее, если вы тестируете это). Кроме того, если провода достаточно длинные, может быть даже некоторое падение напряжения, что делает его безопасным (э-э).
Конечный результат затем использует бит-бэнкинг для эмуляции приемопередатчика с помощью этого дифференциального передатчика, сфальсифицированного присяжными.
RS485 или RS422 и, следовательно, DMX используют дифференциальные драйверы на 5 вольт. Это означает, что обе линии имеют номинальное напряжение от 0 до 5 В с (обычно, в зависимости от используемого кабеля) резистором 120 Ом в качестве терминатора на обоих концах. Сигнал 3,3 В может работать, но едва ли.
возможно, отправка сигнала по одной линии и просто 0 В по другой могла бы сработать, но я никогда не пробовал и даже не слышал об этом.
Я предполагаю, что в этом случае они используют последовательный порт с битовым взрывом, модифицированный для управления другим контактом, но инвертированный. Возможно, что-то можно было бы сделать со стандартным последовательным портом на одном контакте, настроив прерывание на уровне изменения этого контакта и используя ISR для проверки уровня на последовательном контакте, инвертировав его и установив другой контакт. Я думаю, что это, вероятно, приведет к слишком большой задержке между двумя контактами, но, возможно, нет. Строго говоря, задержка между изменением двух контактов, если она была битовой, вероятно, не соответствует спецификации для RS422/485, но все равно может работать, если скорость передачи не выше.
Если вы собираетесь использовать DMX, потратьте 0,30 доллара и купите чип драйвера или немного больше и получите экран DMX. Я видел, как DMX испортился намного меньше, чем дифференциальная линия, которая немного рассинхронизировалась.
- Ненадежная связь с низким уровнем битрейта на Леонардо
- Как использовать SPI на Arduino?
- Основная связь Arduino ModBus RTU с проблемой измерителя мощности
- Нажать клавишу Windows, используя «keyboard.press();»
- Мониторинг контроллера Modbus RTU с помощью Arduino и модуля RS485
- Как подключить вывод INT MPU 6050?
- Улучшенное циклическое переключение цветов RGB.
- Проблема с загрузкой моего скетча на Ардуино