Note di progetto su DALI Slave

Sul blog di Elettronica Open Source puoi leggere non solo tutti gli articoli Premium riservati agli abbonati Platinum 2.0 e inseriti nella rivista Firmware 2.0 (insieme ad articoli tecnici, progetti, approfondimenti sulle tecnologie emergenti, news, tutorial a puntate, e molto altro) ma anche gli articoli della Rubrica Firmware Reload. In questa Rubrica del blog abbiamo raccolto gli articoli tecnici della vecchia rivista cartacea Firmware, che contengono argomenti e temi evergreen per Professionisti, Makers, Hobbisti e Appassionati di elettronica. Ormai il DALI si sta affermando come protocollo per il controllo dei dispositivi di illuminazione, siano essi a ballast, di emergenza o a LED. La sua semplicità e flessibilità permettono ai costruttori di creare soluzioni immediate, robuste, intercambiabili e soprattutto economiche. In questo articolo si vuole gettare le basi per il design di un dispositivo DALI.

INTRODUZIONE

Il DALI (Digital Addressable Lighting Interface) è uno standard internazionale creato per il controllo dell’illuminazione, diventato oramai una delle interfacce di illuminazione più popolari. Il protocollo DALI è una interfaccia di comunicazione digitale con una struttura master-slave, con l’obiettivo di essere un meccanismo di controllo tra alimentatore e LED. Gli slave DALI comunicano verso il DALI master con un segnale half duplex ad un baud rate di 1200 bit/s. Viene definito Frame la sequenza di bit utilizzata per trasmettere i dati. Il “forward frame” va dal master verso lo slave, il “backward frame” dallo slave al master. Per maggiori dettagli sui bit e sui frame lo standard di riferimento è l’IEC62386-102. In Figura 1 viene schematizzato un sistema DALI slave basato su un dispositivo megaAVR di Atmel. Proprio il design come schematizzato in Figura 1 è l’obiettivo di questo articolo. Come riferimento utilizziamo del materiale messo a disposizione da ATMEL a tal fine.

Figura 1: Diagramma a blocchi del sistema DALI Slave.

Figura 1: Diagramma a blocchi del sistema DALI Slave

HARDWARE

L’obiettivo è interfacciare il bus DALI al microcontrollore, per far ciò è necessario aggiustare i livelli di tensione. In base al protocollo DALI, il livello alto va da 9,5V a 22,5V, mentre il livello basso va da -6,5V a 6,5V. Dobbiamo convertire questi livelli nei livelli accettati dal microcontrollore. Nel nostro esempio utilizziamo un Atmel ATmega88PA che accetta livelli da 0 a 5V. Lo schema a blocchi del circuito di conversione è visibile in Figura 2. Vengono utilizzati due fotoaccoppiatori per isolare i livelli tra il bus DALI e il microcontrollore.

Figura 2: Interfaccia Hardware per un DALI Slave.

Figura 2: Interfaccia Hardware per un DALI Slave

L’utilizzo del comparatore nel circuito di Figura 2 introduce dei vantaggi rispetto ad un design più semplice che sono:

  • Il circuito risulta adatto per lavorare in qualsiasi intervallo di temperatura
  • Si può regolare la forma d’onda d’ingresso del segnale per la MCU
  • Si assorbono eventuali tolleranze sulla componentistica

Come driver nel progetto utilizziamo l'MSL2041, che in base al segnale PWM che il microcontrollore gli fornisce si occupa del controllo dell’emissione dei LED. La corrente e la tensione per i LED vengono monitorate, le eventuali anomalie o errori sono segnalati al microcontrollore.

Figura 3: Driver LED DALI Slave.

Figura 3: Driver LED DALI Slave

FIRMWARE

Il firmware messo a disposizione da ATMEL è basato su una struttura a layer (Figura 4), che consente fra l’altro di essere portabile tra le diverse piattaforme ATMEL.

Figura 4: Struttura del firmware DALI Slave.

Figura 4: Struttura del firmware DALI Slave

Dal basso verso l’alto, la struttura include:

  • Drivers; i driver sono utilizzati per trasmettere i bit dati del protocollo DALI provenienti dai livelli superiori e necessitano di un timer. Timer 0 è pensato per la codifica/decodifica e per il frame time del DALI. PCINT viene utilizzato per la decodifica DALI, Timer1 viene utilizzato per il “fade timing” e per gli altri timer di sistema.
  • Service; nel livello di service vengono elaborate le sequenze temporali di frame e l’implementazione dei comandi DALI. Al fine di rendere il firmware portabile questo livello non deve dipendere dall’hardware.
  • Application; in questo livello si realizzano le funzioni previste per gli slave DALI.

Insieme al livello service, elabora anche il power-on, il detect dello stato dell’interfaccia, etc. Analizziamo un pò più in dettaglio i vari layer del firmware. Nello strato di “drivers” il focus è sui timer e sulla codifica/decodifica dei bit di DALI. La scelta nel firmware proposto da ATMEL per l’Atmega88PA è quella di utilizzare PCINT e i timer0/1 come componenti per il driver. Ovviamente, il codice può essere modificato per utilizzare componenti alternativi. PCINT ha il compito di individuare variazioni nello stato logico sul pin del segnale di ingresso una volta terminata l’inizializzazione. Una variazione genera il PCINT interrupt e fa partire un’ISR per la decodifica. Timer0 è configurato per essere la base dei tempi per la codifica/decodifica DALI. Deve essere sufficientemente veloce da misurare un flusso dati in ingresso a 1200 bit/s. Timer0 lavora in congiunzione con PCINT per decodificare il segnale DALI. Timer1 viene utilizzato principalmente come base dei tempi per la regolazione della potenza in uscita sui LED. Nel layer di “service” i task fondamentali sono due. Il primo task gestisce la macchina a stati basata sui frame (frame convert). Inizialmente lo slave si trova nello stato di “idle” e completa le sue inizializzazioni. Una volta terminate le inizializzazioni passa nello stato “forward frame” e attende la ricezione di un frame. Se viene ricevuto un frame viene elaborato e, a seconda delle condizioni, si può passare nello stato “next repeat frame”, in “backward frame” oppure in “idle”. In base a quanto stabilito dallo standard IEC62386-102 non c’è ritardo tra il passaggio degli stati. Lo standard prevede inoltre una doppia trasmissione dei comandi di configurazione, distanziati di 100ms, il tutto per ridurre la probabilità di una ricezione scorretta. Se il comando viene ricevuto entrambe le volte allora viene elaborato e poi si torna in “idle”, altrimenti si va in idle direttamente. Un backward frame deve essere spedito solo dopo la ricezione di un comando di interrogazione o un comando di scrittura in memoria. Inoltre, viene inviato solo in caso positivo, lo slave torna poi in idle con un certo ritardo. Il diagramma di stato è mostrato in Figura 5.

Figura 5: Macchina a stati “frame convert”.

Figura 5: Macchina a stati “frame convert”

Il secondo task è quello di elaborazione dei messaggi (Frame message process). Dopo la ricezione di un forward frame è necessario procedere con la decodifica dei due byte di indirizzo e di dato. Il tipo di indirizzo può essere “short address”, “group address” oppure “broadcast”. Indirizzo e dato compongono il codice comando, per ogni codice comando, la funzione corrispondente deve essere eseguita. Il diagramma di flusso del task è mostrato in Figura 6.

Figura 6: Diagramma di elaborazione Messaggi.

Figura 6: Diagramma di elaborazione Messaggi

Nel layer di “application” il sistema esegue un loop infinito. Si entra nel loop una volta terminate le operazioni di inizializzazione dei parametri e di configurazione dei blocchi del microprocessore. Il diagramma di funzionamento è mostrato in Figura 7.

Figura 7: Diagramma dell’applicazione DALI.

Figura 7: Diagramma dell’applicazione DALI

PWM E ILLUMINAZIONE

Lo standard DALI definisce una curva di regolazione della luminosità di tipo logaritmico tra il valore di potenza da ottenere e il livello di potenza impostato. La formula è visibile in Figura 8, le X rappresentano i valori di potenza e le n corrispondono ai livelli.

Figura 8: Relazione tra valore di potenza e livello di potenza.

Figura 8: Relazione tra valore di potenza e livello di potenza

Per i livelli l’intervallo può andare da 1 a 254, per i quali la potenza deve variare tra 0,1% e 100%. La curva che si ottiene è mostrata in Figura 9.

Figura 9: Curva di regolazione logaritmica

Figura 9: Curva di regolazione logaritmica

Nell’esempio del firmware messo a disposizione da ATMEL, la MCU utilizza un PWM a 12 bit per fornire l’uscita in potenza. Abbiamo quindi una regolazione del duty cycle tra 0 e 4095, che corrisponde ad una precisione dello 0,1% sul valore di potenza. Per memorizzare la corrispondenza tra PWM e livello di potenza si fa uso di una tabella di conversione memorizzata in EEPROM per ridurre l’utilizzo di memoria FLASH. Il timer utilizzato per il PWM a 12 bit è il Timer1. Lo standard DALI definisce anche i concetti di FADE TIME e FADE RATE. Il FADE TIME è il tempo impiegato dalla luce per passare dal livello corrente al livello desiderato. Il FADE RATE è la velocità di variazione della luce. Sono impostati 16 livelli per il valore X che definisce i corrispondenti valori di FADE TIME e FADE RATE, come in tabella di Figura 10. Nel firmware, viene sempre utilizzato il timer1 per applicare i valori di FADE TIME e FADE RATE, l’interrupt di overflow del timer viene utilizzato come base dei tempi per applicare le variazioni. Per i dettagli applicativi si rimanda a [4]. Il firmware può essere scaricato dal link [5].

Figura 10: “Fade Time” e “Fade Rate”.

Figura 10: “Fade Time” e “Fade Rate”

CONCLUSIONI

Il DALI è uno standard che lentamente si sta affermando fra i costruttori di componenti luminosi. Permette infatti di implementare complesse dinamiche di illuminazione in maniera facile e conveniente. Uno studio ha rilevato che già nel 2011, in Europa, il 55% dei dispositivi di regolazione per lampade fluorescenti utilizzavano il DALI.

Scarica subito una copia gratis

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend