Raspberry: CAN-Bus-UVR1611, Ein-und Ausgänge von UVR1611 mit RasPi3 und PICAN2-Modul auslesen

Es gibt 1 Antwort in diesem Thema, welches 6.160 mal aufgerufen wurde. Der letzte Beitrag () ist von hammax.

  • Hallo,

    Auf der Suche nach Informationen zum UVR-CAN-Bus bin ich im Internet auf einige sehr interessante
    GitHub-Repositories von Matthias Hochgatterer gestossen die sich mit can, canopen und uvr1611 beschäftigten.

    Das ganze Projekt ist sehr umfangreich und enthält viel Dokumentation zum CAN-Bus aber auch zur UVR1611.
    Das Interesse war geweckt und nachdem ich von Go nichts verstehe, wollte ich auf jedenfall sehen was das Programm
    uvrdump von meiner UVR1611 über den CAN-Bus auslesen kann. Aber wie so oft bei Linux-Systemen gibt es vorher immer was zu tun.


    Das ganze ist in der Programmier-Sprache Go realisiert worden und sollte auf dem Raspberry Pi mit PICAN2 Modul laufen.


    Das PiCAN 2 Aufsteckmodul für den Raspberry Pi gibts für ca. 45 EURO im Internet zu kaufen.
    Das PiCAN 2 Modul besitzt zwei Schaltkreise. Zum einen den CAN-Bus-Transceiver MCP2551,
    der die 12V CAN-Bus-Signale in TTL-Signale umwandelt und zum zweiten einen
    MCP2515 CAN Controller der über SPI vom Raspberry Pi und dem SocketCAN Treiber angesprochen wird.

    Hier mein Raspberry Pi 3 mit aufgestecktem PiCAN 2 Modul


    Der SocketCAN Treiber, erscheint für die Anwendungsprogramme als can0.
    Um das PICAN2 Modul auf dem Raspberry Pi 3 zum laufen zu bekommen, müssen zuerst in der Datei
    mit sudo nano /boot/config.txt drei Zeilen hinzugefügt werden und dann den Raspberry Pi 3 nochmal neu booten.

    dtparam=spi=on
    dtoverlay=mcp2515-can0,oscillator=16000000,interrupt=25
    dtoverlay=spi-bcm2835


    Zum starten der CAN-Schnittstelle can0 den nachfolgenden Befehl ausführen.


    sudo /sbin/ip link set can0 up type can bitrate 50000


    mit dem Befehl ifconfig kann überprüft werden ob die CAN-Schnittstelle can0 korrekt gestartet worden ist.

    pi@raspberrypi:~ $ ifconfig
    can0: flags=193<UP,RUNNING,NOARP> mtu 16
    unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 10 (UNSPEC)


    Nachdem der UVR-CAN-Bus mit dem PICAN2 über CAN-H und CAN-L verbunden wurde,
    habe ich mit dem Testprogramm candump, das bei PICAN2 dabei ist, probiert meinen UVR-CAN-Bus zu lesen.

    i@raspberrypi:~/pican2-test/can-test_pi2 $ ./candump can0
    can0 738 [1] 05
    can0 738 [8] 05 8A 01 00 00 00 00 00
    can0 701 [1] 05
    can0 73E [1] 05
    can0 4BE [8] 01 F4 4F 01 01 00 00 00
    can0 4BE [8] 01 F4 4F 01 01 00 00 00
    can0 4BE [8] 81 F1 4F 01 01 00 00 00
    can0 481 [8] 01 F0 4F 01 04 08 03 80
    can0 481 [8] 01 F0 4F 02 3F 39 41 01


    can0 481 [8] 01 F0 4F 03 DC 03 41 01
    ...


    das hat schonmal gut geklappt.. die Identifier und Daten kamen mir bekannt vor, hatte ich schon mit dem ESP32 auch so ausgelesen.


    Nachdem der UVR1611-CAN-Bus gelesen werden kann, gehts weiter mit dem Go Projekt, zum eigentlichen Programm uvrdump.

    Die Programmier-Sprache Go versucht, ein besseres C und eine gute Alternative zu C++ zu sein.
    Der geringe Hauptspeicherbedarf von Go-Programmen und die eingebaute Parallelisierung
    machen die Sprache für bestimmte Einsatzgebiete gut geeignet.
    Die Eignung für massiv parallele Systeme mit vielen Prozessoren und Prozessorkernen war eines der zentralen Entwurfsziele von Go.


    Vorher muss auf dem Raspberry Pi mit den nachfolgenden drei Befehlen das Go Paket installiert werden,
    damit das kompilieren vom uvr-Projekt mit den can- und canopen Bibliotheken klappt.


    wget https://storage.googleapis.com…1.8.3.linux-armv6l.tar.gz
    sudo tar -C /usr/local -xzf go1.8.3.linux-armv6l.tar.gz
    export PATH=$PATH:/usr/local/go/bin


    Dann die ZIP-Dateien von den drei GitHub-Repositories von Matthias Hochgatterer aus dem Internet auf den Raspberry Pi runterladen.


    GitHub - brutella/can: Connect to a CAN bus in Go
    https://github.com/brutella/can


    GitHub - brutella/canopen: Communicate with other CANopen nodes ...
    https://github.com/brutella/canopen


    GitHub - brutella/uvr: Communicate with an UVR1611 over the CAN bus
    https://github.com/brutella/uvr


    Dann auf dem Raspberry Pi ins Verzeichnis /usr/local/go/src wechseln
    und die zwei folgenden Verzeichnisse github.com/brutella hier anlegen.


    sodass es nachher so aussieht /usr/local/go/src/github.com/brutella


    Dann die Verzeichnisse (can), (canopen) und (uvr) von den ausgepackten ZIP-Dateien jeweils komplett
    in /usr/local/go/src/github.com/brutella in eigene Verzeichnisse kopieren.


    so sollte es nachher aussehen:


    /usr/local/go/src/github.com/brutella/can
    /usr/local/go/src/github.com/brutella/canopen
    /usr/local/go/src/github.com/brutella/uvr


    dann ins Verzeichnis /usr/local/go/src/github.com/brutella/uvr wechseln und einfach make eingeben.


    Damit wird mit Hilfe der Datei Makefile in diesem Verzeichnis ein Go Kompilerlauf gestartet,
    der als Ergebnis eine ausführbare Datei uvrdump in diesem Verzeichnis erzeugt.


    pi@raspberrypi:~/uvr $ make
    GOOS=linux GOARCH=arm GOARM=7 go build cmd/uvrdump.go


    Nachdem der Kompilerlauf erfolgreich war, hab ich mit dem Aufruf vom Programm uvrdump
    über den UVR-CAN-Bus die Eingänge und Ausgänge von meiner UVR1611 auslesen können.



    Gruß
    Jürgen

    Atmos D15P mit A25; LambdaCheck; UVR1611 mit CAN-I/O44, BL-NET und CMI ;
    2x1000l Puffer mit 2x10m² VRK und glykolfreie Solarthermie(Ost-West); WW-FWS; zentrale Wasserenthärtung;

    PV 3,2 kWp EEG; PV-Insel 6 kWp mit Victron MultiPlus-II 48/5000/70-50 und 8 x PylonTech LiFePo4 Modul 48V 2,4 kWh US2000 mit BMS; Victron Cerbo-GX;

    Herkules SE 5000 DF DIESEL Elektrostart Stromerzeuger Generator 2x220V-1x380V, Dauerleistung 4.200 Watt, 11 Stunden Dauerbetrieb, Tankinhalt 13,3 l

    Einmal editiert, zuletzt von SolarEngel ()

  • … und jetzt bitte noch das forumübliche Textlayout.
    Das ist ja senioren-seniorenmäßig - ich fühle mich diskriminiert ;)

    HVS25LC / 3100l Puffer / 300l WW / 10m²SolarFK
    UVR1611 / Fubo ca. 180m² / Wahei 16m²
    Eigenbau Keramikventuridüse mit SekLuft-Spalt
    als Kesselsteuerung anstatt AK3000:
    UVR1611E NM/DE + CMI + MTX-Lambdamodul + LSU4.2

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!