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
Der Frame enthält ein bit das angibt, ob es 11 oder 29 bit sind. Damit ist alles geklärt.
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.
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
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.
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?
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.