Electronique > Réalisations > Jeux de lumières > DMX > Gradateur de lumière 014 (DMX)

Dernière mise à jour : 23/02/2014

Présentation

Ce gradateur de lumière multi-voies permet de piloter de façon individuelle le taux de luminosité de 8 lampes à LED basse tension via des messages de contrôle au protocole DMX.

gradateur_lumiere_014_pcb_3d_a 

Il fait usage d'un PIC 16F628A ou 18F2420 pour le décodage des trames DMX et pour l'élaboration des signaux PWM de la section gradateur. Deux versions sont proposées :
- Schéma 014 : version simplifiée avec PIC 16F628A, adresses DMX fixes (#1 à #8). 
- Schéma 014b : version "normale" avec PIC 18F2420, adresses DMX paramétrables (adresse de base #0 à #255). 
Toutes les sorties se font en mode PWM / MLI et sont de type TTL. Voir aussi Interface DMX 003 (12 sorties logiques ou gradateur).

Avertissement

Les schémas proposés ici ne conviennent pas pour des projecteurs alimentés en 230 V, que ces derniers aient une ampoule à incandescence ou des LED. Ils sont prévus pour la commande d'ampoules filament ou LED basse tension (5 V, 12 V ou 24 V par exemple).

Schéma 014 - avec PIC 16F628A

Le schéma qui suit comporte la section alimentation et la section de décodage des données DMX. Il faut lui ajouter ce qu'il faut en sortie selon la charge que vous prévoyez d'y mettre, nous verrons ce point en détail plus loin.

gradateur_lumiere_014

Coeur du montage
Basé sur un microcontrôleur de type PIC 16F628A, les données DMX reçues sont décodées et les valeurs transmises dans les 8 premiers canaux DMX sont utilisées pour délivrer un signal PWM en rapport. Ainsi avec une valeur DMX de 0 le signal PWM est à 0%, et avec une valeur DMX de 255 ($FF) le signal PWM est à 100%. La sortie Out_1 correspond au canal DMX N°1 et la sortie Out_8 correspond au canal DMX N°8. La fréquence des signaux de sortie PWM est voisine de 100 Hz, le risque que l'oeil humain voit les LED scintiller est minime. Je me demande même si dans une certaine mesure ces huit sorties ne seraient pas aptes à piloter la vitesse de petits moteurs à courant continu (100 Hz peut être un peu faible pour certains moteurs, mais soyons fous).

Interface électrique DMX
L'interfaçage avec la liaison RS485 (DMX) est confié à un MAX487.

interface_dmx_001_proto_001b interface_dmx_001_proto_001c
Adaptateur RS485

J'ai utilisé le même adaptateur que celui utilisé pour mon contrôleur DMX 001. Sauf que là le système fonctionne dans le sens inverse, mode réception en permanence et jamais de mode émission. Les deux broches 2 et 3 du MAX487 sont toutes deux reliées à la broche RB7 du PIC, ce dernier autorisent les entrées DMX à entrer dans le PIC à l'issue de l'initialisation principale. La résistance R3 est montrée câblée mais dans la pratique il est plus judicieux de la mettre en série avec un cavalier... ou de ne rien mettre du tout et de prévoir une autre prise XLR sur laquelle peut être enfichée une terminaison (bouchon 120 ohms).

Alimentation
L'alimentation nécessaire est de +5 V pour la partie principale du montage, une tension un peu plus élevée est requise pour l'alimentation des LED commandées. La valeur de cette tension "plus élevée" dépendra de ce que vous voulez utiliser comme systèmes d'éclairage. Si c'est pour alimenter une seule LED par sortie, vous pouvez rester avec la valeur 5 V. Si vous voulez au contraire constituer plusieurs branches série / parallèle de LED, une tension de 12 V à 18 V peut être envisagée. Le régulateur utilisé ici pour fournir le 5 V au PIC supporte en entrée une tension max de 35 V. Vous pouvez donc élaborer une tension supérieure en amont simplement en choisissant un transformateur d'alimentation adapté à vos besoins (par exemple un modèle 230 V / 15 V). La tension redressée, filtrée et avant régulateur 5 V servira ainsi pour les guirlandes de LED, et la tension abaissée à 5 V ne servira que pour les deux circuits intégrés PIC et MAX.

Interface de puissance
Comme dit auparavant, point besoin d'interface additionnelle si le but n'est que d'alimenter quelques LED. En revanche, un transistor additionnel est requis pour chaque sortie si vous voulez y tirer plus de 20 mA. Et là, vous avez le choix, ne serait-ce qu'en terme de technologie : transistor bipolaire (2N2222 ou autre plus costaud comme le TIP122) ou transistor MOSFET (BUK101-50GL ou STP36NF06L par exemple). Voici un exemple d'interface utilisable avec ce gradateur 014.

gradateur_lumiere_014_ext_001

De bien gros transistors MOSFET pour de simples LED... sauf s'il s'agit de LED de puissance ou si leur nombre dépasse les 5000. Je plaisante bien sûr, mais le ton est donné : à vous de "sentir" votre besoin.

Schéma 014b - avec PIC 18F2420/18F2520

La section alimentation secteur n'est pas représentée sur ce nouveau schéma puisque de ce côté rien ne change par rapport au précédent.

gradateur_lumiere_014b

Il en est de même pour l'interface de sortie, qui là aussi est la même. La seule chose qui change est le nombre de broches du PIC, plus élevé ici et qui permet de raccorder quelques petits interrupteurs (microswitches) ou straps pour configurer l'adresse DMX de base.

Adresses DMX
Alors qu'avec la version 014 à base de 16F628A on ne dispose pas de configuration pour l'adresse de base, cette version 014b permet de préciser à partir de quelle adresse le système doit réagir. Les huit adresses restent contigues dans tous les cas. Si l'adresse de base est spécifiée est 1, alors les 8 adresses DMX qui correspondent aux 8 canaux de ce gradateur vont de 1 à 8. Si l'adresse de base est spécifiée est 13, alors les 8 adresses DMX qui correspondent aux 8 canaux vont de 13 à 20. L'adresse de base se définit en binaire grâce aux petits interrupteurs du "pavé" DSW1 et peut adopter n'importe quelle valeur comprise entre 0 et 255 (ça ne va pas plus loin). L'adresse est définie par la position des interrupteurs câblés sur les huit entrées du PORTB du PIC (RB0 à RB7), selon la logique implacable du "décimal codé binaire". L'interrupteur relié à RB0 vaut la valeur 1, celui relié sur RB1 vaut 2, celui relié sur RB2 vaut 4, etc jusqu'à celui relié sur RB7 qui vaut 128. Une adresse de base de "3" se traduit donc par activation des entrées RB0 (valeur 1) + RB1 (valeur 2). Pour simplifier le montage, j'ai activé le pullup du PORTB et les interrupteur sont "actifs" quand ils font la liaison avec la masse, mais les états logiques des broches du PORTB sont inversés à la lecture, dans le logiciel. Ainsi sur le schéma précédent, l'adresse est égale à 1 puisque seul l'interrupteur câblé sur RB0 est en position ON (fermé) et que donc seule la broche RB0 est à l'état bas.

Des sorties en tension ?

On peut transformer le signal PWM en une tension (presque) continue, en ajoutant un filtre passe-bas qui "gomme" la périodicité des signaux pour n'en garder que la valeur moyenne. Ce filtre passe-bas peut être très simple, puisqu'on peut se contenter d'un réseau RC, c'est à dire une Résistance et un Condensateur, comme le montre le schéma suivant (avec ce schéma, on cherche à convertir en tension trois signaux PWM différents Out1, Out4 et Out8).

gradateur_lumiere_014b_pwm2volt_filtre_001a

Seulement voilà, un filtre aussi simple ne peut prétendre à délivrer une source de tension parfaitement propre (j'aime le mot parfaitement, qu'on cherche souvent sans jamais le trouver). Le signal PWM possède ici une fréquence voisine de 100 Hz. C'est une fréquence assez élevée pour la persistence rétinienne mais qui reste tout de même assez basse dans l'absolu. Filtrer une telle fréquence pour en obtenir sa moyenne sous forme de tension continue pose le problème de la fréquence de coupure du filtre qui doit être basse et qui impose des composants de valeur élevée. Partons avec un exemple concret, où nous disposons de trois signaux PWM ayant une fréquence de 100 Hz et des rapports cycliques de 10% (Out1), 50% (Out4) et 95% (Out8).

gradateur_lumiere_014b_pwm_graphe_001a

Imaginons que nous n'y connaissions rien et qu'on cherche les valeurs idéales par tatonnement. Ca ne fait pas très sérieux mais même dans le monde professionnel on doit parfois y passer. Donnons à ces composants RC les valeurs respectives de 100 kO et de 100 nF (valeurs adoptées sur le schéma proposé ci-avant). Voici ce que nous obtiendrions.

gradateur_lumiere_014b_pwm2volt_graphe_001a

Oups ! ce n'est pas vraiment ce qu'on appelle des tensions continues. On a certes fait un peu de ménage puisque les trois signaux ne se balladent plus entre le 0 V et le +5 V. Mais il faut aller plus loin, et donc filtrer un peu plus en descendant la fréquence de coupure du filtre (le calcul nous aurait montré que 100 kO et 100 nF étaient insuffisants, avant même d'avoir essayé). Augmentons la valeur des condensateurs de 100 nF à 1 uF, ce qui correspond à une fréquence de coupure des filtre dix fois plus basse.

gradateur_lumiere_014b_pwm2volt_graphe_001b

C'est déjà plus proche de ce qu'on souhaite obtenir, n'est-ce pas ? Mais on peut encore mieux faire, et nous allons maintenant augmenter la valeur des résistances, de 100 kO à 470 kO.

gradateur_lumiere_014b_pwm2volt_graphe_001c

Eh bien voilà ! Nous disposons maintenant d'une tension continue proportionnelle au rapport cyclique du signal PWM. Mais, car il y a un mais, la tension attendue met beaucoup plus de temps à arriver. Vous devez donc trouver un compromis entre taux de filtrage et temps de réaction. Ne pourrait-on pas bénéficier d'un temps de réaction plus élevé en même temps qu'un filtrage correct ? Mmm... possible. Et si vous faisiez un petit tour du côté des filtres actifs, notamment sur la page Convertisseur PWM / Tension 001 ?

Remarques importantes
Dans le cas où un simple filtre RC vous suffit (par exemple combinaison 100 kO + 1 uF ou 470 kO + 220 nF), n'oubliez pas que l'impédance d'entrée du circuit qui va suivre va jouer de façon notable sur la valeur de tension obtenue au finale. En effet, la résistance "série" du filtre, comme elle est élevée, va former un pont diviseur de tension avec le circuit suivant, et ce pont diviseur ne peut pas être négligé. Le circuit qui fait suite doit posséder une impédance d'entrée bien plus élevée, au moins 10 fois la valeur de la résistance série du filtre (impédance d'entrée d'au moins 1 MO si résistance du filtre de 100 kO). Une solution élégante consiste à intercaler un AOP en suiveur de tension (voir en multiplicateur de tension si vous voulez étendre la plage de la tension de sortie - de 0 V à +10 V par exemple). Mais attention là encore, vous devez utiliser un AOP dit "rail-to-rail" pour coller au mieux aux valeurs extrêmes 0 V et tension max (+5 V dans notre cas).

Prototypes

Réalisés de mon côté pour les deux versions 014 (avec 16F628A) et 014b (avec 18F2520). Les deux fonctionnent bien. 

gradateur_lumiere_014b_proto_002a gradateur_lumiere_014b_proto_002b gradateur_lumiere_014b_proto_002c gradateur_lumiere_014b_proto_002d gradateur_lumiere_014b_proto_002e

Sur la première des photos, on voit le PIC sous test (18F2520) sur la platine de développement EasyPic. Sur la dernière photo, on peut voir que les LED n'éclairent pas toutes avec la même intensitée. Normal puisque leur rapport cyclique d'allumage est conforme à la position des potentiomètres à glissière du contrôleur DMX utilisé pour les tests (avant-dernière photo). Petite remarque, en passant : j'ai oublié d'éteindre le controleur DMX durant une des phases de reprogrammation du PIC, pendant laquelle ce dernier recevait toujours les trames DMX sur son entrée Rx. Après chargement du fichier hex, plus rien ne répondait, j'ai du éteindre et rallumer la platine de développement pour que ça reparte. J'avoue avoir eu une petite suée.

Vidéo de démonstration
Pour la vidéo, j'ai remplacé le bargraphe de 10 LED rouges par 6 LED blanches 5 mm. 

video_electronique_gradateur_lumiere_014b_proto_001
Vidéo YouTube

Remarque : les LED sont un peu trop rapprochées les unes des autres et on ne voit pas toujours très bien celles qui s'allument ou s'éteignent. C'est pourquoi à certains endroits de la vidéo j'ai ajouté une petite incrustation pour mieux les voir.

Prototype de Olivier H.
Olivier a aussi réalisé ce gradateur... merci à lui pour ses retours positifs, photos et enthousiasme !

gradateur_lumiere_014b_proto_oh_001b gradateur_lumiere_014b_proto_oh_001c gradateur_lumiere_014b_proto_oh_001d gradateur_lumiere_014b_proto_oh_001e gradateur_lumiere_014b_proto_oh_001f 

Commentaires d'Olivier
Mes appareils DMX sont basés sur un produit =S=, dont la carte a été un peu modifiée pour libérer les E/S, changer le Quartz, recâbler le DIP Switch. J'y ai ajouté une carte (ma première au perchlo !) comprenant d'une part votre adaptation RS485 pour commander le PIC, et d'autre part  de la commutation 12V par MOS ou NPN reliée à quelques sorties du PIC. Ces spot contiennent un flash à LEDs rouges (d'origine sur la carte), auquel j'ai ajouté des LED blanches HL ; je les remplacerai par 3x1W pour que ça pète plus. A l'arrière, il y a 2 sorties 12V (phoenix 2 pts) pilotées par MOS pour alimenter des éclairages annexes : j'ai une barre de LED blanches pour faire stobo, un Bob l’éponge gonflable éclairé, une tête de mort en plastique mou avec 3 LEDS dedans. Sur cette version de base, seulement 4 canaux DMX (ou sorties PIC) sont utilisés.
Dans le même principe, j'ai également piloté des guirlandes 220V à LED (avec des LAA120) - 8 canaux utilisés et un spot RGB+ Blanc - 4 canaux
Tout ça est piloté avec le logiciel QLC+ que je trouve très ergonomique et complet; mes équipement ont été facilement intégrés avec le "Fixture Editor" ; ce logiciel fonctionne en application portable > très pratique. Grâce à votre support, j'ai pu développer un kit d'éclairage très performant pour mes soirées ; un projet d'un an enfin abouti ! Je ne saurai jamais assez vous remercier. Les amis aiment beaucoup l'ambiance. On a notamment organisé une Beach Party en plein air entièrement alimentée en batteries 12V ; un grand succès. De nombreuses idées sont en attente; c'est surtout une question de temps pour s'y mettre (vous devez connaitre ça).
Heureux d'avoir pu vous aider !

Liaison DMX sans fil
Le prototype à base de 18F2520 a été testé avec succès avec une liaison DMX filaire et avec une liaison DMX HF (sans fil) en utilisant un couple émetteur/récepteur dédié DMX du commerce.

gradateur_lumiere_014bb_proto_001i gradateur_lumiere_014bb_proto_001j gradateur_lumiere_014bb_proto_001k

Comme les modules HF du commerce dédiés DMX coûtent cher, j'ai commencé à travailler sur des modules HF (TxRx) économiques à base de nRF24L01 ou CC2500 pour voir ce qu'on pouvait en tirer (en terme de stabilité et de portée). Je me suis finalement focalisé sur des modules équipés d'un nRF24L01 associé à un ampli HF (nRF24L01+PA+LNA V3.1), que j'ai du câbler sur un bout de CI d'expérimentation pour pouvoir les placer sur ma platine EasyPic et sur une plaque sans soudure.

modules_hf_nrf24l01_homeclick_001e modules_rf_nrf24l01_proto_002b modules_rf_nrf24l01_proto_002a

A l'heure qu'il est (07h22 du 02/04/2014), j'arrive à transmettre 30 canaux DMX avec cet ensemble émetteur-récepteur HF (proto sur les deux dernières photos, récepteur sur platine EasyPic7 et émetteur sur plaque sans soudure), la longueur des paquets de données traités par le chip nRF24L01 est limitée à 32 octets. Pour envoyer plus de 32 canaux DMX, il faut donc envoyer plusieurs paquets consécutifs, le premier paquet pour les canaux 1 à 30, le second paquet pour les canaux 31 à 60, etc. Dans un premier temps, je me limiterai à 120 canaux DMX, même si dans la théorie rien n'interdit de diffuser les 512 canaux de la normes (il faudrait 18 paquets de 30 canaux ou 17 paquets de 31 canaux).

Logiciel du PIC

Fichier binaire compilé (*.hex) prêt à flasher dans le PIC, dans l'archive zip que voici :
Gradateur lumiere 014(b) - 16F628A / 18F2520 (version du 21/02/2014)
Si vous souhaitez recevoir par la poste un PIC préprogrammé et prêt à utiliser, merci de consulter la page PIC - Sources.

Circuit imprimé

Modèle 014bb (identique au 014b mais avec les transistors de puissance MOSFET sur le CI) réalisé en quatre exemplaires, pour un professionnel de la lumière (pour spectacle théâtre / plateaux TV).

gradateur_lumiere_014bb_proto_001a gradateur_lumiere_014bb_proto_001b gradateur_lumiere_014bb_proto_001c gradateur_lumiere_014bb_proto_001d gradateur_lumiere_014bb_proto_001e gradateur_lumiere_014bb_proto_001f gradateur_lumiere_014bb_proto_001g gradateur_lumiere_014bb_proto_001h

Historique

05/01/2015
- Ajout photos prototype et commentaires d'Olivier H., que je remercie.
23/02/2014
- Modification programmes 014 (16F628A) et 014b (18F2520) pour permettre un fonctionnement correct quel que soit l'ordre d'allumage des appareils (gradateur ou source DMX). Schémas correspondants mis à jour (liaison ajoutée entre le PIC et le MAX487).
18/12/2013
- Nouvelle version 014bb réalisé pour une application spectacle théâtre / plateaux TV, où un même CI regroupe le PIC, la régulation alim et les transistors FET de puissance qui pilotent des rubans LED RVB.
02/09/2012
- Ajout discussion sur transformation signal PWM en tension continue proportionnelle.
08/04/2012
- Première mise à disposition.