Interface XpressNet avec une centrale LENZ


Connecter un Arduino à une centrale LENZ en XpressNet est assez compliqué. Le protocole XpressNet est basé sur une liaison RS485, sur du câble téléphonique à 6 fils (RJ12). De plus, XpressNet est un protocole série 9 bits a 62.5 kbit/s. Le SDK Standard d’Arduino ne propose pas de bibliothèque série 9 bits. Cependant quelqu’un l’a fait sur un Arduino mega 2560 Vous trouverez une description de ce système en cliquant ici.

Une approche plus simple consiste à utiliser un module LENZ LI101F et à relier un ARDUINO UNO au connecteur série du module LI101F.
Le module utilise un protocole à 8 bits connu de l'ARDUINO. Le débit est de 19200 bauds.
Malheureusement, le module LI101F n'est plus commercialisé et il est de plus en plus difficile d'en trouver d'occasion.

1.Interface avec LI101F et ARDUINO UNO

1.1 Montage

Le schéma de connexion de l'ARDUINO au module LI101F est donné ci-dessous.



Comme on peut le voir, le montage est très simple. Il n'y a que trois fils à relier au connecteur série du module LI101F.
Il faut inverser le signal entre la sortie TX de l'ARDUINO et l'entrée TX (broche 3) de l'interface série du module LI101F.
Pour inverser le signal, on peut utiliser un circuit CD4011 (porte NAND).
L'entrée RTS (broche 7) de l'interface série du module LI101F doit être reliée au +5V de l'ARDUINO.
Voici l'affectation des broches à utiliser sur le connecteur série du module LI101F.



1.2 Logiciel

Les données échangées entre l'ARDUINO et le module LI 101F sont conformes à la norme XPRESSNET et sont constituées d'une suite de 6 octets. Le premier octet a pour valeur 228.
Pour commander une loco d'adresse inférieure à 100 avec l'ARDUINO, il faut envoyer trois types d'instructions:

Commande de la vitesse et du sens de marche



Commande des fonctions du groupe 1 (F0 à F4)



Commande des fonctions du groupe 2 (F5 à F8)



Le débit doit être fixé à 19200 bauds avec l'instruction Serial.begin(19200);

Pour les adresses longues supérieures à 100, les octets 2 à 5 ont les valeurs indiquées dans le tableau ci-dessous.



L'octet 6 est un octet de controle obtenu en faisant un OU Exclusif des octets précédents.

Les octets 3 et 4 transmettent l'adresse longue et les valeurs AH et AL sont données par les relations suivantes:
Si l'adresse est inférieure à 100, alors AH=0 et AL=adresse
Si l'adresse est supérieure ou égale à 100 alors:
AH = int(adresse/256) + 192
AL = adresse - int(adresse/256) X 256

Commande des accessoires.

numag est le numéro de l'accessoire et posag est la valeur (0 ou 1).
Les commandes à envoyer sont données ci-dessous.


2. Interface avec ARDUINO MEGA 2560

2.1 Description du montage

Le montage à réaliser est constitué de deux éléments:
- une carte d'interface entre l'ARDUINO et le connecteur XpressNet à base d'un circuit MAX 485
- un module ARDUINO MEGA 2560
Le shéma de la carte d'interface entre l'ARDUINO et le connecteur XpressNet est donné ci-dessous:



Les pattes du circuit intégé MAX 485 sont à relier aux éléments suivants:
1: broche RX1 de l'ARDUINO
2: broche 5 de l'ARDUINO
3: broche 5 de l'ARDUINO
4: broche RX1 de l'ARDUINO
5: masse de l'ARDUINO et du connecteur XpressNet
6: entrée A du connecteur XprssNet (broche 4)
7: entrée B du connecteur XprssNet (broche 3)
8: broche +5V de l'ARDUINO

Il faut placer une résistance de 1,5 K entre le +5V et la broche 6 et une autre résistance de 1,5 K entre la broche 7 et la masse.

2.2 Le programme ARDUINO


Pour pouvoir communiquer avec l'ARDUINO, il faut installer la librairie Xpressnet.
Cette librairie permet de commander une locomotive ainsi que les accessoires.
Il y a trois instructions à utiliser.

Commande loco: vitesse et sens de marche
XpressNet.setLocoDrive (Adr_High, Adr_Low, Steps, Speed);
Steps=0 ==> 14 crans de vitesse
Steps=1 ==> 27 crans de vitesse
Steps=2 ==> 28 crans de vitesse
Steps=3 ==> 128 crans de vitesse
MAV Speed=vitesse + 128
MAR Speed=vitesse

Commande loco: fonctions
XpressNet.setLocoFunc (Adr_High, Adr_Low, val, fkt);
val=0 ==> fonction off
val=1 ==> fonction on
fkt= numéro de la fonction (entre 0 et 28)

commande des aiguilles
XpressNet.setTrntPos (AdresDccH, AdresDccB, pos);
AdresDccH=0
AdresDccB = numag - 1 (numag est l'adresse de l'aiguillage)
pos = 8 ==> aiguille direct
pos = 9 ==> aiguille déviée

A titre d'exemple et pour vérifier le fonctionnement du montage, vous pouvez télécharger le dossier intitulé arduino_xpressnet en cliquant ici.

Ce dossier comprend:
- la librairie XpressNet
- un programme Arduino intitulé test-xpressnet qui permet de commander avec le moniteur série un aiguillage d'adresse comprise entre 1 et 9. Le moniteur série doit être réglé sur le débit de 9600 bauds et pas de fin de ligne. Il faut envoyer un nombre à 2 chiffres. Le premier chiffre entre 1 et 9 est le numéro de l'aiguille et le deuxième chiffre (0 ou 1) définit l'état de l'aiguille (direct ou dévié).

Page suivante


Page précédente


Retour page d'accueil