Управление dali ардуино

Управление светильниками по протоколу DALI с помощью Arduino

О протоколе DALI

DALI (Digital Addressable Lighting Interface) – протокол, предназначенный для управления осветительными приборами. Протокол был разработан австрийской компанией Tridonic и основан на манчестерском кодировании: каждый бит данных кодируется перепадом от низкого сигнала к высокому или наоборот.

DALI сеть состоит из контроллера и подключенных к нему осветительных приборов. Передача данных идет на скорости 1200бит/с. Напряжение для логической единицы составляет 16±6,5В, а для логического нуля 0±4,5В. Шина DALI всегда находится под напряжением 16В, в противном случае все осветительные приборы, подключенные к шине, переходят в аварийный режим и включаются. Питание шины обеспечивает контроллер. К одной шине подключается до 64 светильников. Устройства можно объединять в 16 групп и задавать до 16 сцен освещения. Яркость каждого осветительного прибора регулируется от 0 до 254.

Сообщение от контроллера к осветительному прибору состоит из 16 бит и одного стартового бита. Сообщение может быть адресовано отдельному светильнику, группе светильников либо быть широковещательным. Некоторые команды должны передаваться дважды с интервалом не более 100мс. На определенные команды, например запрос текущей яркости или запрос типа устройства, осветительный прибор отправляет ответное сообщение.

Сообщение от осветительного прибора контроллеру состоит из 8 бит и одного стартового бита.

Список команд можно посмотреть здесь.

Инициализация новых светильников

До начала работы каждому светильнику должен быть присвоен адрес от 1 до 63 (short address). У новых светильников короткий адрес как правило не задан, поэтому управлять конкретным светильником не получится. Такие светильники реагируют только на широковещательные команды.

Для того чтобы назначить короткий адрес светильнику нужно его инициализировать. У каждого светильника есть случайный адрес, состоящий из 24 бит (3 раза по 8 бит). 24 битный адрес может принимать значения от 1 до 16777216. Вероятность подключения светильников с одинаковыми адресами минимален и составляет один случай из 1 из 266144.

Процесс инициализации заключается в следующем:

  • от контроллера дважды передается широковещательная команда INITIALISE (0b1010010100000000) с интервалом не более 100мс, которая переводит все светильники в режим инициализации;
  • от контроллера дважды передается широковещательная команда RANDOMISE (0b1010011100000000) с интервалом не более 100мс, после которой все светильники присваивают себе новый случайный адрес;
  • от контроллера передается значение случайного адреса (24бит) тремя сообщениями по 8 бит (0b10110001HHHHHHHH, 0b10110011MMMMMMMM, 0b10110101LLLLLLLL);
  • от контроллера передается широковещательная команда COMPARE (0b1010100100000000);
  • если контроллер фиксирует ответное сообщение, значит есть светильники с меньшими адресами; таким образом запрашиваемый адрес снижается до тех пор, пока светильники перестанут отвечать;
  • если ответ от светильника не был получен, адрес увеличивается на одну единицу и таким образом определяется светильник с наименьшим случайным адресом;
  • после определения адреса светильника контроллер задает светильнику короткий адрес (0b10110111AAAAAAAA) и посылает команду WITHRAW (0b1010101100000000), которая исключает светильник из процесса поиска;
  • далее контроллер переходит к поиску следующего светильника с большим случайным адресом;
  • после завершения процесса инициализации контроллер посылает команду TERMINATE (0b1010000100000000), и светильники выходят из режима инициализации.

Источник

Simple DALI Controller © GPL3+

Simple device to control and initialize DALI lamps.

Arduino Nano R3
× 1
Erco Grasshopper
× 1
AC/DC converter (230V/12V 40W)
× 1
NPN transistor Toshiba 2SC5171
× 1
LED (generic)
× 1

I’m an electrical engineer and after installation works extra DALI RGB luminaries remained. I didn’t have DALI controller, so I decided to use Arduino Nano. First of all, I read DALI protocol documents and decided to create library to work with DALI devices. You can find DALI library in the Internet, but you need to buy special DALI master .

In this project I’m using simple components (see diagram in the attachment):

  • ARDUINO Nano
  • AC/DC converter
  • LED luminaire ERCO Grasshopper with TRIDONIC driver
  • NPN transistor 2SC5271
  • Resistors
  • LEDs for indication

DALI stands for Digital Addressable Lighting Interface. DALI is a worldwide standard, specified by the International Electrotechnical Commission (IEC). A DALI network consists of a controller and one or more luminaires that have DALI interfaces. The controller (DALI master) can monitor and control each luminaire by means of a bi-directional data exchange. The communication is via a two-wire, low-voltage bus running at a low speed (1200 bits per second). Signal levels are defined as 0±4.5 V for logical ‘0’ and 16±6.5 V for logical ‘1’. Bus quiescent state is logical ‘1’. Manchester coding is used with 16-bit (plus start and stop) forward frames and 8-bit return frames. In Manchester coding, the bit state is defined by a transition at the center of the bit window: positive going transition = ‘1’, negative going transition = ‘0’. The DALI protocol permits luminaires to be individually addressed. It also incorporates Group and Scene broadcast messages to simultaneously address multiple luminaires. A single DALI network can control up to 64 luminaires.

Every bit takes two periods. The defined bit rate of DALI is 1200 bps. So, 1 bit period is

834 µsec. A frame is started by a start bit, and ends with two high-level stop bits (no change of phase). Data is transmitted with the MSB first. Between frames, the bus is in idle (high) state.

The settling time between two subsequent forward frames shall be at least 9.17 ms. This means that 4 forward frames with accompanying periods of 9.17 ms shall fit exactly in 100 ms.

The settling time between forward and backward frames (transition from forward to backward) shall be between 2.92 and 9.17 ms. After sending the forward frame, the master unit will wait for 9.17 ms. If no backward frame has been started after 9.17 ms, this is interpreted as “no answer” from the slave unit.

The settling time between backward and forward frames (transition from backward to forward) shall be at least 9.17 ms.

A new luminaire does not have a short address and so cannot respond to individual addressing. Since it was a new luminaire, it had to be initialized.

The DALI search process begins by assigning a 24-bit random address to up to 64 luminaires. The process is administered by DALI commands transmitted from the DALI master. This sets the luminaires to a state which permits 24-bit address searching and short address assignment. This state is limited by a 30-minute timer.

After randomizing the ballasts, the controller searches for the ballast with the lowest random number. It does this by issuing search address commands which contain the address that it is looking for, and compare commands which are queries, which get replies from all the ballasts that have that search address or lower as their random address.

Once the controller gets no replies, it backtracks one step to check the one ballast with that random address; then it assigns it a short address using a special program command which only takes effect in the ballast whose random address equals the search address (this is technically called the «selected» state). Then the controller tells that ballast to withdraw from the process so it doesn’t respond to further compares this time round, and the search can continue for the next highest ballast.

Источник

Управление светильниками по протоколу DALI с помощью Arduino

О протоколе DALI

DALI (Digital Addressable Lighting Interface) – протокол, предназначенный для управления осветительными приборами. Протокол был разработан австрийской компанией Tridonic и основан на манчестерском кодировании: каждый бит данных кодируется перепадом от низкого сигнала к высокому или наоборот.

DALI сеть состоит из контроллера и подключенных к нему осветительных приборов. Передача данных идет на скорости 1200бит/с. Напряжение для логической единицы составляет 16±6,5В, а для логического нуля 0±4,5В. Шина DALI всегда находится под напряжением 16В, в противном случае все осветительные приборы, подключенные к шине, переходят в аварийный режим и включаются. Питание шины обеспечивает контроллер. К одной шине подключается до 64 светильников. Устройства можно объединять в 16 групп и задавать до 16 сцен освещения. Яркость каждого осветительного прибора регулируется от 0 до 254.

Сообщение от контроллера к осветительному прибору состоит из 16 бит и одного стартового бита. Сообщение может быть адресовано отдельному светильнику, группе светильников либо быть широковещательным. Некоторые команды должны передаваться дважды с интервалом не более 100мс. На определенные команды, например запрос текущей яркости или запрос типа устройства, осветительный прибор отправляет ответное сообщение.

Сообщение от осветительного прибора контроллеру состоит из 8 бит и одного стартового бита.

Список команд можно посмотреть здесь.

Инициализация новых светильников

До начала работы каждому светильнику должен быть присвоен адрес от 1 до 63 (short address). У новых светильников короткий адрес как правило не задан, поэтому управлять конкретным светильником не получится. Такие светильники реагируют только на широковещательные команды.

Для того чтобы назначить короткий адрес светильнику нужно его инициализировать. У каждого светильника есть случайный адрес, состоящий из 24 бит (3 раза по 8 бит). 24 битный адрес может принимать значения от 1 до 16777216. Вероятность подключения светильников с одинаковыми адресами минимален и составляет один случай из 1 из 266144.

Процесс инициализации заключается в следующем:

  • от контроллера дважды передается широковещательная команда INITIALISE (0b1010010100000000) с интервалом не более 100мс, которая переводит все светильники в режим инициализации;
  • от контроллера дважды передается широковещательная команда RANDOMISE (0b1010011100000000) с интервалом не более 100мс, после которой все светильники присваивают себе новый случайный адрес;
  • от контроллера передается значение случайного адреса (24бит) тремя сообщениями по 8 бит (0b10110001HHHHHHHH, 0b10110011MMMMMMMM, 0b10110101LLLLLLLL);
  • от контроллера передается широковещательная команда COMPARE (0b1010100100000000);
  • если контроллер фиксирует ответное сообщение, значит есть светильники с меньшими адресами; таким образом запрашиваемый адрес снижается до тех пор, пока светильники перестанут отвечать;
  • если ответ от светильника не был получен, адрес увеличивается на одну единицу и таким образом определяется светильник с наименьшим случайным адресом;
  • после определения адреса светильника контроллер задает светильнику короткий адрес (0b10110111AAAAAAAA) и посылает команду WITHRAW (0b1010101100000000), которая исключает светильник из процесса поиска;
  • далее контроллер переходит к поиску следующего светильника с большим случайным адресом;
  • после завершения процесса инициализации контроллер посылает команду TERMINATE (0b1010000100000000), и светильники выходят из режима инициализации.


Источник

Интерфейс DALI и Arduino. Реальный сюрреализм

Всем привет. Нашему отделу была поставлена задача провести презентацию цифрового интерфейса DALI. Причем презентацию с демонстрацией работы этого интерфейса. Если надо — значит, надо. Чего мы только не делали. Для этой цели были предоставлены два модуля управления светодиодными светильниками. Оба оказались ведомыми. А мастер? Начали выбирать контроллер для управления этим интерфейсом. В итоге или цена какая-то заоблачная или сроки поставки такие же. А приближается отпуск, и откладывать уже не хочется. Ещё раз просмотрели характеристики и обратили внимание на особенности данного цифрового протокола:

  • DALI является открытым протоколом;
  • DALI- децентрализованная шина, то есть не имеет центрального контроллера и допускает любую топологию.

Всё это показалось очень привлекательным и задача показалась совершенно не сложной. На первый взгляд. Решили сделать мастера DALI на Arduino.

Большое спасибо Тимуру Набиеву за его публикацию на Хабре. Пожалуйста, почитайте. Я не буду повторяться, теорию он прописал неплохо. Схема интерфейса – проще не бывает. Но вот с опубликованной им библиотекой у нас что-то не очень всё получилось.

Поэтому решили сделать свои скетчи. Сделали два. Первый для назначения коротких адресов всем “участникам” сети.

А это тестовый. Управляем двумя модулями подключенными к DALI.

Или скачать
Была проведена очень большая работа и поэтому хочется поделится со всеми. Может это кому-то облегчит разработку.

В сети не найдено ни одной полноценной библиотеки. Пожалуйста, пользуйтесь, все реально работает. Задавайте вопросы, я со своими коллегами постараемся ответить на все. Может не сразу, мы ведь действительно уходим в отпуск на две недели.

В ролике отчет о проведённой работе.

Тестировали модули DAP-04 и LCM-60DA от Mean Well. Но работать будет с любыми другими.

А это схема обвески Arduino переводящая её в режим мастера DALI и блока питания одновременно.

Это подключение кнопок для тестового скетча.

Источник