Forum: Mikrocontroller und Digitale Elektronik Synchronisation zwischen mehreren µCs


von Stephan M. (multimeter90)


Lesenswert?

Hey Leute,

ich habe mehrere µC, die eine PWM erzeugen. Die Forderung ist nun, dass 
alle PWMs synchron arbeiten. Ich dachte mir, ich könnte aller ein paar 
Sekunden ein Synchronisationssignal über eine Leitung senden. Und immer 
wenn die Controller dann eine zB. high-low Flanke erkennen setzen die 
ihren Timer auf 0, somit starten dann bei allen Controllern die PWMs 
synchron.
Geht das so? Und wenn ja, wie übertrage ich am besten das Signal?
Eckdaten sind: PWM Frequenz 200Hz
maximale Entfernung zwischen den Controllern: 40m

Sinn der Sache ist, dass ein Motor, der umgeschalten wird vom PWM Signal 
aus Controller 1 auf PWM Signal von Controller 2, den "Übergang" nicht 
merken sollte. Also müssen beide PWMs die gleiche Frequenz und gleiches 
Tastverhältnis haben und synchron starten.

von Peter D. (peda)


Lesenswert?

Stephan Meter schrieb:
> Sinn der Sache ist, dass ein Motor, der umgeschalten wird vom PWM Signal
> aus Controller 1 auf PWM Signal von Controller 2, den "Übergang" nicht
> merken sollte.

Da stellen sich 2 Fragen zur Sinnhaftigkeit:

1. Warum muß ein Motor von 2 Controllern versorgt werden?

2. Wenn man PWM-Leistung auf 40m Kabel gibt, ist das bestimmt ein prima 
Störsender.
200Hz * 8Bit = 51kHz Grundfrequenz, keine DCF77-Uhr im Umkreis 
funktioniert mehr.


Heutzutage macht man Motoren mit Steuerelektronik als eine Einheit und 
überträgt nur die Befehle per CAN, Ethernet usw.


Peter

von UR-Schmitt (Gast)


Lesenswert?

Stephan Meter schrieb:
> dass ein Motor, der umgeschalten wird vom PWM Signal
> aus Controller 1 auf PWM Signal von Controller 2, den "Übergang" nicht
> merken sollte.

Die PWM sollte sowiso mindestens 100 mal so hoch sein wie die 
Trägheitszeitkonstante des Motors, also wird der so oder so nix 'merken' 
wenn da ein Impuls mal kürzer oder länger ist.
Eventuell wichtiger wäre, daß der Puls Pausen Wert beider Signale 
konstant ist so daß der Motor keine plötzliche starke Drehzahländerung 
erfährt.

Du machst dir Probleme wo eigentlich keine sind.

von UR-Schmitt (Gast)


Lesenswert?

Peter Dannegger schrieb:
> a stellen sich 2 Fragen zur Sinnhaftigkeit:
>
> 1. Warum muß ein Motor von 2 Controllern versorgt werden?
>
> 2. Wenn man PWM-Leistung auf 40m Kabel gibt, ist das bestimmt ein prima
> Störsender.
> 200Hz * 8Bit = 51kHz Grundfrequenz, keine DCF77-Uhr im Umkreis
> funktioniert mehr.

Die Fragen hatte ich mir verkniffen.

von Stephan M. (multimeter90)


Lesenswert?

Die ganze Sache ist für eine Modellbahnanlage. Eine Lok wird dabei immer 
nur von einem Controller mit PWM versorgt und diese wird auch direkt am 
Gleis erzeugt, aber da die gesamte Anlage in verschiedene Stromkreise 
unterteilt ist und eine Lok zwischen diesen wechseln muss, sollte das 
überfahren einer Trennstelle keinen Geschwindigkeitssprung ergeben. Bei 
der Überfahrt müssen beide PWMs ansatzweise synchron laufen, da sonst 
bei zB 50% Tastverhältnis und einer Verschiebung beider PWMs um genau 
50% (2,5ms) die Spannung am Gleis und damit am Motor 100% entsprechen 
würde.

Meine frage ist also nur, wie übertrage ich das Signal zum 
Synchronisieren am besten. Und zweitens, wie sollte ich die ganze Sache 
verschalten, damit JEDER Controller ein Sync Signal empfangen aber auch 
senden kann?

von Michael S. (rbs_phoenix)


Lesenswert?

Wieso erzeugst du nicht mit einer PWM deine Spannung für die Lok und 
schaltest Diese mit einem Transistor auf die jeweiligen Stromkreise?

Somit musst du keine PWM umschalten, keine mehreren µC's. Nur eine durch 
die PWM veränderte Spannung, die du nun auf die jeweiligen Schinen 
legst. Du kannst einen Trafo ja auch an 2 Stromkreise gleichzeitig 
legen.

von Peter D. (peda)


Lesenswert?

40m klingt nach einer recht großen Modellanlage. Da ist es umso 
sinnvoller, alles digital zu steuern. D.h. jede Lok enthält einen 
eigenen Controller, der die Befehle entgegen nimmt. Die Befehle lassen 
sich leicht auf mehrere Einspeisestellen modulieren.


Peter

von Stephan M. (multimeter90)


Lesenswert?

Michael Skropski schrieb:
> Wieso erzeugst du nicht mit einer PWM deine Spannung für die Lok und
> schaltest Diese mit einem Transistor auf die jeweiligen Stromkreise?
>
> Somit musst du keine PWM umschalten, keine mehreren µC's. Nur eine durch
> die PWM veränderte Spannung, die du nun auf die jeweiligen Schinen
> legst. Du kannst einen Trafo ja auch an 2 Stromkreise gleichzeitig
> legen.

Ich habe so ungefähr 20 getrennte Blockstrecken, also Stromkreise, dabei 
dann die Spannung immer nur an das passende Gleis anlegen bzw. schalten 
wäre ziemlich aufwändig. Daher hat bei mir jeder Abschnitt seinen 
eigenen Controller, fest an das Gleis angeschlossen. Wechselt dann die 
Lok den Abschnitt wird die Fahrspannung durch den nächsten Controller 
bereitgestellt.

Peter Dannegger schrieb:
> 40m klingt nach einer recht großen Modellanlage. Da ist es umso
> sinnvoller, alles digital zu steuern. D.h. jede Lok enthält einen
> eigenen Controller, der die Befehle entgegen nimmt. Die Befehle lassen
> sich leicht auf mehrere Einspeisestellen modulieren.
>
>
> Peter


40m sind nicht die Maße der Anlage, aber die Verkabelung schafft gern 
40m.
Digital fahren wäre einfacher, aber irgendwie möchte ich analog fahren, 
so ist die Herausforderung größer.

von Karl H. (kbuchegg)


Lesenswert?

Stephan Meter schrieb:

> Meine frage ist also nur, wie übertrage ich das Signal zum
> Synchronisieren am besten.

Am besten?
Am besten: gar nicht.

> Und zweitens, wie sollte ich die ganze Sache
> verschalten, damit JEDER Controller ein Sync Signal empfangen aber auch
> senden kann?

Auch das willst du, wenn irgend möglich vermeiden.

Wenn, dann würde ich das so machen, dass es EINEN Master-clock gibt, der 
ALLEN zur Verfügung steht. Wenn der Clock-Puls kommt beginnt eine 
PWM-Periode. Dann geht der Ausgansg-Pin auf High und nach Ablauf der 
PWM-Highzeit zieht der Controller den Pin wieder auf Low. Und dann 
wartet er auf den nächsten Clock-Puls.

Die Controller müssen sich dann nur noch über den einzustellenden 
PWM-Tastgrad einig sein, synchronisiert werden sie von der Zentrale aus 
über den gemeinsamen PWM-Clock.


Aber die PWM-Erzeugung in die Lok zu verlegen und die 
Geschwindigkeitswerte an die Lok zu übertragen ist die bessere Lösung. 
Als Nebeneffekt erhält man damit automatisch eine Mehrzugsteuerung.

von Stephan M. (multimeter90)


Lesenswert?

Mehrzugsteuerung wird bei mir auch funktionieren. Das einzige was meine 
Anlage dann nicht kann sind Schaltausgänge in der Lok für Licht, 
Sound,...

Ich möchte eine Zugsteuerung für analoge Anlagen bauen, welche dem 
Fahrkomfort einer digitalen Zugsteuerung zumindest nahe kommt. Ist zwar 
altmodisch, aber macht Spaß.

von Lukas T. (tapy)


Lesenswert?

Also, das mit den 50 % und 100 % in Millisekundenbereich ist der Lok 
völlig schnurz. Die hat ja sowieso Millisekundenweise 100 %, das ist das 
Prinzip der PWM.
Probiere es doch aus, du wirst es nicht, nie und überhaupt nicht sehen, 
ob die MCs synchron sind oder nicht.

UND: It's not a Bug, it's a Feature:
Auch reale Bahnen fahren in unterschiedlichen Gleisabschnitten 
unterschiedlich schnell, allein schon, weil es Beschränkungen auf Grund 
von Gleisalter etc. gibt. Für mich hieße das, selbst 10 % 
Pulsweitenunterschied wäre maximal realistisch, aber niemals störend. 
Den Taktunterschied wird der Mensch nie merken.


Btw. ein Kondensator an der Lok könnte das auch vollständig glätten.

von Stephan M. (multimeter90)


Lesenswert?

Mit den % meinte ich das Tastverhältnis.

Hast du beispielsweise am Controller 1:

  ----      ----      ----
 |    |    |    |    |    |
 |    |    |    |    |    |
_|    |____|    |____|    |_

Und am Controller 2:
-      ----      ----
 |    |    |    |    |
 |    |    |    |    |
 |____|    |____|    |____


Ergibt sich durch einfache Addition für den Motor:

 -------------------------
|                         |
|                         |
|                         |_

Und das wäre damit die doppelte Geschwindigkeit. Daher sollten die PWMs 
von beiden Controllern ansatzweise gleich starten.

von Lukas T. (tapy)


Lesenswert?

Hast du beispielsweise am Controller 1:
  ----      ----      ----
 |    |    |    |    |    |
 |    |    |    |    |    |
_|    |____|    |____|    |_

Und am Controller 2:
-      ----      ----
 |    |    |    |    |
 |    |    |    |    |
 |____|    |____|    |____


Ergibt sich durch einfache Addition für den Motor:
(Da er ja von einem zum anderen Gleisabschnitt wechselt:)

  ----      ----  ---
 |    |    |    ||   |
 |    |    |    ||   |
_|    |____|    ||   |____

1111111111111111  22222222
                 Umschaltung bzw. Wechsel zw. Gleisabschnitten

von Stephan M. (multimeter90)


Lesenswert?

Der Wechsel erfolgt aber nicht innerhalb einer viertel Periode, da die 
Stromaufnahme an der Lok über mehrere Achsen erfolgt und damit bei der 
Überfahrt beide Gleisabschnitte für zB eine Sekunde verbunden sind.

von Karl H. (kbuchegg)


Lesenswert?

Lukas T. schrieb:

> Ergibt sich durch einfache Addition für den Motor:
> (Da er ja von einem zum anderen Gleisabschnitt wechselt:)

Das Problem das ich sehe, besteht darin, dass die Lok ja aus 
Zuverlässigkeitsgründen nicht nur einen Punkt zur Stromaufnahme hat (nur 
1 Rad) sondern mehrere. Bei Überfahren der Trennstelle werden daher 
kurzzeitig zwei nebeneinanderliegende PWM-Treiberstufen elektrisch 
verbunden. WEnn dann Ausgang gegen Ausgang treibt, der eine High, der 
andere Low, ist das auch nicht so gut.

von Lukas T. (tapy)


Lesenswert?

Position der Lok registrieren und den zweiten Abschnitt erst verzögert 
einschalten? Okay, evtl. etwas kompliziert.

Eine Regelung der Geschwindigkeit onboard wäre besser.

von Stephan M. (multimeter90)


Lesenswert?

Die Treiberstufen verkraften das, die sind extra so designed.

von Timm T. (Gast)


Lesenswert?

Stephan Meter schrieb:
> Und das wäre damit die doppelte Geschwindigkeit.

Das ist noch Dein kleinstes Problem. Da die Loks ja in beide Richtungen 
fahren sollen, musst Du auch negative Spannung zulassen. Jetzt hast Du 
mehrere Möglichkeiten:

1. Ein Schalttransistor schaltet im Takt der PWM die Spannung auf die 
Schiene. PWM => v ist nicht linear. Schaltung ist sicher, solange nicht 
ein Block verpolt ist. Fahrtrichtungswechsel durch Umpolen.

2. Eine Push-Pull-Stufe schaltet zwischen Null und Spannung. PWM => v 
weitgehend linear bei konstanter Last. Kurzschluss beim Überfahren der 
Trennstelle, wenn ein Block auf Null, ein Block auf Spannung ist oder 
ein Block verpolt ist. Richtungswechsel durch Umpolen.

3. Eine H-Brücke schaltet zwischen - Spannung und +Spannung. PWM => v 
weitgehend linear, einfacher Richtungswechsel, aber auch: Kurzschluss, 
wenn nicht synchron.

Entweder machst Du ausreichend lange Blindabschnitte zwischen die 
Blöcke, die ihre Spannung vom Nachbarblock jeweils beim Überfahren 
bekommen und kurzschlussfest sind oder Du schaltest die PWM zwischen von 
Block zu Block weiter wie oben vorgeschlagen.

Die Synchro kannst Du einfach machen, indem Du die PWM vom Nachbarblock 
abnimmst und den nächsten Block darauf synchronisierst. Aber das bewahrt 
Dich nicht vor Kurzschlüssen bei 2. und 3. und bei unterschiedlichen 
Fahrtrichtungen sowieso.

Allerdings muss es dafür Lösungen geben, denn das Problem hatten 
Modellbahner mit mehreren analogen Fahrtrafos bei Blocksteuerung auch 
schon.

von Martin (Gast)


Lesenswert?

wer oder was erledigt eigentlich  die Addition?
Das müsste ja irgendeine Schaltung beide PWM-Signale abgreifen und
logisch verknüpfen.



Ich nehme  mal  an    die "Addition" ist eher
ein Kurzschluss zwischen den PWM-Phasen
durch den Stromabnehmer der Lok.

Bad idea

von Stephan M. (multimeter90)


Lesenswert?

Hey Lukas,
Verzögert einschalten wäre wirklich extrem aufwändig, da auch nicht jede 
Lok gleich lang, gleiche Position der Stromführenden Achsen hat.
Die PWM synchronisieren ist da, denke ich, schon das einfachste. Einen 
Decoder einbauen wäre auch eine Möglichkeit aber ich habe ich irgendwie 
in Analog festgebissen.

von UR-Schmitt (Gast)


Lesenswert?

Wenn du das wirklich meinst zu brauchen, dann mach das wie Karl Heinz 
gesagt hat über einen Masterclock.

von UR-Schmitt (Gast)


Lesenswert?

Timm Thaler schrieb:
> Allerdings muss es dafür Lösungen geben, denn das Problem hatten
> Modellbahner mit mehreren analogen Fahrtrafos bei Blocksteuerung auch
> schon.

Die Lösung hies im Zweifel: Strombegrenzung, und sei es durch (mehr oder 
weniger)kurzschlussfeste Trafos mit 'weicher' Spannungskennlinie.
Und die Zeit der Übergangs möglichst kurz halten.

von Stephan M. (multimeter90)


Lesenswert?

Timm Thaler schrieb:
> Stephan Meter schrieb:
>> Und das wäre damit die doppelte Geschwindigkeit.
>
> Das ist noch Dein kleinstes Problem. Da die Loks ja in beide Richtungen
> fahren sollen, musst Du auch negative Spannung zulassen. Jetzt hast Du
> mehrere Möglichkeiten:
>
> 1. Ein Schalttransistor schaltet im Takt der PWM die Spannung auf die
> Schiene. PWM => v ist nicht linear. Schaltung ist sicher, solange nicht
> ein Block verpolt ist. Fahrtrichtungswechsel durch Umpolen.
>
> 2. Eine Push-Pull-Stufe schaltet zwischen Null und Spannung. PWM => v
> weitgehend linear bei konstanter Last. Kurzschluss beim Überfahren der
> Trennstelle, wenn ein Block auf Null, ein Block auf Spannung ist oder
> ein Block verpolt ist. Richtungswechsel durch Umpolen.
>
> 3. Eine H-Brücke schaltet zwischen - Spannung und +Spannung. PWM => v
> weitgehend linear, einfacher Richtungswechsel, aber auch: Kurzschluss,
> wenn nicht synchron.


Mein Ansatz:

Fahrregler schaltet über Transistor Fahrspannung -> PWM, Richtungswahl 
über Relais. Software mäßig wird dafür gesorgt, dass zwei benachbarte 
Blockabschnitte beim Überfahren gleiche Richtung und gleiche 
Fahrspannung haben.
Nach dem Leistungstransistor kommt eine Diode und dann das Relais. Vom 
Relais zurück gehts über einen Shunt mit 0,1R. Parallel zum Gleis hängt 
ein 10k Widerstand mit Spannungsteiler zum Messen der Gleisspannung

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Ich würde es folgendermaßen lösen - wenn es unbedingt "digitalfrei" sein 
soll:

Gleisabschnitt 1: PWM aufgeschaltet
Gleisabschnitt 2: spannungslos

Kurz bevor die Lok von Abschnitt 1 nach Abschnitt 2 fährt, schaltet ein 
Relais dieselbe(!) PWM von 1 zusätzlich auf 2. Damit kann die Lok 
vollkommen synchron die Grenze überfahren. Sobald die Lok glücklich 
hinübergehupft ist, wird der Abschnitt 1 abgeschaltet, also

Gleisabschnitt 1: spannungslos
Gleisabschnitt 2: PWM aufgeschaltet

Der Vorteil: Man kann mit demselben Fahrregler die Lok weitersteuern. 
Man braucht lediglich eine intelligente Relais-Steuerung, welche die 
PWMs von einem auf den anderen Gleisabschnitt weiterreicht.

von uC (Gast)


Lesenswert?

Wieviel einzelne Streckenabschnitte/PWM-Strecken hast du ?
Grundsätzlich hast du einen zentralen Reset, bzw wenn der 
Spannungsanstieg
schnell ist, sind die uC impliziert Syncronisiert (+- ... )
Gleich nach dem Reset sollen alle den Timer setzen, um eine gemeinsame
Zeitbasis zu haben bzw den hw PWM gleichzeitig setzen.
Wenn du das so machst, welche Fehler hast du ?
Ev. könntest du ja einen Offset hardcodieren. Eigentlich sollte das für
ein 200Hz PWM genügen und für die Anwendung reichen.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Stephan Meter schrieb:
> Fahrregler schaltet über Transistor Fahrspannung -> PWM, Richtungswahl
> über Relais. Software mäßig wird dafür gesorgt, dass zwei benachbarte
> Blockabschnitte beim Überfahren gleiche Richtung und gleiche
> Fahrspannung haben.

2 Doofe, 1 Gedanke... zur selben Zeit :-)

von Michael S. (rbs_phoenix)


Lesenswert?

Ich wollte grad sagen. Wenn die eine Stufe auf High macht und die Andere 
auf Low, dann ergibt das einen Kurzschluss. Wenn der Treiber einen 
OpenCollector/Drain hat, dann wird der Zug eher langsamer anstatt 
schneller. Addieren tut sich da so erstmal nichts..

Stephan Meter schrieb:
> Ich habe so ungefähr 20 getrennte Blockstrecken, also Stromkreise, dabei
> dann die Spannung immer nur an das passende Gleis anlegen bzw. schalten
> wäre ziemlich aufwändig.

Aber nicht so aufwendig wie 20 phasengleiche PWMs mit unterschiedlichen 
Controllern zu machen. Ob du nun ein Relais oder Transistor schaltest, 
der die Versorgungsspannung auf die Abschnitte schaltet oder im 
Richtigen moment eine PWM auf einen Treiber gibst (wovon du dann ja auch 
20 brauchst) und diesen syncronisieren musst.


> Daher hat bei mir jeder Abschnitt seinen
> eigenen Controller, fest an das Gleis angeschlossen. Wechselt dann die
> Lok den Abschnitt wird die Fahrspannung durch den nächsten Controller
> bereitgestellt.

Ich denk mir das einfach so: Ein verstärktes PWM-Signal liegt an 20 
Relais (oder auch Transistoren). Man fährt auf Abschnitt 1, somit ist 
das Relais von Abschnitt 1 angezogen -> Spannung auf den Schinen. Wenn 
jetzt die Lok auf Abschnitt 2 fährt, wird das erkannt, das Relais von 
Abschnitt 2 zieht an und dort ist auch die Spannung. Es ist sogar die 
selbe, also nichts mit addieren, Kurzschluss oder ähnlichem. Wenn der 
Zug komplett auf Abschnitt 2 ist, kann das Relais von Abschnitt 1 wieder 
loslassen.

Man braucht nur eine Quelle der PWM, nur einen Treiber und sonst nur 20 
Schalter, z.B. 80cent Relais oder 30cent Transistoren, und einen µC, der 
Steuert, welcher Schalter jetzt schalten soll.

von Karl H. (kbuchegg)


Lesenswert?

Frank M. schrieb:
> Ich würde es folgendermaßen lösen - wenn es unbedingt "digitalfrei" sein
> soll:
>
> Gleisabschnitt 1: PWM aufgeschaltet
> Gleisabschnitt 2: spannungslos
...
>
> Gleisabschnitt 1: spannungslos
> Gleisabschnitt 2: PWM aufgeschaltet
>

Was ich mich erinnern kann, wurde das früher in den analogen Anlagen so 
oder zumindest so ähnlich gemacht. Ich weiss aber nicht, wie da die 
Zugerkennung gemacht wurde. Du musst ja auch bedenken, dass du von 
beiden Enden in einen Abschnitt einfahren kannst.

von Peter D. (peda)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Ich weiss aber nicht, wie da die
> Zugerkennung gemacht wurde.

Magnet unten an der Lok, Reed-Kontakt im Gleis.


Peter

von Michael S. (rbs_phoenix)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Ich weiss aber nicht, wie da die
> Zugerkennung gemacht wurde. Du musst ja auch bedenken, dass du von
> beiden Enden in einen Abschnitt einfahren kannst.

Die muss er ja aber so oder so haben. Er will den Abschnitt versorgen, 
wo der Zug ist, somit muss er auch feststellen, wo er ist. Also 
unabhängig, wie er syncronisiert, ob überhaupt usw.

von Karl H. (kbuchegg)


Lesenswert?

Michael Skropski schrieb:
> Karl Heinz Buchegger schrieb:
>> Ich weiss aber nicht, wie da die
>> Zugerkennung gemacht wurde. Du musst ja auch bedenken, dass du von
>> beiden Enden in einen Abschnitt einfahren kannst.
>
> Die muss er ja aber so oder so haben.

Schon.
Aber in seinem Konzept benachrichtigt jetzt ein µC den anderen: Du, da 
kommt was von rechts. Stell deine PWM mal auf 87%

> Er will den Abschnitt versorgen,
> wo der Zug ist, somit muss er auch feststellen, wo er ist.

Hmm.
Du hast recht.
Da hab ich einen Denkfehler. Der µC muss sowieso wissen, wann es Zeit 
ist, den Nachbar-µC zu informieren. Da führt kein Weg drann vorbei.

von Stephan M. (multimeter90)


Lesenswert?

Dafür hab ich optische sensoren am anfang und am ende eines jeden 
Abshnittes.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Karl Heinz Buchegger schrieb:
> Aber in seinem Konzept benachrichtigt jetzt ein µC den anderen: Du, da
> kommt was von rechts. Stell deine PWM mal auf 87%

Der TO muss von seiner Vorstellung weg, eine PWM von einem µC auf einen 
anderen µC zu übertragen.

Stattdessen muss er die PWM von einem Gleisabschnitt auf einen anderen 
übertragen. Die N µCs zur Regelung der Geschwindigkeit müssen nichts 
voneinander wissen.

von Michael S. (rbs_phoenix)


Lesenswert?

Stephan Meter schrieb:
> Dafür hab ich optische sensoren am anfang und am ende eines jeden
> Abshnittes.

Joa, 2 hintereinander sollten es tun, damit du auch erkennen kannst, ob 
er nun von 1 nach 2 fährt oder von 2 nach 1.

Jetzt würde es meiner Meinung nach 3 Möglichkeiten geben:

1. Ein Riesen µC, der Alle Sensoren angeschlossen hat. Das wären aber 
bei 2 Sensoren pro Abschnitt 40 Leitungen, wobei es ja evtl auch sein 
kann, dass es mehr Sensoren sein können. Du hättest aber nur einen µC 
(und nur ein Programm und Platine) der alles macht.

2. Einen Master-IC, der die Steuerung der Schalter macht und von kleinen 
8pinner-µCs via BUS die Information bekommt, wenn der Zug am Sensor ist. 
Dieser müsste dann aber an jedem Übergang sein und man müsste einen 
passenden BUS suchen und ggf dafür Hardware benutzen. Entweder der 
Master geht nach und nach alle durch und fragt, ob was passiert ist, 
oder die kleinen Überwacher müssen sich beim Master melden, wobei das 
auch nicht mehrere gleichzeitig machen dürfen.

3. Eine kleine Platine pro Übergang, wo ein µC drauf ist, der die 
Sensoren auswertet und dann die Schalter dementsprechend schaltet.


Ich würde mich zwischen 2 und 3 entscheiden. Bei 2. hat ein µC alle 
Infos, somit kann dieser die Infos anzeigen oder z.B. an ein PC 
weitergeben.
3. wäre am unkompliziersten, da pro Übergang die gleiche Platine mit 
gleichem µC und gleichem Programm genutzt wird.

von uC (Gast)


Lesenswert?

Wie machst du die Benachrichtigung ?
Eventuell von HW-RS232 auf SW-RS232 umschalten und das Startbit syncron
mit dem PWM Start ausgeben.

von Stephan M. (multimeter90)


Lesenswert?

Mein Lösungsansatzt ist eine Mischung aus 2 und 3.

Jeder Abschnitt bekommt eine Platine mit einem 40-Pinner. Anschlüsse:
 + Sensoren von diesem Abschnitt (mindestens also 2)
 + PWM Ausgang
 + Relais für Richtungsänderung
 + Schnittstelle für CAN-Bus

Einen wirklichen Master-IC gibt es nicht, die ganze Sache läuft 
dezentralisiert. Der IC am Gleisabschnitt bekommt über den CAN gesagt 
"bei dir fährt jetzt Lok xy in von Seite A ein, pwm tastverhältnis ist 
60%"
Von einem Handmodul mit Display, eventuell durch PC zu ersetzen, wird 
wieder über CAN gesagt "IC, mach jetzt 80% Tastverhältnis". Wenn die Lok 
den Sensor am Ende des Abschnittes überfährt, sagt der IC über CAN dem 
nächsten IC "Du bekommst jetzt Lok xy von Seite A, tastverhältnis ist 
80%". Wenn dann der optische Sensor am ende vom ersten Abschnitt sagt, 
da ist nichts mehr, dann schaltet der IC dort seine PWM ab und freut 
sich seines Lebens.

Über CAN kann dann auch abgefragt werden, welcher Abschnitt gerade 
besetzt ist.

von uC (Gast)


Lesenswert?

Du hast einen Bus, also verwende den gefälligst. Das heisst,
ein uC gibt auf den Can Bus mit relativ hoher Priorität die Uhrzeit.
Alle syncronisieren sich auf die Uhrzeit mit maximalen Delta von xx ?
bzw nehmen diese an wenn sie noch keine Uhrzeit haben.
Das PWM darf erst gestartet werden wenn eine Netz-Uhrzeit da ist.
Das PWM wird syncron zur Uhrzeit gehalten.

Eine andere Alternative wäre, PWM zentral von einem Master starten
durch HW-PWM und in bestimmten Intervallen wird diese Meldung abgesetzt.
Bei jeder Meldung dieser Art muss das HW-PWM Interface neu Initialisiert 
werden.

Bei Can ist es zimlich einfach, aus allen uC einen Master aussuchen zu
lassen.

von Michael S. (rbs_phoenix)


Lesenswert?

Ich hätte eine Art Trafo-Ersatz gemacht. Eine Platine mit einem µC 
drauf, der die PWM macht, die abhängig von Tasten, Poti, PC, whatever 
ist. Danach wird das Signal verstärkt, evtl gefiltert und dort auch das 
Relais zur Umschaltung von + und Minus. Das Ergebnis ist dann so wie bei 
einem Normalen analogen Trafo. + und - kommen aus einer Box...

Dann verbindest du die Massen mit dem "Generator" Minus und die 
Generator-Plusleitung kommen an die Schalter. Dann kannst du deinen und 
einen normalen Trafo beliebig tauschen.

Wie gesagt, ich finde es reicht, wenn eine Spannung generiert wird und 
dann einfach nur dazu oder weggeschaltet wird.

Das Problem, was ich nur sehe ist, dass ein Übergang, der 2 Abschnitte 
verbindet, nur 2 Sensoren hat.

Also entweder man nimmt die beiden Sensoren und wertet die aus. 
Nachteil: Die Schaltung weiß nicht, wann der Zug wieder aus dem 
Abschnitt fährt und kann so nicht abschalten.

Oder man nimmt einen Sensor pro Übergang, dafür alle von einem Abschnitt 
und somit schaltet nur ein µC den Schalter. Dafür weiß der µC nicht, ob 
der Zug kommt oder wegfährt. Dann müsste man eine Datenübertragung 
machen.

Wenn man nun pro Übergang 4 Sensoren nehmen würde (2 für jeden der 
beiden Abschnitte), könnte man komplett ohne Kommunikation schalten, da 
man weiß, dass der Zug kommt (bzw wegfährt), man hat jedoch die doppelte 
anzahl an Sensoren..

von nuess0r (Gast)


Lesenswert?

Finde die Idee, für jeden Block einen eigenen uC zu benutzen eine gute 
Idee. Die Aufgaben sind begrenzt und überblickbar. Bleibt auch 
übersichtlicher bei Erweiterungen.

Für die ganze Sache CAN als Bus zu nutzen tönt gut, für deine Anwendung 
ist der auch genug deterministisch um die PWM Einheiten im uC zu 
synchronisieren.
Beim darüber nachdenken fällt mir auf, dass CAN ein mächtiger Ersatz für 
das alte S88 Bus Zeugs wäre.


Alle Leute hier fokusieren sich voll auf die PWM und die Blocksteuerung, 
mit CAN (wie andere Busse auch) ist es ein einfaches über diese 
Steuerung auch gleich die Ansteuerung der Vor- und Hauptsignale zu 
übernehmen. Andere Ideen wären z. B. den nächsten Block zu fragen (bzw. 
mit CAN Messages schon zu wissen) ob er frei/belegt ist und so nach dem 
Vorsignal eine Bremsrampe zu fahren etc.

Ob du dann das mit Handsteuerung machst oder ein anderer Anwender das 
dann in ein PC basiertes Gleisbildstellwerk integriert ist dem System 
eher egal.

von Michael S. (rbs_phoenix)


Lesenswert?

nuess0r schrieb:
> Alle Leute hier fokusieren sich voll auf die PWM und die Blocksteuerung

Die Ursprüngliche Frage war ja auch, wie man mehrere PWMs syncronisiert 
und ich finde es deutlich angenehmer und sinnvoller nur eine PWM zu 
machen und nur zuzuschalten, wo der Zug grad ist.

Ob Kommunikation und wenn wieviel und wofür muss der TE ja selbst 
entscheiden. Wir wissen ja nicht, wie aufwendig das zum Schluss werden 
soll.

von Lukas T. (tapy)


Lesenswert?

Wie is' das eig. mit der Antennenwirkung eines ganzen Schienennetzes 
unter PWM? Nur mal so aus Neugier in den Raum geworfen?

PWM Sync: Ganz primitiv 'n IR-Blitzlicht an die Deckenlampe und alle µC 
darauf hin "syncen" lassen? Schneller und weniger elektrisch störend 
kriegt man nen Impuls nicht durch den Raum. Wenn man lustig drauf ist, 
kann man sogar die an der Lampe vorhandenen 50 oder auch 100 Hz nutzen. 
Der "Masterclock" muss ja nicht intelligent sein.

von Stephan M. (multimeter90)


Lesenswert?

@nuess0r: Die Ansteuerung der Signale übernehmen andere Controller, 
welche aber alle über den gleichen Bus kommunizieren. Die 
Belegtmeldungen eines Abschnittes werden so von dem Fahrregler auf den 
Bus gesendet, eine Steuereinheit für die Blockstrecken (Anzeige über 
LEDs wo ein Zug steht, und wie die Weichen und Signale geschalten sind) 
nutzt diese Infos und schaltet dann die Signale und sagt auch dem 
Blockabschnitt VOR dem belegten, dass der Zug am Blocksignal warten 
muss.

Zu den Problem mit der Anzahl der Sensoren:
Der IC (Fahrregler) weiß doch immer in welcher Richtung der Zug gerade 
fährt. Das legt er ja selbst über das Relais fest. Somit weiß er auch 
ganz genau ob der Zug nun gerade ein oder aus fährt. Ein Block sieht 
dann so aus:

Block 2                 Block 1                                    Block 
0

--------||-------------------------------------------------||----------- 
--
      x    x                                             x    x
--------||-------------------------------------------------||----------- 
--

Sensor 2A  Sensor 1B                             Sensor 1A    Sensor 0B

(Draufsicht auf Gleis, || sind die elektrischen Trennstellen, x die 
Sensoren)



Zugrichtung im Beispiel <--

Überfährt also der Zug Sensor 0B, sagt IC0 dem CAN: "Nachricht an IC1, 
du bekommst jetzt einen Zug von IC0 mit pwm=30%"

Sag der Sensor 0B, dass da kein Zug mehr ist, hat IC0 Freizeit.

Überfährt der Zug Sensor 1B sagt IC1 dem CAN: "Nachricht an IC2, ..."

von Stephan M. (multimeter90)


Lesenswert?

Um nochmal auf meine eigentliche Frage mit der Synchronisation zurück zu 
kommen. Denkt ihr, dass ich das auch einfach über den CAN machen kann? 
Also einfach eine Nachricht "Los PWM fang neu an! (Peitschenknall)"

Ich wollte mit der Geschwindigkeit des Busses mit 500kbits/s arbeiten, 
das reicht für ca 3000 Pakete in der Sekunde mit je 8 Datenbytes darin. 
Also wird der nichtmal ansatzweise ausgelastet sein.

von Peter D. (peda)


Lesenswert?

Bei CAN kann man einen Timer mitlaufen lassen, z.B. beim AT90CAN128 sind 
das CANTIML and CANTIMH.
Wenn der Master eine Sync-Nachricht schickt, kriegt er den Zeitstempel, 
wann das Senden erfolgte. Und alle Slaves den Zeitstempel, wann sie 
empfangen wurde.
Damit sind sie auf den CPU-Zyklus synchron.


Peter

von Ideengeber (Gast)


Lesenswert?

Man, ist das umständlich hier...

Die Richtung stimmt ja, nämlich ein Bus drängt sich förmlich auf um die 
dezentralen PWM-Controller zu adressieren. Nur das eigentliche Problem, 
nämlich die Synchronisierung ist immer noch nicht gelöst...

Also, nimm doch einen Bus mit zwei Leitungen. Takt und Daten. Vulgo, 
SPI.

Der Trick nun: Der Master-Controller sendet ständig Daten, so dass der 
Clock vom SPI niemals still steht. Somit kann dieser Clock als 
Master-Takt für die ganzen PWM-Generatoren verwendet werden. Ein 
Mikrocontroller auswählen, bei dem der PWM-Takt von außen angelegt 
werden kann, so dass er nicht per Software-PLL o.ä. synchronisiert 
werden muss.

Thema Datenübertragung: Z.B. 16-Bit-Datenwörter verwenden, und das 
höchste Bit immer setzen, so kann sich jeder Bus-Teilnehmer neu 
synchronisieren, wenn mindestens 16 Nullen gesendet wurden. Das 
Datenwort 0x0000 darf natürlich im Kommunikations-Protokoll niemals 
verwendet werden. Alternativ gibt es gefühlt noch tausende andere 
Synchronisierungs-Methoden.

Letztes Problem: PWM-Zähler aller Mikrocontroller synchron zurücksetzen. 
Mögliche Lösung: Kommando als 16-Bit-Code senden. Danach für eine 
bestimmte Zeit Nullen. In dieser Zeit schalten die PWM-Controller die 
Data-Line vom SPI-Bus als PWM-Reset scharf. Sobald nun die Datenleitung 
auf High geht (Flanke), werden die PWM-Zähler zurückgesetzt. Auch dafür 
gibt es gefühlt tausend Varianten.
Einzig ist wichtig, dass alle Mikrocontroller zuverlässig synchron den 
PWM-Zähler auf Kommando zurücksetzen. Noch einfacher wäre eine dritte 
Leitung mit dem Reset-Signal. Dann bräuchte man auch nicht das Sync-Bit 
im Datenwort.

Ach, es gibt so viele denkbare und einfachen Lösungen...

von Peter D. (peda)


Lesenswert?

Ideengeber schrieb:
> Also, nimm doch einen Bus mit zwei Leitungen. Takt und Daten. Vulgo,
> SPI.

SPI über 40m, ich lach mich tot.

CAN ist schon richtig.


Peter

von Ideengeber (Gast)


Lesenswert?

> SPI über 40m, ich lach mich tot.

Ach Peter, dann pass aber auf, dass Du beim sterben nicht aus versehen 
über irgendein EIA-485 oder sonstigen Treiber liegen bleibst. 
Differentielle Sender/Empfänger aller möglichen Spannungs- und 
Geschwindigkeitsbereiche gibt es wie Sand am Meer.

> CAN ist schon richtig.

Wer nur einen Hammer kennt, für den ist alles ein Nagel.

von Michael S. (rbs_phoenix)


Lesenswert?

Ich versteh aber ehrlich gesagt immernoch nicht, warum jeder uC die PWM 
neu machen muss, wenn es doch immer die selbe ist. Man kann doch einfach 
mittels Schalter die Bereiche Spannungslos schalten. Unabhängig davon 
kannst du dein konzept ja so stehen lassen, dass also ueber CAN der uC 
eines Bereichs dem nächsten sagt "Hier du kriegst n Zug" sodass die 
Spannung in diesem Bereich eingeschaltet wird.

Das ist doch so, als wenn ich vor jedem IC nen 5Volt-Regler setze, 
obwohl ich weiß, das alle die gleiche Spannung haben sollen.

Wenn du an 1B ein Signal bekommst, musst du wissen, ob vorher eine 
Übertragung von IC2 kam, die sagt, dass ein Zug kommt. Wenn ja schaltet 
IC1 den Bereich unter Strom. Wenn nicht sendet IC1 an IC2, das ein Zug 
kommt. Das tut er aber auch, wenn aus welchen Gründen auch immer kein 
Signal an den IC1 gegangen ist (IC2 aufgehangen, Störung vom Signal, 
BUS-Kabel kaputt...).

Meine Idee wäre pro Übergang ein 8pinner. Dieser guckt in welche 
Richtung der Zug fährt und dann entweder einen Ausgang auf High macht 
oder einen anderen (für "nach links" oder "nach rechts"). Entweder alle 
Leitungen zu einem uC oder die entsprechenden Leitungen zum uC für den 
passenden Bereich.

Naja jeder will es anders machen und es gibt auch nicht DIE Lösung. 
Warum du aber pro Bereich eine eigene, syncrone und verstärkte PWM 
erstellen willst anstatt einfach ein Relais oder Transistor 
durchzusteuern versteh ich allerdings nicht.

von Stephan (Gast)


Lesenswert?

Ich bins ;)

Also die ganze Sache über den Bus synchronisieren wäre auf jeden Fall 
sehr einfach und günstig vom Verkabelungsaufwand. Da der CAN-Bus für 
mehrere Aufgaben genutzt wird und daher so und so unter der gesamten 
Anlage verläuft, wäre es nur unnütz ein zweites paar Adern zu ziehen.

Ansich müssen ja nicht einmal alle Regler synchron arbeiten, sondern 
immer nur 2 stück bei einer Überfahrt.

Der Sinn an der dezentralen Erzeugung und Verstärkung ist, dass ich ja 
mehrere Loks habe und nicht alle das selbe Tastverhältnis bekommen 
sollen. Ist ja logisch bei unterschiedlichen Geschwindigkeiten.

Ich werde, sobald ich einen zweiten Prototyp zur PWM Erzeugung aufgebaut 
habe, einen Testlauf machen. Sync über Datenwort über Bus, Sync über 
Masterclock.

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.