Forum: Mikrocontroller und Digitale Elektronik CANopen-I2C Schnittstelle


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von JW25 (Gast)


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

von Frank K. (fchk)


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

von JW25 (Gast)


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

von Lutz (Gast)


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

von JW25 (Gast)


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

von Gerd E. (robberknight)


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

von JW25 (Gast)


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

von Gerd E. (robberknight)


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

von Christian K. (christian_rx7) Benutzerseite


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

von JW25 (Gast)


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

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]
  • [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.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

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