Dernière mise à jour :
16/08/2015
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).
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 0 et 255.
Schéma
Schéma de l'interface DMX, sans l'étage de puissance (sorties PWM TTL).
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 :
-
Si la trame DMX comporte la valeur d'un seul canal, alors...
sa durée
totale est de 88 us (break) + 8 us (MAB) + 44 us (SC) + 1 * 44
us (Data) = 184 us
Dans ce cas la seule sortie réellement utilisée est mise à jour à chaque trame - Si la trame
DMX comporte la valeur de 16 canaux, alors...
sa durée
totale est de 88 us (break) + 8 us (MAB) + 44 us (SC) + 16 * 44
us (Data) = 844 us
Dans ce cas, chaque sortie est mise à jour toutes les 13,5 ms (16 x 844 us) - Si la trame
DMX comporte la valeur des 512 canaux, alors...
sa durée
totale est de 88 us (break) + 8 us (MAB) + 44 us (SC) + 512 *
44
us (Data) = 22668 us.
Dans ce cas, chaque sortie est mise à jour toutes les 362 ms (16 x 22668 us)
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'arriversur 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 :
- Inv/RA0 = 0 -> sorties avec logique "positive" (état bas permanent pour PWM 0%, état haut permanent pour PWM 100%)
- Inv/RA0 = 1 -> sorties avec logique inversée (état bas permanent pour PWM 100%, état haut permanent pour PWM 0%)
- Drv/RA1 = 0 -> sorties configurées en "open drain" (drain ouvert)
- Drv/RA1 = 1 -> sorties configurées en "totem pole"
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 |  |  |  |
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 : les
modes Inv et Drv ne sont analysés qu'au démarrage de l'interface et ne peuvent pas
être modifiés pendant son fonctionnement, mais cela ne pose aucun
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 presta.
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. Le PCA9635 est une alternative possible, c'est une version
16 sorties avec résolution 8 bits, mais comme je ne l'ai pas sous la
main (alors que j'avais le PCA9685) je n'ai pas insisté. Il est à noter
que le PCA9685 possède un atout sérieux par rapport au PCA9635 : les
changements d'états 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). Mais 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 à RD1 du PIC (groupe d'interrupteurs appelé
DSW1, lignes A0 à A7). S'il vous manque les notions de base du binaire,
c'est
le moment de réviser.
Les résistance de pullup interne du PORTB ne sont pas activées, ce qui
explique la présence des résistances de rappel R3 à R12. 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é quelques broches du PIC pour ressortir des signaux
caractéristiques, en vue d'un dépannage éventuel :
- DMXReset : brêve impulsion entre chaque trame DMX
- DMXRx : changement d'état à réception d'une nouvelle valeur de canal DMX
Ces points n'ont pas besoin d'être reliés ailleurs, ils ne servent qu'en
cas de problème.
Prototype
Tests effectués avec ma
platine de développement EasyPic7, mon
interface
électrique DMX
simplifiée et mon petit
contrôleur
six voies bon marché Stairville DDC-6.
Pour le PCA9685 qu'on ne trouve qu'en version CMS, j'ai utilisé un
module adafruit prêt à l'emploi.
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 MikroPascal non disponible, et nombre de sorties limité à 4.
Pour la version à 16 sorties, merci de
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é
Non réalisé.
Historique
16/08/2015
- Première mise à disposition.