Hallo Zusammen,
ich bin Student der Elektrotechnik und habe einen Themenvorschlag für
eine Abschlussarbeit bekommen. Es soll darum gehen eine Schnittstelle
zwischen einem CANopen-Bus nach DS301 und einem I2C-Bus zu
programmieren. Als Zeitrahmen sind 22 Wochen angesetzt inklusive
ausführlichem Bericht. In Sachen CAN bin ich unerfahren und bin nach
meinen Recherchen zu CANopen zunächst etwas abgeschreckt von dem Umfang.
Haltet ihr das Vorhaben machbar?
Vielen Dank schon mal!
Ja, das sollte machbar sein.
Ist die Hardware vorgegeben?
Du musst den CANOpen Stack selber ja nicht mehr neu machen, den gibts
fertig.
https://github.com/CANopenNode/CANopenNode
Wenn Du die Hardware selber frei wählen kannst, dann nimm einen
dsPIC33FJ128GP802-I/SP Controller und einen MCP2562E/P Transceiver.
Alles im DIL-Gehäuse, einfach zu löten, einfach in Betrieb zu nehmen,
und der Stack oben kennt den Chip.
I2C selber ist auch nicht so schwer, und der Controller hat gleich zwei
I2C Controller.
Schau es Dir einfach mal an.
Du brauchst:
- Microchip MPLAB X und den XC16 Compiler - beides gibts kostenlos zum
Download bei Microchip.com.
- PICKIT3, kostet als China-Clone ca 20€
- einen garantiert funktionierenden CANOpen Master - den muss man Dir
zur Verfügung stellen.
Weiterhin empfehlenswert:
- ein Logicanalyzer. Die 12..15€ Saleae-Clones auf Amazon reichen
vollständig. Das ist ein echter Timesaver!
- wenn es geht, ein weiteres CAN-Bus Interface für Deinen PC, damit Di
auf den Bus mithören kannst. Das geht zwar notfalls auch mit dem
Logicanalyzer und einem weiteren CAN-Transceiver, aber mit einem
zusätzlichen CAN-Bus-Knoten ist es bequemer. Vielleicht kannst Du Dir
sowas ausleihen.
Damit sollte alles komplett sein.
fchk
Hallo Frank,
vielen Dank für deine schnelle und vor allem ausführliche Antwort.
Bei der Hardware bin ich tatsächlich frei in der Auswahl und der
CANopen-Master steht zur Verfügung. CAN-seitig wird es auch nur diesen
Teilnehmer geben.
Ich werde mir deine Vorschläge ansehen und ggf. einen Berichten zum
Projekt posten, wenn es fertig ist.
JW25 schrieb:> CAN-seitig wird es auch nur diesen> Teilnehmer geben.
Dann wirst du aber nicht lange Freude daran haben: Ein CAN-Bus besteht
immer aus mindestens 2 Teilnehmern. Denn wenn der sendende Knoten kein
ACK von einem anderen Teilnehmer bekommt, wiederholt er das Senden des
Frames so lange, bis sein Errorcounter voll ist und stellt dann das
Senden ein. Also brauchst du mindestens 2 CAN-Teilnehmer, die sich
irgendwas erzählen.
Hallo Lutz,
Danke für deine Antwort. Ich hatte mir vorgestellt die Schnittstelle als
Knoten einzurichten. Also in Kommunikation mit dem CAN zu treten, die
Daten zu puffern und an den I2C zu senden.
JW25 schrieb:> Also in Kommunikation mit dem CAN zu treten, die> Daten zu puffern und an den I2C zu senden.
Fehlen da zwischen "puffern" und "an den I2C senden" nicht noch mehrere
Abstraktions- und Protokollwandlungsschichten?
Oder möchtest Du wirklich die "rohen" I2C-Daten wie I2C-Adressen,
Stop-Conditions etc. übers CANopen schicken? Das dürfte zwar technisch
möglich sein, aber passt eher weniger zum gängigen Abstraktionsniveau
bei CANopen.
Gängiger wäre, daß Du per I2C z.B. einen digitalen Temperatursensor oder
ein GPIO-Expander ansprichst. In Deinem Schnittstellenmodul hast Du dann
die gesamte I2C-Kommunikation mit diesem Temperatursensor drin und
lieferst hinterher per CANopen direkt den gemessenen Temperaturwert
zurück, nicht den rohen Registerinhalt von dem Sensor.
Für Sensoren gibt es in CANopen ein standardisiertes Geräteprofil. Es
ist gerade der Witz von CANopen diese Geräteprofile zu nutzen und nicht
nur irgendwelche sehr produktspezifische rohe Registerwerte.
Hallo Gerd,
dass dazu auch noch ein Umwandlungsprozess gehört stimmt natürlich.
Konkret geht es darum in einem Gerät das den I2C verwendet die
CANopen-Schnittstelle eines zugekauften Antriebsreglers nutzbar zu
machen. Wie gesagt fehlt mir die Erfahrung mit CANopen und ich gehe
deswegen vielleicht etwas naiv an die Sache heran.
JW25 schrieb:> Konkret geht es darum in einem Gerät das den I2C verwendet die> CANopen-Schnittstelle eines zugekauften Antriebsreglers nutzbar zu> machen. Wie gesagt fehlt mir die Erfahrung mit CANopen und ich gehe> deswegen vielleicht etwas naiv an die Sache heran.
Gibt es eine saubere Dokumentation für die verwendeten
CANopen-Geräteprofile des Antriebsreglers, inkl. evtl.
herstellerspezifischer Erweiterungen etc.?
Gibt es eine saubere Dokumentation für Dein I2C-Gerät mit allen
Registern etc.?
Wenn nein, dann lass die Finger davon.
Kannst Du jedes der Geräte für sich in seiner nativen, funktionsfähigen
Umgebung beobachten und dort die Protokolle sniffen? Also den
Antriebsregler z.B. mit einer vom Hersteller als voll unterstützt
angegebenen Peripherie?
Die Arbeit besteht aus den Grundlagen beide Schnittstellen in den Griff
zu bekommen. Das ist überschaubar und realistisch.
Dann geht es ans Umwandeln der Protokolle. Das dürfte der Hauptteil der
Arbeit werden. Wenn Du jetzt von einer oder gar beiden Seiten nur sehr
dünne oder gar keine Dokumentation hast, ist Reverse-Engineering,
Protokollanalyse etc. angesagt. Da hilft es sehr schon etwas Erfahrung
mit sowas zu haben. Aber irgendwelche undokumentierten Eigenheiten
können bei sowas schnell mal jede Zeitplanung durcheinanderwirbeln.
Schau dir mal die NXP LPC11C24, da findest du in den LPCopen
Bibliotheken einen ganz guten Einstieg in CANopen und I2C.
Zusätzlich kann ich dir das CiA-301 und CiA-401 ans Herz legen. Müsstest
mal auf deren Homepage nachsehen, da gibt es auch viele Unterlagen zu
Gateways. Wenn man die entsprechenden Dokumente nicht herunter laden
kann, dann denen einfach ein Mail schicken und danach fragen, mit dem
Hinweis, dass man es für eine Studienarbeit benötigt. Mir hatte man
damals ganz problemlos alle angeforderten Dokumente geschickt.
Christian_RX7
Hallo zusammen,
Nach nochmaliger Rücksprache werde ich wohl ein anderes Abschlussthema
angehen. Trotzdem hat mich das Thema gepackt und ich werde mich in
meiner Freizeit damit beschäftigen.
Vielen Dank nochmal für die guten Ratschläge!
Sollte ich Fortschritte vorweisen können werde ich darüber berichten
Eine eigene Frage?
Dieser Thread ist über 8 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.