Hallo, ich möchte mit 2 uC einen CAN Bus mit einer Länge von ca. 3m realisieren. Es sind 2 uC mit einer Frequenz von 16 & 50 MHz verfügbar, Ich komme mit der Berechnung der Bit-Timing Parameter nicht zurecht. Die CAN Module möchte ich konfigurieren, sodass eine Baudrate zwischen 100 und 500 kbps entsteht welche genau, ist egal. Also einstellen kann ich jeweils: 1. Synchronization jump width. 2. Time segment 1. 3. Time segment 2. 4. Baud rate prescaler. Welche Parameter der uCs müssen denn bei beiden gleich gewählt werden? Also die Baudrate muss wohl gleich sein, das kann man über den Prescaler machen, aber was ist mit dem Rest? Grüße
Etwas mehr Informationen über die verwendeten Bauteile wären natürlich hilfreich...
Um bei dem 16MHz auf 500kbit/s zu kommen: SJW = 1; TS1 = 6; (evtl. 7, je nach Implementierung) TS2 = 1; PRE = 4; (?) Bei 50MHz: SJW = 2; TS1 = 7; (evtl. 8, je nach Implementierung) TS2 = 2; PRE = 1; Bei Angaben ohne Gewähr, nähere Infos wären nötig für sicherere Angaben. Gruß, Alex
ernst schrieb: > Etwas mehr Informationen über die verwendeten Bauteile wären natürlich > hilfreich... Also die CAN-Treiber sind folgende: SN65HVD1050, ganz normal jeweils über RX/TX an den uC angeschlossen. Bus-Leitungslänge 3m, an jedem Ende mit 120 Ohm abgeschlossen. Ludolf schrieb: >> aber was ist mit dem Rest? > Identifier müssen auch gleich lang sein. Ja ist mir klar.. ich habe keine Probleme mit den oberen Schichten, sondern mit dem Bit-Timing Alex Bürgel schrieb: > Bei 50MHz: > > SJW = 2; > TS1 = 7; (evtl. 8, je nach Implementierung) > TS2 = 2; > PRE = 1; Bei 50 MHz müsste es wahrscheinlich PRE=10 heißen! Was ich eben nicht verstehe ist, dass SJW,TS1, TS2 bei jedem der beiden uC unterschiedliche Werte hat. Schaut man auf dieser Internetseite: http://www.rn-wissen.de/index.php/CAN#Bittiming so sieht man, dass die SP Location nach 14 TQ ist (bei baud = 500 kbps). Durch die SJW,TS1,TS2 verschiebe ich es aber, oder?
Alex Bürgel schrieb: > TS1 = 7; (evtl. 8, je nach Implementierung) Und was soll je nach Implementierung eigentlich heißen? Viele Grüße
Bei Freescale-Controllern berechnet sich das Bittiming zu:
Und in diese Gleichung musst du Werte für fCPU, den prescaler, TS1, TS2 einsetzen, so dass 2µs herauskommen und TS1 etwa 7x größer ist als TS2 (Sample-Point bei 80 - 90%). Wenn du es einstellen kannst solltest du auch "one Sample per bit" (nicht "three") auswählen. Schöne Grüße, Alex
Vielen herzlichen Dank euch beiden. Ich habe einfach die Werte eingesetzt und es werden Daten übertragen. Allerdings gehen Daten verloren. Im Empfänger werden Bits mit MSGLOST gesetzt. Kann das mit den Bit-Timing-Parametern zusammenhängen?
Stimmt denn die physikalische Verbindung? Sprich: verdrillte Leitungen und 120 Ohm Widerstände an beiden Enden? Gruß, Alex
Alex22 (Alex Bürgel) schrieb: > Sprich: verdrillte Leitungen und 120 Ohm Widerstände an beiden Enden? Ja,verdrillt und an beiden Enden abgeschlossen. 120 Ohm +/- 1%. Das Tolle ist, dass Nachrichten 1-10 ankommen, Nachricht 11 nicht und Nachricht 12-14 wieder. Ich habe bereits ein CAN Analysator angeschlossen. Bei dem kommen alle MSGs & Daten an.
Armin schrieb: > Läuft der Empfangspuffer nach der 10.Msg über? Nein, erst >31 MSGs. Das Problem: Ich hatte die ganze Zeit den CAN Analysator auf dem Bus zum "Sniffen". Habe vergessen die Manipulation heraus zu nehmen. Es wurden bei bestimmten Identifiern die Nachrichten "manipuliert." Jetzt gehts. Vielen Dank euch allen! Viele Grüße
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.