Forum: Mikrocontroller und Digitale Elektronik CAN: Zeitsynchronisation dreier Nodes


von Kevin B. (wermut)


Lesenswert?

Hallo Zusammen,

Für ein Projekt das ich demnächst beginne, möchte ich im Voraus noch 
Informationen sammeln. Leider hat Google mir keine Antwort auf folgendes 
Problem geben können.

Ich werde drei Nodes, 1-Master und 2-Slave über den CAN-Bus miteinander 
verbinden. Jeder Mikrocontroller generiert mit Hilfe eines Software 
Scedulers ein 5kHz PWM Signal. Leider driften die PWM signale relativ 
schnell auseinander und ich habe keinen Weg diese mit einer zusätzlichen 
Sync-Leitung zu synchronisieren.

Neben den Leitungen für CAN-High und CAN-Low werden zusätzlich noch GND 
und +28V mitgeführt. Damit sind die für das Projekt zulässigen 
Leitungszahl bereits ausgenutzt.

Ist es möglich über CAN das Timings des Scedulers in regelmässigen 
abständen zu resynchronisieren damit sie relativ synchron die 5kHz 
liefern?

Gruss Kevin

von Willivonbienemaya .. (willivonbienemaya)


Lesenswert?

> ... Leider driften die PWM signale relativ
> schnell auseinander ...

Ist das schlimm?
Warum driften die auseinander?
Laufen die mit internem Oszillator oder Quarz?
Welcher Controller?
Ist das driften Temperaturabhängig?
Driftet auch der Takt?

> Ist es möglich über CAN das Timings des Scedulers in regelmässigen
> abständen zu resynchronisieren damit sie relativ synchron die 5kHz
> liefern?

Ich sehe nur eine Möglichkeit: Eine Sync Nachricht mit der Adresse 0 zu 
senden.

von michael (Gast)


Lesenswert?

hallo.

willi von biene maya (die eigentlich maja heißt) hat recht.
solange jedes 5kHz-signal für sich stabil ist, spielt es u.u gar keine 
rolle, ob sie synchron sind. im gegenteil: je nach anwendung kann sich 
dieses auseinanderdriften sogar positiv auswirken (z.B. auf den verlauf 
der stromaufnahme, auf die EMV, ...).
worum geht's denn in deinem projekt, wenn man mal neugierig fragen darf?

und mit der sync-nachricht hat willi auch recht. außer daß sie nicht 
zwingend ID 0 haben muß. sie sollte nur die niedrigste ID im gesamten 
CAN-verbund haben.
bei empfang dieser nachricht setzt du einfach in jedem controller deinen 
software-scheduler zurück.
natürlich kriegst du einen gewissen jitter in die ganze sache, aber der 
sollte vernachlässigbar sein.

gruß

michael

von Gast (Gast)


Lesenswert?

Es ist ja auch die Urwald Biene der Mayas aus Amerika gemaint.

von Matthias D. (marvin42)


Lesenswert?

Hallo,

ich schliesse mich erst mal den Vorrednern an: du solltest den Zweck der 
Synchronisation erklären.

Eine Sync-Nachricht kann durchaus funktionieren, aber nur wenn dein 
restlicher Systemaufbau passt: wie ist dein CAN-Controller an die 
Applikation angebunden, per Interrupt oder Polling, wie schnell kann 
deine Software auf diese Sync-Nachricht reagieren, etc.

Wenn du 5% Abweichung tolerieren würdest, müsste dein komplettes System 
einen Jitter von < 10 µs erreichen können, das kann sportlich werden...

Wenn es wirklich genau sein muss, wirst du nicht um einen IEEE 1588 
Mechanismus herumkommen.

Vielleicht geht aber auch noch ein anderer Trick: im Pinzip willst du 
doch eine Art PLL aufbauen, dh. der Master gibt einen Takt vor und die 
beiden Slaves sollen synchron laufen. Evt. kannst du zB alle 1-10 ms 
einen kurzen Lo-Impuls auf die 28V Vcc modulieren. Dazu musst du die 
Spannungsversorgung nur über eine geeignete Drossel absetzen (siehe: 
EIB, ASi-Bus etc). Diesen Puls, kannst du auf den Slaves 
wiederherstellen und nutzen.

Aber die eigentliche Aufgabe dürfte sein (je nach Aufgabe) den Slaves 
beizubringen, sich so auf ein externes Ereignis (Nachricht oder puls) zu 
synchronisieren, dass dein PWM-Takt nicht ins stolpern kommt (falls die 
Anzahl der Flanken bei dir relevant ist - was im Beispiel von 
Drehzahl-synchronen Motoren der Fall wäre)

von Michael G. (sparrenburg)


Lesenswert?

Hallo und genau:
IEEE 1588. Das läuft und ist einfach.

Und: Warum soll er seine Anwendung erklären? Hat doch nix mit der Frage 
zu tun?

LG
Michael

von Nochn Gast (Gast)


Lesenswert?

Ihr seid ja wieder mal in Höchstform hier.
Warum muss er denn erklären, weshalb die PWMs synchron laufen sollen???
Das ist eben die Anforderung - Ende.

>damit sie relativ synchron die 5kHz liefern?
Wie genau muss es denn sein?

Der Master könnte bspw. einen Sync Frame per CAN versenden.
Daraufhin würden bspw. die 2 Slaves ihre PWM synchronisieren. Geht
aber nur, wenn das Laufzeitverhalten der SW deterministisch ist.

Anderer Vorschlag: Könnte man eine der CAN Leitungen zeitweise
als Sync-Leitung nutzen - also einen "Mode Change" CAN-Frame versenden 
und
dann für - sagen wir mal 500ms - die CAN Pins in den IO-mode schalten
und irgendwie eine Synchronisation signalisieren..?

Die Frage ob Quarz oder interner Oszillator ist irrelevant. Beide 
driften abhängig und unabhängig von der Umgebungstemperatur relativ 
stark.

von Peter D. (peda)


Lesenswert?

Nochn Gast wrote:
> Die Frage ob Quarz oder interner Oszillator ist irrelevant.

Aber hallo, das ist ein gewaltiger Unterschied.
Der interne RC-Oszillator läuft praktisch nie synchron, selbst wenn Du 
den CAN-Bus mit Sync-Nachrichten überflutest.

Wenn es synchron sein muß, dann ist ein Quarz Pflicht (und für CAN ja eh 
schon).


Viele CAN-Controller (z.B. AT89C51CC03) haben einen Timestamp, d.h. Du 
kannst µs-genau das Senden und Empfangen einer Nachricht erfassen, 
völlig unabhängig von der Interruptlast.

Der Master sendet also erstmal ne Nachricht, die alle mit Timestamp 
erfassen.
Und dann sendet er noch ne Nachricht, wie sein Timestamp beim Senden 
war.
Schon weiß jeder Slave, wie weit sein Timestamp abweicht und kann mit 
dieser Abweichung seinen Timer korrigieren.


Peter

von Michael L. (-mic-)


Lesenswert?

hallo nochn gast.

Nochn Gast wrote:
> Ihr seid ja wieder mal in Höchstform hier.
> Warum muss er denn erklären, weshalb die PWMs synchron laufen sollen???
> Das ist eben die Anforderung - Ende.

das ist an sich richtig. aber u.u. ein gewaltiger hemmschuh für eine 
entwicklung.

wir haben schon mal mit einer firma zusammengearbeitet, die stur nach 
dem lastenheft des kunden implementiert hat. genau wie's der 
entwicklungsprozeß definiert eben.

daß der verfasser des lastenhefts evtl. etwas zu eng sieht oder etwas 
total außer acht läßt, wird nicht berücksichtigt.

dabei ist es m.e. essentiell, daß sich auch der auftragnehmer mit der 
thematik auseinandersetzt und eigene vorschläge bzw. ideen einbringt.

und wenn im lastenheft steht "die drei pwms müssen synchron laufen mit 
einer abweichung von 0,1µs" dann ist der auftragnehmer natürlich erstmal 
in der pflicht, das umzusetzen.

aber vielleicht kommt er ja - wenn er die hintergründe der forderung 
kennt - auf eine andere, bessere, einfachere lösung für ein problem?

ich habe jedenfalls gelernt, jede forderung, die einem irgendwie 
unsinnig oder überzogen vorkommt, zu hinterfragen. das kann am ende viel 
zeit und/oder geld sparen.

gruß

michael

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.