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.
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
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.
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.
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?
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.
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
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.
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.
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ß.
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.
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.
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
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.
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.
Position der Lok registrieren und den zweiten Abschnitt erst verzögert einschalten? Okay, evtl. etwas kompliziert. Eine Regelung der Geschwindigkeit onboard wäre besser.
Die Treiberstufen verkraften das, die sind extra so designed.
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.
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
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.
Wenn du das wirklich meinst zu brauchen, dann mach das wie Karl Heinz gesagt hat über einen Masterclock.
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.
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
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.
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.
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 :-)
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.
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.
Karl Heinz Buchegger schrieb: > Ich weiss aber nicht, wie da die > Zugerkennung gemacht wurde. Magnet unten an der Lok, Reed-Kontakt im Gleis. Peter
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.
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.
Dafür hab ich optische sensoren am anfang und am ende eines jeden Abshnittes.
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.
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.
Wie machst du die Benachrichtigung ? Eventuell von HW-RS232 auf SW-RS232 umschalten und das Startbit syncron mit dem PWM Start ausgeben.
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.
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.
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..
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.
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.
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.
@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, ..."
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.
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
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...
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
> 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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.