Forum: Mikrocontroller und Digitale Elektronik STM32F103 CAN Extended ID


von Wolfram L. (amazon)


Lesenswert?

Hallo,
ich verwende schon lange den STM32F103 Controller für die CAN 
Bus-Komunikation im Rahmen der Hausautomatisierung und alles 
funktioniert wunderbar - so weit.

Ich verwende beim Versenden und Empfangen der CAN-Pakete 
11-bit-Identifier
...
canMessage.IDE = CAN_ID_STD gesetzt.
..
zur Kommunikation zwischen Steuerung und Teilnehmern.

Um weitere Funktionen in die Telegramme zu kodieren OHNE das bestehende 
Protokoll zu ändern hatte ich gehofft man kann die CAN Message einfach 
durch das extended Identifierformat erweitern, und gewinnt weitere 18 
Bit ZUSÄTZLICH
Also statt Baseframes Extended Frames zu senden.
..
canMessage.IDE = CAN_Id_Extended;
..
1. Ich habe mir jetzt den CAN-Standard angeschaut und frage mich kann 
man Standard und Extended in einem CAN-Bus mischen ?, Also 11 Bit 
Identifier und 29 Bit Identifier ?

2. Kann man beie IDs quasi setzen und "STD-Teilnehmer" lesen einfach die 
11 Bit Ids und "EXT-Teilnehmer" lesen die Ext-Ids zusätzlich?
Ich hatte es probiert, aber im Mode canMessage.IDE = CAN_Id_Extended; 
empfange ich nicht was ich erwarte

von Lutz (Gast)


Lesenswert?

Der Frame enthält ein bit das angibt, ob es 11 oder 29 bit sind. Damit 
ist alles geklärt.

von Wolfram L. (amazon)


Lesenswert?

Ja das IDE-Bit dies steuert war mir schon klar.
Ich hatte nur angenommen das die STM32 Lib Routinen die Parameter der 
"CAN Tx message structure definition" für
canMessage.StdId und canMessage.ExtId
beim Ext-Format beide Variablen benutzt. Halt die 11 bit im StdId-Feld 
und die restlichen 17 Bits in den ExtId-Variablen weitergibt.
Ich wollte halt die Kompatibilität bei alten Busteilnehmern (mit STD 
Frames) waren um diese nicht neu Programmieren zu müssen, wen ich ab 
jetzt NUR ExtFormat verwenden will.

von Ambassadore D. (ambassadore)


Lesenswert?

Hi Wolfram!

Ich habe für meine Hausautomatisierung ein Netzwerk basierend auf dem 
onewire-Protokoll aufgebaut. Die Intension war die Verkabelung minimal 
zu halten. Nun  muss ich feststellen, dass die  Interrupt- bzw. die 
CPU-Auslastung des STM32f103 sehr hoch ist. Jetzt überlege ich auf CAN 
umsteigen. Könntest Du mit uns Deine Erfahrung teilen?
(Wie lang sind die Leitungen, Welche Baudrate, Wie viele Nodes, 
SW-Libraries, Stabilität...etc)

Besten Dank

von Wolfram L. (amazon)


Lesenswert?

1 Wire ist meiner Meinung nach völlig ungeeignet für eine 
Haus-Automatisierung. Keine Kabel-Reichweite, wenig Fehlertolerant und 
wenige Komponenten und dann nur von einem Hersteller. Habe ich selbst 
etwa 1 Jahr betrieben mit Kabellängen von ca. 10m und dann habe ichs 
aufgegeben nachdem die Fehlersuche immer recht lange war - "... was hab 
ich nur wieder angeschlossen..hmmm.. Die Fehlersuche beim 1-Wirebus war 
mir schlichtweg zu zeitaufwändig.
Aufgrund der Erfahrungen mit 1-Wire habe ich daher sehr früh in der 
Testphase verschiedener Technologien und Topologien mich für CAN 
entschieden und umgestellt. Den Hausbus betreibe ich jetzt mit zwei 
CAN-Bussen mit 125kbaud. Leistungslängen sind gefühlt ca. 30-40m, sowie 
an und ab etwa 2-4m Stichleitung oder auch Schleifen. Man mur nur auf 
Abschlusswiderstände achten, sonst klappt der Bus nahezu 
unterbrechungsfrei sein 8-9 Jahren. Hin und wieder kommt ein Knoten 
(25-30) im Rahmen von Renovierung hinzu. Alles in allem funktioniert der 
CAN-Bus seeeehr zuverlässig.
Bei 125kbaud und ca. 100bit/message sind Nachrichten auch nur 1ms 
unterwegs. Also voll ausreichend für die allermeisten Funktionen.
Ich habe jetzt gerade das ISO-TP-Protokoll für CAN auf Basis des STM32 
implementiert um auch längere Textnachrichten (bis 4086Byte ) an 
Terminals oder Aktoren zu versenden.
Sonst verwende ich schlichtweg die 8-Byte-Messages zur Steuerung und 
Abfrage von Sensoren und Aktoren.

von Ambassadore D. (ambassadore)


Lesenswert?

Vielen Dank für die Antwort!

von Lutz (Gast)


Lesenswert?

Irgendwie habe ich das dann nicht richtig verstanden. In den Filtern 
wird doch eingestellt, auf welche Nachrichten reagiert werden soll.
Und wie aeussert sich denn das fehlerhafte Verhalten genau?

von Wolfram L. (amazon)


Lesenswert?

Hi Lutz,
nein fehlerhaft ist der falsche Ausdruck. Ich habe halt viele CAN Knoten 
in Betrieb die nur auf die Standard-ID reagieren. Neue Knoten sollen das 
Extendedformat UND das Standardformat verstehen können.
Meine Annahme war, dass die unteren Bits bei der Verwendung der 
Extended-Id AUCH im Feld für die Standard Ids enthalten wären.
Bei den STM-32-Libs kommt da aber nur Mist raus, man MUSS also immer das 
IDE Flag auswerten um zu wissen wo die "gültige" Id jetzt drin steht.
Sonst müsste ich alle Knioten neu Flashen damit die die Unterschedung 
hinbekommen, oder ich muss mir im Sender jeweils merken welcher Knoten 
die STD-Id versteht und wer beide versteht.

von Adib (Gast)


Lesenswert?

Hallo ambassadore,

Nochwas zum CAN. Es gibr zwei unterschiedliche Arten von Bus 
Tranceivern.
Einmal High-Speed mit Abschlusswiederstaenden nur an den Busenden und 
dann Low-Speed, aehlich der 485.
Der lowspeed kann fehlertolerant aufgebaut sein und kommt weiter.
Wir haben einen lowspeed can bei 9600 baud und 2000m im einsatz.

Viele grüße,

Adib.

von Lutz (Gast)


Lesenswert?

Ah, o.k., jetzt weiß ich, was du meinst.

Also nach meinem Kenntnisstand kommst du nicht drum rum, daß IDE-bit 
auszuwerten. Man kann die ersten 11 bit sowohl im Standard als auch im 
Extended Frame gleich haben. Im Extended Frame ist es ein komplett 
eigener "Adreßraum". Arbitrierung ist dann bis zum 11 bit aber natürlich 
nicht. Ist ja alles gleich.

Aber neu flashen mußt du ja sowieso, damit die Änderungen in den Filtern 
funktionieren. Egal ob du jetzt 11 oder 29 bit auswerten willst; es ist 
ja eine Änderung an den Filtern. Sollte mit IAP ja aber sowieso kein 
Problem sein und du brauchst ja auch für andere Änderungen an der 
Firmware sowas. Oder zupfst du jedesmal den Knoten vom Bus? Oder lädst 
du die Filterupdates nach jedem reset über den Bus?

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.