Hallo Kollegen ich bin dabei, ein paar Sensor-Nodes zu bauen, welche ich gerne über CAN miteinander verbinden möchte. Die Sensoren haben ADCs drauf und sollen an verschiedenen Punkten ein paar Werte messen und diese dann über den Bus an den zentralen Node senden, der die Daten speichern soll. Soweit alles klar. Nur habe ich jetzt in meiner Berechnung herausgefunden, dass ich eine Samplingrate von ca. 1 kHz brauche. D.h. ich muss im Takt von 1 ms die Messwerte (4 Bytes) übertragen. Mir erscheint das sehr sportlich, da CAN maximal 1 MBit/s hat. Was meint ihr? Ich habe maximal drei Nodes, also gäbe es 3 x 4 Bytes / ms zu übertragen. Rein theoretisch sollte es reichen, und mein CAN-Kabel ist geschirmt und alles, sodass eigentlich keine Übertragungsfehlet auftreten sollten. Was sagt ihr dazu, ist das realistisch? Ich kommt auf ca. 60% Buslast. Erscheint mir hoch. Andererseits sieht man in der Industriellen Automation auch immer öfter, dass ganze Regelkreise über CAN geschlossen werden, d.h. so langsam ist der Bus auch wieder nicht. Im moment kann ich es ganz schlecht einschätzen und wäre mal auf ein paar Erfahrungswerte von euch gespannt. Wie wäre es, wenn man CAN mit 2 MBit/s betreibt? mein STM32F407 erlaubt das rein Hardwaremässig jedenfalls, denn wenn ich die Register entsprechend setze dann läuft das. (Einen Test mit maximaler Buslast kann ich allerdings im Moment noch nicht machen, weil ich nur einen Node habe.) Gruss
1MBit sollte reichen. ich denke das die Buslast nich höher als 50 Prozent werden sollte.
Wenn nur Änderungen übertragen werden, könnte die Buslast noch wesentlich geringer ausfallen.
Passt doch locker. bei 4 Datenbytes hast du 78Bits/frame (ohne stuffbits), also 78µs bei 1MBit. Also keine 25% bei regulärem Betrieb. In deinem Fall denk ich trotzdem ausnahmsweise, das RS485 die bessere Wahl wäre. Die Funktionalität von CAN brauchst du bei deinem System eigentlich nicht, die Botschaften selbst sind nur halb so lang. Wenn noch mehr dazukommt, kannst du bis 12MBit hochgehen
Interessant wäre noch die Länge des Bus, ob 1MBit überhaupt realistisch bzw. praktikabel ist.
Moin moin die Länge des Bus ist definitiv kleiner als 1m. So einige 10 cm. Sagen wir mal, 40cm. Nach meinen Berechnungen sollte dann 1Mbit locker drin liegen. CAN habe ich deshalb gewählt, weil CRC usw. schon in der Hardware erledigt wird. Von RS485 bin ich eigentlich nicht so ein Fan, obwohl, ich könnte ja an eine Variantenbestückung meiner LP denken (ich werde davon ein paar Leiterplatten anfertigen lassen) um beides testen zu können.
Bei dieser Buslänge brauchst Du kein CRC. Nimm UARTs, hänge daran CAN-Transceiver (ja, das geht problemlos), und höre beim Senden mit. Solange Du jedes Byte, das Du sendest, auch wieder empfängst, ist alles in Ordnung. Der Einsatz von CAN-Transceivern anstelle von RS485-Transceivern erspart Dir das Ansteuern des DE-Einganges (Driver Enable) vom Transceiver. fchk
Du kannst da sogar ein triviales Protokoll sprechen. Alle Sensoren
zählen die empfangenen Bytes mit, und wissen somit, wann sie senden
dürfen. Der "Master" schickt ein Zeichen zum Start (z.Bsp. Break)
Dadurch vereinfacht sich das zu einer ISR die folgendes macht.
USART meldet Break -> x=0
USART empfängt Byte ->
x=Startwert zum Senden?
ja=>1. Datenbyte senden
nein=> Byte verwerfen
x:=x+1
USART hat Byte verschickt
noch ein Datenbyte zum schicken da?
ja=>Datenbyte schicken
Somit schickt der Master ein Break und bekommt dann, fast mit maximaler
Geschwindigkeit, nacheinander alle Datenbytes von allen Sensoren.
Ach ja, und mit einem Dioden-Und (oder einem Dioden-Oder) kannst Du das
sogar quasi als "Open-Collector" betreiben. Für Deine Kabellängen sollte
das reichen, da ginge sogar CAN. :)
Hmm aber was spricht denn gegen CAN? Jedenfalls ist die Idee, einen CAN-Transceiver an einem UART zu betreiben, ganz interessant. Das geht wirklich?
Tim schrieb: > Jedenfalls ist die Idee, einen CAN-Transceiver an einem UART zu > betreiben, ganz interessant. Das geht wirklich? Klar geht das.
Nimm CAN und gut. Die Buslast wurde dir hier ja schon ausgerechnet. Alles unter 70...80% macht keinerlei probleme.
Tim schrieb: > Hmm aber was spricht denn gegen CAN? Naja, für Deine Anwendung ginge auch CAN, ja sogar I2C. Aber schau Dir mal CAN, besonders die elektrischen Spezifikationen an, und probiere vielleicht auch mal real existierende Komponenten aus.
Tim schrieb: > So einige 10 cm. Sagen wir mal, 40cm. Nach meinen Berechnungen sollte > dann 1Mbit locker drin liegen. So lang etwa, wie ein PATA HD Kabel. Und wurden da nicht 16MHz mit einfachen Bustreibern gemacht? MfG Klaus
Christian Berger schrieb: > Du kannst da sogar ein triviales Protokoll sprechen. Alle Sensoren > zählen die empfangenen Bytes mit, und wissen somit, wann sie senden > dürfen. Der "Master" schickt ein Zeichen zum Start (z.Bsp. Break) > > Dadurch vereinfacht sich das zu einer ISR die folgendes macht. > USART meldet Break -> x=0 > USART empfängt Byte -> > x=Startwert zum Senden? > ja=>1. Datenbyte senden > nein=> Byte verwerfen > x:=x+1 > USART hat Byte verschickt > noch ein Datenbyte zum schicken da? > ja=>Datenbyte schicken Hört sich bisschen wie LIN an ;-)
X2 schrieb: > Christian Berger schrieb: >> Du kannst da sogar ein triviales Protokoll sprechen. Alle Sensoren >> zählen die empfangenen Bytes mit, und wissen somit, wann sie senden >> dürfen. Der "Master" schickt ein Zeichen zum Start (z.Bsp. Break) >> >> Dadurch vereinfacht sich das zu einer ISR die folgendes macht. >> USART meldet Break -> x=0 >> USART empfängt Byte -> >> x=Startwert zum Senden? >> ja=>1. Datenbyte senden >> nein=> Byte verwerfen >> x:=x+1 >> USART hat Byte verschickt >> noch ein Datenbyte zum schicken da? >> ja=>Datenbyte schicken > > Hört sich bisschen wie LIN an ;-) ..hatte ich am Anfang auch gedacht. Ein paar Sensorwerte einsammeln ist doch Ideal für einen LIN Bus. Wozu einen teuren CAN-Bus verwenden der gar nicht benötigt wird? Bei der Leitungslänge kannst du auch einfach eine stinknormale UART nehmen und zur Not hängst du ein CRC Byte mit rein ;-)
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.