mikrocontroller.net

Forum: FPGA, VHDL & Co. ZYNQ CAN-BUS (XCANPS) Inbetriebnahme ohne Linux


Autor: Julian Bauer (Firma: Hochschule Reutlingen) (julian-bauer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Tim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Julian Bauer (Firma: Hochschule Reutlingen) (julian-bauer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!)

Autor: Blechbieger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Tim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Julian Bauer (Firma: Hochschule Reutlingen) (julian-bauer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

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

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.