Hallo zusammen, ich habe eine Applikation die Daten über Ethernet versenden kann auf meinem MicroZed am laufen. Das funktioniert alles perfekt. Jetzt muss ich noch Status-Daten über CAN versenden können. Das funktioniert leider noch nicht so richtig. Ich habe mehrere "kleine" Probleme, aber zuerst zum Aufbau: Ich habe beide CAN-Schnittstellen gleich initialisiert (z.B. 40kbps). Die beiden CAN hängen an jeweils einem ADM3053, haben jeweils einen 120Ohm Widerstand zwischen H und L und sind jeweils miteinander über H, L und GND verbunden. Auf Can0 sende ich, Can1 ist nur da um zu horchen (= ACK zu senden). Soweit funktioniert es recht gut, ich erhalte das was ich sende an CAN1. Jetzt komme ich zu den ersten Problemen: 1)Wenn ich den Prescaler runter drehe erhalte ich ab ~300kbps (prescaler 3 und niedriger) Bus-Errors und es geht gar nichts mehr. Ich schaffe es auch nicht über die time segments dann schneller zu senden. Self-test wird aber erfolgreich abgeschlossen und die Werte für Prescaler und TS1 &2 sind korrekt im Register. Vielleicht habe ich einen Fehler in der BUS-Verbindung? 2)Wenn ich PCAN-USB dazu anschließe (ohne weiteren Widerstand) und über PCAP horche, dann erhalte ich gar nichts. Weder ERRORS noch korrekte Daten werden mir hier angezeigt. Egal ob auf 50kbps oder 500kbps. Das System verhält sich immernoch gleich, über ~300kbps geht nichts mehr. Weiß jemand woran ich nicht gedacht habe? Hat jemand bereits eine Applikation am laufen mit 500kbps und mehr? Leider finde ich im gesamten Netz nichts brauchbares, außer die example.c Danke :) Grüße Julian
Gast
#5202275
Julian B. schrieb: > Die beiden CAN hängen an jeweils einem ADM3053, haben jeweils einen > 120Ohm Widerstand Der Bus sollte insgesamt nur zwei Terminierungen haben. Prüf das bitte mal, das kann ich nicht herauslesen. Julian B. schrieb: > Vielleicht habe ich einen Fehler in der > BUS-Verbindung? Schau dir das Signal mit dem Scope an. Signal sauber? Arbitrierung funktioniert? Wie lang ist die Leitung eigentlich -> mehrere Messpunkte ggf. sinnvoll
Hallo, vielen Dank für deine Antwort. Ich habe auf dem ZYNQ zwei CAN. Ich habe ebenso zwei CAN-TRANCEIVER (ADM3053) die jeweils einen festen Terminierungswiderstand haben. Was ich nun gemacht habe: Ich habe mir einen kleinen Bus aufgebaut indem ich CAN_H von CAN0 an CAN_H von CAN1 angeschlossen habe. Ebenso bin ich bei CAN_L und CAN_GND vorgegangen. Sprich drei Dräte von CAN0 zu CAN1. Da bei CAN0 sowie CAN1 ein Widerstand dran hängt ist auch mein Bus fertig aufgebaut. Die Leitung ist ca 10cm lang. Nun habe ich den PCAN an einer 50cm langen Leitung dazu angeschlossen, parallel dazu. Sprich CAN_H an die CAN_H der BUS-Leitung und so weiter. Hier ist am Ende kein Widerstand eingebaut (im PCAN wird ja selber keiner fest installiert sein?) ich vermute einen Fehler gefunden zu haben. Und zwar vermute ich den Fehler im CAN CLK. Ich gehe von 24MHz aus, die durch den Prescaler und die Time Segmente geteilt wird und dann der Baudrate entsprechen. Zwar habe ich im PS angegeben, dass der CAN CLK 100MHz hat (default) und CAN0 und CAN1 MIOCLK auf jeweils 24MHz laufen, diese scheinen jedoch auf 100MHz zu takten und dadurch ist meine CAN-Frequenz immer um den Faktor 3 größer. Soviel habe ich jetzt am Oszilloskop bereits gemessen. Scheint aber dann nicht sauber bei 500kbit/s raus zu kommen, stattdessen ca. 530bit/s (fürt eine solch geringe Abweichung schon dazu, dass PCAP garnichts sieht? Lediglich BUSHEAVY wird angezeigt wenn ich in PCAP was sende, empfangen wird nichts, auch kein Fehler!)
Gast
#5204549
Julian B. schrieb: > Nun habe ich den PCAN an einer 50cm langen Leitung dazu angeschlossen, > parallel dazu. Sprich CAN_H an die CAN_H der BUS-Leitung und so weiter. > Hier ist am Ende kein Widerstand eingebaut (im PCAN wird ja selber > keiner fest installiert sein?) Damit ist der Bus jetzt falsch terminiert. Eigentlich ist CAN da ziemlich tolerant aber terminiere mal am PCAN und entferne den Terminator am jetzt mittleren CAN Transceiver.
Gast
#5204633
Julian B. schrieb: > Scheint aber dann nicht sauber bei 500kbit/s raus zu kommen, stattdessen ca. 530bit/s 530kbit/s sind meiner Meinung nach eine viel zu große Abweichung, wo ich mich gar nicht wundern würde, dass das nicht sauber oder gar nicht läuft. Versuch deinen Takt erst mal ordentlich einzustellen. Außerdem stimme ich dem Vorposter zu, dass deine Terminierung auch nicht gut ist. Da gibt's viele Guides wie das zu platzieren ist. Prinzipiell nur 2 Terminierungswiderstände, und diese an den am weitesten entfernten Busknoten (nebeneinander ist quatsch). Also eher den zweiten Widerstand an PCAN.
Tim schrieb: > Außerdem stimme ich dem Vorposter zu, dass deine Terminierung auch nicht > gut ist. Da gibt's viele Guides wie das zu platzieren ist. Prinzipiell > nur 2 Terminierungswiderstände, und diese an den am weitesten entfernten > Busknoten (nebeneinander ist quatsch). Also eher den zweiten Widerstand > an PCAN. danke euch beiden für die schnelle Antwort. Leider ist der Terminierungswiederstand direkt auf der Platine, ich kann nur entweder beide zusammen schalten oder beide weg lassen, aber nicht getrennt (Fehler bei der Hardwareentwicklung) Daher die Frage, ob manuell einen 120R ins Anschlusskabel rein löten oder soll ich einfach die Leitung zwischen CAN0 und CAN1 länger machen, sodass der Terminierungswiderstand bei jeweils einem CAN wieder "in der Mitte" liegt? Problem ist nämlich, dass man auch das PCAN abziehen können sollte und es dann auch noch funktionieren sollte. Zu der Frequenz - muss ich nochmal drüber schauen was da faul ist, ja! Danke bis hierhin schon einmal :))
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.