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
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
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
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!!!
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
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!
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
hallo Blob, ich kriege fur die Berechnung von Tseg1 Tseg1 = 8µs (=125KBaud) - 0,4µs * 0,72(=72%) = 7,712µs
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
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
>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
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)
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.