Hallo Kollegen ich versuche, mit einem STM32F407 einen CAN Node zu implementieren. Ich habe mir jetzt mal einen einfachen Testcode zusammengeschustert, der den CAN1 Controller initialisiert und ein paar Telegramme versenden soll. Dazu habe ich CANTX und CANRX zusammengeschlossen. Alles in allem funktioniert es tatsächlich, wenn ich das Sende-Bit setze, beginnt der Controller auch umgehend, das erste Telegramm zu senden, aber er hört gar nicht mehr auf, sondern sendet ständig das selbe Telegramm. Liegt das etwa daran, dass ich noch keinen CAN-Transceiver angeschlossen habe und somit auch noch kein anderes CAN-Device? im Moment ist mein STM32 allein, und es besteht noch keine Verbindung zum Bus. Irgendwas war da mit ACK, aber ich bin nicht sicher, bin CAN-Anfänger :-) Gruss Tobias
Servus, jup das ist korrekt. Die Nachricht wird automatisch neu gesendet wenn kein ACK kommt. Und das kommt von einem beliebigen anderen Knoten den du ja nicht hast.
Tobias Plüss schrieb: > Irgendwas war da mit ACK, aber ich bin nicht sicher, bin CAN-Anfänger > :-) Ganz genau, wenn kein ACK kommt sendet der Sender immer wieder. Ein CAN Controller kann sich selbst keine Nachricht senden, aber der F4 hat ja 2 davon. Verbinde TX vom CAN1 mit RX von CAN2 und stell CAN1 auf Loopback Modus, dann kannst du das senden auf CAN1 und empfangen auf CAN2 halbwegs sinnvoll testen.
Ach so. Also muss ich erst mal einen anderen Node noch haben, der das ACK sendet. Danke! Noch eine andere Frage, nicht direkt STM32, aber dennoch CAN: Es gibt ja diese Regel, dass niemals zwei Knoten Telegramme mit der selben CAN ID versenden dürfen. Den Grund habe ich irgendwo mal gelesen, aber in der Zwischenzeit wieder vergessen :-) aber ich will mich an diese Regel halten. Jetzt ist es so: ich werde 3 Nodes an meinem Bus haben. Einen 'Zentralrechner' und 2 abgesetzte Sensoren. Die Sensoren messen das selbe, aber an unterschiedlichen Orten. Der 'Zentralrechner' sendet jeweils an einen Sensor ein Telegranmm, mit der Aufforderung, einen bestimmten Wert zu messen. Der Sensor muss dann seinerseits nach einer bestimmten Frist mit einem Telegramm antworten, wo der gewünschte Messwert drin ist. Wie soll man da die CAN IDs geschickt zuordnen? Ich habe mal folgendes gemacht: Telegramm mit der Messaufforderung --> CAN ID 0x001 Antworttelegramm mit dem Messwert --> CAN ID 0x002 Dummerweise müssen ja aber beide Sensoren das 2. Telegramm verwenden, d.h. ihre CAN ID ist gleich. Was ja nicht sein darf. Wie sollte ich die Telegramme besser aufteilen? Die Nodes zu nummerieren, und die Node-Nummer als CAN ID zu verwenden sei unüblich, habe ich mir sagen lassen. Zumal mir dann irgendwie eine 'Broadcast' Adresse fehlt.
Tobias Plüss schrieb: > Telegramm mit der Messaufforderung --> CAN ID 0x001 > Antworttelegramm mit dem Messwert --> CAN ID 0x002 > > Dummerweise müssen ja aber beide Sensoren das 2. Telegramm verwenden, > d.h. ihre CAN ID ist gleich. Was ja nicht sein darf. Genau. Ein Vorschlag (von vielen Möglichkeiten): Anforderung: ID 0x050 DLC:1 Databyte:Sensor-Nummer Sensor 1: ID 0x051 [Sensorwerte] Sensor 2: ID 0x052 [Sensorwerte] So würde ich das anpacken.
Dr. Sommer schrieb: > Tobias Plüss schrieb: >> Irgendwas war da mit ACK, aber ich bin nicht sicher, bin CAN-Anfänger >> :-) > Ganz genau, wenn kein ACK kommt sendet der Sender immer wieder. Ein CAN > Controller kann sich selbst keine Nachricht senden, aber der F4 hat ja 2 > davon. Verbinde TX vom CAN1 mit RX von CAN2 und stell CAN1 auf Loopback > Modus, dann kannst du das senden auf CAN1 und empfangen auf CAN2 > halbwegs sinnvoll testen. Das ist m.E. nicht richtig. Es gibt Möglichkeiten, ohne Tranceiver auszukommen, aber nicht durch kreuzen von TX mit RX, siehe: http://www.mikrocontroller.net/attachment/28831/siemens_AP2921.pdf Im Loopbackmodus kannst Du ganz ohne Tranceiver testen. Hier kommen die Daten genauso wieder auf dem CAN Controller an - perfekt zum testen Deines Codes.
Hallo Hallo Danke noch für den Tip mit den CAN IDs. Ich werde die Aufteilung der IDs dementsprechend anpassen. Es ist zwar eigentlich nicht möglich, dass zwei Knoten zur selben Zeit die selbe ID verschicken wollen, aber wenn ich die Node ID noch mit in die CAN ID nehme, dann bin ich sicher, dass die Telegramme immer eine eindeutige ID haben. Gruss Tobias
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.