Forum: Mikrocontroller und Digitale Elektronik STM32F2xx und CAN 2.0B HiSpeed - Dauerdatenfunk und womit mitlesen?


von K. H. (hegy)


Lesenswert?

Für ein Teilprojekt (Stepper Motoren und LED's ansteuern, Befehle über 
CAN) benutze ich ein STM32F205 und eben CAN 2.0B als Protokoll mit 500 
kBit.

Jetzt habe ich festgestellt, dass ich auf dem CAN "Dauerfeuer" habe, 
also es werden nur Daten rausgesendet obwohl die main()-Funktion leer 
ist und auch Interrupts sind noch nicht implementiert. Die Frage ist 
jetzt, was wird da gefunkt und warum?

Im Prinzip sieht der Pseudo-Code dazu so aus:
1
#include .....
2
3
void main(void){
4
5
  CANobject oCAN1;
6
7
  Init_Hardware();
8
9
  HAL_Delay(500); // 0,5 Sek. warten bis der Rest aka die "Umwelt" auch soweit ist
10
11
  oCAN1.Configure.Baudrate(500000);
12
  oCAN1.Configure.Protocol(EXTENDED);
13
  oCAN1.Configure.Address(OWNADR);
14
  oCAN1.Configure.Filter(OWNADR, GROUPADR); // Filter aktiv
15
  oCAN1.Configure.Interrupts(0); // keine Interrupts aktiv
16
  oCAN1.Enable();
17
18
  oCAN1.SendMessage("Hallo Welt"); // nur zum testen
19
20
  while(TRUE)
21
  {
22
    // Eine_X_Funktion();
23
    // Eine_andere_Funktion();
24
    // CAN_Fkt();
25
  }
26
}

Also die eigentlichen Funktionen in main() bzw. while(1) habe ich 
deaktiviert, Interrupts sind noch nicht eingebaut aber der Filter steht 
und muss noch getestet werden.

Das Board läuft mit der SW derzeit alleine also ohne weitere 
CAN-Teilnehmer, sollte also 1x das "Hallo Welt" rausfunken und dann 
sollte Ruhe sein. Am CAN-Bus ist weiter angeschlossen:
- ein USBtin (CAN-USB Interface)
- Oszilloskop

Aus dem Oszi sehe ich Datenpakete ohne Ende. Zwischen den Datenpaketen 
sind nur 50 µs Pause = Buslast nahe 100%. Das Signal ist vom Verlauf her 
sauber.
Was auf dem Bus gesendet wird sehe ich mit dem USBtin nicht. Das Teil 
ist scheinbar überfordert oder sowas. Es steht auf Listen-Only und 
500000 und es kommt nichts im PC bzw. Laptop an, auch nicht die erste 
Message. Als Tool habe ich USBtinViewer_v1.3.jar installiert. Das 
einzige was ich sehen kann ist irgendwelchen Datenmüll, den ich direkt 
beim Einstecken des Steckers (Strom und CAN-Bus) bekomme und das ist 
immer das gleich, egal auf welche Geschwindigkeit der USBtin steht. Die 
Kommunikation zwischen Laptop und USBtin funktioniert, das Teil wird 
erkannt.


Warum werden kontinuierlich Daten rausgefunkt? Ich bin mir zu 98% 
sicher, dass die vom Board kommen und nicht vom USBtin. Ich vermute mal, 
dass es ein Config-Fehler im CAN-Setup des STM32F205 ist oder das ist 
iwie "normal"....
Gibt es ein preiswertes Tool, dass bei 500kBaud und 100% Buslast 
zuverlässig Daten zum Rechner übertragen kann? Ich schätze nämlich, dass 
der Flaschenhals die Verbindung zum Rechner ist (USB -> FTDI -> 115200 
Baud?) und das die SW im USBtin quasi überrannt wird. Aber alles nur 
Spekulation.


Ich dachte auch, ob es evtl. möglich ist, mit einem BananaPi den CAN 
abzuhören. Wenn ich mich nicht täusche, hat das Teil ein CAN-Interface 
schon drauf und könnte dann alles stumpf auf die angeschlossene 
Festplatte speichern. Soweit die Theorie....

Kurze Hintergundinfo zum Umfeld: Ich arbeite bei einem Start-Up mit 
insges. 5 Leuten und Investoren als Geldgeber. Von daher müssen wir mit 
den preiswerten Zeug zurecht kommen.

: Bearbeitet durch User
von Daniel (Gast)


Lesenswert?

Du musst auch eine Gegenstelle anschließen, da Can automatisch die 
Nachricht erneut schickt, bis sie von einem weiteren Teilnehmer 
bestätigt wird

von Daniel (Gast)


Lesenswert?

Du darfst den Usbtin nicht im listen-only Mode betreiben, da er somit 
das Paket nicht bestätigt...

von K. H. (hegy)


Lesenswert?

Wenn ich einen Broadcast schicke, muss ich dann von allen eine 
Bestätigung erwarten?

Selbst wenn es an nur einen spezifischen Empfänger ginge, woher soll der 
Sender wissen, dass eine Bestätigung kommen soll und vom wen? Das müsste 
doch in der SW drin sein, ist es aber nicht.
Und woher sollte der Empfänger wissen, dass die Message bestätigt werden 
soll? Das müsste doch auch in der SW sein.

von Daniel (Gast)


Lesenswert?

Es muss mindestens ein Teilnehmer das Paket korrekt empfangen haben. 
Sonst wird das erneut gesendet. Dies ist je nach Controller 
deaktivierbar.

Darf sollte aber auch im Datenblatt des Controllers und in der Can spec 
stehen.

von Erwin D. (Gast)


Lesenswert?

K. H. schrieb:
> Und woher sollte der Empfänger wissen, dass die Message bestätigt werden
> soll? Das müsste doch auch in der SW sein.

Das ist im CAN-Controller enthalten. Nicht in deiner selbstgeschriebenen 
Software.

von Daniel (Gast)


Lesenswert?

Gerade einmal geschaut... Das steht alles im Reference manual. 
Deaktivieren kann man das mit dem nart-bit.

Lies dir das Kapitel mal durch. Dann sollte vieles klar sein.

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.