DMX-Dimmer a 6 canali con PSoC

Le caratteristiche fondamentali di un sistema costruito intorno ad un microcontrollore PSoC, che utilizza il protocollo DMX per la gestione remota della luminosità e della potenza fornita agli impianti di illuminazione.

Introduzione

Il  Dimmer è un regolatore elettronico utilizzato per limitare la potenza inviata ad un carico: esso può basarsi su un reostato per la regolazione della tensione oppure può variare il duty-cycle di alimentazione dell’utilizzatore mediante modulazione della larghezza di impulso. Esistono in commercio circuiti integrati progettati esclusivamente per svolgere tale compito; le funzioni loro affidate possono essere molto complesse,  basti pensare ai dispositivi che regolano l’intensità luminosa di interi apparati come quelli presenti nei teatri o nelle sale da concerto. In molte applicazioni tale controllo avviene a distanza, per cui è necessario affidarsi ad un protocollo di comunicazione che trasferisca i dati, relativi alla potenza e alla luminosità volute, ad un numero anche elevato di canali di utilizzo; in tal caso il dimmer   tradurrà il segnale in input, veicolato dal protocollo,  in un valore di tensione da applicare al carico. Nel paragrafo successivo si  vedranno  brevemente le caratteristiche del protocollo di comunicazione DMX (Digital Multiplex).

PROTOCOLLO DMX

Il protocollo DMX è stato stabilito nel 1986 dall’USITT (United States Institute for Theatre Technology) ed è diventato da allora l’interfaccia standard di comunicazione tra dispositivi destinati all’illuminazione. Esso si affida allo standard RS485, che definisce i valori di tensione e di corrente dei segnali che costituiscono il data-stream. Questo standard prevede che le “masse”  dell’apparato trasmittente e ricevente siano collegate al conduttore che fa da schermo nel cavo di trasmissione, in modo da diminuire l’influenza di rumore esterno e di migliorare la sicurezza elettrica; per evitare la formazione di anelli di massa e il conseguente flusso di corrente entro lo schermo, è necessario isolare elettricamente i ricevitori DMX (per esempio tramite foto-accoppiatori). La figura 1 riporta la struttura tipica del flusso dei segnali dello standard DMX512; i vari pacchetti iniziano con un  segnale di sincronismo della durata minima di 88 microsecondi (indicato con 1 nello schema), cui fa seguito uno Start byte; questo informa il dispositivo ricevente che inizia la trasmissione vera e propria  dei dati,  codificati  nei byte relativi ai vari canali; il numero di questi varia, in questa versione del protocollo, da un minimo di 24 fino a 512: ogni canale trasporta l’informazione relativa alla luminosità  voluta e per ciascuno di essi sono previsti 256 valori diversi, che si tradurranno in altrettanti livelli di potenza nell’utilizzatore associato.

Figura 1. Data-stream di un segnale DMX512

Figura 1: Data-stream di un segnale DMX512

Se si utilizza il massimo numero di canali a disposizione la frequenza di aggiornamento dei dati scende a 44 Hz (più che sufficiente nella gran parte delle applicazioni), altrimenti, con soli 24 canali, la frequenza è di 836 Hz (il bit-rate del DMX è di 250Kb al secondo). Un segnale con una durata maggiore di un secondo può porre il dispositivo controllato in sleep-mode. Un DMX Dimmer tipico prevede dunque una Cpu, in grado di interpretare il data-stream in input  (che codifica l’intensità luminosa relativa a tutti i canali di  utilizzo)  e  di  tradurlo  successivamente  in segnali adatti a pilotare il circuito di potenza; nel prossimo paragrafo si esamina l’anello finale della catena di controllo, ovvero un possibile circuito di alimentazione basato su TRIACs.

CIRCUITO DI POTENZA CON CONTROLLO DI FASE

Un circuito   di collegamento tra driver di potenza (TRIAC) e utilizzatore è mostrato nella figura 2.

Figura 2. Collegamento tra TRIAC e lampada

Figura 2. Collegamento tra TRIAC e lampada

La configurazione adottata permette di variare la luminosità della lampada controllando il ritardo temporale esistente tra il “zero-crossing”  della tensione di rete e l’istante in cui il Triac viene posto in conduzione: il controllo avviene tramite un segnale proveniente dalla Cpu. Esaminiamo infatti i diagrammi riportati in figura 3: quando un impulso di controllo (positivo o negativo) è inviato al gate del Triac, questo si pone in conduzione e la tensione AC alimenterà la lampada con una forma d’onda variabile in funzione dei vari ritardi applicati.

Figura 3. Tavola dei tempi del sistema a controllo di fase

Figura 3: Tavola dei tempi del sistema a controllo di fase

Il passaggio dallo stato di conduzione a quello di interdizione (spegnimento) avverrà automaticamente quando la sinusoide della tensione AC ripasserà nuovamente per lo zero (ciò avviene per le caratteristiche intrinseche dei Triacs). Il principio di funzionamento dovrebbe a questo punto risultare chiaro: quanto più i delays applicati sono brevi, maggiore sarà la potenza fonita alla lampada. L’occhio provvederà poi ad “integrare” le varie forme d’onda ricavate, “traducendole” in un particolare valore di luminosità; ogni data-byte del flusso DMX consisterà dunque in una codifica dei valori dei vari delays da applicare ai relativi canali. Va notato il fatto che il controllo di fase deve tener conto della frequenza della tensione AC. Se questa cambia andranno modificati opportunamente i valori dei ritardi per il corretto funzionamento del dispositivo. È dunque necessario effettuare un’operazione di calibrazione preventiva che fornisca una misura accurata della frequenza di rete: i dettagli di questa operazione saranno analizzati in seguito.

DMX DIMMER: PRINCIPIO DI FUNZIONAMENTO

Lo schema riportato nella figura 4 illustra i blocchi rappresentativi dell’intero sistema: il ricevitore posto sul bus DMX analizza i pacchetti in ingresso e, se questi sono accompagnati dall’indirizzo corretto, li trasferisce all’Unità di Controllo del Triac (il micro PSoC). Questo provvede poi a pilotare i sei canali (driver) secondo le modalità codificate nel pacchetto  elaborato.

Figura 4. Diagramma a blocchi del Dimmer

Figura 4: Diagramma a blocchi del Dimmer

Il  blocco  generatore  dei sincronismi crea un impulso di lockout ogni volta che la tensione di rete passa per lo zero: questo segnale attiva sei contatori  (opportunamente inizializzati) presenti all’interno della Cpu; ciascuno di essi si fermerà poi al raggiungimento di un valore opportuno, stabilito in modo da creare il ritardo voluto tra il zero-crossing della tensione di rete e l’impulso  di attivazione del Triac (vedi ancora la figura 3). In questo modo l’utilizzatore sarà alimentato  con  una  forma  d’onda  corrispondente  al grado di luminosità voluto. Va notato che l’alimentazione della lampada e del generatore di sincronismi deve essere la stessa per il corretto funzionamento del dispositivo. Lo schema di figura 5 rappresenta l’implementazione fisica dei blocchi concettuali esaminati in precedenza.

Figura 5. Schema elettrico del Dimmer

Figura 5: Schema elettrico del Dimmer

Il generatore di sincronismi è costruito intorno all’operazionale LM311, reazionato in modo da funzionare da comparatore. Le tensioni presenti in vari punti del circuito, riportate in figura 6,  aiutano  a comprenderne  il  funzionamento:  il “trucco” sta nel tenere il pin 3 (ingresso invertente dell’operazionale) ad una tensione bassa (1,3volts) e il più possibile costante (il partitore R3-R6, lo zener DV2 e il condensatore C1 sono utilizzati per questo  scopo),  mentre  sul  pin  2  (ingresso non invertente) è presente una tensione variabile in un intervallo tra 8,7 e 0 volts, con la forma di sinusoide rettificata.

Figura 6. Diagramma di flusso di inizializzazione del PSoC

Figura 6: Diagramma di flusso di inizializzazione del PSoC

Nel breve intervallo di tempo in cui questa tensione oscillante si porta sotto  il valore di riferimento di 1,3 volts (ovvero quando la tensione AC di rete passa per lo zero)  l’uscita del comparatore commuta e l’impulso di lockout viene generato da U2, un fotoaccoppiatore  che isola elettricamente lo stadio di alta tensione dal micro. L’integrato  U4, specializzato per la gestione di segnali RS485, provvede  a  trasferire  lo  stream DMX a due risorse integrate nel PSoC: l’RX8, un ricevitore seriale che gestisce   il flusso di dati in input,  e il Counter8, utilizzato per riconoscere il segnale di break   (inizio di un nuovo pacchetto). L’unità di controllo dei Triacs è fisicamente realizzata da 6 generatori PWMs  secondo questo principio:  il periodo  del segnale PWM deve essere pari al semiperiodo della sinusoide di alimentazione di rete (vedi la procedura di calibrazione descritta in seguito), mentre il duty-cycle è pari al valore del delay che si vuole imporre tra l’AC zero-crossing e l’istante di attivazione dei triacs. I selettori indicati nella figura 5 con S1, S2 ed S3, permettono di impostare l’indirizzo del dispositivo (a 9 bits) e di attivare o meno il bus-sleep-mode:  se quest’ultimo è attivo, una mancanza di segnale superiore al secondo sul bus DMX pone il dispositivo in stand-by e spegne tutti i triacs.

ANALISI DEL  FIRMWARE

I pacchetti vengono ricevuti ed elaborati in tempo reale dalla sezione ricevente (l’RX8) e da alcune risorse presenti all’interno dell’unità di controllo dei triacs (il counter8, i generatori WPMs e il comparatore CMP). Per questo motivo è molto importante che il firmware separi bene queste funzioni e non  faccia  intervenire conflitti tra di esse. Una possibile soluzione è quella di far lavorare il microcontrollore sotto interrupts: dopo la procedura di inizializzazione e di settaggio dei vari moduli hardware, il micro diventa inattivo sino a quando non interviene una specifica richiesta da parte di una tra cinque possibili sorgenti di interrupts: a questo punto viene processata la routine associata (scritta in Assembler per minimizzare i tempi di esecuzione  che  sono  dell’ordine dei microsecondi), e al termine la Cpu ritorna al ciclo IDLE in attesa di una nuova chiamata (i dettagli delle varie routines saranno analizzati in seguito). Nel prossimo paragrafo si vedrà la procedura di inizializzazione e di calibrazione.

Procedura di calibrazione

Come ricordato in precedenza, il controllo di fase presuppone la conoscenza accurata del periodo della sinusoide di alimentazione; le operazioni svolte dal Dimmer dipendono in modo essenziale dalla frequenza di rete, poiché, se si applicano gli stessi delays a dispositivi che funzionano a frequenze AC diverse, non si ottengono valori di luminosità uguali. Ecco perché la fase di inizializzazione del PSoC prevede, oltre al settaggio di variabili e dei moduli interni al micro, anche una procedura di calibrazione per la misura del periodo dell’onda AC. Vediamone in sintesi i punti salienti. All’accensione del Dimmer la procedura di calibrazione CalibrationFrequency() utilizza il contatore bCount (settato inizialmente a zero)  per misurare 16 interrupts provenienti dalla prima colonna dell’Analog Block-Array integrato nel PSoC. Tali interrupts provengono da un comparatore (CMP) utilizzato per segnalare 16 zero-crossing della sinusoide di alimentazione. Quest’intervallo di tempo viene misurato da un contatore, il Counter8 (lo stesso poi riutilizzato come rivelatore del segnale di break) (vedi figura 7).

Figura 7. Procedura di calibrazione

Figura 7: Procedura di calibrazione

Lo scopo di questa procedura è quella di trovare il valore corretto da attribuire ad un divisore di frequenza, il prescaler VC3, che controlla direttamente il  clock del segnale PWM: 256 impulsi di questo clock devono corrispondere esattamente ad un semiperiodo dell’alimentazione. In questo modo i delays da applicare per ottenere la luminosità desiderata (vedi nuovamente la figura 3) si possono rappresentare nel modo corretto tramite un certo numero (inferiore a 256) di impulsi del clock così calibrato. La figura 8 riporta le formule che traducono quanto detto.

Figura 8. Formule relative alla calibrazione

Figura 8: Formule relative alla calibrazione

Una volta terminata questa routine di calibrazione il flag wFrequency  viene settato a 1 e si possono caricare i divisori e le variabili con i valori corretti. Il  Counter8  modifica  la  sua funzione e viene utilizzato per segnalare l’inizio di ogni nuovo pacchetto.

DESCRIZIONE DELLE ROUTINES DI INTERRUPTUS

Il programma principale può essere realizzato in C in quanto non prevede tempi critici di esecuzione, mentre le varie routine di interrupt è bene siano scritte in assembler per rendere più veloci le relative operazioni. La funzione main() del firmware consiste di due blocchi concettuali distinti: il primo è la già citata routine di calibrazione, che va svolta all’accensione del dispositivo, l’altro riguarda l’abilitazione degli interrupts dalle varie sorgenti, l’inizializzazione del Counter8, del modulo CMP, dei generatori del segnale WPMs e il settaggio a zero delle variabili (bpower1…6) che definiscono la luminosità voluta. Dopo questa fase preliminare il micro si pone in attesa delle “chiamate”  da parte delle varie periferiche che possono gestire interrupts.

  • Interrupt del timer8: quando attraverso il ricevitore DMX transita un segnale di break (della durata di 44 microsecondi), viene attivata la routine di servizio del Timer8, il quale segnala l’arrivo di un nuovo pacchetto di dati e resetta il modulo RX8, destinato all’analisi del bit-stream.
  • GPIO interrupt (o input interrupt): provvede a resettare il timer8 in caso di overflow, il che avviene in  mancanza di un segnale di enable sulla linea DMX (mancata cattura o assenza di pacchetti).
  • SleepTimerInterrupt:  se  è attivo lo sleep-mode, l’assenza di segnali prolungata oltre il secondo pone il Dimmer in stand-by; in tal caso le variabili di luminosità (bpower1…bpower6) vengono azzerate, a patto che il bus DMX disponga della modalità switched ON (ovvero che il dispositivo possa riaccendersi con un segnale proveniente dal bus stesso) e il flag bSI (controllato dalla routine relativa all’interrupt dell’RX8) sia uguale a zero (bus DMX inattivo).
  • AnalogColumn1  interrupt: questa è una delle routine più complesse ed è attivata  dal  bus  relativo  al comparatore CMP; essa consiste di due parti: la prima è relativa alla procedura di calibrazione per la misura della frequenza di rete secondo i dettagli gia visti; l’altra provvede a fermare i generatori WPMs, a caricare le variabili di luminosità  nei registri del duty-cycle e a far nuovamente partire i generatori. Va notato che durante la procedura di calibrazione si esce e si rientra  nella  routine  di  interrupt per sedici volte, tante quante sono le richieste provenienti dal comparatore  che rivela il zero-crossing dell’AC (ad ogni nuova routine la variabile bCount viene incrementata di uno fino al valore sedici).
  • RX8   Interrupt:  la   routine viene attivata quando nuovi dati provengono dal bus DMX.

CONCLUSIONI

La struttura ottimale per un dimmer multicanale può essere implementata con un sistema di due microcontrollori della famiglia PSoC: il ricevitore del flusso di  dati  DMX  si  può  realizzare con un dispositivo a basso costo della famiglia CY8C21xxx, mentre per il generatore dei segnali  PWMs si può ricorrere a un micro della serie CY8C29xx o ad una soluzione software usandone uno ancora della famiglia CY8C21xxx.

 

 

Scrivi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *