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
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!)
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.
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 :))
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