mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik CANbus Verschaltung


Autor: J. L. (joo_l)
Datum:
Angehängte Dateien:

Bewertung
-1 lesenswert
nicht lesenswert
Hallo,

anbei ist eine Verschaltung für mein CANbus.
D1 steht für die Sensorwerte von dem Roboter. D4 ist dann der 
Radioreceiver für die Fernbedingung. Das Problem ist, dass CAN 1 direkt 
mit dem Radioreceiver CAN bus verbunden ist, so dass mein Message mit 
dem Default-Wert vom Radioreceiver die ganze Zeit überschrieben wird.
Daher habe ich vor, die Pins 4 und 5 abzutrennen und mit dem CANbus vom 
meinem Laptop zu verbinden. Die GND Kabel würde ich dann an Pin 3 
ankoppeln.

Bevor ich die Platine kille, wollte ich eure Meinungen lesen.

Autor: fop (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Willst Du nach der Aktion 2 Busse haben, oder sind Dir die Werte der 
Fernbedienung egal ?

Im ersten Fall, solltest Du noch einen Abschlusswiderstand und ein 
weiteren Port Deines Computerinterfaces anschliessen.

Im zweiten Fall sollte das Abtrennen einfach so gehen. Die Fernbedienung 
merkt allerdings, dass sie alleine am "Bus" ist. Wenn sie dann nicht auf 
anderem Weg eine Sicherheitsabschaltung auslösen kann, läufts.

Autor: npn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hast aber schon für D1, D4 und Laptop verschiedene CAN-IDs benutzt, 
oder?

Autor: J. L. (joo_l)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
npn schrieb:
> Du hast aber schon für D1, D4 und Laptop verschiedene CAN-IDs benutzt,
> oder?

Die CAN-IDs will ich nicht berühren, sondern die in SDO gespeicherten 
Konfiguration weiter benutzen.

Autor: J. L. (joo_l)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
fop schrieb:
> Willst Du nach der Aktion 2 Busse haben, oder sind Dir die Werte der
> Fernbedienung egal ?
>
> Im ersten Fall, solltest Du noch einen Abschlusswiderstand und ein
> weiteren Port Deines Computerinterfaces anschliessen.
>
> Im zweiten Fall sollte das Abtrennen einfach so gehen. Die Fernbedienung
> merkt allerdings, dass sie alleine am "Bus" ist. Wenn sie dann nicht auf
> anderem Weg eine Sicherheitsabschaltung auslösen kann, läufts.

Mir sind die Werte der Fernbedinung egal, die Steuerung soll über mein 
Laptop geschehen. Ich habe allerdings das Konzept heute Nachmittag 
ausprobiert, aber als ich ein Message von meinem Laptop geschickt hatte, 
bekam ich Bus-off error.
Da hatte ich allerdings die GND-Kabel nicht mit Pin 3 verbunden, sondern 
ich habe einfach nur die beide CAN_H und CAN_L.

Autor: Datenstromer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Da hatte ich allerdings die GND-Kabel nicht mit Pin 3 verbunden, sondern
> ich habe einfach nur die beide CAN_H und CAN_L.

Das muß trotzdem funktionieren. 2 Draht genügt. Hier sind zwar ein paar 
Praxisresistente anderer Ansicht, das kümmert aber die CAN-Funktion 
nicht:


Beitrag "Datenübertragung über >100m"

Autor: H.Joachim S. (crazyhorse)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kannst du denn am Laptop erstmal in der Originalkonfiguration nur 
empfangen?

Autor: J. L. (joo_l)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
H.Joachim S. schrieb:
> Kannst du denn am Laptop erstmal in der Originalkonfiguration nur
> empfangen?

Meinst du mit der Originalkonfiguration, wo ich mein CAN_H und CAN_L an 
17.4B habe? Ja, da kann ich empfangen und kann auch senden, aber wie 
gesagt wird mein Message die ganze Zeit vom Remote controller 
überschrieben.

Zum Beispiel: Ich sende die CAN Messages, dass die 1. Achse hoch fahren 
soll, aber das Joystick vom Remote controller hat sich ja nicht bewegt. 
Deswegen "blinkt" mein Message ganz schnell einmal und der Roboter wird 
dann mit dem Default value (da nix sich bewegt hat )vom Remote 
controller weiter gefuttert.

Autor: H.Joachim S. (crazyhorse)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann ist das alles etwas mystisch...
D.h. Verschaltung und Baudrate sind korrekt. Bus-off error heisst, dein 
CAN-Adapter bekommt kein Ack auf seine Sendung. Und das macht irgendwie 
keinen Sinn.

Masse gehört natürlich dazu, auch wenn es oft auch ohne extra 
Masseverbindung funktioniert (die kommt dann über diverse Erdungen).

Autor: stm32 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn ich das richtig verstanden habe, möchte er die Fernbedienung mit 
seinem Laptop ersetzen. Also mit dem Laptop die SlaveID der 
Fernbedienung verwenden und den Roboter steuern. Aktuell sieht es aber 
wohl so aus, dass er alles noch manuell macht. Mit CanView und 
PeakAdapter.

Autor: Torsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sendet dein CAN Adapter ein ACK?
Ohne die Fernbedienung sieht der Roboter sonst ein Bus-off.

Beitrag #5584332 wurde vom Autor gelöscht.
Autor: J. L. (joo_l)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Also Bus-off bekommen ich schonmal nicht. (Habe CAN_H und CAN_L
vertauscht eingesteckt....ja, ich weiss...) Jedoch so bald ich versuche
die Daten zu empfangen, bekomme ich Error, " SDO protocol time out ".
Also er schafft nicht die SDOs zu initialisieren. Was könnte man in
diesem Fall machen?

Autor: H.Joachim S. (crazyhorse)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich kenne keinen CAN-Controller, der kein ack sendet....
Ansonsten habe ich das so verstanden:
-normalerweise kommen die Kommandos von der Fernbedienung, werden über 
CAN zum Roboter übertragen und der angeschlossene PC-Adapter kann dieses 
auch mithören
-setzt man diese Kommandos via PC-Adapter über den Bus ab, funktioniert 
das auch erstmal, werden aber direkt wieder durch die Fernbedienung 
überschrieben (das ist so erstmal völlig in Ordnung, bis eben auf das 
Problem, dass man kaum sinnvoll die gleiche ID von verschiedenen Knoten 
verwenden kann). Kannst ja mal zyklisch irgendwas auf einer im System 
nicht verwendeten ID senden und schauen, ob es da auch einen Busfehler 
gibt.
-im letzten Zustand wurde die Fernbedienung entfernt, es gibt also nur 
noch PC-Adapter und Roboter. Und jetzt führt das Senden via PC zum Bus 
off.

Ist das soweit richtig?

Autor: J. L. (joo_l)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
H.Joachim S. schrieb:
>  Kannst ja mal zyklisch irgendwas auf einer im System
> nicht verwendeten ID senden und schauen, ob es da auch einen Busfehler
> gibt.
Funktioniert eigentlich, den Motor konnte ich über mein Laptop ein-und 
ausschalten. Die Position konnte ich eben nicht ändern, da dies dann 
sofort von der Fernbedingung überschrieben wird. Deswegen diese ganze 
Umstände...


> -im letzten Zustand wurde die Fernbedienung entfernt, es gibt also nur
> noch PC-Adapter und Roboter. Und jetzt führt das Senden via PC zum Bus
> off.
>
> Ist das soweit richtig?

Nein, kein Bus-off. Jedoch können die SDOs nicht initialisiert werden.

Autor: stm32 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kurze Frage am Rande...
Welches Tool nutzt du, um die CAN Nachrichten auf dem Bus als CanOpen 
Klartext anzuzeigen?
Also welches Tool ist das bei deinem Screenshot "11111111.png"??

Autor: stm32 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
J. L. schrieb:
> Nein, kein Bus-off. Jedoch können die SDOs nicht initialisiert werden.

In deinem Screenshot sehe ich folgende SlaveIDs: 1,4,5,6 un 30
Weißt du die Zuordnung dieser Slaves? Also zu wem die gehören?

Autor: J. L. (joo_l)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
stm32 schrieb:
> J. L. schrieb:

> In deinem Screenshot sehe ich folgende SlaveIDs: 1,4,5,6 un 30
> Weißt du die Zuordnung dieser Slaves? Also zu wem die gehören?

Nein, ich habe nur den Motor gestartet und die Messages wurden 
automatisch gesendet. Weißt du wie man sowas mit reverse-engineering 
herausfindet. (Ich mache das ganze ohne Dokumentation)

CANopen Magic Ultimate heißt das Programm vom Screenshot.

Autor: stm32 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
J. L. schrieb:
> Nein, ich habe nur den Motor gestartet und die Messages wurden
> automatisch gesendet. Weißt du wie man sowas mit reverse-engineering
> herausfindet. (Ich mache das ganze ohne Dokumentation)

Anfangen würde ich das ganz erstmal so, indem ich das System so wie es 
ist und funktioniert erstmal wiederherstelle. Dann würde ich mich auf 
den Bus hängen und nur mithorchen. Nun schalte ich das System komplett 
aus und starte anschließend einen Trace. Jetzt das System einschalten 
und ein paar grundlegende Funktionen ausführen. Nun den Trace 
abspeichern und analysieren.
Ohne jegliche Doku bleibt dir dann nichts anderes übrig, als durch 
probieren Informationen zu gewinnen. Ja dann geht es Schritt für Schritt 
weiter.

J. L. schrieb:
> CANopen Magic Ultimate heißt das Programm vom Screenshot.

Ui, das Ding ist aber teuer. Dann bleibe ich lieber bei der Handarbeit 
oder schreibe mir selbst so ein Tool...

Autor: J. L. (joo_l)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
stm32 schrieb:

> Anfangen würde ich das ganz erstmal so, indem ich das System so wie es
> ist und funktioniert erstmal wiederherstelle. Dann würde ich mich auf
> den Bus hängen und nur mithorchen. Nun schalte ich das System komplett
> aus und starte anschließend einen Trace. Jetzt das System einschalten
> und ein paar grundlegende Funktionen ausführen. Nun den Trace
> abspeichern und analysieren.
> Ohne jegliche Doku bleibt dir dann nichts anderes übrig, als durch
> probieren Informationen zu gewinnen. Ja dann geht es Schritt für Schritt
> weiter.

Das habe ich bereits getan, siehe ( 
https://drive.google.com/open?id=1Du4J27KykzrTtCqu... ). 
Diese Sequenz wird ausgeführt, wenn ich den Motor anmache. Ich habe dann 
diese Sequenze auch manuell eingegeben, jedoch ging der Motor nicht an, 
da wahrscheinlich diese Messages von der Fernbedinung überschrieben 
werden (wenn die Fernbedinung aus ist, sendet er "00...00"). Daher 
wollte ich ja die Messages von der Fernbedingung komplett zu entfernen.


> Ui, das Ding ist aber teuer. Dann bleibe ich lieber bei der Handarbeit
> oder schreibe mir selbst so ein Tool...

Habe auch nicht gekauft :D Benutze nur die Trial-Version.


Tja, es sieht so aus, dass ich dann tatsächlich mit Android und MCP2515 
die PDO Messages von der Fernbedingung rausfiltern muss. Es sieht so 
aus, dass die Konfiguration der SDOs nur dann initialisiert werden 
können, wenn CANbus mit der Fernbedingung verbunden ist.

: Bearbeitet durch User
Autor: dunno.. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
J. L. schrieb:
> Es sieht so aus, dass die Konfiguration der SDOs nur dann initialisiert
> werden können, wenn CANbus mit der Fernbedingung verbunden ist.

Naja, das die steuerung gegen replay-Attacken gesichert ist, würde ich 
erstmal bezweifeln.

Sieht die init-sequenz immer gleich aus?

Wenn ja, klappt's egal von welchem sender, sofern die busphysik ok ist..

Autor: stm32 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da kann ich meinem Vorredner nur zustimmen. Zumindest den Heartbeat des 
Roboters solltest du sehen und dann sollte dieser auch ansprechbar sein.

Also wenn ich mir den Trace so anschaue erkenne ich nur 3 Slaves, die 
auf dem Bus aktiv adressiert werden. Das sind die IDs 1 (vermutlich der 
Roboter) und 30 (vermutlich der Master hier, also die Fernbedienung) und 
12 (???? wird einmalig im Trace über RxPDO adressiert). SlaveID 30 zeigt 
sich nur mit einem Heartbeat auf dem Bus und kann also vernachlässigt 
werden.

Damit kann man doch schonmal anfangen. Weiter sieht man das PDO Mapping 
und das Laden der Default Parameter im Trace. An dieser Stelle würde ich 
anknüpfen.

Beitrag #5589426 wurde vom Autor gelöscht.
Autor: J. L. (joo_l)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Die letzten Tagen habe ich mit diesem Projekt verbracht. Habe 2 MCP2515
CAN bus controller und ein Arduino Mega 2600 bestellt, um ein Gateway
für Message-Filtering aufzubauen. Das Konzept sieht wie das angehängtes
Bild aus.

Klares Vorgehen : Ich lese vom Radio Receiver( gelbes Kasten ) die CAN
Messages ein und filtere die PDO messages aus. Die gefilterten CAN
messages werden dann dem CAN 1 weitergeleitet.

Problem : Sobald ich die Terminals 4 und 5 trenne kann ich keine CAN
Messages einlesen. Ich dachte D4 wäre für die Empfang der
Fernbedinung-Signale zuständig und könnte sie modifizieren, bevor sie an
CAN1 landen.

Hat jemand vielleicht eine Idee, warum die Fernbedinung-Signale 
verschwinden, sobald ich die Terminals 4 und 5 trenne? Wenn die 
Terminals
4 und 5 nicht getrennt sind, kann ich sie ohne Probleme einlesen. Ich 
dachte mit dem Trennen der Terminals verhindere ich nur, dass die CAN 
Messages an CAN1 landen. Aber es scheint, dass die empfangene Signale 
nicht an dem Ende der getrennten Terminals 4 und 5 bleibe, sondern 
einfach verschwinden ??


Unten ist nochmal ein Auszug der Notationslist...

D1 : Electronic unit, central unit for control system
D4 : Radio Receiver

: Bearbeitet durch User

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.