Forum: Mikrocontroller und Digitale Elektronik CAN Bus Timing


von Matthias (Gast)


Angehängte Dateien:

Lesenswert?

Hallo

hab ein Problem mit meinen Bus Timings für 500Kbit/s

Benutze eine LPC 2119 mit CAN Treiber MCP2551

zum MCP 2551:
RS liegt auf GND
Vref ist offen (?)

zum LPC 2119
CAN1 pin TD1(TX) und P025(RX)
Quartz. 19.6608 MHz
Pclk lauf startup 19.6608 * 3(MSEL) = 58,9 MHz

58,9 MHz / 2(PSEL)  =  29,4912 MHz  mit diesen Wert muss ich doch dann 
meine Bus timings ausrechnen !?

wie weit spielt dieser Code auszug dabei noch eine Rolle !?
// No divider: peripheral clock = processor clock
  VPBDIV = 1;

Hab dazu im internet einen Bus Timing calculator gefunden. Dort die 
Werte 500Kbit/s für Baudrate und die 29,4912Mhz für die "Input clock 
frequency" angegeben. korrekt !?

Ergebnis :

T1 = 12
T2 = 3
SJW = 1
BTQ = 15 = BRD ???

Laut Datenblatt Lpc 2119 Bus Timing Register

0:9 BRD
15:14 SJW
19:16 TSEG1
22:20 TSEG2
23 SAM  = 0

zusammengesetz mit den Werten von oben bin ich auf:
0x001E200F gekommen !?

habe diesen Wert in das C1BTR (0xE0044014) Register geschrieben.

Wenn ich jetzt ein Nachricht schicke dann wird diese vom CANoe (Vector 
Informatik) nicht erkannt und die CANCaseXl Box zeigt einen Error an !?

Kann mir jemand helfen und sagen was ich falsch gemacht habe oder 
übersehen habe !?
DANKE

von (prx) A. K. (prx)


Lesenswert?

Mit diesem Quarz ist beim LPC2119 m.W. keine Standard-CAN-Rate über 
125Kbps möglich.

von Matthias (Gast)


Lesenswert?

Ok ich hab es jetzt selber hinbekommen.

Hab VPBDIV = 1/2; eingestellt und 0x0039E001 ins C1BTR Register 
geschrieben.

// angenaeherte CAN Bit Timings fuer LPC2294 (pclk=15.000 MHz)
// CiA-Index Bitrate[kbps]  tq[ns]   tq/Bit SampleP BRP SJW TSEG1 TSEG2 
SAM
//   7        10.00        10000      10      8      149  3    5    2 
0
//   6        20.00         5000      10      8       74  3    5    2 
0
//   5        50.00         2000      10      8       29  3    5    2 
0
//   4       125.0           800      10      8       11  3    5    2 
0
//   3       250.0           400      10      8        5  3    5    2 
0
//   2       500.0           133.33   15     12        1  3    9    3 
0
//   1       789.4 (!)        66.67   19     16        0  3   13    3 
0
//   0      1000.0            66.67   15     12        0  3    9    3 
0

funktioniert so einwandfrei

von (prx) A. K. (prx)


Lesenswert?

Auf Basis von 15MHz ist das keine Kunst, du hast aber 14,7456MHz. CAN 
definiert jenseits von 125Kbps offiziell eine Oszillatortoleranz von 
maximal 0,5%. Du liegst 1,7% daneben.

http://pdfserv.maxim-ic.com/en/an/AN2935.pdf

von Rick (Gast)


Angehängte Dateien:

Lesenswert?

Folgende Werte (im Anhang eine ooocalc Tabelle)


F_OSC (Quarz)  14,745 MHz
M  4
P  2
F_CCO  235,92 MHz      Zielbaudrate  100,00 KBit/s
cclk  58,98 MHz  VPBDIV  1  Ziel BRP_T  10 µs
pclk  58,98 MHz  ←┘
      BRP  37
BRP_t (CAN-Clock)1,5941 MHz  ←┘
BRP_T  0,6273 µs

SJW  1  T_SJW  0,6273 µs
TSEG1  13  T_TSEG1  8,1553 µs
TSEG2  2  T_TSEG2  1,2547 µs
    T_Bit  10,037301 µs

Fehler  0,37%


kommt das hin, oder hab ich mich irgendwo verrechnet?

von Rick (Gast)


Angehängte Dateien:

Lesenswert?

scheint zu klappen! unser BUS funkioniert mit diesen Einstellungen!

hier ein update der Datei!

von Norbert (Gast)


Angehängte Dateien:

Lesenswert?

Hatte auch Probleme mit der Berechnung der richtigen Bitrate für einen 
LPC2xxx und habe das Spreadsheet heruntergeladen. Es ist hervorragend 
gemacht, war aber noch nicht richtig hilfreich:
1. Es ist nicht klar, welcher Bitratenteiler zu verwenden ist. Man muss 
raten
2. Der Parameter SJW bestimmt die Synchronisationsreichweite. In der 
Berechnung für die nominale Baudrate sollte diese nicht miteinbezogen 
werden.
Die nominale Baudrate ist CANBPS_nom = FPCLK/(BRP * (TS1 + TS2 + 1)). 
Der Syncteil ist immer 1 plus/minus SJW. Damit liegt der 
Synchronisationsbereich immer zwischen
CANBPS_min = FPCLK/(BRP*(TS1 + TS2 + 1 + SJW) und
CANBPS_max = FPCLK/(BRP*(TS1 + TS2 + 1 - SJW)
3. Der Parameter SJW sollte in Abhängikeit von T2 gewählt werden. Es ist 
nicht sinnvoll SJW größer als TS2 zu machen.
 SJW = T2 - 1, für T2 < 5 und SJW = 5, für T2 >= 5
4. Der Samplepoint sollte einstellbar sein (70%,..., 85%).

Ich habe jetzt, nachdem ich mich in das Thema eingelesen habe, ein 
einfaches Spreadsheet zusammengeflickt, bei dem man verschiedene Werte 
(Frequenz, Bitrate, Samplepoint, etc.) eintragen kann. Das Ergebnis ist 
eine Liste von möglichen Baudratenteilern mit einer Angabe der 
Abweichung von der nominalen Bitrate.
Links oben die Werte eintragen und dann in der Liste den Eintrag mit dem 
geringsten Fehler und dem kleinsten BRP auswählen.

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.