Dali

DALI, Digital Appliance Lighting Interface, is a standard wired communications protocol used for Home & Building lighting applications. The interface was originally specified to support connectivity for fluorescent light ballasts, but has also been designed to support other lighting technologies.

Prove di trasmissione in bit banging con Raspberry

import RPi.GPIO as GPIO
import time

BIT_DELAY=0.00034

def send_start(gpio_tx_line):
    global BIT_DELAY
    GPIO.output(GPIO_TX_LINE,GPIO.LOW)
    time.sleep(BIT_DELAY)
    GPIO.output(GPIO_TX_LINE,GPIO.HIGH)
    time.sleep(BIT_DELAY)


def send_1(gpio_tx_line):
    global BIT_DELAY
    GPIO.output(GPIO_TX_LINE,GPIO.LOW)
    time.sleep(BIT_DELAY)
    GPIO.output(GPIO_TX_LINE,GPIO.HIGH)
    time.sleep(BIT_DELAY)

def send_0(gpio_tx_line):
    global BIT_DELAY
    GPIO.output(GPIO_TX_LINE,GPIO.HIGH)
    time.sleep(BIT_DELAY)
    GPIO.output(GPIO_TX_LINE,GPIO.LOW)
    time.sleep(BIT_DELAY)

def send_stop(gpio_tx_line):
    global BIT_DELAY
    GPIO.output(GPIO_TX_LINE,GPIO.HIGH)
    time.sleep(BIT_DELAY)
    GPIO.output(GPIO_TX_LINE,GPIO.HIGH)
    time.sleep(BIT_DELAY)

#GPIO used
GPIO_TX_LINE=4

GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(GPIO_TX_LINE,GPIO.OUT)

# Initial state
GPIO.output(GPIO_TX_LINE,GPIO.LOW)

#Start bit 
send_start(GPIO_TX_LINE)

#Address bit 0x02
send_0(GPIO_TX_LINE)
send_0(GPIO_TX_LINE)
send_0(GPIO_TX_LINE)
send_0(GPIO_TX_LINE)
send_0(GPIO_TX_LINE)
send_0(GPIO_TX_LINE)
send_1(GPIO_TX_LINE)
send_0(GPIO_TX_LINE)

#Data bit 0x00
send_0(GPIO_TX_LINE)
send_0(GPIO_TX_LINE)
send_0(GPIO_TX_LINE)
send_0(GPIO_TX_LINE)
send_0(GPIO_TX_LINE)
send_0(GPIO_TX_LINE)
send_0(GPIO_TX_LINE)
send_1(GPIO_TX_LINE)

#2 stop bits
send_stop(GPIO_TX_LINE)
send_stop(GPIO_TX_LINE)

#Final state
GPIO.output(GPIO_TX_LINE,GPIO.LOW)

Linee usate:

Bus e protocollo

The physical interface consists of 2 wires, DALI Power and DALI Data. The DALI system consists of one DALI Control module with up to 63 DALI devices.

  • DALI Power line provides the power only for the communication protocol of a maximum 22.5V and limits the current for the system to 250mA.
  • The DALI Data line provides the half duplex communication at a data rate of 1200 bits/second using a bi-phase (Manchester) decoding.

Bi-phase decoding is accomplished with the following:

  • a logical zero consist of sending a physical low signal for 416 µs immediately followed with a physical high signal for 416 µs.
  • a logical one consists of sending firstly a physical high signal for 416 µs followed by a physical low signal.

A physical high signal on the DALI Data line is a voltage level between +9.5V and +22.5V. A physical low signal on the DALI Data line is a voltage level between -6.5V and +6.5V.

The DALI digital layer consists of 2 frames, a forward frame and a backward frame.

  • A forward frame is a frame sent from a DALI controller to a DALI ballast. It is constructed by a START bit (always logical 1), followed by 1byte Address,1byte Command and two STOP bits (a high level with no transitions).
  • A DALI ballast communicates back to the DALI control using only a 1byte backward frame consisting of a START bit,1byte,2 STOP bits.

The DALI protocol allows a master controller options to address all ballasts by either broadcast to all, Groups of ballasts, and individual addressing.

The most commonly used direct commands allow the controller to modify lighting brightness, scene settings for groups, fading capability and varying rates. Also including are Query command that request the ballast to send a backward frame with configuration data such as, power levels, scene levels, current address.

Using “extended” Configuration command the DALI controls can modify addresses of each ballast thus eliminating manual configuration of the DALI system.

The “extended” configuration command will follow immediately after a DALI controller sends an INITIALIZE ($A5) command, which informs all other DALI devices on the bus to ignore further commands until a TERMINATE command is observed or 30 s elapses in time.

Hardware

Questo è un tipo di alimentatore per il bus DALI usato in una delle schede di sviluppo citate nei link.

Con questo circuito però la tensione sul bus è troppo dipendente dal carico. Come si vede nel grafico Vout comincia a scendere già prima di metà della tensione massima. La specifica DALI dice che ogni dispositivo non deve prelevare più di 2mA dal bus ma, studiando alcuni circuiti esistenti, è chiaro che molti superano queste specifiche. Inoltre, per sua natura, molti dei dispositivi consumano questa corrente costantemente. Questo tipo di alimentatore sarebbe quindi molto limitato nel numero di dispositivi collegabili.

Usando un alimentatore integrato si riescono ad ottenere risultati molto migliori, con una regolazione della Imax molto più precisa e, soprattutto, con un ginocchio di intervento della protezione molto più netto. La tensione si mantiene molto stabile fino al limite del corto circuito.

Il sistema DALI è pensato per essere molto semplice, quindi è molto tollerante sia sull'alimentazione che sui segnali. Queste sono le specifiche:

Si è cercato di ottenere un segnale che fosse ampiamente entro le specifiche per essere in grado di tollerare anche un eventuale degrado in caso di connessioni non perfettamente a regola o carichi particolarmente reattivi.

Il banco di test è stato realizzato con un generatore di onda quadra con un duty cycle del 50% che inietta un segnale di 3.3V di ampiezza nell'ingresso TX. La misura avviene sull'uscita RX. Nel DALI TX e RX sono in loopback per definizione, essendo RX e TX in parallelo sugli stessi fili. I parametri del circuito sono stati determinati sperimentalmente per avere in uscita un segnale il più possibile simile a quello in entrata.

Come si vede nel grafico il segnale è a specifica anche ad una frequenza del doppio di quella di lavoro.

All'estremo, portando il segnale a circa 10 volte la frequenza di lavoro, il segnale è ancora accettabile.

Guido Ottaviani (Autore/Progettista elettronico-firmware-robotica)
Si occupa della progettazione elettronica e del firmware di sistemi embedded per la Robotica e applicazioni industriali e civili oltre che di divulgazione tecnica su internet.
http://www.guiott.com - https://github.com/guiott - guido@guiott.com
Sergio Tanzilli (Autore - Progettista hw & sw - Imprenditore - Musicista dilettante, classe 1964)
Fondatore di Area SX srl, Acme Systems srl e del TanzoLab, si occupa dal 1974 di elettronica digitale, dal 1978 di microprocessori, dal 1992 di microcontroller, dal 1995 di Linux e pubblicazioni su Web, dal 2005 di progettazione, produzione e commercializzazione di schede Linux Embedded.
http://www.tanzilli.com - http://www.acmesystems.it - https://github.com/tanzilli - sergio@tanzilli.com

The TanzoLab Project

Il TanzoLab è una iniziativa senza fini di lucro, nata da un'idea di Sergio Tanzilli socio fondatore di Acme Systems srl nel Novembre 2015, per trasferire ad appassionati di elettronica e informatica, professionisti e aziende nel settore, le conoscenze necessarie per poter creare prodotti embedded adatti per la produzione industriale.

Le attività del TanzoLab si svolgono ogni mercoledi sera, salvo casi speciali, dalle ore 18:30 presso i locali della Acme Systems srl e consistono in:

  • Talk monotematici a cura di professionisti in vari settori tecnologici
  • Workshop pratici su elettronica embedded, produzione e informatica
  • Progettazione e realizzazione di nuovi prodotti embedded per l'IT

Le attività vengono coordinate tramite questo sito, in cui vengono pubblicati tutti i lavori svolti o in via di sviluppo, e tramite un gruppo Telegram con cui per interagire direttamente via chat con gli altri membri.