Forum: Mikrocontroller und Digitale Elektronik Baudrade Berechnung


von Gast (Gast)


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

von Blob! (Gast)


Lesenswert?

hier gibt es einen Rechner der meiner Meinung nach aber etwas mit 
vorsicht zu genießen ist, rechnel die Ergebnisse dann nochmal von Hand 
nach!

Rechner:
http://www.esacademy.com/faq/calc/sja1000.htm


Eine gute Erklärung:
http://www.port.de/deutsch/canprod/content/sv_req_form.html

von Gast (Gast)


Lesenswert?

das ist genauer mein Problem, ich möchte die Berechnung per Hand 
durchführen. wie wähle ich den Anzahl von jedem parameter(BRP,SJW etc..)
danke

von Blob! (Gast)


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!!!

von Gast (Gast)


Lesenswert?

Hallo,
ist es so richtig?
Tq=BRP/Fsys
Tq=Time Quantum, Fsys=System-Takt des CAN-Controllers =Fckl/2

soll ich BRP freiwillig wählen?
Tbit=Tsyns + Tprs+ Tphs1 + Tphs2

mit Tsyns=Tsys

danke

von Blob! (Gast)


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!

von Blob! (Gast)


Lesenswert?

EDIT
Okay, Tseg2 ist doch 2, nicht vier, habe die zwei Werte vertauscht!

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

von Gast (Gast)


Lesenswert?

hallo Blob,
ich kriege fur die Berechnung von Tseg1

Tseg1 = 8µs (=125KBaud) - 0,4µs * 0,72(=72%) = 7,712µs

von Blob! (Gast)


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

von Gast (Gast)


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

von Blob! (Gast)


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

von Gast (Gast)


Lesenswert?

Hallo Blob,

alles  klar, das war mein Fehler.

Ich danke dir

von Gast (Gast)


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)

von bitbo (Gast)


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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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

Wenn Du schon einen steinalten Thread kaperst, dann zeig' doch mal einen 
Deiner Rechenansätze.

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.