Forum: Mikrocontroller und Digitale Elektronik CAN Bit Timing


von Jürgen18 (Gast)


Lesenswert?

Hallo,
ich möchte mit 2 uC einen CAN Bus mit einer Länge von ca. 3m 
realisieren.
Es sind 2 uC mit einer Frequenz von 16 & 50 MHz verfügbar,
Ich komme mit der Berechnung der Bit-Timing Parameter nicht zurecht.
Die CAN Module möchte ich konfigurieren, sodass eine Baudrate zwischen 
100 und 500 kbps entsteht welche genau, ist egal.
Also einstellen kann ich jeweils:


1.  Synchronization jump width.
2.  Time segment 1.
3.  Time segment 2.
4.  Baud rate prescaler.

Welche Parameter der uCs müssen denn bei beiden gleich gewählt werden?
Also die Baudrate muss wohl gleich sein, das kann man über den Prescaler 
machen, aber was ist mit dem Rest?
Grüße

von ernst (Gast)


Lesenswert?

Etwas mehr Informationen über die verwendeten Bauteile wären natürlich 
hilfreich...

von Alex B. (Firma: Ucore Fotografie www.ucore.de) (alex22) Benutzerseite


Lesenswert?

Um bei dem 16MHz auf 500kbit/s zu kommen:

SJW = 1;
TS1 = 6; (evtl. 7, je nach Implementierung)
TS2 = 1;
PRE = 4;

(?)

Bei 50MHz:

SJW = 2;
TS1 = 7; (evtl. 8, je nach Implementierung)
TS2 = 2;
PRE = 1;

Bei Angaben ohne Gewähr, nähere Infos wären nötig für sicherere Angaben.
Gruß,
Alex

von Ludolf (Gast)


Lesenswert?

> aber was ist mit dem Rest?
Identifier müssen auch gleich lang sein.

von Jürgen18 (Gast)


Lesenswert?

ernst schrieb:
> Etwas mehr Informationen über die verwendeten Bauteile wären natürlich
> hilfreich...

Also die CAN-Treiber sind folgende:
SN65HVD1050, ganz normal jeweils über RX/TX an den uC angeschlossen.
Bus-Leitungslänge 3m, an jedem Ende mit 120 Ohm abgeschlossen.

Ludolf schrieb:
>> aber was ist mit dem Rest?
> Identifier müssen auch gleich lang sein.

Ja ist mir klar.. ich habe keine Probleme mit den oberen Schichten, 
sondern mit dem Bit-Timing

Alex Bürgel schrieb:

> Bei 50MHz:
>
> SJW = 2;
> TS1 = 7; (evtl. 8, je nach Implementierung)
> TS2 = 2;
> PRE = 1;

Bei 50 MHz müsste es wahrscheinlich PRE=10 heißen!
Was ich eben nicht verstehe ist, dass SJW,TS1, TS2 bei jedem der beiden 
uC unterschiedliche Werte hat.
Schaut man auf dieser Internetseite: 
http://www.rn-wissen.de/index.php/CAN#Bittiming so sieht man, dass die 
SP Location nach 14 TQ ist (bei baud = 500 kbps).
Durch die SJW,TS1,TS2 verschiebe ich es aber, oder?

von Jürgen18 (Gast)


Lesenswert?

Alex Bürgel schrieb:
> TS1 = 7; (evtl. 8, je nach Implementierung)

Und was soll je nach Implementierung eigentlich heißen?

Viele Grüße

von Alex B. (Firma: Ucore Fotografie www.ucore.de) (alex22) Benutzerseite


Lesenswert?

Bei Freescale-Controllern berechnet sich das Bittiming zu:

Und in diese Gleichung musst du Werte für fCPU, den prescaler, TS1, TS2 
einsetzen, so dass 2µs herauskommen und TS1 etwa 7x größer ist als TS2 
(Sample-Point bei 80 - 90%). Wenn du es einstellen kannst solltest du 
auch "one Sample per bit" (nicht "three") auswählen.

Schöne Grüße,
Alex

von Matthias K. (matthiask)


Lesenswert?


von Jürgen18 (Gast)


Lesenswert?

Vielen herzlichen Dank euch beiden.
Ich habe einfach die Werte eingesetzt und es werden Daten übertragen.
Allerdings gehen Daten verloren.
Im Empfänger werden Bits mit MSGLOST gesetzt.
Kann das mit den Bit-Timing-Parametern zusammenhängen?

von Alex22 (Alex Bürgel) (Gast)


Lesenswert?

Stimmt denn die physikalische Verbindung?
Sprich: verdrillte Leitungen und 120 Ohm Widerstände an beiden Enden?

Gruß,
Alex

von Jürgen18 (Gast)


Lesenswert?

Alex22 (Alex Bürgel) schrieb:
> Sprich: verdrillte Leitungen und 120 Ohm Widerstände an beiden Enden?

Ja,verdrillt und an beiden Enden abgeschlossen. 120 Ohm +/- 1%.
Das Tolle ist, dass Nachrichten 1-10 ankommen, Nachricht 11 nicht und 
Nachricht 12-14 wieder.
Ich habe bereits ein CAN Analysator angeschlossen. Bei dem kommen alle 
MSGs & Daten an.

von Armin (Gast)


Lesenswert?

Läuft der Empfangspuffer nach der 10.Msg über?

von Jürgen18 (Gast)


Lesenswert?

Armin schrieb:
> Läuft der Empfangspuffer nach der 10.Msg über?

Nein, erst >31 MSGs.
Das Problem:
Ich hatte die ganze Zeit den CAN Analysator auf dem Bus zum "Sniffen".
Habe vergessen die Manipulation heraus zu nehmen.
Es wurden bei bestimmten Identifiern die Nachrichten "manipuliert."

Jetzt gehts.

Vielen Dank euch allen!

Viele Grüße

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.