mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Baudrade Berechnung


Autor: Gast (Gast)
Datum:

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

Autor: Blob! (Gast)
Datum:

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

Autor: Gast (Gast)
Datum:

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

Autor: Blob! (Gast)
Datum:

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

Autor: Gast (Gast)
Datum:

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

Autor: Blob! (Gast)
Datum:

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

Autor: Blob! (Gast)
Datum:

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

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo Blob,
ich kriege fur die Berechnung von Tseg1

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

Autor: Blob! (Gast)
Datum:

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

Autor: Gast (Gast)
Datum:

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

Autor: Blob! (Gast)
Datum:

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

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Blob,

alles  klar, das war mein Fehler.

Ich danke dir

Autor: Gast (Gast)
Datum:

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

Autor: bitbo (Gast)
Datum:

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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

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

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.