Resumen

10 PCBs BPi CANBus (Grosor -> 1.6mm)

Usa una minicomputadora (SBC - Single Board Computer) con interface CAN-Bus para controlar modelos de ferrocarriles en miniatura. Idea de: Gleisbox como Central digital (lamentablemente, sólo en alemán).



Este desarrollo ofrece una introducción a un precio razonable al control digital de trenes eléctricos miniatura. A diferencia de otras centrales digitales de bajo coste, el protocolo mfx también está incluido y es completamente compatible. 

El SBC utilizado es el denominado BananaPi (BPi), que es bastante barato e incluye una interface CAN-Bus. Además de éso, se obtiene una computadora corriendo Linux y habilitada para la conexión a una red Ethernet que se puede, por ejemplo, usar como servidor de Rocrail e interface para la Gleisbox al mismo tiempo.

A diferencia de usar la Rapsberry Pi como SBC en combinación con un MCP2515 que incluye bus SPI, la solución de la BPi es mucho más sencilla de replicar y ejecutar de una manera estable, ya que no se pierden ni intercambian paquetes del bus Can y tampoco se obtienen cuelgues del sistema. 

Incluso tratar de hacer las cosas de la manera más fácil posible requiere algo de experiencia en soldadura y conocimiento básico de Linux para la fabricación.

Componentes necesarios

- Gleisbox (60112, 60113 ó 60116)
BananaPi M1(como tarjeta principal de control)
- Tarjeta SDHC (2 GByte son suficientes)
- Cargador Micro USB (5V 2A DC)
- MCP2562 + 2x Condensadores de 100nF o como alternativa usar el ISO1050 para aislamiento galvánico del resto del circuito
- Conversor USB2-Serie (el más barato que se encuentre)
- Conectores MiniDin hembra de 10 pines que se pueden obtener de: Proyecto CdB
- Placa de prototipos o PCB industrial (ver abajo)

CAN-Bus Interface

El microprocesador (Allwinner A20) integrado en la BPi incluye un controlador CAN. Solo le falta el transceptor del CAN-Bus. La forma más sencilla de implementarlo es usar un MCP2562 y conectar los hilos: CAN-High, CAN-Low y GND (masa electrónica, no de vía) con el conector de la Gleisbox. A continuación, está su el esquema básico que se puede realizar sobre una placa de prototipos:

Alternativamente, se puede construir la interfaz con un ISO1050. Como resultado, el bus CAN está aislado galvánicamente del resto del circuito.

Si se quiere mantener la funcionalidad de los conectores Mini-DIN10, instale otro conector adicional en la Gleisbox.

Diseñé y fabriqué una placa de circuito impreso:

- Modelo CAD:


- PCB fabricados:



Como aún quedaba espacio en la tarjeta se incorporaron interfaces adicionales:
- Nueva Versión 1.5:



La nueva versión de la PCB incluye todos las funciones de las versiones anteriores.

La versión 1.5 es un conjunto de 4 tarjetas: 

PCB y montaje mínimo

La PCB se puede obtener directamente de mí o a través de un  Fabricante (10 piezas por 17$ + envío). Selecciona el color deseado (yo prefiero el amarillo) y configura un grosor de 1.6mm



La PCB es modular, no es necesario montarla por completo para su funcionamiento, solo es necesario montar las interfaces requeridas. La versión 1.0, desafortunadamente, tiene un fallo en la parte del diseño del USB integrado. Para un funcionamiento normal, esta parte no es necesario, simplemente se puede dejar sin soldar.

Aquí está la lista de componentes de la versión mínima, bus CAN sin aislamiento galvánico, como se muestra arriba (sin USB): Lista de componentes en Reichelt
Son éstos:
U1		Transceptor CAN de alta velocidad MCP2562, DIP-8
R1		Resistencia metálica 120 Ohm, 1% y 0,6W
R21,R22,R23	Puentes de cable
C1,C2		Condensador cerámico de 100nF 
P1		Conector hembra para PCB de 2x13 pines  y paso 2,54mm (soldado en la cara inferior)
P3		Conector hembra para PCB de 1x4 pines y paso 2,54mm (soldado en la cara inferior)
P4 Conector hembra para PCB de 1x6 pines y paso 2,54mm (soldado en la cara inferior)
P5 Conector macho para PCB de 1x2 pines y paso 2,54mm + Jumper de paso 2.54mm
P12 Terminal de tornillo para PCB de 5 polos y paso 3.5mm P21 Conector macho para PCB de 1x3 pines y paso 2,54mm
Las siguiente conexiones a la Gleisbox deber realizarse a través de P12:
- CANH
- CANL
- GND
Junto a la BPI y su conexión a la Gleisbox, el control digital de los trenes miniatura, ya es posible.

Alternativa: con aislamiento galvánico:


Alternativamente la placa puede estar equipada con aislamiento galvánico:
U12		Transceptor de alta velocidad ISO1050, SOP-8
R20		120 Ohm SMD 1205
C18,C19		100nF SMD 0805
P1		Conector hembra para PCB de 2x13 pines y paso 2,54mm
P3		Conector hembra para PCB de 1x4 pines y paso 2,54mm
P4		Conector hembra para PCB de 1x6 pines y paso 2,54mm
P12		Terminal de tornillo para PCB de 5 polos y paso 3.5mm
P19		Conector macho para PCB de 1x2 y paso 2,54mm + Jumper de paso 2,54mm
P21		Conector macho para PCB de 1x3 pines y paso 2,54mm

# para alimentación externa del transceptor (por ejemplo, a través de la Gleisbox)
C3,C4           Condensador cerámico de 100nF
U2		Regulador fijo de tensión LM7805, TO220

# Visualización del voltaje de 5V
D5		Led 3mm
R12		Resistencia de 330 ó 470 Ohm, 1/4W (2mA LED 1k5 Ohm)

# Visualización alternativa del voltaje de 5V
D4		LED SMD 0805
R11		Resistencia 330 ó 470 Ohm SMD 0805
** ¡¡R21, R22 y R23 no deben ser soldados!!

Si no se suministran los 5V externamente a través de P12-5V, es posible generarlos internamente a través de U2, C3 y C4 (por ejemplo, desde los 18V de la Gleisbox a través de P12-Vcc) Además, mediante una resistencia y un LED (R12 y D5 o en formato SMD R11 y D4) que están alojados cerca de U2, se señala el voltaje de suministro en el transceptor CAN. 

Las siguientes conexiones con la Gleisbox deben realizarse a través de P12:
- CANH
- CANL
- GND
- VCC

Opción: Conversor USB-Serie integrado (a partir de la PCB versión  1.1)

Desde la versión 1.1 de la PCB, es posible construir un conversor USB-Serie incorporado en la propia PCB. Especialmente, para la depuración (por ejemplo, si no hay conexión de red ethernet disponible), esta extensión es útil.

U13		FT230XS
D2, D3		LED rojo SMD 0805
R16, R17	Resistencia de 27 Ohm SMD 0805
R18, R19	Resistencia de 220 - 330 Ohm SMD 0805
C23, C24	Condensador de 47pF SMD 0805
C20, C25	Condensador de 100nF SMD 0805
C22		Condensador de 10nF SMD 0805
C26		Condensador de 4,7uF SMD 0805
F1		Núcleo de ferrita MI0805K601R-10
P13		Conector tipo USB-B
Es completamente opcional, se puede usar un conversor USB-Serie (3V3) externo conectado en P21.

Consejo:

Los puentes de soldadura accidentales entre pines del FT230XS son fáciles de eliminar con flush y malla de desoldura. Entre el pin 10 y el pin 11 del FT230XS hay un puente, que también está reflejado en el esquema. ;-)

Opción: S88 con aislamiento galvánico


También hay una interfaz S88 (N) en la PCB adaptadora. Para ello los siguientes componentes deben ser soldados:
U3,U4,U5,U6	Optoacoplador de alta velocidad 6N137
R2,R3,R4	Resistencia de 270 Ohm 1/4W
R5		Resistencia de 390 Ohm 1/4W
R6		Resistencia de 330 Ohm 1/4W
R7,R8,R9	Resistencia de 1k5 Ohm 1/4W
C5,C6,C7,C8	Condensador cerámico de 100nF
P6		Terminal de tornillo para PCB de 6 polos y paso 3,5mm
La placa del adaptador no incluye la alimentación de 5V para los módulos S88. Esta debe ser suministrada externamente.

Software

Ahora hay tres imagenes disponibles listas para usar con la BPi:
- Solución de Michael Bernstein
- Imagen OpenWRT
- Imagen Armbian (Experiencia en Linux necesaria: sólo imagen básica)

Imagen OpenWRT

Paquete binario

La Imagen OpenWRT contiene todo lo necesario para comenzar:

- Rutina de inicio del CAN Bus
- can2lan
- Rocrail (no se inicia automáticamente)

Preparación de la tarjeta SDHC

Si la tarjeta ya ha sido usada, ésta debe ser formateada por completo. Utilizar para ello el programa SDFormatter.
La imagen debe ser descomprimida y luego guardada en la tarjeta SDHC.
# under Linux
cd tmp
wget http://lnxpps.de/bpi/bin/openwrt-sunxi-cortexa7-lemaker_bananapi-ext4-sdcard.img.zip
gunzip http://lnxpps.de/bpi/bin/openwrt-sunxi-cortexa7-lemaker_bananapi-ext4-sdcard.img.zip
sudo dd if=openwrt-sunxi-cortexa7-lemaker_bananapi-ext4-sdcard.img of=/dev/sdX bs=1M # chane X accordingly
En sistemas basados en MacOS se puede usar el software: ApplePi-Baker.
Los usuarios de Windows pueden usar el software: Win32DiskImager.

Ajuste de la configuración en la BPi

La tarjeta SDHC sólo se debe introducir cuando la BPi esté apagada.
Inicialmente no se establece una contraseña de root. Configure una a través de la interfaz web o mediante 'passwd' en la consola.

El conector HDMI no es funcional. Sólo durante el arranque de la BPI se muestra un gráfico, después no se muestra nada. Igualmente, un teclado conectado via USB tampoco será tenido en cuenta.

Una vez que la tarjeta se ha insertado y la fuente de alimentación está encendida, es posible iniciar sesión a través de la interfaz en serie (115200 8N1 no handshaking):


Con conversor USB-serie externo:
                           GND TX RX
             J12   o  o  o  o  o  o
{SD slot}          o  o  o  o
Con conversor USB-serie externo:


**Atención: ¡La interfaz serie de la BPi sólo funciona a 3V3!

En principio, también se puede realizar la configuración inicial a través de la red Ethernet. Pero dichos cambios deben realizarse con prudencia :-)

Las señales GND, TX y RX están presentes en el conector P21 de la placa adaptadora. Sin embargo, las señales TX y RX normalmente están cruzadas con respecto al convertidor USB serie externo.

A continuación, la adaptación como cliente DHCP, no necesario si se toma la imagen DHCP de conexión como cliente:
# 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

Utilización de un adaptador WIFI externo

La Bpi no dispone de un controlador WLAN integrado, pero es posible conectar a través de USB un adaptador WIFI externo.

La configuración se puede hacer a través de la interfaz web integrada. Conecta tu BPi con la imagen cliente cargada a tu red Ethernet existente y cambia la configuración WIFI en http://<bpi-ip-address> a tus necesidades. Con la imagen de servidor DHCP se puede crear un punto de acceso independiente. Conecta un portatil o PC mediante cable al conector LAN de la BPi y configura la WIFI a través del navegador web con la dirección http://<router address>.
No conectar la BPi con la imagen del servidor DHCP a tu red local, porque la BPi podría entregar direcciones IP más rápido quie el router existente! Nuevas conexiones de clientes podrían obtener direcciones IP erroneas entregadas por la BPi..

Explotación

Arranque automático de Rocrail (configuración a través de la consola serie o Putty - Puerto SSh:22; la contraseña root inicialmente está desactivada)
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

Extensiones

LinkS88 60883

Pequeño programa para usar el 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

Prueba de hardware (variante sin aislamiento galvánico)

Si no se establece comunicación a través del CAN-Bus, compruebar las siguientes conexiones sin alimentación conectada:

Sin alimentación, debe haber una resistencia de 60 Ohmios entre "CAN-High" y "CAN-Low" (Observar las fotografías).

Depurando

A continuación algunos comandos para depuración:
# 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

Información adicional

Versión actual

Esquema Versión 1.6 - Datos Gerber V1.6

Versiones antiguas

Esquema Versión 1.0 - Datos Gerber V1.0
Esquema Versión 1.1 - Datos Gerber V1.1
Datos Gerber V1.2
Datos Gerber V1.3
Datos Gerber V1.4
Esquema Versión 1.5
V1.0
- Primera versión

V1.1
- movida R12 para evitar cortocircuitos
- arreglado conversor  USB-serie integrado en placa
- añadida la resistencia de pullup I2C
- cambiados los footprint SMD 805 por otros más pequeños
- cambiados LED de encapsulado SMD 1206 a encapsulado SMD 0805
- cambiado el encapsulado DIL por uno más pequeño para optimizar el ruteado de la placa

V1.2
- arreglados los conectores MiniDin-10
- ruteado optimizado

V1.3
- ruteado optimizado
- añadido el conector de pines para comunicación I2C

V1.4
- ruteado optimizado
- añadidos más conectores

V1.5
- añadido jumper para selección PI3/PH2

V1.6
- añadir conector UART2

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
Por defecto:
ttyS0(UART0) -> Consola
ttyS1(UART3)
ttyS2(UART7)
Cambiado a:
ttyS0(UART0) -> Consola
ttyS1(UART2) - con RTS/CTS
ttyS2(UART3)

Creación de la imagen (sólo para usuarios expertos en Linux, no necesario para hacer funcionar la BPi)

Información para crear tu propia imagen OpenWRT. Normalmente no es necesario seguir estos pasos.
Está basada en lede, una distribución de Linux optimizada para routers. Una ventaja de estas distribuciones es que el sistema puede ser apagado en cualquier momento sin perdida o corrupción del sistema de ficheros. Además el sistema de archivos es ext4, que es un sistema de archivos optimizado.

Preparar OpenWRT

OpenWRT necesita mucho espacio en disco (>10 GByte). Instalación::
sudo apt-get update
sudo apt-get install git build-essential
git clone git://git.openwrt.org/openwrt.git
cd openwrt
make menuconfig
make -j<number of cores>
La primera compilación puede necesitar varias horas - se paciente ;-) La próxima compilación será mucho más rápida.

Inicialización de las feeds de OpenWRT

Inicia las feed con:
# change into OpenWRT dir
echo "src-git openwrtmisc https://github.com/GBert/openwrt-misc" >> feeds.conf.default
echo "src-git railroad https://github.com/GBert/railroad" >> feeds.conf.default
scripts/feeds update -a
scripts/feeds install kmod-sunxi-can
scripts/feeds install can-utils
scripts/feeds install can2udp
scripts/feeds install rocrail

Parches necesarios de OpenWRT

Parches necesarios para el Kernel de Linux (Device Tree Bindings). Copiar a target/linux/sunxi/patches-4.1:
800-dt-sun7i-add-can.patch
801-dt-sun7i-add-can-bananapi.patch
802-dt-sun7i-add-can-bananapro.patch
Cambio UART:
803-dt-sun7i-uart-0-2-3-bananapi.patch


Guía rápida de creación de imagen

Reducido al máximo

Pie de imprenta: