mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik CAN Bus Timing


Autor: Matthias (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: A. K. (prx)
Datum:

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

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rick (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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?

Autor: Rick (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
scheint zu klappen! unser BUS funkioniert mit diesen Einstellungen!

hier ein update der Datei!

Autor: Norbert (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

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.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

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