Zusammenfassung

Aufbau eines Servers mit CAN Interfaces zur Nutzung der Gleisbox als Zentrale



Die Kombination bietet einen preisgünstigen Einstieg in die digitale Modellbahnsteuerung. Im Gegensatz zu anderen, preiswerten Zentralen wird auch mfx unterstützt.

Den BananaPi kann man mittlerweile so günstig bekommen, das ein externes CAN-Interface preislich unterboten wird. Obendrein erhält man noch ein netzwerkfähigen Linux Einplatinen-Computer, den man z.B. als Rocrail-Server verwenden kann. Oder man verwendet den BPi mit der Gleisbox, um M*rklins CS2 zu ersetzen.

Im Gegensatz zu einem RaspberryPi mit einem über SPI angebundenen MCP2515 ist diese Lösung wesentlich einfacher nachzubauen und läuft zudem stabil - keine verlorenen oder vertauschten CAN-Frames und kein Hängen im Vergleich zum RPi.

Auch wenn versucht wird, alles so einfach wie möglich zu machen, sind etwas Löterfahrung und Linux-Grundkenntnisse für den Nachbau erforderlich.

Benötigte Komponenten

- Gleisbox (60112, 60113 oder 60116)
- BananaPi M1(für die Platine)
- SDHC-Karte (2GByte reichen)
- Netzteil Micro USB
- MCP2562 + 2x 100nF Kondensatoren und Lochrasterplatine
alternativ kann auch ISO1050 zur galvanischen Trennung benutzt werden
- USB2Seriell Wandler
- ggf. Stecker vom CdB Projekt
- Streifen Lochrasterplatine oder industriell gefertigte Platine (siehe unten)

CAN-Bus Interface

Der auf dem BananaPi verbaute SoC (Allwinner A20) hat einen eingebauten CAN-Controller. Es fehlt nur noch ein CAN-Transceiver. Als einfachstes verwendet man einen MCP2562 und verbindet CANH, CANL und GND (Masse) mit der Gleisbox Buchse. Hier der prinzipielle Aufbau, den man auch auf einer Lochrasterplatine umsetzen kann:

Alternativ kann man das Interface auch mit einem ISO1050 aufbauen. Dadurch ist der CAN-Bus galvanisch vom Rest der Schaltung getrennt.

Wer den Mini-DIN10 Stecker einsparen will, baut eine Steckverbindung nach eigener Vorstellung in die Gleisbox ein.

Ich habe eine Platine entworfen und diese fertigen lassen:
CAD Modell:

Gefertigte Platinen:


Da noch Platz auf der Aufsteck-Platine vorhanden war, wurden noch zusätzliche Interfaces untergebracht:

PCB und Minimal-Bestückung

Die Platine kann von mir bezogen werden oder direkt von einem Aufragsfertiger (10 Stück). Gewünschte Farbe auswählen (ich bevorzuge gelb) und Dicke auf 1.6mm stellen

Die Platine ist modular aufgebaut; nicht benötigte Interfaces müssen nicht bestückt werden.
Die alte Version 1.0 enthält leider einen Fehler im USB Teil. Für den normalen Betrieb ist USB aber nicht notwendig - einfach unbestückt lassen.

Hier die Bauteile-Liste der Minimal-Version (nur CAN-Bus ohne galvanische Trennung) wie oben abgebildete Platine (ohne USB):
Reichelt Bestell-Liste
Das sind:
U1		MCP2562
R1		120 Ohm
R21,R22,R23	Drahtbrücken
C1,C2		100nF
P1		2x13 Buchsenleiste (auf der Rueckseite)
P3		1x4 Buchsenleiste (auf der Rueckseite)
P4		1x6 Buchsenleiste (auf der Rueckseite)
P5		1x2 Steckerleiste + Jumper
P12		1x5 Anreihklemme 3.5mm
P21		1x3 Steckerleiste
Über P12 müssen folgende Verbindungen zur Gleisbox hergestellt werden:
CANH
CANL
GND
Zusammen mit einem BPi und einer Gleisbox ist damit das digitale Steuern der Modellbahn bereits möglich.

Alternative: mit galvanischer Trennung


Alternativ kann die Platine incl. galvanischer Trennung bestückt werden:
U12		ISO1050
R20		120 Ohm SMD 1205
C18,C19		100nF SMD 0805
P1		2x13 Buchsenleiste
P3		1x4 Buchsenleiste
P4		1x6 Buchsenleiste
P19		1x2 Steckerleiste + Jumper
P21		1x3 Steckerleiste
# für ext. Versorgung des Transceivers (z.B. über Gleisbox)
C3,C4           100nF
U2		7805
# Anzeige der 5V Spannung
D5		3mm LED
R12		330 bis 470 Ohm
# alternativ
D4		LED SMD 0805
R11		330 bis 470 Ohm SMD 0805
R21, R22 und R23 nicht bestücken !

Wenn man die notwendigen 5V nicht extern über P12 zuführt, dann besteht auf der Platine die Möglichkeit, die Spannung mit U2, C3 und C4 zu generieren (z.B. aus den 18V der Gleisbox über P12-Vcc). Ausserdem sind noch ein Widerstand und eine LED (bedrahtet R12 und D5 oder SMD R11 und D4) nahe U2 untergebracht, die eine Versorgungsspannung am CAN-Transceiver signalisiert.

Über P12 müssen folgende Verbindungen zur Gleisbox hergestellt werden:
CANH
CANL
GND
VCC

Option: Integrierter USB-Serial Wandler (ab Platinen-Version 1.1)

Ab der Platinen Version 1.1 besteht die Möglichkeit, einen USB2Serial Wandler auf der Platine aufzubauen. Gerade zum Debuggen (z.B. bei fehlender Netzwerkverbindung) ist diese Erweiterung nützlich.

U13		FT230XS
D2, D3		LED rot SMD 0805
R16, R17	27 Ohm SMD 0805
R18, R19	220 - 330 Ohm SMD 0805
C23, C24	47pF SMD 0805
C20, C25	100nF SMD 0805
C22		10nF SMD 0805
C26		4,7uF SMD 0805
F1		Ferrit Perle MI0805K601R-10
P13		USB-B Socket
Es handelt sich nur um eine Option. Es kann natürlich auch ein preiswerter USB2Serial Wandler (3V3) an P21 verwendet werden.

Option: S88 mit galvanischer Trennung


Auf der Adapter-Platine befindet sich auch eine S88(N) Schnittstelle. Dazu müssen folgende Bauteile aufgelötet werden:
U3,U4,U5,U6	6N137
R2,R3,R4	270 Ohm
R5		390 Ohm
R6		330 Ohm
R7,R8,R9	1k5 Ohm
C5,C6,C7,C8	100nF
P6		1x6 Anreihklemme 3,5 mm
Die Adapter Platine liefert nicht die 5V Versorgungsspannung für die S88-Module. Diese muss extern zugeführt werden.

Software

Es gibt mittlerweile zwei Images, um den BPi zu nutzen:
- Michael Bernsteins Lösung
- OpenWRT Image

Lede (OpenWRT Nachfolger) Images

Binärpaket (DHCP Server) bzw. Binärpaket (DHCP Client) (Hinweis für Firefox Nutzer zum Download: rechte Maustaste -> Ziel speichern unter)

Beim Entpacken unter Windows (z.B. mit 7zip) taucht häufig das Problem auf, das das Entpackprogramm das bereits entpackte IMG-File nochmals entpacken will - erkennbar an einer zusätzlichen 0.fat Datei. Dadurch ist das Image-File unbrauchbar. In diesem Fall bitte Binärpaket DHCP Client ZIP bzw. DHCP Server ZIP nutzen.

Die Images enthalten alles um Starten zu können:

- Init Skript für das CAN Interface
- can2lan
- Rocrail (wird nicht automatisch gestartet)

Vorbereitung SDHC-Karte

Ist die SD-Karte schon mal benutzt worden, sollte die Karte einmal komplett gelöscht werden. Dazu ist der SDFormatter geeignet.
Das Image muss entpackt und dann auf die SDHC Karte gespeichert werden:
# DHCP Server (BPi bietet IP-Adressen an - autarke Lösung)
cd tmp
wget http://lnxpps.de/bpi/bin/lede-sunxi-Bananapi-sdcard-vfat-ext4.img.gz
gunzip lede-sunxi-Bananapi-sdcard-vfat-ext4.img.gz
sudo dd if=lede-sunxi-Bananapi-sdcard-vfat-ext4.img  of=/dev/sdX bs=1M # X anpassen
oder
# DHCP Client (BPi bekommt eine IP-Adresse aus dem Heim-Netzwerk)
cd tmp
wget http://lnxpps.de/bpi/bin/lede-sunxi-Bananapi-sdcard-vfat-ext4_dhcp-client.img.gz
gunzip lede-sunxi-Bananapi-sdcard-vfat-ext4_dhcp-client.img.gz
sudo dd if=lede-sunxi-Bananapi-sdcard-vfat-ext4_dhcp-client.img  of=/dev/sdX bs=1M # X anpassen
Unter MacOS kann dazu auch der ApplePi-Baker verwendet werden.
Windows Benutzer verwenden z.B. Win32DiskImager.

Konfiguration auf dem BPI anpassen

Die SDHC Karte sollte nur im abgeschalteten Zustand des BPis eingesteckt werden.
Anfangs ist kein Root-Passwort gesetzt. Bitte eins über die Weboberfläche oder per 'passwd' auf der Console setzen.

HDMI wird vom Image nicht unterstützt. Der Bootloader zeigt zwar eine Grafik, aber danach bleibt der HDMI Ausgang ohne Funktion. Eine über USB angeschlossene Tastatur bleibt unberücksichtigt.

Nachdem die Karte eingesteckt und das Netzteil eingeschaltet wurde, ist das Einloggen über serielle Schnittstelle (115200 8N1 kein Handshaking) möglich:

Mit Aufsteckplatine:
                           GND TX RX
             J12   o  o  o  o  o  o
{SD slot}          o  o  o  o
Mit Aufsteckplatine:

Achtung ! Die serielle Schnittstelle des BPis verträgt nur 3V3 !

Prinzipiell kann man auch die Erst-Konfiguration über Netzwerk durchführen. Änderungen sind aber mit Bedacht vorzunehmen - man sägt am eigenen Ast :-)

Auf dem Adapterplatine liegen GND, TX und RX auf P21. TX und RX sind im Normalfall mit dem USB2Serial Wandler zu kreuzen.

Hier die Anpassung als DHCP Client - sofern nicht das Client Image genommen wurde:
# Stopp DHCP Server
/etc/init.d/odhcpd stop
/etc/init.d/odhcpd disable
/etc/init.d/dnsmasq stop
/etc/init.d/dnsmasq disable

vi /etc/config/network
# "option proto 'static'" aendern in "option proto 'dhcp'"
# "option ipaddr ..." loeschen
# "option netmask ..." loeschen

Nutzung eines externen WiFI Adapters

Das BPi-Board besitzt keinen internen WLAN Controller. Über USB kann man aber einen Standard USB-WiFi Sticks verwenden.

Die Konfiguration kann über die integrierte Web-Schnittstelle erfolgen. Dazu entweder mit dem Kabel ins bestehende Netzwerk verbinden (DHCP-Client) oder über Kabel sich mit dem BPi verbinden (DHCP-Server).

Die Webschnittstelle ist über http://<ip-adresse> erreichbar. Die IP-Adresse ist beim DHCP-Client Image vom zentralen Router vergeben worden - beim DHCP-Server Image ist das die IP-Adresse des Default-Gateways.

Nutzung

Rocrail automatisch starten (Einzustellen über serielle Console oder Putty - SSH Port 22; root Passwort ist anfangs ungesetzt):
cp /root/roc* /etc/init.d/
# automatisch starten (nur einmal notwendig)
/etc/init.d/rocnetnode enable
/etc/init.d/rocrail enable
# jetzt starten
/etc/init.d/rocnetnode start
/etc/init.d/rocrail start

M*rklin App / RemoteCS2 nutzen

Das Image ist so aufgebaut, das M*rklins PC Software (incl MAC Version) ohne Anpassung als Master direkt nutzbar ist. Möchte man auch die M*rklin App oder RemoteCS2 nutzen, muss man noch verschiedene Dateien des PC Programms auf den BPi kopieren (FTP wird vom Image nicht unterstützt, aber SCP):
# M*rklin PC Dateien liegen bei mir hier:
cd ~/projekte/maerklin/cs2

# 192.168.0.159 ist mein BPi
scp *.cs2 root@192.168.0.159:/www/config
scp -r gleisbilder root@192.168.0.159:/www/config
scp -r icons root@192.168.0.159:/www
scp -r fcticons root@192.168.0.159:/www
scp -r magicons_ root@192.168.0.159:/www
Komfortabel geht das Kopieren mit WinSCP (Windows) bzw CyberDuck (MacOS).
Alternativ kann man die Dateien aber auch von der CS2.exe (Master) holen:
clone-cs2-trigger -vf -i0 # Programm meldet sich sofort mit Prompt wieder - das Kopieren indes dauert bis zu 30 Sekunden 
cd ; ./get-icons.sh       # laedt CS2 Image von M*rklins Web-Seite und kopiert die Icons ins entsprechende Verzeichnis

Erweiterungen

LinkS88

Kleines Programm zur Verwendung von M*rklins Link S88: wake-up-links88
root@Modellbahn-BPi:/# wake-up-links88 -h

Usage: wake-up-links88 -i <can interface>
   Version 1.21

         -c <config_string>  config string "B1=1,T1=10,B2=3"
         -i <can int>        can interface - default can0
                             means: B1=1  -> bus 1 length one module
                                    T1=10 -> bus 1 cycle time 10ms
                                    B2=3  -> bus 2 length three modules
         -d                  daemonize
         -e #no_of_links88   exit after no of LinkS88 responded - default 1

Hardware Test - einfache Variante

Falls keine Verbindung zum CAN-Bus (can state BUS-ERROR) aufgebaut wird, bitte folgende Verbindungen im stromlosen Zustand überprüfen:

Im abgeschalteten Zusand misst man ein Widerstand von 60 Ohm zwischen CAN-High und CAN-Low.

Debugging

anbei ein paar Befehle zum Debuggen:
# alle CAN Frames auf Console anzeigen
candump -tA -xe can0,0:0,#FFFFFFFF

# CAN Interfaces Statistik
ip -s -d link show can0
3: can0:  mtu 16 qdisc fq_codel state UNKNOWN mode DEFAULT group default qlen 10
    link/can  promiscuity 0 
    can state ERROR-ACTIVE (berr-counter tx 0 rx 0) restart-ms 0 
	  bitrate 250000 sample-point 0.875 
	  tq 250 prop-seg 6 phase-seg1 7 phase-seg2 2 sjw 1
	  sun4i_can: tseg1 1..16 tseg2 1..8 sjw 1..4 brp 1..64 brp-inc 1
	  clock 24000000
	  re-started bus-errors arbit-lost error-warn error-pass bus-off
	  0          0          0          0          0          0         
    RX: bytes  packets  errors  dropped overrun mcast   
    34314      4399     0       0       0       0       
    TX: bytes  packets  errors  dropped carrier collsns 
    25259      4284     0       0       0       0       
# ERROR-ACTIVE ist richtig: alles OK

Hintergrundinformationen

zur Info - nicht nur für Profis

Versionen

Schaltplan Version 1.0 Gerber Daten V1.0
Schaltplan Version 1.1 Gerber Daten V1.1
Gerber Daten V1.2
Gerber Daten V1.3
Gerber Daten V1.4
V1.0
- first version

V1.1
- moved R12 to avoid short
- fixed USB to serial
- add I2C pullup
- made SMD 0805 footprint handsoldering smaller
- changed LED from 1206 to 0805
- changed DIL housing a little bit by using less F.Skills lines

V1.2
- fix MiniDIN10 sockets
- optimized routing

V1.3
- optimized routing
- add I2C pin header

V1.4
- optimized routing
- add more headers

CON3 GPIOs


UARTS

      uart0: serial@01c28000
      uart1: serial@01c28400
      uart2: serial@01c28800
      uart3: serial@01c28c00
      uart4: serial@01c29000
      uart5: serial@01c29400
      uart6: serial@01c29800
      uart7: serial@01c29c00
Default:
ttyS0(UART0) -> Console
ttyS1(UART3)
ttyS2(UART7)
geändert auf:
ttyS0(UART0) -> Console
ttyS1(UART2) - mit RTS/CTS
ttyS2(UART3)

Erstellung des Image

Infos zur Erstellung der Images - für das Nutzen der Software nicht notwendig.
Basis ist lede, ein für Router optimierte Linux Distribution. Ein Vorteil dieser Distributionen: das System kann zu jeder Zeit ausgeschaltet werden, ohne das Daten verloren gehen. Zusätzlich ist das File-System ext4 - ein sog. Jornalizing File-System.

Selbstbau Kurzanleitung

Reduced to the max

Impressum: