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 TX1 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

Chaque commande envoyée par le PC est constituée d'une suite de 4 octets :

Commande de vitesse et sens de marche
octet1= Adresse_High
octet2= Adresse_Low
octet3= 10+bl
avec bl=0 ==> 14 crans de vitesse
bl=1 ==> 27 crans de vitesse
bl=2 ==> 28 crans de vitesse
bl=3 ==> 128 crans de vitesse
octet4=vitesse si MAR
octet4=vitesse+128 si MAV

Commande de fonction
octet1=Adresse_High
octet2= Adresse_Low
octet3=0 ==> fonction off
octet3=1 ==> fonction on
octet4= numéro de fonction entre 0 et 28

Commande d'accessoires
octet1=0
octet2=numag-1
octet3=22
octet4=8 ==> aiguille direct
octet4=9 ==> aiguille déviée

Calcul de Adresse_High et Adresse_Low
Si l'adresse est <= 100 alors:
Adresse_High = 0
Adresse_Low = adresse
Si l'adresse est > 100 alors:
b=partie entière (adresse/256)
Adresse_High = 192 + b
Adresse_Low = adresse - b x 256

2.3 Programme de commande PC avec le logiciel PROCESSING.


Ce programme écrit avec le logiciel PROCESSING est un petit régulateur qui permet de piloter une loco avec la centrale LENZ.
Voici une copie d'écran du logiciel:



Avant d'utiliser ce logiciel, il faut lui indiquer le numéro du port COM de l'ARDUINO en modifiant la ligne de code ci-dessous:
myPort = new Serial(this,"com10", 9600);
Remplacer com10 par le port COM de l'ARDUINO.

2.4 Téléchargement des programmes


Vous pouvez télécharger le dossier intitulé arduino_xpressnet en cliquant ici.

Ce dossier comprend:
- la librairie XpressNet
- le programme pour ARDUINO MEGA
- le régulateur PROCESSING

Page suivante


Page précédente


Retour page d'accueil