Forum: Mikrocontroller und Digitale Elektronik CANopen Stack für STM32 und HAL


von Bert S. (kautschuck)


Lesenswert?

Hi,

Ich möchte in ein Project CANopen integrieren, jedoch scheint das sehr 
aufwendig zu werden, da ich nichts mit den HAL Treibern gefunden habe. 
Es gibt ja CANopenNode (https://github.com/CANopenNode/CANopenNode), 
welches einen Stack für die STM32 beinhaltet, jedoch mit den 
STDPeripheral Treibern. Diese umzuschreiben scheint mir jedoch schon 
sehr mühsam und fehleranfällig zu sein.

Hat jemand vielleicht schon CANopen in sein STM32 Project mit HAL 
integriert oder weiß jemand, ob/wo es evtl. einen Stack, kompatible mit 
HAL, gibt?

Grüsse Bert

von Dr. Sommer (Gast)


Lesenswert?

Die eigentliche Frage ist, brauchst du richtige komplette CANopen 
Unterstützung mit Konfiguration und allem, oder reicht es ein paar 
Nachrichten mit anderen, bekannten & fixen CANopen-Geräten 
auszutauschen? Bei letzteren musst du dann die PDO's entsprechend 
konfigurieren, und kannst auf deinem Gerät einfach direkt die 
gewünschten Nachrichten auf "normale" Art verarbeiten. Ist natürlich 
dann nicht sehr flexibel und du kannst dein Gerät nicht als 
"CANopen-kompatibel" verkaufen, falls es darum geht - aber ich habe das 
Gefühl, dass du dann nicht so fragen würdest.

Bert S. schrieb:
> Diese umzuschreiben scheint mir jedoch schon
> sehr mühsam und fehleranfällig zu sein.

Dürfte unsignifikant sein im Vergleich zum Gesamt-Aufwand, "richtiges" 
CANopen umzusetzen.

von Bert S. (kautschuck)


Lesenswert?

Dr. Sommer schrieb:
> ie eigentliche Frage ist, brauchst du richtige komplette CANopen
> Unterstützung mit Konfiguration und allem

Meine Nodes sind eigentlich nur Slaves, wobei hier nur die Adresse 
gesetzt werden können muss (über ein USB Interface). Die Geräte sollen 
dann RPDOs für Regler Soll Werte registrieren und selber TPDO 
Registrierungen für Sensorwerte vornehmen. Daher sollte eigentlich eine 
abgespeckte Version reichen. Der Master Knoten muss dann aber den ganzen 
CANopen Stack unterstützen.

Ich habe bisher noch nie mit CAN gearbeitet, mich aber schon eine Weile 
damit beschäftigt. Das es extrem Aufwändig sein ist, einen CAN Stack zu 
schreiben weiß ich und das habe ich sicher nicht vor. Wenn Niemand etwas 
in HAL kennt, werde ich einfach CANopenNode anpassen.

: Bearbeitet durch User
von Dr. Sommer (Gast)


Lesenswert?

Bert S. schrieb:
> Meine Nodes sind eigentlich nur Slaves, wobei hier nur die Adresse
> gesetzt werden können muss (über ein USB Interface)

Die 7-Bit-Node-Adresse oder die CAN-ID's? Letztere werden ja über SDO's 
konfiguriert, nicht irgendwie extern (USB).

Bert S. schrieb:
> und selber TPDO
> Registrierungen für Sensorwerte vornehmen.

Was soll das heißen? Sie sollen die Master-Rolle übernehmen um andere 
Geräte zu konfigurieren? Während es parallel noch einen anderen Master 
gibt? Das gibt ein Chaos.

Bert S. schrieb:
> Das es extrem Aufwändig sein ist, einen CAN Stack zu
> schreiben weiß ich und das habe ich sicher nicht vor.

CAN an sich ist sehr einfach, m.M.n. sogar einfacher als I²C. CANopen 
hingegen ist sehr komplex. Es gibt auch kommerzielle CANopen-Stacks, 
vielleicht gibt es da was passendes...

von Bert S. (kautschuck)


Lesenswert?

Dr. Sommer schrieb:
> Die 7-Bit-Node-Adresse oder die CAN-ID's? Letztere werden ja über SDO's
> konfiguriert, nicht irgendwie extern (USB).

Die 7-bit Node Adresse, da sonst so viel ich weiss ja keine 
Einstellungen über SDO vorgenommen werden können.

Dr. Sommer schrieb:
> Was soll das heißen? Sie sollen die Master-Rolle übernehmen um andere
> Geräte zu konfigurieren? Während es parallel noch einen anderen Master
> gibt? Das gibt ein Chaos.

Ich habe mich da falsch ausgedrückt: Was ich eigentlich machen möchte 
ist, dass der Master die Sollwerte vorgibt, aber eben auch einen Stream 
der Sensorwerte zurückerhält. Der Master muss doch dazu zuerst einmal 
eine TPDO an einen Slave schicken, damit dieser die Sollwerte 
verarbeitet. Dann muss der Master eine RPDO schicken, damit der Slave 
ihm die Sensorwerte schickt. Daher braucht es nur einen Master.

Dr. Sommer schrieb:
> CAN an sich ist sehr einfach, m.M.n. sogar einfacher als I²C. CANopen
> hingegen ist sehr komplex. Es gibt auch kommerzielle CANopen-Stacks,
> vielleicht gibt es da was passendes...

Ich möchte mich in nächster Zeit noch intensiver mit CANopen 
beschäftigen und daher keinen kommerziellen Stack benützen. Grundlegend 
möchte ich aber einmal in der Lage sein, das Grundgerüst in mein Projekt 
zu integrieren. PDO Registrierung, OD etc. werde ich dann im Nachhinein 
integrieren.

von Dr. Sommer (Gast)


Lesenswert?

Bert S. schrieb:
> Die 7-bit Node Adresse, da sonst so viel ich weiss ja keine
> Einstellungen über SDO vorgenommen werden können.

Ok, korrekt.

Bert S. schrieb:
> Was ich eigentlich machen möchte
> ist, dass der Master die Sollwerte vorgibt,

Der Master verarbeitet (empfängt/sendet) überhaupt keine Prozessdaten. 
Der Master startet/stoppt das Netz, prüft Heartbeat-Nachrichten und 
konfiguriert ggf. die Slaves.

Bert S. schrieb:
> Dann muss der Master eine RPDO schicken, damit der Slave
> ihm die Sensorwerte schickt

Mach "schickt" keine RPDO. Ein und dasselbe PDO wird auf Senderseite als 
TPDO und auf Empfängerseite als RPDO bezeichnet. Und wie gesagt, der 
Master macht nichts mit PDO's, er konfiguriert sie höchstens.

Bert S. schrieb:
> damit der Slave
> ihm die Sensorwerte schickt.

Normalerweise schicken die Slaves ihre Sensorwerte automatisch, wenn man 
sie nicht gerade auf RTR stellt.

Bert S. schrieb:
> Daher braucht es nur einen Master.

Es braucht immer exakt einen Master!

von Dr. Sommer (Gast)


Lesenswert?

Bert S. schrieb:
> Ich möchte mich in nächster Zeit noch intensiver mit CANopen
> beschäftigen

Dann kann ich dieses Buch empfehlen: https://www.amazon.de/dp/0863802478

Und natürlich die Norm lesen.

von Bert S. (kautschuck)


Lesenswert?

Danke dir, werde mich mal noch weiter einlesen. CANOpenNode scheint aber 
sicher eine gute Sache zu sein und ich werde wohl darauf aufbauen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.