Modellbahnsteuerung mit AVR und I2C

HP-Soft

Mitglied
16. Okt. 2012
31
0
6
54329
Sprachen
  1. BascomAVR
Wie ich bereits in meiner Vorstellung beschrieben habe, ist mein nächstes Projekt eine Modellbahnsteuerung über AVR und I2C.
In den letzten Wochen habe ich mich schon mal mit der I2C Steuerung beschäftigt. Entstanden ist dann die gezeigte Steuereinheit mit den max. möglichen 128 Steuerausgängen. Jeder Ausgang ist mit 12,5 Watt belastbar, was auch genügt, um die Magnetartikel der Modellbahn zu steuern. Für den Test der I2C Aufgänge habe ich ein kleines VB express Programm geschrieben, welches die Ausgänge einmal alle nacheinander ansteuert. Ein 128 Kanal Lauflicht also. Funktioniert prima. Sogar die Ausgangstreiber schalten fein durch.


PA250007.jpgPA250008.jpg

Als Stromversorgung benutze ich ein einfaches altes ATX Netzteil. Allerding habe ich mir einige Vorschaltplatinen gegönnt, mit denen ich die 3,3V; 5V und 12V Leitungen auf mehrere mit jeweils 3A abgesicherte einzelne Stromkreise aufgeteilt habe. ( sonst gibt es im Kurzschlussfall ein schöner Feuerwerk. Sind ja bei mir immerhin 30A alleine auf der 5V Leitung ). Da diese Schaltnetzteile nicht unbelastet betrieben werden dürfen, entstand gleichzeitig mit dem Netzteil auch noch ne Arbeitsplatzbeleuchtung. Falls jemand auch sowas machen möchte, empfehle ich unbeding das Datenblatt vom Netzteil zu besorgen. Hier findet man auch die Mindestbelastung der einzelnen Stromkreise.

So, jetzt kommt das nächste Teilstück. Umlagern der Steuerung vom PC, hin zum AVR. Da werde ich wohl in diesem Forum noch die ein oder andere Frage stellen. Ich muß ja nicht jedesmal das Rad neu erfinden.

Dann bis zur ersten Frage => oder dem fertigen Gerät
 
Hi
Bei dem ATX Netzteil brauchst du glaub ich keine Angst bei einem Kurzschluss haben. Bei mir hat dann das Netzteil gleich ausgeschaltet. Es gab noch nicht einmal einen Funken.
Gruß oldmax
 
Hi
Bei dem ATX Netzteil brauchst du glaub ich keine Angst bei einem Kurzschluss haben. Bei mir hat dann das Netzteil gleich ausgeschaltet. Es gab noch nicht einmal einen Funken.
Gruß oldmax

Angst schon. Wenn einmal 30A über ein 0,5 mm2 Kabel schießen, kann es mächtig heiß werden, bevor das Netzteil abschaltet. Ich will ja kein Schweißgerät bauen.
 
Hallo HP!

Na, das sieht doch schon mal super aus.......
und es funktioniert sogar schon! :D

OK, es soll ja später nicht bei einem 128 Kanal Lauflicht bleiben, aber es zumindest schon mal ein guter Anfang. :wink:



Wenn einmal 30A über ein 0,5 mm2 Kabel schießen, kann es mächtig heiß werden, bevor das Netzteil abschaltet.

Zum dem Thema ist mir letztens auch eine Platine untergekommen......
Platine_abgebrannt.jpg

Scheinbar hat bei der Platine die Überstrom-Schutzschaltung für die Lasteinheit auch nicht "rechtzeitig" reagiert. :D

Von daher kann ich deine Bedenken sehr gut verstehen und finde die Vorsichtsmaßnahmen auch in Ordnung!


Grüße,
Cassio
 
Hei Cassio,

ein guter Anfang ist gut...

Bin gerade ein Pflichtenheft für die Gesamtsteuerung am erstellen. Da kommt ganz schön was zusammen. Da kommen mehrere hundert Rückmeldestellen zusammen, die man noch nicht mal in klare Gruppen aufteilen kann. Überall entstehen neue Querverbindungen. Ob ich das jemals gebacken bekomme? Die Programmierung wird wohl der einfachere Teil werden. Da kann ich ja notfalls einfach rumprobieren bis es dann endlich passt. Bei der Steuerung kann ich da aber schnell mächtig Schaden anrichten. Ich baue zwar alles in Modulen auf, die ich gegebenenfalls schnell mal auf dem Steckbrett testen kann. Beim Zusammenspiel von vielen Modulen wird das aber schnell unübersichtlich.

Naja, ich werde Euch auf dem laufenden halten.

P.S. Das Bild von der Platine ist gut. Doch nen Schweissgerät aus nem Netzteil gemacht :D
 
Hallo,

na das sieht ja echt sauber aus :D

Ein Design wie geleckt. Aber sechs Schrauben pro Modul sind schon echt eine Erdbebenfeste Konstruktion :rolleyes:

Gruß
Dino
 
Hei Dino,

die vielen Schrauben an den Modulen haben sogar eine Geschichte. Ich habe mir mal Kunststoffleisten 30 cm lang mit eingefrässten Muttern gefertigt.
das Raster habe ich auf 2,5 cm festgelegt. So groß ist die kleinste Platinenfrontplatte die ich mache. Bei den 30 cm Leisten bekomme ich dann jeweils 4 Stück von 7,5 cm unter. Das ist mein Frontplattenmaß bei 2 Platinen mit Schraubanschlüssen. Also 3 Löcher für die Befestigung. ( Meine DIN halt . Hat sich für mich bis jetzt gut bewährt.:).

Und da ich ja auch ein wenig beklop.....:confused: bin :eek: nutze ich auch alle möglichen Schraublöcher. Nur doof wenn ich ein Modul rausschraube
 
Flackern von Lampen unterdrücken

Guten morgen zusammen,

hatte am Wochenende mal wieder etwas Zeit an der Modellbahn zu arbeiten.

Jetzt bin ich auf ein keines Problem gestossen. In Wirklichkeit ist es aber kein Problem ( mein Halbwissen ist es schuld)

Zur Sache:

Ich habe bei der Bahn die beiden masseführenden Gleise voneinander getrennt. ( und gegeneinander isoliert )
Dann habe Ich über einen seperarten 18V Steuerstromkeis ( Masse mit Fahrstromkreis verbunden) einen Optokoppler LTV847 angesteuert.
Dadurch erreiche ich, dass der Opto schaltet, sobald ein Waggon auf dem Gleich steht. ( sogar wenn der Fahrstrom abgeschaltet ist.) Über die Achsen der Wagen wird hierbei die Masse geschlossen und der Opto schaltet. Soweit sogut. Funktioniert auch ganz gut.
PB110009.jpg

Das eigentliche Problem ist das Kontaktprellen. Durch die diverse Verschmutzungen (Oxydation, Staub,..) funktioniert der Masseschluss nicht durchgängig.
Es gibt ein kleines Flackern. Für die LED Zugortung ist mir egal ob sie mal ne halbe Sek. aus sind. (Nicht schön aber notfalls OK).
Will ich aber das ganze mit nem AVR auswerten bekomme ich Probleme.

Ich habe von meiner Schulzeit ( im letzten Jahrtausend) noch in Erinnerung, dass man mit nem ELKO das irgendwie puffern können, sodass die halbe Sek. überbrückt werden kann. Vielleicht ist das aber auch mit Kanonen auf Spatzen geschossen und ich muss das ganze nur in der Software (mit meiner 3 monatigen Erfahrung) lösen.
Kann mir das vielleicht einer auf die Sprünge helfen. (wenns geht , aber Laienverständlich).

Gruss Peter
 
Hi Peter,

Es gibt ein kleines Flackern. Für die LED Zugortung ist mir egal ob sie mal ne halbe Sek. aus sind. (Nicht schön aber notfalls OK).
...
Vielleicht ist das aber auch mit Kanonen auf Spatzen geschossen und ich muss das ganze nur in der Software (mit meiner 3 monatigen Erfahrung) lösen.
Kann mir das vielleicht einer auf die Sprünge helfen. (wenns geht , aber Laienverständlich).
Du mußt per Software eigentlich nur verhindern das innerhalb dieser "halben Sekunde" ein leeres Gleis erkannt wird.
Also sozusagen wie ein nachtriggerbares Monoflop aus der Digitaltechnik.

Am einfachsten geht das in Software mit einem Zähler den du in einer bestimmten Zeit (bei dir also etwa 0,5sec) runterzählst.

- Der Zähler wird beim besetzt erkannten Gleis auf den Höchststand gesetzt. Wenn du ein Byte verwendest wäre das zB 255.

- Dann wird er in den etwa 0,5sec bis auf 0 runtergezählt ( 0,5sec / 256 = 1,95ms ). Bei dir also etwa alle 2ms um 1 runter.

- Wenn das Gleis wieder als besetzt erkannt wird dann wird der Zähler (die Variable) wieder auf 255 gesetzt.

- Wenn nun innerhalb der 0,5sec nicht wieder auf "voll" gesetzt wurde wird die Variable/Zähler bei 0 ankommen und das Gleis ist als leer erkannt.

Das ergibt aber für jeden Gleissensor ein Byte als "Entprellzähler". Und eine Taktquelle (zB nen Timer) der alle Variablen im 2ms-Rhythmus um 1 erniedrigt (auf Unterlauf achten!! 0 - 1 = 255 :p ).

Gruß
Dino
 
Hallo Dino,

vielen Dank für die schnelle Antwort.

Das wird das Problem werden

Hi Peter,

Das ergibt aber für jeden Gleissensor ein Byte als "Entprellzähler". Und eine Taktquelle (zB nen Timer) der alle Variablen im 2ms-Rhythmus um 1 erniedrigt (auf Unterlauf achten!! 0 - 1 = 255 :p ).

Es wird vermutlich jede Menge Sensoren geben. Ne gute dreistellige Zahl wird es wohl werden. Das sind dann jede Menge Zähler. Vielleicht wird eine Hardwaremässige Lösung besser. Obwohl ich noch nicht klar darüber bin, wie das genau machbar ist. Das mit den Elkos schwirrt mir immer noch durch den Kopf. Wird dann aber auch ne dreistellige Zahl .
So gedanklich stelle ich mir vor, dass der Elko beim ersten Kontakt aufgeladen und bei Kontaktunterbrechung wieder langsam Über den Opto. entladen wird.(Die LED im Opto braucht ja nur nen paar mA ) Also den Opto fÜr ne halbe Sek. am Leben erhällt. Nur wie man das macht oder berechnet - davon habe ich Null Ahnung -

Gruss Peter


P.S. Ich hänge mal testhalber nen Mega8 dran. Mal sehen ob ich die 12 Sensoren von meinem Testmodul abgefragt bekomme.
Aber der Elko fliegt mit immer noch durch den Kopf

Das mit dem Elko kommt daher, dass ich dann hinter dem OPTO: auch ein sauberes Signal für die LED´s habe und nicht noch Ausgänge der AVR´s nur für die dummen LED´s verbrate. Kein Flackern mehr (Oh Freude, Oh Freude)
 
Hallo,

Das wird das Problem werden

Es wird vermutlich jede Menge Sensoren geben. Ne gute dreistellige Zahl wird es wohl werden.
...
Vielleicht wird eine Hardwaremässige Lösung besser.
...
Das mit dem Elko kommt daher, dass ich dann hinter dem OPTO: auch ein sauberes Signal für die LED´s habe und nicht noch Ausgänge der AVR´s nur für die dummen LED´s verbrate. Kein Flackern mehr (Oh Freude, Oh Freude)
Also wegen der Anzahl der Zähler ... Ein Mega32 hat 2048Byte SRAM. Wenn du da 512 Bytes verwendest, dann sollte das für 512 Sensoren erstmal reichen ;) Der Atmel sollte dann aber auf 16MHz laufen und möglichst nur für die Entprellung und Sammlung der Sensordaten da sein. Er kann dann ja die gesammelten Daten an einen "Hauptprozessor" leiten. Das mit 512 Variablennamen machen ist allerdings Irsinn. Dafür würde ich nen Byte-Array verwenden. Also sowas wie ...
DIM Sensoren(512) AS BYTE

Mit den Elkos kann man das auch machen. Ist allerdings nen Haufen Hardware. Dann mußt du die Optokoppler-LED mit dem Vorwiderstand parallel mit dem Elko beschalten. Dann entlädt sich der Elko über den Vorwiderstand der als Strombegrenzung für die LED arbeitet und die LED. Vom Gleis her versorgst du das dann über ne Diode. Dann wird das über die Diode geladen und über die LED entladen. Es gibt dann wegen der Diode keinen Rückweg über das Gleis. Die Elkos wirst du wohl experimentel ermitteln müssen. Ich würde mal mindestens 47µF planen. Eher mehr. Aber der Wert ist so aus dem Bauch raus.

Gruß
Dino
 
Mit den Elkos kann man das auch machen. Ist allerdings nen Haufen Hardware. Dann mußt du die Optokoppler-LED mit dem Vorwiderstand parallel mit dem Elko beschalten. Dann entlädt sich der Elko über den Vorwiderstand der als Strombegrenzung für die LED arbeitet und die LED. Vom Gleis her versorgst du das dann über ne Diode. Dann wird das über die Diode geladen und über die LED entladen. Es gibt dann wegen der Diode keinen Rückweg über das Gleis. Die Elkos wirst du wohl experimentel ermitteln müssen. Ich würde mal mindestens 47µF planen. Eher mehr. Aber der Wert ist so aus dem Bauch raus.

Hi Dino,

danke für die Nachricht. Die Diode kann mir wohl sparen, da der Kondensator ja erst hinter dem schalter (oder Kontaktprellen ) geladen wird und sich nur über die LED der Optokoppler entladen kann. (stelle ich mir zumindest so vor => Halbwissen eben <=

Habe heute mittag mal ein wenig rumprobiert. Da ich nur 16V Elkos hatte, habe ich einfach mal mit 12 V Betriebsspannung vor dem OPTO getestet.
Bei 12V , 1 KOhm vor dem LED (ca. 10 mA) und 470 uF , hat die LED fast ne halbe Sekunde nachgeleuchtet. Da der Opto wohl 20 mA verträgt und ca. 1,3V abfallen bei (18V -1,3V)/ ca. 20mA = 800 Ohm. Also müste ein 1K Widerstand reichen um die abnehmende Spannung am Elko etwas zu kompensieren.
Wie gut der Fototransistor im Opto schaltet (welche Leuchtstärke der LED) muss ich aber noch testen.

Braucht man eigentlich noch einen Vorwiderstand am Elko um die Ladespannung zu begrenzen? Es wird wohl ein 470uF 25V Typ werden

Oder habe ich hier irgendwo einen Denkfehler?

Gruss Peter
 
Hi Peter,

Bei 12V , 1 KOhm vor dem LED (ca. 10 mA) und 470 uF , hat die LED fast ne halbe Sekunde nachgeleuchtet. Da der Opto wohl 20 mA verträgt und ca. 1,3V abfallen bei (18V -1,3V)/ ca. 20mA = 800 Ohm. Also müste ein 1K Widerstand reichen um die abnehmende Spannung am Elko etwas zu kompensieren.
Wie gut der Fototransistor im Opto schaltet (welche Leuchtstärke der LED) muss ich aber noch testen.
470µF ist aber nen ganz schöner Brocken :p Das wird ne teure Angelegenheit.
Was hast du da nochmal für Optokopple?
Such dir notfalls welche mit hohem Kopplungsfaktor. Die alten IL74 oder so sind da noch richtige Gurken.
Versuch über gute Optokoppler den Widerstand größer zu bekommen und den Elko kleiner. Das reduziert auch die Ladeströme des Elkos. Den Vorwiderstand der LED würde ich versuchen auf 1,5..2,2k hochzutreiben. Mit nem guten Optokoppler sollte das gehen. Eventuell wird dann der Mehrpreis des Optokopplers durch den geringeren Preis der Elkos aufgefangen.

Braucht man eigentlich noch einen Vorwiderstand am Elko um die Ladespannung zu begrenzen? Es wird wohl ein 470uF 25V Typ werden

Oder habe ich hier irgendwo einen Denkfehler?
Mit einem Vorwiderstand lädt er sich auch langsamer auf. Könnte man machen. Ich würde den aber so bei 10..47 Ohm lassen um nur die extremen Stromspitzen zu unterdrücken. Das würde dann wohl auch das Gebratzel auf der Schiene verringern.

Gruß
Dino
 
470µF ist aber nen ganz schöner Brocken :p Das wird ne teure Angelegenheit.
Was hast du da nochmal für Optokopple?
/QUOTE]

Naja, teuer ist anders bei Reichelt 470uF 25V mal schlappe 6 ct./stck. Also 100 mal gerade 6 Euro. Da findet sich bestimmt noch ein billigerer Anbieter.

Der Optokoppler ist ein LTV847 ( vierfach ) ist der gleiche wie der PC847X

Gruss
Peter
 
Hi,

Naja, teuer ist anders bei Reichelt 470uF 25V mal schlappe 6 ct./stck. Also 100 mal gerade 6 Euro. Da findet sich bestimmt noch ein billigerer Anbieter.
da hatte ich wohl noch nen anderen Preis im Hinterkopf :p Da lohnt sich eine weitere Suche ja kaum.

Der Optokoppler ist ein LTV847 ( vierfach ) ist der gleiche wie der PC847X.
Laut Datenblatt liegt der bei 50%-600%. Bei Reichelt steht auch keine Endung dabei :p Kostet 0,69..0,70eur
LTV-847B => 130-260%
LTV-847B or C or BC => 130-400%
LTV-847C => 200-400%
LTV-847C or D or CD => 200-600%
LTV-847B . BC . C . CD or No mark => 50-600%
Also "CD"- oder "D"-Typen wären da am besten geeignet. Kann man aber beim bestellen leider nicht angeben :p :flute:

Gruß
Dino
 
Mit einem Vorwiderstand lädt er sich auch langsamer auf. Könnte man machen. Ich würde den aber so bei 10..47 Ohm lassen um nur die extremen Stromspitzen zu unterdrücken. Das würde dann wohl auch das Gebratzel auf der Schiene verringern.

Hallo nochmal.

wenn ich nen Vorwiderstand (sagen wir mal 20 Ohm ) vor den 470 uF Kondensator hänge und dann mit 18V lade, dann fliessen doch 0.9A in der ersten Zeiteinheit durch den Widerstand. Das soll doch sicher nicht bedeuten, dass ich dann nen 18*0.9=16.2 Watt Widerstand brauche. Die 0.9A gehen ja in der Ladezeit auf Null zurück.

Wäre ja möglich, dass es durch die extrem kurze Zeitspanne der Ladung, dem Widerstand egal ist und garnicht genug Zeit hat warm zu werden.

Bei meinem Versuch mit 12V und 100 Ohm 1/8Watt Widerstand war keine übermässige Erwärmung am R feststellbar.

Kann mir vielleicht jemand sagen, wieviel Watt der Widerstand haben muss, damit es dauerhaft funktioniert und der Widerstand nicht zu dick wird ?

Gruss Peter
 
Hallo Peter,

wenn ich nen Vorwiderstand (sagen wir mal 20 Ohm ) vor den 470 uF Kondensator hänge und dann mit 18V lade, dann fliessen doch 0.9A in der ersten Zeiteinheit durch den Widerstand. Das soll doch sicher nicht bedeuten, dass ich dann nen 18*0.9=16.2 Watt Widerstand brauche. Die 0.9A gehen ja in der Ladezeit auf Null zurück.
Also ... t = R * C

t = 20 Ohm * 0,00047 F = 9,4ms Zeitkonstante.

Der Kondensator sollte also in 9,4ms auf gute 60% geladen sein.

Wenn der Kondensator dann nach einer halben Sekunde wieder geladen wird dann ist das ja gegenüber den 500ms nur ein Bruchteil der Zeit (ein 50tel). Wenn man das nun dauerhaft machen würde dann hätte man theoretisch auch nur 16,2W / 50 = 0,324W. Du machst das ja nicht über mehrere Minuten. Außerdem ist der Kondensator ja normalerweise immer noch etwas geladen wenn das nicht in 0,5s sondern in kürzeren Abständen passiert. Du hast dann also nicht mehr den vollen Ladestrom und damit nicht die volle Verlustleistung.

Also da würde ich mir erstmal keine großen Gedanken machen. Wenn du dan nen 1/4W Widerstand verwendest dann bist du meiner Meinung nach absolut auf der sicheren Seite.

Wäre ja möglich, dass es durch die extrem kurze Zeitspanne der Ladung, dem Widerstand egal ist und garnicht genug Zeit hat warm zu werden.

Bei meinem Versuch mit 12V und 100 Ohm 1/8Watt Widerstand war keine übermässige Erwärmung am R feststellbar.

Kann mir vielleicht jemand sagen, wieviel Watt der Widerstand haben muss, damit es dauerhaft funktioniert und der Widerstand nicht zu dick wird ?
Also bei 22 Ohm (ist ein E12-Normwert) kommst du mit 1/4W aus. Das sind die ganz normalen Pfennigdinger.

Wenn du allerdings für so kurze Zeit mehrere zig Amprere da durchprügelst, dann wird er dir das übel nehmen.

Ach ja ... nen 1/4W 2,2 Ohm Kohleschicht-Widerstand geht an 12V gut als elektrischer Zünder für Silvester :p :rolleyes: Wumm :cool:
Wenn du ihn nur sehr kurz dranläßt, dann geht er sogar für mehrere male :sarcastic:

Gruß
Dino
 
Hallo Dino,

danke für Deine Hilfe.

Ich habe gestern mein Testmodul aufgerüstet.
Es funktioniert einwandfrei. Habe 22 Ohm 1/2 Watt vor einem 470 uF 25V Elko dann noch 1KOhm vor dem Opto ( komme da so auf 13 mA für die Opto LED). Und siehe da - meine Verbraucher haben dauerhaft Strom und am AVR kommt ein sauberer 5V Dauerstrom an. Wenn ich jetzt immer mehrere Sensoren überwache, habe ich sogar noch die Fahrtrichtung der Züge. Klasse und nochmals Danke.

Am Wochenende werde ich das Modul mal um nen atmega8 und nen I2C 8574 Ausgabebaustein erweitern. Dann kommt endlich mal die Software dran. der MEGA8 soll die Daten von vorläufig 12 Sensoren sammeln, auswerten, seriell an den PC senden und per I2C die Weichen schalten. Die Weichen könnte man zwar bestimmt auch vom AVR steuern, aber ich glaube das es mit I2C von verschiedenen Stellen aus besser geht.
Wenn das dann funktioniert, gibt es viel copy/paste für die vielen Sensoren unter der Bahn.

Gruss Peter
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)