Le présent document spécifie le choix des composants et l’architecture matérielle pour la réalisation d’un décodeur DCC miniature embarqué.
[Signal Rails DCC - 19V RMS]
│
┌──────────┴──────────┐
│ Pont de Diodes SMB │
└──────────┬──────────┘
│
[V_RECT ~18V]
┌─────────────────────────────┼─────────────────────────────┐
│ │ │
▼ ▼ ▼
┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐
│ Étage Dépression │ │ Driver Moteur │ │ Convertisseur │
│ Signal │ │ (Pont H) │ │ Buck Step-Down │
└─────────┬────────┘ └─────────┬────────┘ └─────────┬────────┘
│ (Opto/Trans) │ │ (VCC_5V)
▼ │ ┌───────────────┴───────────────┐
[Broche PA1 / INT] │ │ │
│ │ ▼ ▼
▼ │ ┌───────────────┐ ┌───────────────┐
┌──────────────────┐ │ │ LDO 3.3V │ │ Bus LED RGB │
│ Microcontrôleur │ │ └───────┬───────┘ │ WS2812B (5V) │
│ ATtiny1616 ├────────────────────┤ │ (VCC_3V3) └───────────────┘
└──────────────────┘ (PWM Moteur) ▼ ▼
[Moteur DC] ┌───────────────┐
│ Logic MCU │
│ & Opto (3.3V) │
└───────────────┘
| Fonction | Référence | Boîtier | Description & Rôle | Justification / Contraintes |
|---|---|---|---|---|
| Pont de Diodes | MB10S ou HD02 | TO-269AA (MBS) / Mini-DIP | Pont de diodes | Supporter DCC (). Chute de tension . |
| Condensateur Filtrage | 100 µF / 25V | Alum. SMD ou Tantale | Filtrage V_ | Absorbe les micro-coupures de courant sur les rails. |
| Protection TVS | SMAJ24A | SMA | Diode Transil Unidirectionnelle 24\text | Élimine les pics d’extra-rupture inductive du réseau DCC. |
L’alimentation est séparée en deux étages pour éviter la surchauffe due à la chute de tension importante ().
| Fonction | Référence | Boîtier | Description & Rôle | Justification / Contraintes |
|---|---|---|---|---|
| Régulateur Buck (5V) | MP1584EN ou TPS54231 | SOIC-8-EP | Convertisseur à découpage 28\text{ V} \rightarrow 5\text{ V} / 1,5\text | Rendement . Nécessaire pour alimenter la ligne WS2812B sans dissiper de chaleur en pure perte. |
| Régulateur LDO (3.3V) | AP2112K-3.3 ou XC6206P332MR | SOT-23-5 / SOT-23 | Régulateur Linéaire 5\text{ V} \rightarrow 3,3\text{ V} / 600\text | Fournit une tension ultra-propre et stable pour le cœur ATtiny1616 et l’étage de découpage du signal DCC. |
| Fonction | Référence | Boîtier | Description & Rôle | Justification / Contraintes |
|---|---|---|---|---|
| Optocoupleur Rapide | 6N137 ou TLP2362 | SOIC-8 / SO6 | Optocoupleur Haute Vitesse () | Obligatoire pour restituer la forme d’onde carrée du DCC ( par demi-période) sans déformation. |
| Diode de Protection | 1N4148WS | SOD-323 | Diode tête-bêche sur la LED de l’opto | Protège la LED interne de l’optocoupleur contre les tensions inverses du signal alternatif DCC. |
| Fonction | Référence | Boîtier | Description & Rôle | Justification / Contraintes |
|---|---|---|---|---|
| Microcontrôleur | ATTINY1616-MNR | QFN-20 () | MCU 8-bit AVR, Flash, SRAM | Petit boîtier. Périphériques intégrés modernes (Event System, Timer Waveform Extension) parfaits pour la génération du signal WS2812B et la gestion de la PWM moteur. |
| Fonction | Référence | Boîtier | Description & Rôle | Justification / Contraintes |
|---|---|---|---|---|
| Driver Moteur | DRV8870DDAR | SOIC-8-EPPont en H crête | idéal pour DCC. Protection contre les courts-circuits moteur, mesure du courant via résistance ISEN. très faible (). | |
| Résistance Shunt | 0.25 / 0,5W (1206)SMD | 1206 | Limiteur de courant sur broche ISEN | Fixe la limitation de courant matériel à environ . |
| Fonction | Référence | Boîtier | Description & Rôle | Justification / Contraintes |
|---|---|---|---|---|
| LEDs Adressables | WS2812B-B-3535 ou SK6812-EC20 | 3535 () ou 2020 | LED RGB avec driver intégré | Alimentées en par le régulateur Buck. Pilotables via une seule broche GPIO de l’ATtiny1616. |
[Rail A] ───┬───────────────────────────────────────────┐
│ │
[R_DCC 1kΩ] │
│ │
├──────► [Diode 1N4148 (Anode)] │
│ │ │
│ [Optocoupleur 6N137 (Pin 2/3)] [Pont MB10S (AC1)]
│ │ │
├──────► [Diode 1N4148 (Cathode)] │
│ │
[Rail B] ───┴───────────────────────────────────────────┴──► [Pont MB10S (AC2)]
│
[V_RECT ~18V]
│
┌───────────────────────────────────────────────────────┴───────────────────────┐
│ │
▼ ▼
[MP1584EN (Buck)] [DRV8870 (VM)]
│ │
├──────────────────────────────┐ │
│ (VCC_5V) │ │
▼ ▼ │
[AP2112K (LDO)] [Bus WS2812B (VDD)] │
│ │
│ (VCC_3V3) │
▼ │
[ATtiny1616 (VDD)] │
├── Pin PA1 (INT) ◄─── [Output 6N137] │
├── Pin PA4 (PWM) ────────────────────────────────────────────────────────► [IN1] │
├── Pin PA5 (PWM) ────────────────────────────────────────────────────────► [IN2] │
└── Pin PB2 (OUT) ───► [R_330Ω] ───► [DIN WS2812B] │
▼
[Moteur DC]
Pour réaliser la partie électronique et logicielle d’un émetteur RailCom côté décodeur avec un ATtiny1614, il faut tirer parti des périphériques matériels modernes de cette puce (série ATtiny 1-series), notamment son USART performant et ses comparateurs/timers.
Le ATtiny1614 fonctionne généralement en 3.3V ou 5V (régulé à partir de la tension des rails). L’émetteur RailCom doit moduler la consommation de courant sur les rails sans perturber le microcontrôleur.
Composants requis :
Schéma de câblage :
[ V_RECT (Sortie + du pont de diodes DCC) ]
|
[R_load] (390 Ohms)
|
+--------+
|
D R A I N
ATtiny1614 G A T E [Q1] (BSS138)
[Broche PA1 (TXD)] ---> [R_gate] ------->|
(Configurée en UART) S O U R C E
|
|
[ GND (Masse commune du décodeur) ]
L’ATtiny1614 possède un USART matériel qui supporte parfaitement les débits élevés. Pour RailCom, la vitesse standard est de 250 000 bauds (8N1, logique inversée ou directe selon le protocole, mais généralement standard avec 1 bit de start à 0 et bit de stop à 1).
Étape A : Configurer l’Horloge et l’UART (250k Bauds)
Pour atteindre 250 000 bauds avec précision, il est recommandé de faire tourner l’ATtiny1614 à 16 MHz ou 20 MHz avec son oscillateur interne.
#include <avr/io.h>
void UART_init(void) {
// Étape 1: Configurer la broche PA1 (TXD) en sortie
PORTA.DIRSET = PIN1_bm;
// Étape 2: Calculer la valeur du registre BAUD pour 250 000 bauds
// Formule pour le mode normal (CLK_PER = 16 MHz) : BAUD = (64 * CLK_PER) / (16 * Baudrate)
// BAUD = (64 * 16000000) / (16 * 250000) = 256
USART0.BAUD = 256;
// Étape 3: Activer la transmission (TX)
USART0.CTRLB = USART_TXEN_bm;
// Étape 4: Format 8N1 (8 bits de données, pas de parité, 1 bit de stop)
// C'est la configuration par défaut de CTRLC, mais on s'en assure :
USART0.CTRLC = USART_CHSIZE_8BIT_gc | USART_SBMODE_1STOP_BIT_gc;
}
void UART_sendByte(uint8_t data) {
// Attendre que le tampon de transmission soit vide
while (!(USART0.STATUS & USART_DRE_IF_bm));
// Envoyer la donnée
USART0.TXDATAL = data;
}
C’est l’étape la plus critique. L’émetteur ne doit envoyer des données que pendant que la centrale DCC applique le « cutout » (les deux rails sont mis au même potentiel, interrompant le signal DCC pendant maximum 488 μs).
Logique de détection :
Encodage des données (Obligatoire pour RailCom) :
RailCom utilise un encodage 4-bit/8-bit. Vous ne pouvez pas envoyer directement vos variables en octets bruts sur l’UART.
Chaque groupe de 4 bits utiles doit être converti en un octet de 8 bits contenant exactement le même nombre de 0 et de 1 (code équilibré) pour stabiliser le récepteur. La spécification NMRA RP 9.3.2 fournit la table de correspondance (Lookup Table) pour effectuer cette conversion rapidement en mémoire.
Pour aller plus loin, avez-vous besoin :
• Du tableau de conversion logiciel 4-bit/8-bit (Lookup Table) conforme NMRA ?
• Du schéma du pont diviseur/détecteur de tension pour relier le rail DCC à la broche d’interruption de l’ATtiny1614 ?
• De l’exemple de configuration du Timer (TCB0) pour détecter précisément la coupure RailCom ?