Forum: Digitale Signalverarbeitung / DSP / Machine Learning CAn Bus und TMS320F2812


von samuel (Gast)


Lesenswert?

Hallo,
meine Can-Bus Kommunikation hat zwischen dem TMS320F2812 uhatte
funktioniert. Nun musste ich noch einen Busteinehmer hinzufügen, der
nur mit Standard Protokoll (11-Bit Identifier) arbeitet. Ich habe dann
alle Bus-Teinehmer auf Standard Protokoll umgestellt. Trotzdem kann
der
TMS320F2812 nun keine Daten mehr empfangen. (Baud-Rate und ID sind
natürlich auch richtig eingestellt)
Muss ich noch was umstellen oder was könnte der Grund für dieses
Fehlverhalten sein?
danke
Gruss
Samuel

von bluemole (Gast)


Lesenswert?

Hallo samuel,

Ich hab' leider keine Ahnung wie Dein Problem zu lösen ist.

Aber ich habe eine Frage zum CAN stack. Hast Du den selber programmiert
oder hast da eine library gefunden. Ich hab' nen CANopen
Mikrocontrollerprogramm basierend auf einen CANopen library
programmiert. Für zukünftige Projekte möchte ich auf DSPs von TI
umsatteln.

Sorry für die Gegenfrage,
bluemole

von samuel (Gast)


Lesenswert?

Hallo,
ich hab leider deine Frage nicht ganz verstanden. Versteh ich es
richtig, dass du die Eingangsdaten die am Can Bus ankommen, puffern
willst?
gruss
Samuel

von Robert (Gast)


Lesenswert?

Hallo,

ich meinte nur, ob du eine "normale" CAN Kommunikation oder eine
CANopen Kommunikation programmiert hast. Im falle einer CANopen
Kommunikation würde mehr wirklich sehr interessieren, ob Du die
Funktionen für das CANopen Kommunikationsprotokoll selbst programmiert
hast oder ob Du eine Library dafür gefunden hast.

MfG bluemole

von samuel (Gast)


Lesenswert?

das ist nur eine normale CAN Kommuniktion
gruss
samuel

von Patrick (Gast)


Lesenswert?

Hallo Samuel,

hast Du auch das IDE bit in der Akzeptanzmaske gelöscht, damit
Std IDs durchkommen?

Gruß
Patrick

von rainerfl (Gast)


Lesenswert?

Hallo, bin auch grad an CAN Bus dran.

Hast denn den Bus mit Abschlußwiderständen richtig terminiert? Könnte
ein Problem sein wenn du ein 3. Gerät anstöpselst.
Stimmen denn die Buspegel?

von Ralf Hellener (Gast)


Lesenswert?

Ich versuche mich gerade etwas in CAN einzuarbeiten. Das mit dem
Identifier ist mir in soweit klar, dass in Abhängigkeit der Nummer die
Priorität gesetzt ist. Was mir unklar ist, wie diese gesetzt wird. Ich
habe auch irgendwo gelesen, dass es keine Addressierung gibt sondern
die Knoten Namen haben. Sprich ASCII. Kann mir da jemand etwas mehr
Klarheit geben??

Danke

von raienrfl (Gast)


Lesenswert?

Hallo Ralf,

ich glaube du hast das Prinzip der Kommunikation auf dem CAN Bus noch
nicht verstanden. Ein Knoten hat keinen Namen, sondern er lauscht die
ganze Zeit auf dem Bus, wertet alle ankommenden Id's aus und wenn die
richtige dabei ist fischt er sie raus und schreibt sie in seinen Puffer
(bei full CAN).
Der CAN Bus ist ein Nachrichtenbasierter Bus und ist Multimasterfähig.
D.h. das Jede Nachricht eine ID bekommt und jeder Busteilnehmer Daten
auf den Bus legen kann ohne vorher bei einem Master um erlaubnis zu
fragen. Die Datenkollisionserkennung erledigt dabei der CAN Controller
selbstständig. Das nennt sich dann Arbitrierung. Bei diesem Vorgang
wird auch auf die Priorität der Nachricht geachtet, wie du schon
richtig beobachtet hast.

Viel Spass noch mit CAN.

Tipp: Bei Wikipedia gibt es eine kurze einführung in CAN

Gruß Rainer

von Ralf (Gast)


Lesenswert?

stimmt, ich blicke noch nicht ganz durch.

ok, dass jeder einem eine Nachricht schicken kann sobald es für ihn ist
ist mir klar.

was mir noch nicht klar ist ist können mehere can-schreiber oder
empfänger die gleiche id sprich priorität haben? wenn ja kann es doch
zu problemen kommen und wie weis man ob die nachricht auch angekommen
ist?

wei weis ein Controller ob die nachricht für ihn ist. Sprich gibt es
ausser der id noch ein anders merkmal. sprich woher weis der controller
an welchen Baustein hinter agesprochen werden soll um dort zum beispiel
ein Datum zu schicken oder was anzusteuern?

von rainerfl (Gast)


Lesenswert?

Hy,

ja, es können mehrere CAN Teilnehmer die gleiche ID versenden. Wenn
dies auch noch zur gleichen zeit geschieht, wird dies mit der
Arbitrierung gelöst, in diesem falle gewinnt der erste. Wenn die
Nachricht dann losgeschickt worden ist und ein Teilnehmer der meinung
ist das die Nachricht für ihn bestimmt ist, empfängt er diese und
schickt ein Bit "Nachricht vollständig empfangen".
Damit ein Controller weis welche Nachrichten er empfangen soll muss
natürlich der CAN Buffer initialisiert werden. Hier steht dann drin
welche id / ID-Gruppe er empfangen soll, welchs Nachrichtenformat
(Extended Identifier), Daten Länge...
Des weiteren besteht bei CAN die möglichkeit der Anforderung einer
Botschaft.
Auf dem CAN werden normalerweise die Botschaften zyklisch versendet,
d.h. immer in einem festen vorher definierten Zeitraster. Dies
verringert den aufwand erst einmal nach daten fragen zu müssen.

Viel Spass noch mit CAN

Gruß

von and_ref (Gast)


Lesenswert?

> es können mehrere CAN Teilnehmer die gleiche ID versenden. Wenn
> dies auch noch zur gleichen zeit geschieht, wird dies mit der
> Arbitrierung gelöst, in diesem falle gewinnt der erste.
Naja, wenn die (CAN-)ID gleich ist, dann kann das Problem nicht durch
die Arbitrierung gelöst werden! Erst der Datenteil der CAN-Nachricht
unterscheidet sich dann und das führt zu einem Busfehler (da nur die
CAN-ID zur Arbitrierung verwendet wird). Die Nachricht wird verworfen
und muss erneut gesendet werden. Wenn jetzt beide Sender wieder die
gleiche Botschaft schicken, krachts erneut... solange, bis beide im
passiven Modus sind (bus-passive).

Gleichzeitig mehrfaches Versenden der gleichen CAN-ID sollte man
unbedingt vermeiden, z.B. indem man jede ID nur einmal vergibt.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.