Baudrade Berechnung

Gast #1042364
Lesenswert?

Hallo,

ich möchte gern wissen, wie man die Baudrate für den CAN-Bus berechnen 
kann.
Die clock-Frequenz ist 5MHz und die Geschwindigkeit F_Bit= 125Kbs.
Wie kann ich die Werte BRP.PHS SJW etc berechnen und in dem 
entsprechenden CAN-Register setzten. Der Controller ist der AT90CAN von 
ATMEL.

Danke
Gast #1042434
Lesenswert?

das ist relativ gut im Datenblatt vom SJA1000 erklärt - is aber ein 
mords scheiß zum rechnen scnr :D

ich rechne immer zuerst die Tscl aus, dabei beginne ich mit einem 
prescaler von "0". Mit dem errechneten Werte rechne ich dann Tseg1 aus, 
bin ich hier dann über "16", rechne ich Tscl nochmals aus, dieses mal 
aber mit einem prescaler von 2, dann 4 .... bis ich bei Tseg1 unter 16 
komme!

Tscl = 2 * Tclk *(Prescaller*1)
Tscl = 2 * 1/5MHz
tscl = 0,4µs

Tseg1 = 8µs (=125KBaud) - 0,4µs * 0,72(=72%) = 5,472µs
Tseg1 = 0,4µs (5,472µs + 1)
Tseg1 = 13 (12,68)

und dann rechnest Du Tseg2 einfach mit den beiden oberen Werten aus

Tseg2 = 8µs (=125Kbaud) - 0,4µs - (( 13+1)x0,4)
Tseg2 = 2
Tseg2 = 0,4µs (Tseg2 + 1)
Tseg2 = 0,4µs (2+1) ==> 2 / 0,4µs - 1
Tseg2 = 4


Ich hoffe es ist ein wenig verständlich.
Wichtig ist, dass Du mit entsprechenden Nachkomastellen rechnest, besser 
gleich als Bruch -  Hier hat man sehr schnell Rundungsfehler drin!!!
Gast #1042445
Lesenswert?

ja, BRP ist der Bit-Prescaler, den benötigst Du wenn Dein Takt zu hoch 
ist, bei 5MHz kann der auf 1 bleiben. Ich habe oben versehentlich "0" 
geschrieben, meinte aber 1 (geteilt durch Null geht nicht, es soll 
heißen geteilt durch 1.
Den brauchst Du, wenn Dein Proz mal schneller läuft, aber 5MHz ist ja 
keine Geschwindigkeit!

BPR = 1


Das Tq ist in meiner Formel das Tscl - vergieß beim TQ nicht dass es mal 
2 heißt, also nicht BPR/Fsys sondern 2*BPR/Fsys
Bei 125Kbaud sind es also 0,4 µs nicht 0,2µs was bei Deiner Rechnung 
heraus kämme!

Die Rechnung oben von mir müsste eignetlich stimmen! - warum beim link 
von esacademy al Tseg2 nur die Hälfte steht weiß ich nicht, bin mir aber 
recht sicher dass es mit meiner Rechnung passt - der rest stimmt ja eh 
mit esacademy überein!
Gast #1042481
Lesenswert?

sry - klammer vergessen

Tseg1 = (8µs - 0,4µs) * 72%
Tseg1 = 7,6µs * 0,72
Tseg1 = 5,472µs (zwischenergebniss, jetzt hiermit weiter rechnen!)

Tseg1 = (5,742µs / 0,4µs) - 1
Tseg1 = 12,68 => 13

Ich  hoffe es stört Dich nicht dass es so unüberscihtlich geschrieben 
ist
Gast #1042537
Lesenswert?

Hallo Blob,
ich habe nur zwei Fragen, ich will den Prinzip verstehen.

ist es so?

N = Ftscl/Fbit(125Kbaud) = 2.5x10^6/125x10^3 =20
Tbit = 20Tq
Tbit = (Tseg1 +Tseg2 + Tsyns)*Tq
Tbit = (Tsyns + Tprs + Tphs1 + Tphs2)*Tq

wie bekommst du es?
Tseg2 = 8µs (=125Kbaud) - 0,4µs - (( 13+1)x0,4)
Tseg2 = 2

danke
Gast #1042558
Lesenswert?

>ist es so?
>N = Ftscl/Fbit(125Kbaud) = 2.5x10^6/125x10^3 =20
>Tbit = 20Tq
>Tbit = (Tseg1 +Tseg2 + Tsyns)*Tq
>Tbit = (Tsyns + Tprs + Tphs1 + Tphs2)*Tq

Ja!

>wie bekommst du es?
>Tseg2 = 8µs (=125Kbaud) - 0,4µs - (( 13+1)x0,4)

(Vergiß die "125" - die hab ich dazu geschrieben dass Du siehts woher 
die 8µs kommen, dachte Du erkennst das!

Tseg2 = 8 - 0,4 - (14*0,4)
Tseg2 = 8 - 0,4 - 5,6
Tseg2 = 2
Gast #1043207
Lesenswert?

Hallo Blob,
fals du nicht verbindet ist, ich habe nit dem berechneten Beispiel von 
heute morgen diese Ergebnisse zu kriegen, aber ich bekomme andere 
Faktor.

      set CAN controller baudrate

      F_Bit  = CLK_IO / (1 + PRS+1 + SJW+1 + PHS1+1 + PHS2+1) * (BRP+1)
             = CLK_IO / (1 + CANBT2[3:1]+1 + CANBT2[6:5]+1 + 
CANBT3[3:1]+1
               + CANBT3[6:4]+1) * (CANBT1[6:1]+1)

             for F_Bit = 250 KBS  @  CLK_IO = 8 MHz
             |
             |  for F_Bit = 250 KBS  @  CLK_IO = 5 MHz
             |  |
      BRP  = 3  1  (range: 0 - 63)
      PRS  = 2  4  (range: 0 - 7)
      SJW  = 0  0  (range: 0 - 3)
      PHS1 = 1  1  (range: 0 - 7)
      PHS2 = 1  1  (range: 0 - 7)
Gast #2494956
Lesenswert?

Hallo !

Sorry to bother, aber ich schein zu B blöd dafür zu sein:

Ich habe einen 14.7456 MHz Oszillator
und möchte mit 500 KBit kommunizieren.

Ich versuche das schon wirklich lange,
kann mir bitte jemand auf die Sprünge helfen??

Vielen, vielen Dank
bitbo

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren