Zusammenfassung

TL;DR 10 PCBs BPi CANBus (Thickness -> 1.6mm)

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.

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 für 17$ + Versand). 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
P12		1x5 Anreihklemme 3.5mm
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 (bei 2mA LED 1,5 kOhm)
# 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.

Hinweis

Lötbrücken lassen sich einfach mit Flußmittel und Entlötlitze entfernen. Zwischen Pin 10 und Pin 11 des FT230X ist aber auch auf dem Schaltplan eine Brücke ;-)

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 drei Images, um den BPi zu nutzen:
- Michael Bernsteins Image
- OpenWRT Image
- Armbian Image (Linux Erfahrung notwendig - nur Basis-Image)

OpenWRT Image

Das Openwrt-Image enthält alles um starten zu können:

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

Software Aktualisierung

Die Software wird laufend aktualisiert. Wenn das Basis-System nicht zu alt ist kann man Updates wie folgt einspielen:
opkg update
opkg list-upgradable
# Liste der Programme für die neue Versionen bereit stehen
# Beipiel can2udp updaten
opkg upgrade can2udp

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 Client (BPi bekommt eine IP-Adresse aus dem Heim-Netzwerk)
cd tmp
wget http://lnxpps.de/bpi/openwrt-sunxi-cortexa7-sun7i-a20-bananapi-ext4-sdcard.img.zip
unzip openwrt-sunxi-cortexa7-sun7i-a20-bananapi-ext4-sdcard.img.zip
sudo dd if=openwrt-sunxi-cortexa7-sun7i-a20-bananapi-ext4-sdcard.img of=/dev/sdX bs=1M status=progress # 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.
Das Root-Passwort lautet "knaller". Bitte ein neues Passwort ü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; das root Passwort lautet knaller):
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

Erweiterungen

LinkS88 60883

Kleines Programm zur Verwendung des LinkS88 60883 : 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

Aktuelle Version

Schaltplan V1.6 Gerber Daten V1.6
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

V1.5
- add jumper for PI3/PH2 select

V1.6
- add UART2 header

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 Openwrt, 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: