NMEA2000 Interface

Das NMEA2000 Marine Netzwerk, etwas zum Einstieg.

NMEA2000 ist ein CAN-Bussystem am Bord moderner Yachten. Hier werden viele Sensordaten gesammelt und auf den Bus gegeben. Alle angeschlossenen Displays können diese Daten verwenden, sie darstellen oder für Berechnungen zur Hilfe nehmen. Typische Daten sind z.B. die Geschwindigkeit durch das Wasser und die Wassertiefe. Hierfür wird am häufigsten der Airmar DST800 Geber im Bootsrumpf eingesetzt. Die Displays zur Darstellung der Daten kommen von den verschiedenen Herstellern Raymarine, Simrad, Garmin …

Das Ganze wird mit dem NMEA2000 Bus verbunden. Hier gibt es die Rückgrad Leitung (auch Backbone genannt) die mit Widerständen an beiden Enden abgeschlossen wird. Die Geber und Displays werden über T-Stücke und Stichleitungen (Spur Kabel genannt) an das NMEA2000 Netzwerk angeschlossen.

In der Mitte wird die 12V Spannung eingespeist ohne die das Netz nicht funktioniert. Geber nehmen ihre Stromversorgung aus dem Netzwerk, Displays benötigen zusätzlich eine Stromversorgung.

Das einfache NMEA2000 Netzwerk ist typischerweise für 3A Gesamtstrom ausgelegt. Geber benötigen einige 100mA. Die Stromaufnahme des einzelnen Geräts wird in len angegeben, das sind vielfache von 50mA. 3len im Datenblatt heißt also 150mA Stromaufnahme. Kartenplotter und Multifunktionsdisplays die häufig verwendet werden benötigen typisch 1-2A und bekommen deshalb eine extra Stromversorgung.

Das NMEA2000 Protokoll ist geschützt und wird nur an zahlende Mitglieder herausgegeben. Geräte werden extra abgenommen und dürfen dann das NMEA2000 Logo tragen. Viele Jahre war es nicht leicht etwas genaues über das NMEA2000 Protokoll zu bekommen. Nun dringt aber immer mehr nach außen, sodaß einige Tüftler sogar schon Bibliotheken für Standard Mikroprozessoren geschrieben haben, z.B. auch für den Arduino.

Eine sehr schöne Bibliothek von Timo Lappalainen ist hier zu finden
https://github.com/ttlappalainen/NMEA2000/
Diese Bibliothek wird auch noch weiter entwickelt und enthält einige anschauliche Beispiele. Ich verwende hier den Stand vom September 2016.

Damit ist es nun möglich eigene NMEA2000 Sensoren oder Displays zu entwickeln.

Der erste Schritt dahin in der 5V Technik ist ein Schnittstellenbaustein (z.B. der MCP2515) und ein CAN-Bus Treiber (z.B. der MCP2551). Diese werden an den NMEA2000 Bus über ein T-Stück angeschlossen. Die Suche nach einer preiswerten Lösung ergibt eine fertige Platine mit dem MCP2515 Schnittstellenbaustein und dem TJA1050 Pegelwandler. Diese Platine ist auch geeignet. Sie wird allerdings mit einem 8MHZ Quarz ausgeliefert. Der muß gegen einen 16MHz Quarz ausgetauscht werden.

NMEA Schnittstellen Baustein

Die NMEA 2000 Kabelbelegung ist hier angegeben. Dazu kann ein Netzwerkkabel abgeschnitten werden. Wir benötigen nur CAN-High (meist weiß) und CAN-Low (meist blau). Zur Kontrolle kann der Widerstand zwischen den beiden Leitungen gemessen werden. Wenn beide Abschlußwiderstände mit 120 Ohm am NMEA2000 Bus angeschlossen sind sollte hier ein Widerstandswert von ca. 60 Ohm erscheinen.

Diese Platine wird nun mit 7 Leitungen an einen Arduino Mega 2560 angeschlossen.
INT > Pin 21
SCK > Pin 52
SI > Pin 51
SO > Pin 50
CS > Pin 53
GND > GND
VCC > 5V

Schön ist noch ein NMEA2000 Display oder Geber im Netz. Dann können die Ergebnisse gleich überprüft werden.

Noch ein wichtiger Hinweis: Sollte das selbst entwickelte Gerät im Netzwerk später Probleme machen, können Fehler an ganz anderen Stellen auftreten, wie die Erfahrung gezeigt hat. Ein Display kann auf einmal ganz andere Daten nicht mehr anzeigen. Dann ist immer der erste Test. Das eigene Gerät aus dem Netzwerk nehmen und die Stromversorgung des Netzwerks aus und wieder ein schalten. Schließlich ist das keine offizielle Bibliothek und das eigene Gerät hat die verschiedenen Tests von NMEA2000 nicht durchlaufen. Das hat natürlich seinen Sinn und wird mit einem möglichst stabilen und kompatiblen Netzwerk begründet.

Nun kann es mit der Programmierung los gehen.

von Matthias Busse

10 Gedanken zu „Das NMEA2000 Marine Netzwerk, etwas zum Einstieg.

  1. Pingback: NMEA2000 Daten aus dem Bus seriell auf USB als Klartext ausgeben | Shelvin – Elektronik ausprobiert und erläutert

  2. Pingback: NMEA2000 GPS-Position in den Arduino einlesen und formatiert ausgeben | Shelvin – Elektronik ausprobiert und erläutert

  3. Pingback: NMEA2000 Daten mit dem Arduino an den Actisense NMEA Reader übertragen | Shelvin – Elektronik ausprobiert und erläutert

  4. Julian

    Danke für den super Bericht.
    Weshalb muss 8MHZ Quarz gegen einen 16MHz Quarz ausgetauscht werden?
    Ist dies der Grund weshalb mein Nachbau Ihrer Schaltung nicht funktioniert?
    Ihre Berichte sind für mich von unschätzbarem Wert.

    Antworten
    1. admin Beitragsautor

      Hallo Julian,
      ich nehme an die Billigplatine ist für eine andere Anwendung entworfen worden. Auto CAN Bus vielleicht ?
      Mit dem 16MHz Quarz funktioniert es super und mit 8MHz bei mir überhaupt nicht.
      Am besten ist: einfach ausprobieren.

      Antworten
      1. Robert

        Das funktioniert auch mit dem 8MHz Quarz. Man muss nur der Bibliotek mitteilen daß da ein 8MHz Quarz dran hängt. Ansonsten pass das Timing nicht.

        #define USE_MCP_CAN_CLOCK_SET 8

        Antworten
  5. Pit

    Hallo Herr Busse,

    Begeistert folgte ich Ihrem Artikel und besorgte mir auch gleich den üMCP2515 Adapter.
    An meinem Netzwerk kann ich jedoch keine Daten auslesen. Einige Daten werden auf dem Plotter valide dargestellt, also plausible Daten wären vorhanden.

    Gibt es eine Möglichkeit die MCP2515 Adapter zu testen? Ich würde jetzt beispielsweise einen Yacht Devices Adapter (Tank) nutzen und versuchen diesen auszulesen?

    Gruss,
    -Pit

    Antworten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.