Electronique > Réalisations > Interfaces > DMX > Interface DMX 009

Dernière mise à jour : 01/01/2023

Présentation

Cette interface DMX dispose d'une entrée DMX (sur XLR) et de 16 sorties qui fonctionnent en mode Gradateur (dimmer). Usage prévu pour spots LED de faible ou forte puissance (commande PWM).


interface_dmx_009_pcb_3d_front  interface_dmx_009_pcb_3d_top_copper  

Le montage fait appel à un microcontrôleur PIC 18F45K22 qui pilote (via un bus I2C) un PCA9685 qui est un générateur PWM 16 voies 12 bits. L'adresse de base DMX peut être ajustée entre 1 et 512.

   

Schéma

Schéma de l'interface DMX, sans l'étage de puissance (sorties PWM TTL).


interface_dmx_009

Fonctionnement général

Les valeurs véhiculées dans la trame DMX sont extraites et traitées par le logiciel du PIC et sont ensuite utilisées pour piloter le PCA9685. Comme la fréquence des signaux de commande du PCA9685 ne peut excéder 1 MHz (ce qui est déjà bien pour du I2C), il serait plutôt ambitieux de faire une mise à jour en temps réel des 16 sorties PWM, sachant qu'il faut envoyer 6 octets pour changer la valeur d'une seule sortie, et qu'il faut presque 90 us pour envoyer ces 6 octets avec une vitesse d'horloge I2C de 1 MHz. Pour rappel, la valeur d'un canal DMX est transmise en 44 us (détails) et il faut bien réserver un peu de temps processeur pour traiter les données reçues. Pour cette raison, j'ai décidé de procéder de façon inadéquate et peu conventionnelle, en tout cas c'est ce qu'il me semble. La mise à jour de chaque sortie PWM à lieu toutes les 16 trames. Si la trame DMX véhicule 16 valeurs (16 canaux DMX), alors la mise à jour d'une sortie se fait toutes les 13,5 ms, soit environ 70 fois par seconde. Le pire des cas correspond à la situation où les 512 canaux sont utilisés, dans ce cas la mise à jour d'une sortie se fait toutes les 362 ms et donc "seulement" 3 fois par seconde :

On peut se questionner sur l'intérêt d'une telle méthode, sachant que celle adoptée pour mon interface DMX 004 (8 canaux) et 004b (12 canaux) permet une mise à jour des sorties en temps réel. Disons qu'en plus du simple plaisir d'expérimenter, la méthode utilisée ici permet de disposer d'un signal PWM de fréquence plus élevée, élaboré à l'extérieur du PIC. Comme plus aucun des Timers du PIC n'est mis à contribution pour fabriquer les signaux PWM, ils sont libres pour d'autres expériences, par exemple pour assurer une fonction de flash avec vitesse de clignotement qui dépendrait de la valeur d'un des canaux DMX. Ce n'est peut-être pas par hasard que la broche OE (Output Enable) du PCA9685 est reliée à la ligne RD5 du PIC...


Nombre de canaux différent de 16 ?

L'interface est prévue pour traiter 16 canaux. Que se passe-t-il si le nombre de canaux véhiculés dans la trame DMX est inférieur ou supérieur à cette valeur ? Si le nombre de canaux est moindre, le logiciel du PIC le comprend très vite et s'adapte, les sorties inutilisées restent inactives

Si le nombre de canaux est supérieur, alors le logiciel ne prend que ce dont il a besoin, en commençant à l'adresse de base spécifiée par l'utilisateur. Dans ce dernier cas, l'envoi des données au PCA9685 à lieu alors même que les données continuent d'arriver sur l'entrée de l'interface.


Modes des sorties PWM

Les sorties PWM du PCA9685 peuvent être configurées de différentes façons pour s'adapter à l'étage de sortie (de puissance) désiré. La configuration de ces sorties s'effectue via le registre de configuration MODE2 du circuit intégré, à l'adresse $01. Les deux bits considérés INVRT et OUTDRV prennent l'état logique appliqué sur les lignes RA0 et RA1 :

Selon la configuration adoptée, vous pouvez relier directement des LED (via résistance série) ou ajouter l'interface de puissance de votre choix, comme suggéré dans le tableau qui suit.


Inv/RA0 = 0
Drv/RA1 = 0
Inv/RA0 = 1
Drv/RA1 = 0
Inv/RA0 = 0
Drv/RA1 = 1
Inv/RA0 = 1
Drv/RA1 = 1
Open Drain / normal Open Drain / inversé Totem pole / normal Totem pole / inversé
X interface_dmx_009_out_10 interface_dmx_009_out_01 interface_dmx_009_out_11

Bien sûr ces exemples sont simplifiés à l'extrême et ne conviennent que pour des systèmes d'affichage "simples". L'utilisation de LED haute puissance nécessite un circuit de commande plus élaboré si on veut qu'elles durent longtemps (il faut maîtriser de façon précise le courant qui les parcourt).

Remarque : la configuration des modes Inv et Drv n'est lue qu'au démarrage de l'interface et ne peut pas être modifiéeen cours de route. Cela ne devrait pas poser de problème, puisqu'on n'est en général guère enclain à modifier la partie matérielle d'une interface de sortie pendant le déroulement d'une prestation.


PCA9685 ou PCA9635 ?

Le PCA9685 permet de disposer de 16 sorties PWM dont la résolution est de 12 bits (4096 pas). On ne peut pas profiter de cette résolution puisque les valeurs véhiculées dans la trame DMX sont codées sur 8 bits (256 niveaux). Pour cette raison, les 4 bits de poids faible des données utiles envoyées au PCA9685 sont toujours à zéro. Bien entendu, on pourrait réserver deux canaux DMX par sortie PWM afin de profiter de la pleine résolution, mais ce serait à mon avis du luxe et difficile à gérer. 

Le PCA9635 est une alternative possible, il s'agit d'une version 16 sorties avec résolution 8 bits. N'ayant pas ce circuit sous la main, je ne l'ai pas testé. Il est à noter que le PCA9685 possède un atout sérieux par rapport au PCA9635 : les changements d'états logiques des sorties (de haut vers bas et de bas vers haut) peuvent être progressifs, ce qui occasionne moins de rayonnements indésirés dans le voisinage immédiat (fronts moins raides = moins de composantes harmoniques). Cela limite aussi les pointes de courant sur la ligne d'alimentation, ce qui est appréciable.


Adresse de base DMX

Le choix de l'adresse de base se fait par le biais des interrupteurs câblés sur les lignes RB0 à RB5 et RD0 à RD2 du PIC (groupe d'interrupteurs appelé DSW1, lignes A0 à A8). S'il vous manque les notions de base du binaire, c'est le moment de réviser. Les résistances de pullup interne du PORTB ne sont pas activées, ce qui explique la présence des résistances de rappel R3 à R13. Un interrupteur ouvert correspond à une entrée à l'état bas. En fermant un interrupteur, l'entrée correspondante est reliée au +Valim et se voit donc imposer un état haut. Sur le schéma, seul le premier interrupteur (relié à RA0) est fermé, l'adresse de base DMX est donc égale à 1. Configuré de la sorte, le montage réagit aux données véhiculées dans les canaux DMX #1 à #16. Si l'adresse spécifiée avec les interrupteurs DSW1 est 14, alors le montage réagit aux données véhiculées dans les canaux DMX #14 à #29. Le PIC doit travailler très vite pour en même temps lire la trame DMX et élaborer les signaux de commande. Si j'avais inclus la routine de lecture de l'adresse DMX dans la boucle principale, cela aurait consommé inutilement des ressources processeur. Le bouton de reset SW1 devra être pressé si vous modifiez l'adresse DMX pendant que le montage est sous tension.


Entrée DMX

Le circuit d'interface MAX487 travaille ici toujours dans le même sens, ses entrées de direction RE et DE (broches 2 et 3) sont soumise à un état bas pour passer en mode réception, après la phase d'initialisation générale du PIC. La résistance R1 de 120 ohms est montrée câblée sur le schéma mais en pratique elle se trouve en série avec un cavalier qui permet de la mettre en ou hors circuit. On peut aussi ne pas la prévoir du tout et installer une seconde prise XLR reliée en parallèle sur J1 et sur laquelle on pourra enficher une terminaison (bouchon 120 ohms) ou un câble qui va vers un autre appareil (récepteur) DMX.


Alimentation

L'alimentation requise pour l'ensemble du circuit est de +5 V, elle doit pouvoir fournir un courant d'au moins 500 mA si les sorties du PCA9685 sont utilisées en direct et à pleine puissance (25 mA par sortie). Le +5 V est tiré d'un régulateur de tension LM7805 en boîtier TO220 qui sera doté d'un dissipateur thermique (radiateur). La tension issue du secondaire du transformateur d'alimentation TR1 est de 9 Vac (ou 12 Vac), cette tension peut paraître élevée quand on sait qu'une fois redressée et filtrée elle fait environ 11 V, mais une tension secondaire de 6 Vac aurait conduit à une tension continue voisine de 7 V, valeur trop faible pour garantir au LM7805 une bonne régulation. On peut aussi bien sûr utiliser un régulateur "LDO" à faible tension de déchet.


Points test

J'ai utilisé deux broches du PIC pour ressortir des signaux caractéristiques, en vue d'un dépannage éventuel :

Ces points n'ont pas besoin d'être reliés ailleurs, ils ne servent qu'en cas de problème et sont disponibles sous forme de points test sur le circuit imprimé (PCB).

   

Prototype

Tests effectués sur les 6 premiers canaux avec ma platine de développement EasyPic7, mon interface électrique DMX simplifiée et un contrôleur 6 voies Stairville DDC-6. 

   
interface_dmx_003_proto_001a interface_dmx_001_proto_001b chenillard_026_proto_001c    
   

Le PCA9685 n'est disponible qu'au format CMS TSOP28. Pour mes premiers tests, j'ai utilisé un "clone" de module adafruit prêt à l'emploi. Curieusement, le prix d'un tel clone est inférieur à celui du seul circuit intégré PCA9685 dont il est équipé. Cherchez l'erreur...

Comme ce premier prototype fonctionne, je ne suis pas certain de lancer la réalisation du circuit imprimé conçu par la suite. En tout cas, il n'y a pas urgence.

   

Logiciel du PIC

Le fichier binaire compilé *.hex à flasher dans le PIC est disponible dans l'archive zip ci-après. 

Interface DMX 009 - 18F45K22 - (16/08/2015)

Pour ce projet, code source non disponible et nombre de sorties limité à 4.
Pour la version à 16 sorties, me contacter.

Si vous souhaitez recevoir par la poste un PIC préprogrammé et prêt à utiliser, merci de consulter la page PIC - Sources.

   

Circuit imprimé (PCB)

Réalisé en double face, avec (majorité de) composants traversants et (quelques) composants montés en surface.

   
interface_dmx_009_pcb_components_top

   

Historique

01/01/2023
- Ajout dessin du circuit imprimé (PCB).

17/01/2021
- Extension du nombre d'adresses DMX de départ : anciennement 255, désormais 512.

16/08/2015
- Première mise à disposition.