Auteur Sujet: Carte 24 entrées 48 sorties pour JMRI  (Lu 1442 fois)

nopxor

  • Jr. Member
  • **
  • Messages: 56
    • Voir le profil
Carte 24 entrées 48 sorties pour JMRI
« le: avril 13, 2018, 09:40:38 am »
C'est une carte pilotée par un Arduino Nano et qui est l'équivalent d'une carte SMINI-C/MRI.
https://www.utrainia.com/65-arduinocmri-and-rs485



Elle peut commander par exemple des aiguillages, des éclairages ou des feux de signalisation.
On peut y connecter des modules de détection de cantons ou des boutons.

Elle est reliée au PC par un bus RS485 à 2 fils grâce à un adaptateur USB-RS485 (1€ sur Ebay)
On peut connecter ensemble plusieurs de ces cartes à JMRI en les chainant par ce bus.
Chaque carte est identifiée par un numéro de node dans JMRI.
http://jmri.org/help/fr/html/hardware/cmri/CMRI.shtml#iobits

La carte utilise 6 CI 74HC595 pour les 48 sorties et 3 CI 74HC165 pour les 24 entrées (pull-upées).
Ces registres à décalage 8 bits sont chainés et reliés par 2 x 3 fils au Nano.

J'ai utilisé Eagle pour la CAO du schéma et du PCB.





J'ai fait fabriquer par JLCPCB un PCB double face compact 100 x 100 mm. (2$ les 10 ! + 11€ de port)
Je fournis les fichiers en pièce jointe.
Pour commander des PCB chez JLCPCB il suffit d'uploader sur leur site Le fichier Arduino-CMRI_Gerber.zip
https://jlcpcb.com


Le programme du Nano est ultra simple grâce aux bibliothèques CMRI et Auto485 disponibles sur le site utrainia.
Il suffit de préciser le numéro de node affecté à la carte.

/**
 * C/MRI -> JMRI via RS485
 * =======================
 * Sets up an SMINI 24 inputs, 48 outputs with an Arduino Nano.
 * Uses an RS485 bus to transparently talk support multiple ArduinoCMRI nodes on one bus.
 * By passing in an Auto485 object to the CMRI constructor, we are able to automatically
 * control the DE and RE pins on our RS485 bus transceiver.
 * The PC with JMRI has an USB-RS485 adapter connected to the bus.
 *
 * IN control:
 * Nano pin:             74HC165 pin:
 *     9        LATCH ->     1
 *     13       SCK   ->     2
 *     12       MISO  ->     9
 *     
 *     
 * OUT control:   
 * Nano pin:             74HC595 pin:
 *     6      verrou ->     12
 *     7      donnee ->     14
 *     8     horloge ->     11
 *     
 *     
 * Change the CMRI_ADDR for each board.  Each node must have its own address.   
 * ====================================
 **/

#include <Auto485.h>
#include <CMRI.h>
#include <SPI.h>

#define CMRI_ADDR 0                  // select the CMRI node address
#define    DE_PIN 2                  // Arduino pin 2 -> MAX485 DE and RE pins

// pin 74HC165
const byte LATCH = 9;

// pins 74HC595
const byte verrou = 6;
const byte donnee = 7;
const byte horloge = 8;

Auto485 bus(DE_PIN);                 // RS485 bus transceiver
CMRI cmri(CMRI_ADDR, 24, 48, bus);   // sets up an SMINI. SMINI = 24 inputs, 48 outputs

void setup() {
  bus.begin(9600, SERIAL_8N2);       // open the RS485 bus at 9600bps
  pinMode(verrou, OUTPUT);
  pinMode(donnee, OUTPUT);
  pinMode(horloge, OUTPUT);
  SPI.begin ();                      // serial data protocol used to control 74HC165
  pinMode (LATCH, OUTPUT);
  digitalWrite (LATCH, HIGH);
}

void loop() {
  // 1: main processing node of cmri library
  cmri.process();
 
  // 2: update output
  digitalWrite(verrou, LOW);                                // on commence par mettre le verrou
  shiftOut(donnee, horloge, MSBFIRST, cmri.get_byte(5));    // on envoie la sixieme donnée d'abord
  shiftOut(donnee, horloge, MSBFIRST, cmri.get_byte(4));    // on envoie la cinquieme donnée ensuite
  shiftOut(donnee, horloge, MSBFIRST, cmri.get_byte(3));    // on envoie la quatrieme donnée ensuite
  shiftOut(donnee, horloge, MSBFIRST, cmri.get_byte(2));    // on envoie la troisieme donnée ensuite
  shiftOut(donnee, horloge, MSBFIRST, cmri.get_byte(1));    // on envoie la seconde donnée ensuite
  shiftOut(donnee, horloge, MSBFIRST, cmri.get_byte(0));    // et on envoie la première donnée
  digitalWrite(verrou, HIGH);                               // et on relache le verrou pour mettre à jour les données
   
  // 3: update inputs
  digitalWrite (LATCH, LOW);                                // pulse the parallel load latch
  delay(1);                                                 // wait while data loads
  digitalWrite (LATCH, HIGH);
  cmri.set_byte(0, ~(SPI.transfer(0)));
  cmri.set_byte(1, ~(SPI.transfer(0)));
  cmri.set_byte(2, ~(SPI.transfer(0)));
}

Il y a 2 jumpers sur la carte reliés à RX et TX.
Il faut les enlever pour la programmation du Nano et les remettre après celle-ci.

L'alimentation 5V se fait sur un bornier.
Il faut la déconnecter lors de la programmation du Nano par la prise USB.

Il y a 2 borniers de connection au bus RS485 pour faciliter le chainage des cartes.
Pas besoin de résistances de terminaison de 120 ohm pour le RS485 lorsque les liaisons ne font que quelques metres.

A noter qu'une carte SMINI en kit coute 100€ (160€ assemblée).
Celle-ci devrait vous couter moins de 10€ !

La liste des composants est dans le dossier Arduino-CMRI_Eagle.zip.
Ils se trouvent couramment sur Ebay.
Les connecteurs sont au pas de 3.5mm comme ceux-là:
https://www.ebay.fr/itm/262957982206

nopxor

  • Jr. Member
  • **
  • Messages: 56
    • Voir le profil
Re : Carte 24 entrées 48 sorties pour JMRI
« Réponse #1 le: avril 13, 2018, 09:42:19 am »

Les sorties peuvent délivrer jusqu'à 35mA, mais chaque circuit 74HC595 qui comporte 8 sorties peut délivrer 70mA au maximum.

Ci-joint les fichiers Eagle:
« Modifié: avril 13, 2018, 10:22:27 am par nopxor »

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1452
  • 100% Arduino et N
    • Voir le profil
Re : Carte 24 entrées 48 sorties pour JMRI
« Réponse #2 le: avril 13, 2018, 11:06:27 am »
Bravo  ;D

C'est du professionnel !

msport

  • Sr. Member
  • ****
  • Messages: 467
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : Carte 24 entrées 48 sorties pour JMRI
« Réponse #3 le: avril 15, 2018, 09:18:52 pm »
Superbe réalisation pour les utilisateurs du protocole C/MRI !
Et la mise à disposition des fichiers Eagle mérite d'être saluée.

L'occasion de rappeler que JMRI prend en charge DCC++, mais dont la partie signalisation n'est peut-être pas la plus utilisée.
Cordialement

nopxor

  • Jr. Member
  • **
  • Messages: 56
    • Voir le profil
Re : Carte 24 entrées 48 sorties pour JMRI
« Réponse #4 le: juin 11, 2018, 06:08:45 pm »
Bonjour,

Notre ami Marcel (CATPLUS) souhaitait pouvoir tirer d'avantages de courant sur les sorties.

J'ai donc réalisé une carte booster à base de 3 ULN2803A qui se connecte directement de chaque coté des sorties de la carte principale.
Ce sont des circuits avec 8 sorties Darlington à collecteur ouvert pouvant fournir 500 mA (par sortie).
Les sorties du booster sont sur borniers aux pas de 5 mm.




Ci-joint le zip des fichiers Gerber à uploader chez le fournisseur de PCB.
Et les fichiers Eagle.

CATPLUS

  • Full Member
  • ***
  • Messages: 173
    • Voir le profil
Re : Carte 24 entrées 48 sorties pour JMRI
« Réponse #5 le: juin 11, 2018, 08:11:15 pm »
C'est du bon travail.
Merci Eric
Marcel
Best Regards

CATPLUS

  • Full Member
  • ***
  • Messages: 173
    • Voir le profil
Re : Carte 24 entrées 48 sorties pour JMRI
« Réponse #6 le: juin 12, 2018, 04:02:41 pm »
Bonjour
Ce module d'extension peut être utilisé seul
Cordialement
Marcel
Best Regards

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1452
  • 100% Arduino et N
    • Voir le profil
Re : Carte 24 entrées 48 sorties pour JMRI
« Réponse #7 le: juin 14, 2018, 10:43:26 pm »
Dis donc Marcel, il y en a des kilos sous ton réseau !!!
De cartes, de fils, etc...

Amicalement
Dominique

maxou9914

  • Newbie
  • *
  • Messages: 28
    • Voir le profil
Re : Carte 24 entrées 48 sorties pour JMRI
« Réponse #8 le: juin 18, 2018, 08:33:00 pm »
Bonjour,
Le module à base de 3 ULM2803A, fonctionnera t'il en sortie de la carte PCA9685 ( la carte PWM) afin d'amplifier les sorties ?
je garde un signal modulé en sortie ?
Quelle est la puissance maximal sur le circuit ? 500mA * 8 sorties ?

En attente de votre retour.

Maximilien

CATPLUS

  • Full Member
  • ***
  • Messages: 173
    • Voir le profil
Re : Carte 24 entrées 48 sorties pour JMRI
« Réponse #9 le: juin 19, 2018, 06:58:29 am »
Bonjour Maximilien

N'ayant et ne connaissant pas le type de circuit que tu utilise je ne puis te répondre.
Tu dois appliquer un signal plus sur l'entrée du ULN2803a,  en sortie le signal sortira en moins

Regarde le sujet traité sur Locoduino

http://www.locoduino.org/spip.php?article10#forum1571

Cordialement
Marcel

Best Regards

msport

  • Sr. Member
  • ****
  • Messages: 467
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : Carte 24 entrées 48 sorties pour JMRI
« Réponse #10 le: juin 19, 2018, 10:40:53 am »
A priori, pas de problème pour commander un ULN2803 dont l'entrée (2,7Kohm) est compatible avec les niveaux TTL.

Par contre, c'est un boitier DIL qui n'est pas fait pour dissiper une forte puissance en permanence (bien adapté pour des impulsions)
à 350mA, la tension résiduelle est typiquement 1,3V, max 1,6V, soit un maximum de 4,5W pour 8 sorties.

A réduire donc, expérimentalement. Ou faire le calcul de la datasheet. Mais à mon avis ne pas dépasser 1/2 W. On peut coller un petit radiateur dessus.

L'autre aspect, le PWM, si il est à 200Hz, il ne devrait pas poser de problème.

Les LED doivent être en anode commune. Les ULN2803 absorbent le courant.
Cordialement

maxou9914

  • Newbie
  • *
  • Messages: 28
    • Voir le profil
Re : Carte 24 entrées 48 sorties pour JMRI
« Réponse #11 le: juin 19, 2018, 09:53:53 pm »
Merci pour vos réponse je vaisen prendre 2/3 pour faire des essais