Hallo hab ein Problem mit meinen Bus Timings für 500Kbit/s Benutze eine LPC 2119 mit CAN Treiber MCP2551 zum MCP 2551: RS liegt auf GND Vref ist offen (?) zum LPC 2119 CAN1 pin TD1(TX) und P025(RX) Quartz. 19.6608 MHz Pclk lauf startup 19.6608 * 3(MSEL) = 58,9 MHz 58,9 MHz / 2(PSEL) = 29,4912 MHz mit diesen Wert muss ich doch dann meine Bus timings ausrechnen !? wie weit spielt dieser Code auszug dabei noch eine Rolle !? // No divider: peripheral clock = processor clock VPBDIV = 1; Hab dazu im internet einen Bus Timing calculator gefunden. Dort die Werte 500Kbit/s für Baudrate und die 29,4912Mhz für die "Input clock frequency" angegeben. korrekt !? Ergebnis : T1 = 12 T2 = 3 SJW = 1 BTQ = 15 = BRD ??? Laut Datenblatt Lpc 2119 Bus Timing Register 0:9 BRD 15:14 SJW 19:16 TSEG1 22:20 TSEG2 23 SAM = 0 zusammengesetz mit den Werten von oben bin ich auf: 0x001E200F gekommen !? habe diesen Wert in das C1BTR (0xE0044014) Register geschrieben. Wenn ich jetzt ein Nachricht schicke dann wird diese vom CANoe (Vector Informatik) nicht erkannt und die CANCaseXl Box zeigt einen Error an !? Kann mir jemand helfen und sagen was ich falsch gemacht habe oder übersehen habe !? DANKE
Ok ich hab es jetzt selber hinbekommen. Hab VPBDIV = 1/2; eingestellt und 0x0039E001 ins C1BTR Register geschrieben. // angenaeherte CAN Bit Timings fuer LPC2294 (pclk=15.000 MHz) // CiA-Index Bitrate[kbps] tq[ns] tq/Bit SampleP BRP SJW TSEG1 TSEG2 SAM // 7 10.00 10000 10 8 149 3 5 2 0 // 6 20.00 5000 10 8 74 3 5 2 0 // 5 50.00 2000 10 8 29 3 5 2 0 // 4 125.0 800 10 8 11 3 5 2 0 // 3 250.0 400 10 8 5 3 5 2 0 // 2 500.0 133.33 15 12 1 3 9 3 0 // 1 789.4 (!) 66.67 19 16 0 3 13 3 0 // 0 1000.0 66.67 15 12 0 3 9 3 0 funktioniert so einwandfrei
Auf Basis von 15MHz ist das keine Kunst, du hast aber 14,7456MHz. CAN definiert jenseits von 125Kbps offiziell eine Oszillatortoleranz von maximal 0,5%. Du liegst 1,7% daneben. http://pdfserv.maxim-ic.com/en/an/AN2935.pdf
Folgende Werte (im Anhang eine ooocalc Tabelle) F_OSC (Quarz) 14,745 MHz M 4 P 2 F_CCO 235,92 MHz Zielbaudrate 100,00 KBit/s cclk 58,98 MHz VPBDIV 1 Ziel BRP_T 10 µs pclk 58,98 MHz ←┘ BRP 37 BRP_t (CAN-Clock)1,5941 MHz ←┘ BRP_T 0,6273 µs SJW 1 T_SJW 0,6273 µs TSEG1 13 T_TSEG1 8,1553 µs TSEG2 2 T_TSEG2 1,2547 µs T_Bit 10,037301 µs Fehler 0,37% kommt das hin, oder hab ich mich irgendwo verrechnet?
scheint zu klappen! unser BUS funkioniert mit diesen Einstellungen! hier ein update der Datei!
Hatte auch Probleme mit der Berechnung der richtigen Bitrate für einen LPC2xxx und habe das Spreadsheet heruntergeladen. Es ist hervorragend gemacht, war aber noch nicht richtig hilfreich: 1. Es ist nicht klar, welcher Bitratenteiler zu verwenden ist. Man muss raten 2. Der Parameter SJW bestimmt die Synchronisationsreichweite. In der Berechnung für die nominale Baudrate sollte diese nicht miteinbezogen werden. Die nominale Baudrate ist CANBPS_nom = FPCLK/(BRP * (TS1 + TS2 + 1)). Der Syncteil ist immer 1 plus/minus SJW. Damit liegt der Synchronisationsbereich immer zwischen CANBPS_min = FPCLK/(BRP*(TS1 + TS2 + 1 + SJW) und CANBPS_max = FPCLK/(BRP*(TS1 + TS2 + 1 - SJW) 3. Der Parameter SJW sollte in Abhängikeit von T2 gewählt werden. Es ist nicht sinnvoll SJW größer als TS2 zu machen. SJW = T2 - 1, für T2 < 5 und SJW = 5, für T2 >= 5 4. Der Samplepoint sollte einstellbar sein (70%,..., 85%). Ich habe jetzt, nachdem ich mich in das Thema eingelesen habe, ein einfaches Spreadsheet zusammengeflickt, bei dem man verschiedene Werte (Frequenz, Bitrate, Samplepoint, etc.) eintragen kann. Das Ergebnis ist eine Liste von möglichen Baudratenteilern mit einer Angabe der Abweichung von der nominalen Bitrate. Links oben die Werte eintragen und dann in der Liste den Eintrag mit dem geringsten Fehler und dem kleinsten BRP auswählen.
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.