LED DMX Controller

by Dennis Gunia
LED DMX Controller

Guten Morgen!
In diesem Betrag (bzw. Beitragsserie) wird es um meine selbstgebauten LED DMX Controller gehen.

Was ist DMX ?

DMX […] ist ein digitales Steuerprotokoll, das in der Bühnen- und Veranstaltungstechnik zur Steuerung von Dimmern, „intelligenten“ Scheinwerfern, Moving Heads und Effektgeräten angewandt wird. Die Abkürzung DMX steht für Digital Multiplex. (1)

DMX basiert auf RS-485, verwendet wird ein symmetrisches Übertragungsverfahren, die differenziellen Pegel liegen zwischen ±1,5 V und ±5 V. […] Durch die symmetrische Übertragung besitzt DMX eine hohe Störsicherheit, da sich externe Störungen auf beide Datenleitungen gleichmäßig auswirken und am Empfänger nicht das Pegelniveau, sondern die Pegeldifferenz ausgewertet wird. (1)

Übertragungsprotokoll

Die Daten werden asynchron seriell übertragen. Die Pegelwerte für die einzelnen Dimmer werden sequentiell übertragen, beginnend bei Dimmer 1 aufsteigend bis max. Dimmer 512. Vor dem ersten übertragenen Wert wird ein RESET-Signal, gefolgt von einem Startbyte, übertragen. Gültige Dimmerpegel umfassen den Wertebereich 0...255 (00h...FFh). Der Bezug dieser Werte zum aktuellen Dimmer-Ausgangssignal wird nicht definiert und ist Sache des betreffenden Dimmers (kann z.B. durch eine besondere Dimmerkennlinie festgelegt werden).

Im Ruhezustand liegt die Datenleitung auf hohem Potential (MARK). Der aktive Pegel ist Low (BREAK, SPACE); die Begriffe MARK, SPACE und BREAK entstammen der Terminologie serieller Schnittstellen. Die Übertragung beginnt mit einem BREAK, der mindestens 88 us Dauer aufweisen soll (2 Framezeiten). Dieser Break wird als RESET-Signal interpretiert. Alle angeschlossenen Geräte (Empfänger) müssen auf einen RESET reagieren; ein RESET beendet in jedem Falle eine laufende -auch eine nicht abgeschlossene- Übertragung.

Der RESET wird von einem MARK gefolgt, der den Beginn der Datenübertragung signalisiert. Dieser MARK soll eine feste Länge von 8 us nicht unterschreiten. Alle Empfänger müssen in der Lage sein, einen 8 us MARK-nach-BREAK zu erkennen und auszuwerten. Empfänger, die darüberhinaus auch in der Lage sind, einen 4 us MARK-nach-BREAK (gemäß DMX-512 Standard von 1986) erkennen und auswerten zu können, dürfen mit der Bezeichnung "DMX-512/1990 (4us" bzw. "DMX-512/DIN (4us"gekennzeichnet werden.

Im Anschluß hieran werden n+1 Datenbytes gesendet, die die Daten für n Kanäle enthalten. Jedes Byte wird von einem Startbit (SPACE) eingeleitet und mit zwei Stopbits (MARK) beendet; das Übertragungsformat ist also 8N2. Man beachte jedoch, daß eine zu sendende 0 als BREAK, eine zu sendende 1 als MARK gesendet wird. Das erste gesendete Byte wird als Startbyte bezeichnet und hat den festen Wert Null (00h). Um zukünftigen Erweiterungen Rechnung tragen zu können, sind auch von Null verschiedene Startbytes möglich; für Dimmersteuerung ist hingegen Startbyte 0 definiert. Angeschlossene Dimmer müssen also alle nachfolgenden Daten ignorieren, wenn ein anderes Startbyte als Null gesendet wird.

Jede DMX-512-Verbindung unterstützt bis zu 512 Dimmer; eine Mindestzahl ist nicht vorgegeben. Nachdem der letzte gewünschte Wert gesendet wurde, kann die Übertragung abbrechen und die Datenleitung verbleibt auf Ruhepegel (MARK). Mit einem nachfolgenden RESET wird eine neue Übertragung eingeleitet. Zwei aufeinanderfolgende Übertragungen sollen nicht enger als 1196 us (von Anfang BREAK bis Anfang des folgenden BREAK) aufeinander folgen. (2)

Daten

Die Datenübertragungsrate beträgt 250 kBit/s. Daraus ergibt sich eine Bitzeit von 4 us, entsprechend 44 us pro Datenwort. Die Gesamtübertragungsdauer für 512 Kanäle ergibt sich im besten Falle zu (88+8+44+512*44) = 22668 us. Daraus ergibt sich eine maximale Refresh-Rate von 44,1 Hz.

Hintergrund zum Projekt

Wie ihr vielleicht schon in meinem Abo-Special in Form einer Desk—Tour gesehen habt, habe ich in meinem gesamten Zimmer mehrere Meter LED-Streifen verbaut. Bislang habe ich diese mit dem mitgelieferten Netzteil und Controller mit. Fernbedienung angesteuert. Allerdings reichte bald die Leistung des mitgelieferten Netzteils nicht mehr aus. Zudem lag die Achaltfrequenz des Controllers im Frequenzbereich unter 10kHz und erzeugte in meinen Lautsprechern ein deutlich hörbareres hochfrequentes Störgeräusch. Zudem planten wir in unserer Gemeinde derzeit einen Jugendgottesdienst, bei dem mit LEDs beleuchtete Wolken als Dekoelemente eingesetzt werden. Dazu brauchte ich einen geeigneten Controller der DMX Signale von einem Lichtpult empfangen kann und die Fraben dementsprechend darstellen kann.

Hardware

Das DMX Signal wird über ein 3pol XLR-Stecker (FM) empfangen und an einen zweiten Stecker (M) durchgeschleift, um mehrerem Lampen im Daisy-Chain verfahren miteinander zu Verkabeln. 

13EDD137-6F47-4C3E-BF7C-FBADC7BB289D

Da das Signal am XLR Stecker wie bereits erwähnt Symetrisch ist, ist ein RS485-Transciever erforderlich um das Signal in ein unsymmetrisches TTL Signal umzuwandeln. Der Chip den ich in diesem Fall verwende ist der SN75176. Es gibt auch noch zahlreiche weitere RS485 Transciever, die sich hierfür auch eignen würden. Ich habe mich jedoch für diesen Chip entscheiden, weil er einfach zu beschaffen ist, günstig ist und der hohe Energieverbrauch in diesem Fall kein Problem darstellt.

Die Verkabelung sieht in etwa so aus:

Ansteuerung

Die Ansteuerung erfolgt über drei n-Kanal Mosfet Transistoren des Typs IRLB 8721. Da es sich bei diesen Transistron um Logic-Level-Mosfets handelt reicht bereits schon eine Spannung V_\mathrm{GS} =5\mathrm{V} um den Transistor zu schalten. Zudem hat der IRLB 8721 eine

R_\mathrm{DSon} = 16\mathrm{m}\Omega

Durch den geringen Widerstand fällt auch eine geringe Spannung am Transistor ab. Der Maximale Strom pro Kanal liegt bei 3A. Dadurch ergibt sich:

I_\mathrm{max} = 3\mathrm{A} ; R_\mathrm{DSon} = 16\mathrm{m}\Omega U_\mathrm{drop} = I_\mathrm{max}*R_\mathrm{DSon} = 3\mathrm{A}*16\mathrm{m}\Omega = 0.048\mathrm{V} P_\mathrm{thermal} = U_\mathrm{drop}*I_\mathrm{max} = 0.048\mathrm{V}*3\mathrm{A} = 0.144\mathrm{W} R_{\Phi\mathrm{JA}} = 62^\circ\mathrm{C/W} \Delta T = 62^\circ\mathrm{C/W}*0.144\mathrm{W}=8.9^\circ\mathrm{C}

Es ist hier mit einer Erwärmung von \Delta T = 8.9^\circ\mathrm{C} zu rechnen.

T_\mathrm{max}=T_\mathrm{Jmax}-\Delta T = 150^\circ\mathrm{C} - 8.9^\circ\mathrm{C} = 141.1^\circ\mathrm{C}

Bis zu einer Umgebungstemperatur von 141,1°C kann der Transistor bei optimaler Belüftung betrieben werden. Folglich ist in diesem Fall kein Kühler notwendig.

Pulse-Width-Modulation (PWM)

Das Gate der Mosfets wird vom Microcontroller mit PWM Signalen angesteuert.

Pulse-Width-Modulation ist ein. Modulationsverfahren, bei dem der Tastgrad einer Rechteckfunktion bei gleichbleibenden Frequenz verändert wird. Dadurch verändern sich das On/Off zeitverhältniss. Dadurch lässt sich die Durchschnittsspannun einfach und effizient variieren, ohne das dazu die Spannung über einen Transistor herabgesetzt werden muss. Da die Helligkeit einer LED vom mittleren Strom abhängt, eignet sich diese Methode sehr gut, um die Helligkeit der LEDs zu regeln. 

Die Mittlere Spannung ist das Integral der Spannungsfunktion u(t)

T=\frac{1}{f} U=\int_{t_0}^{T+t_0} u(t)\;\mathrm dt

Daraus folgt bei einem Rechtecksignal :

\overline{U_\mathrm{pwm}} = U_\mathrm{in} \cdot \frac{t_\mathrm{on}}{t_\mathrm{on}+t_\mathrm{off}} = U_\mathrm{in}\cdot t_\mathrm{on} \cdot f_\mathrm{pwm}

!Achtung! LEDs haben eine nicht-lineare Kennlinie. LEDs vertragen kurzzeitig Ströme bis zum etwa 10 fachen des Nennstromes. Jedoch darf die Spannung auch kurzzeitig nicht wesentlich höher sein als bei einer Pulsweite von 100%

Zum generieren des PWM Signals werden die Timer/Counter der Atmega48 Genutzt. Um genau zu sein werden wir TC1 und TC2 dafür verwenden. TC0 erfüllt eine ander Aufgabe (siehe Displayansteuerung). 

Der Timer ist ein Teil des Mikroprozessors, der unabhängig von der CPU hoch oder runter zählt und je nachdem wie der Timer konfiguriert ist, bei einem bestimmten wert einen IO-Pin ändert oder einen Interrupt auslöst. In diesem fall, wird im Timer so konfiguriert, dass er bis zu einem Grenzwert hochhält und anschließend wieder von Null an neu beginnt. Zusätzlich wird der Timer so konfiguriert, dass beim erreichen eines gesetzten Wertes ein Output-Pin gesetzt wird und beim erreichen des Grenzwertes wieder zurückgesetzt wird. 

Die Konfiguration des Timers erfolgt über die register TCCRnA, TTCRnB,OCRnA und OCRnB. n bezeichnet hier den Timer 1 oder 2.

Das grundlegende Verhalten des Timers wird über das TCCR (Timer/Counter Controller Register) Register festgelegt. 

Register TCCR1A 

    

Register TTCR1B

Genauere Infos sind im Datenblatt zu finden (5) Seite 177ff.

Über die Bits COM1 lässt sich das Verhalten der IO Eins beeinflussen. In diesem fall ist COM1 auf "Set OC1A/OC1B on Compare Match, clear OC1A/OC1B at BOTTOM (inverting mode)" gesetzt.

Die Bits WGM konfigurieren den Modus in dem der CTC läuft. In diesem fall ist es der Modus 1 - "PWM, Phase Correct, 8-bit"

Auszug aus dem Datenblatt zur Funktionsweise (5) Seite 171:

The Phase Correct Pulse Width Modulation or Phase Correct PWM modes (WGM1[3:0]= 0x1, 0x2, 0x3, 0xA, and 0xB) provide a high resolution, phase correct PWM waveform generation option. The Phase Correct PWM mode is, like the phase and frequency correct PWM mode, based on a dual-slope operation. The counter counts repeatedly from BOTTOM (0x0000) to TOP and then from TOP to BOTTOM. In non-inverting Compare Output mode, the Output Compare (OC1x) is cleared on the compare match between TCNT1 and OCR1x while up-counting, and set on the compare match while down-counting. In inverting Output Compare mode, the operation is inverted. The dual-slope operation has lower maximum operation frequency than single slope operation. However, due to the symmetric feature of the dual-slope PWM modes, these modes are preferred for motor control applications.

The PWM resolution for the Phase Correct PWM mode can be fixed to 8-, 9-, or 10-bit, or defined by either ICR1 or OCR1A. The minimum resolution allowed is 2-bit (ICR1 or OCR1A set to 0x0003), and the maximum resolution is 16-bit (ICR1 or OCR1A set to MAX). [...]

In phase and frequency correct PWM mode the counter is incremented until the counter value matches either the value in ICR1 (WGM1[3:0]=0x8), or the value in OCR1A (WGM1[3:0]=0x9). The counter has then reached the TOP and changes the count direction. The TCNT1 value will be equal to TOP for one timer clock cycle. The timing diagram for the phase correct and frequency correct PWM mode is shown below. The figure shows phase and frequency correct PWM mode when OCR1A or ICR1 is used to define TOP. The TCNT1 value is in the timing diagram shown as a histogram for illustrating the dual-slope operation. The diagram includes non-inverted and inverted PWM outputs. The small horizontal line marks on the TCNT1 slopes represent compare matches between OCR1x and TCNT1. The OC1x Interrupt Flag will be set when a compare match occurs.

Die PWM-Auflöung lässt sich wie folgt berechnen:

R_{PFCPWM}=\frac{log(TOP+1)}{log(2)}

Die Frequenz wird durch den prescaler festgelegt. Dessen Konfiguration wird durch die CS bits bestimmt. 

Zurzeit ist nur CSn0 gesetzt. Das bedeutet, dass der CTC mit dem CPU-Takt mitzählt. In diesem fall entspricht das f=16\textnormal{MHz}. Umgerechnet beträgt dann die PWM Frequenz:

F_{PWM}=\frac{f_{CPU}}{(TOP+1) * 2} F_{PWM}=\frac{16000000\textnormal{Hz}}{255 + 1 * 2}=\frac{16000000\textnormal{Hz}}{512}=31250\textnormal{Hz}=31.25\textnormal{kHz}

EMV und Elektromagnetische Felder

Somit liegt die Schaltfrequenz bei 31.25kHz. Der große Vorteil dabei ist, dass diese Frequenz nicht im Hörbaren Bereich ist. Dadurch entstehen keine Hörbaren Interferenzen in meiner Soundanlage, wie es bei einer niedrigeren Frequenz der Fall war.
Der große Nachteil ist, dass auch hier Elektromagnetische Felder entstehen, die Interferenzen und Einstreuungen verursachen können. Wird ein LED-Streifen benutzt so fungiert dieser als Antenne und verstärkt dies. Auch können bestimmte Netzteile erheblich Elektromagnetische Felder abstrahlen, die wesentlich stärker sind, als die durch die LED-Streifen verursachten Felder.

Empfangen der DMX Signale

Wie bereits oben erwähnt, wird das DMX Signal über ein Differenzialpaar übertragen. Dieses wird durch den RS-485 Transciever in ein TTL-Signal umgewandelt. Für den Empfang der Daten ist der USART des ATmega48 zuständig.

Aufgrund des Timings des DMX Signals ist eine Baudrate von 250000B erforderlich. Die Konfiguration der Baudrate erfolgt über das UBRR0 Register. Dazu wird zuerst der wert für das UBRR Register berechnet, zusammen mit dem Sollwert und dem Fehler in Abhängigkeit zum CPU-Takt.

#define BAUD 250000L
#define UBRR_VAL  ((F_CPU+BAUD*8)/(BAUD*16)-1)
#define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1)))
#define BAUD_ERROR ((BAUD_REAL*1000)/BAUD-1000)

Ist der Fehler zu hoch, meldet der Compiler dies

#if ((BAUD_ERROR>10) || (BAUD_ERROR<-10))
#error Systematischer Fehler der Baudrate grösser 1% und damit zu hoch!
#endif   

Anschließend wird der errechnete wert in das Register geladen

UBRR0H = UBRR_VAL >> 8;
UBRR0L = UBRR_VAL & 0xFF;

Um ein DMX Paket zu Empfangen wird der Receiver und eine Interrupt-routine aktiviert.

UCSR0B = (1<<RXCIE0) | (1<<RXEN0);

Dadurch wird nach Dateneingang am UART der Interruptvektor USART_RX_vect aufgerufen.

Der Beginn eines Datenpaketes wird durch einen BREAK gekennzeichnet. Da dieser mind. 88us lang ist, löst dieser einen Party-Error aus. Dieser wird genutzt um den RESET zu erkennen und den Empfang zu starten. Tritt ein Parity-Error auf, wird der Bit PE im USART-Controll-Register UCSR0 gesetzt.

if (UCSR0 & (1<<FE0)){
  //Beginn des Datenpaketes. Empfang starten
}

Anschließend beginnt ein Counter, der die eingehenden Pakete zählt. Durch die Adresse wird das erste Paket gekennzeichnet, dass der Controller empfangen soll. Wenn jetzt der Zähler der Adresse + 1 entspricht werd dies und alle folgenden Pakete in ein Array geschrieben, bis der Zähler größer der Summe aus Adresse und Menge der zu Empfangenen Bytes + 1 ist. Jeder Byte entspricht einem Wert. Einen Wert nennt man Parameter.

Wäre die Startadresse z.B. 8 und die Menge der zu empfangenden Parameter 3 ist, so werden das 9,10 und 11 empfangene Byte gespeichert. Das hat den Grund, dass Byte 0 zwar gesendet wird, aber hier nicht benutzt wird. Das erste Parameter wird mit Byte 1 (dem 2. Byte) übertragen.

Die Empfangsfunktion sieht folgendermaßen aus:

ISR(USART_RX_vect) {
    //DMX empfangen
    cli();
    static uint16_t dmx_channel=0, dmx_base=0;
    uint8_t status, data;
    int16_t index;
    
    
    status = UCSR0A;
    data = UDR0;
    
    if (status & (1<<FE0)) {
      if (data==0) { 
        dmx_channel=0; 
        dmx_base = val_d; 
        flag=1; 
      }else{
        dmx_channel++;
      }
    } else { 
      index = dmx_channel-dmx_base; 
      if (index>=0 && index<dmx_size){
        DmxArray[index]=data;
        dmx_channel++;
      }
    }
    sei();
}

Während der Ausführung dieser Funktion sind alle Interrupts Deaktiviert. Ansonsten könnte CTC0 einen Interrupt auslösen, der diesen Unterbricht, was zu einem Übertragungsfehler führen würde.

 

Schaltplan

Bauteile

Bauteil Menge Preis Bestelllink
ATmega48 1 Stück 2,40€ Link Reichelt
SN75176 1 Stück 0,34€ Link Reichelt
IRLB8721 3 Stück 0,61€ Link Reichelt
SN75176 1 Stück 0,34€ Link Reichelt
L7805 1 Stück 0,35€ Link Reichelt
Neutrik NC3 MAH 1 Stück 0,89€ Link Thomann
Neutrik NC3 FAH1 1 Stück 1,09€ Link Thomann

Quellen / Verweise

  1. https://de.m.wikipedia.org/wiki/DMX_(Lichttechnik)
  2. http://www.soundlight.de/techtips/dmx512/dmx512.htM
  3. http://rn-wissen.de/wiki/index.php/Pulsweitenmodulation

MacPro 5,1 Review 2015

by Dennis Gunia
MacPro 5,1 Review 2015

Morgen,

ich hab nun endlich ein neues Video hochgeladen.

Dieses mal ist es ein Review vom nun schon 5 Jahre alten MacPro der Generation 5,1.

Ich dachte es wäre mal interessant zu wissen , wie sich der MacPro fast ein halbes Jahrzehnt später schlägt.

 

LG Blackbacklp.


 

Für alle die es interessiert, hier die Hardware :

  • 2x XEON X5690 6-CORE CPu @ 3,48GHz
  • GAINWARD PHANTOM GTX970 4GB
  • 18GB 1066MHz DDR3 ECC RAM
  • 3,5TB HDD Speicher
  • 90GB SSD Speicher

 

„Ultimative“ Schreibtisch Tour (2015) – 45 Abo Special

„Ultimative“ Schreibtisch Tour (2015) – 45 Abo Special

Danke an 45 Abos !! Hier ist ein kleines Special das ich mit VIEL Arbeit produziert habe 🙂

 

 

Ersteinmal DANKE an 45 Abos. 😀
Ich hatte nicht damit gerechnet , dass ich überhaupt mal irgendwelche Zuschauer bekommen würde.
Also vielen dank :).

Das ist meine Ultimative Schreibtisch Tour 2015!
Was macht diese Tour so ultimativ ? – Ich weiß es selbst nicht genau.
Um bestimmte Kommentare vorzubeugen – NEIN ich bekomme KEIN Geld für irgendeines der gezeigten produkte.
Ich habe diesen kurzen Film gemacht um mich mit Final Cut Pro vertraut zu machen.
Verwendet habe ich einen Canon HD Camcorder und mein billig-Stativ von Amazon ;).
Wenn ihr mehr infos zum Mac Pro haben wollt dann schaut mal hier vorbei :
Ich hoffe euch hat das Video gefallen und wir sehen uns im nächsten Video.

– iPad mini 16GB Space Gray
– Behringer X1832 USB Mischpult
– Logitech Z4 Sound System
– 3x Acer V276 LED 27″ Bildschirme (Display-Port)
– Mac Pro 5,1 (mid 2010)
und noch viel mehr…