PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Weichensteuerung mit Servo



Rolf-W
09.09.2008, 21:25
Hallo
Ich habe mir einen PIC-Programmer zugelegt, bin aber nicht so recht weiter gekommen.

http://www.conrad.de/goto.php?artikel=191020

Ich habe ein paar kleine Programme zum laufen gebracht, aber an einen Servo ist nicht zu denken.

Ich habe folgendes Problem, für eine Modellbahn habe ich eine Steuerung gebaut die über den I2C gesteuert wird. (Gleisbesetztmelder, Fahrstromsteuerung Ab und Zuschalten von Gleisabschnitte).
Weichen steuere ich mit Handelsüblichen Weichenantrieben über den I2C und Relais. Soweit läuft eigentlich alles Zufriedenstellend.
Nun bin ich auf die Idee gekommen das sich Weichen viel komfortabler steuern ließen.
Die jetzige Situation. Die Weichen liegen an oft sehr unzugänglichen Stellenund der Antrieb muß dann von unten genau justiert werden. Eine sehr fummleliege Sache.
Mein Gedanke, ich lege die Weichenzungen etwa in Mittelstellung und setze von unten einen Servo in Mittelstellung direkt darunter. Nun könnte ich den Servo schrittweise so weit nach rechts und links fahren bis die Weich die Endlage erreicht hat. Diese Werte dann abspeichern und fertig.
Ich bräuchte also einen PIC, 2 Eingänge um den Servo(Weiche) später anzusteuern (über I2C oder direkt als Ports), 2 oder 3 Eingänge für das Programmieren der Weichenstellung, das könnte über Taster laufen.

Ich habe mal ein Blockschaltbild gemacht was alles deutlich macht.

http://www.bildermonster24.de/bild.php/3270,picweichensteuerung0GV6L.jpg

Nun habe ich auch keine Ahnung von PICs, Assembler, C. Ich programmiere mit Visual Basic und Delphi, also für PICs nicht brauchbar. Aus diese Grund habe ich es mit FlowCode probiert, da bin ich aber auch nicht weiter gekommen.
Erfahrungen habe ich mit TTL-Technik und alles was dazu gehört.

Nun meine Frage kann mir jemand helfen so etwas zustande zu bringen.

Gruß Rolf

the_Ghost666
10.09.2008, 21:09
Moin,
na das klingt ja nach einem netten Projekt. Wolltest du die Servoendlage per Hand justieren, also Daten senden, schauen ob Endlage erreicht, noch eine Position usw., oder wolltest du es elektronisch erfassen? Musst acht geben, dass der Servo nicht die Weiche demoliert, oder in der Endlage immernoch versucht gegenzustellen. Man könnte das vielleicht sogar über den Motorstrom des Servos selbst erfassen, das wäre sicher eine bequeme Lösung.
Assembler ist leider einiges anders als Hochsprachen, deswegen wirst du etwas Mühe investieren müssen, aber wenn das Grundverständnis da ist, geht auch Assembler lernen schnell. Super Seite zu dem Thema ist www.sprut.de ,alles was ich über Controller weiß hat dort begonnen.
Es gibt soweit ich weiß einen einzigen Compiler, der Basic für den PIC bereitstellt. Du müsstest mal im Forum oder bei Google suchen, PICBasic oder so, meine ich.

Ich kann mittlerweile mit Atmel und Pics umgehen, und würde dir wegen Basic zu einem Atmel raten. Aber ein Pic kann das auch.

Ich würde gerne genaueres zu deinem Plan erfahren. Bis dahin erstmal meine Idee:

Du brauchst also erstmal ein I2C Interface. Wenn du eine Console oder so dafür hast, bestens, wenn nicht, kannst du dir auch ein Handteil bauen, welches die Daten einfach generiert, sobald du z.B. die Adresse angegeben hast, um die Weiche zu programmieren.

Die Schaltung muss selber folgendes haben: Ein I2C Interface, entweder in Software oder als Hardware, viele PICs haben bereits ein Hardwareinterface.
Etwas EEPROM, um die Positionen abzuspeichern, haben auch fast alle PICs.
Einen freien Pin für den Servo, um dort in Software die Signale zu generieren. Die PWM Hardware von Pics ist weniger geeigent um direkt Servosignale zu erzeugen.
Wenn du eine Rückmeldung der Weiche möchtest, dann entweder noch 2 freie Pins für Endlagenschalter, oder ein AD-Wandler um den Motorstrom zu messen. In dem Fall muss auf der Platine ein kleiner Shunt sein, um den Motorstrom in einen Spannungsabfall zu wandeln.

Kennst du das Format um die Weiche anzusprechen, d.h. welche Daten die Schaltstellung links und welche die Schaltstellung rechts auslösen?

Das ganze muss dann noch mit Spannung versorgt werden, 5V und etwa 300mA, schätze ich, je nach Servo und dessen Stellung.

the_Ghost666
10.09.2008, 22:03
Ich hab mal etwas gesucht,
ein geeigneter PIC wäre z.B. der 16F628A, zu bekommen bei Reichelt oder halt als Sample direkt bei Microchip (sogar kostenlos), aber ohne AD-Wandler, nur mit Komparator.

Ach da hab ich doch glatte den Link zu dem Compiler vergessen
http://www.melabs.com/products/pbc.htm

Rolf-W
11.09.2008, 11:04
Hallo

Danke für deine Antwort.

Ich weiß ja nicht ob ich richtig liege. So wie ich gelesen habe schaltet ein Servo bei einem Impuls von 1 oder 2 ms in die entsprechende Richtung, eine Position weiter.
Die Erfassung beim Justieren sollte mit meinen Augen erfolgen, aus den Weichen sollen möglichst keine Korkenzieher werden. ;-)
Zum Justieren würde ich das mit Hand machen wollen(Taster). Dadurch wären dann die Schaltschritte von von Endlage zu Endlage bekannt. Dies könnten dann im EEPROM, sowie auch die jeweilige Endlage (rechts/links) abgespeichert werden.

Um den Verlust an Weichen bei meinen Versuchen zu begrenzen, werde ich dafür Attrappen verwenden. ;-)

Über die beiden Schaltports, welche von meiner Software angesteuert werden, würde nun die Weiche gesteuert, wozu erst der Wert aus dem EEPROM ausgelesen und dann ausgeführt werden.
Ich steuere meine Hardware zwar über den I2C, aber ich würde in diesen Fall dazu tendieren nicht den I2C zu verwenden, das würde mich mit Sicherheit bei der Programmierung der PIC/Atmel überfordern.

Da du mir zu einem Atmel rätst, werde ich mich da mal bei Google etwas schlauer machen, Basic wär für mich ein entscheidendes Argument.
Zu PICs bin ich nur gekommen, da mir ein entsprechendes Buch in die Hände gefallen war. "Messen, Steuern und Regeln mit PIC-Mikrocontrollern"

Wenn jemand ein gutes Buch für Amtel-Mikrocontroller empfehlen kann wär ich sehr dankbar. Da ich noch am Anfang stehe, bin ich für jede Richtung offen.
Erfahrungen habe ich bisher mit der C-Control gemacht, die C-Control ist für diese Aufgabe nicht so geeignet. So das ich mich neu orientieren muß.

Kannst du mir einen Programmer für einen Atmel empfehlen, der sich ohne sehr großen Aufwand aufbauen lies? Ich werde da aber auch mal die Such-Funktion verwenden, hier wurde mit Sicherheit schon etwas geschrieben.

Gruß Rolf

the_Ghost666
11.09.2008, 11:30
Moin,
ach mist, jetzt ist es wieder passiert, dass ich jemanden von den Pics vergraule *G* Lange Zeit hab ich fast militant zu denen Gestanden, weil ich immer nur hörte "AVRs sind besser", mittlerweile sehe ich aber auch objektiv die Vorteile.

Also BasCom wäre der AVR-Basic-Compiler, dort gibt es wohl die meisten Funktionen, die du brauchst schon vorgefertigt (I2C, sogar Servomotoren meine ich, Warteschleifen..).
Es gibt günstige Programmer, die mit freier Software laufen, für den Parallelport lässt sich das mit einem TTL-Gatter und einem Stück Platine+3 Kondensatoren, Widerständen usw. aufbauen, kosten von unter 10€. Dann gibt es auch noch die USB-Versionen, z.B. MySmartUSB oder so, von MyAVR. Ich selbst hab für AVRs das Atmel AVR ISP MKII, ist schon eins der teuersten mit 45€, ist aber voll in die Entwicklungsumgebung von Atmel, AVR Studio integriert.
BasCom bringt ne eigene Entwicklungsumgebung mit und nutzt meine ich externe Programme wie PonyProg um den AVR zu brennen.

Schau mal im Roboternetz Shop http://www.shop.robotikhardware.de oder bei http://shop.embedded-projects.net
Da gibts Platinen für einen ISP Programmer ab 6,60 oder so, müssen noch mit Teilen für 1,50 bestückt werden und in ein Parallelportgehäuse, fertig.

Der Vorteil für dich wäre noch, dass AVR mit Bascom sehr oft auf deutschen Seiten besprochen wird und es viele Leute gibt, die dir helfen können. PICs sind häufiger englischsprachig vertreten.

Die I2C Programmierung ist nicht wild, da PICs und AVRs Hardwaremodule haben. Du musst diese nur nach Datenblatt konfigurieren, eben wie du es willst, und kannst danach Daten schicken, indem du einfach das Byte in ein Register schreibst und ein Bit setzt.
Empfangen wird ebenfalls per Hardware, du musst nurnoch regelmäßig abfragen, ob es schon ein neues Datenbyte gibt, oder kannst auch einen Interrupt aktivieren, der das automatisch beim Eintreffen behandelt. Das ist wirklich nicht schwer und wird auch in den Datenblättern gut beschrieben, ansonsten gibts hier ne Menge netter Helferlein.

Die Steuerung des Servos funktioniert so, wie du sagtest, alle 20ms wird ein High-Pegel zwischen 1-2ms länge gesendet. 1,5ms ist Mittelstellung. Du kannst also einfach eine Warteschleife machen, die den Pin High schaltet und abhängig von einer Variablen die gewünschte Zeit abwartet und danach wieder Low schaltet. Das muss sich halt alle 20ms wiederholen. Den Wert der Variablen kannst du dann ins EEPROM schreiben.
EEPROM schreiben ist nicht ganz so simpel (egal ob PIC oder AVR), da es einen Sicherheitsmechanismus gibt. Du musst zum schreiben eine bestimmte Befehlsreihenfolge einhalten. Das findest du aber auch im Datenblatt, für Assembler, kannst es einfach rauskopieren und in den Code einfügen. Bascom hat wieder fertige Routinen, die du aus einer Bibliothek nimmst.
Würd mich freuen weiter von dem Projekt zu hören, und was du nun machen willst.
MfG
Björn

Rolf-W
11.09.2008, 14:04
Hallo Björn

Ich habe nun erstmal eine Menge zu lesen, dabei werden mit Sicherheit neue Fragen auftauchen. Über meine Ergebnisse werde ich berichten.
Bis dahin bedanke ich mich schon mal für die vielen Anregungen.

Gruß Rolf

radbruch
11.09.2008, 14:16
Hallo


Nun könnte ich den Servo schrittweise so weit nach rechts und links fahren bis die Weich die Endlage erreicht hat.
Ich würde vorsichtshalber die Kraft mechanisch begrenzen, z.B. mit einer Feder zwischen Servo und Weiche. Das würde die kleinen Ungenauigkeiten der Servos kompensieren und die Weiche vor Zerstörung schützen.



Man könnte das vielleicht sogar über den Motorstrom des Servos selbst erfassen, das wäre sicher eine bequeme Lösung.
Das habe ich mal mit einem 5€-Servo ohne zusätzliche Bauteile versucht. Das war zwar mit einem AVR, das Prinzip sollte aber auch mit einem PIC funktionieren:
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=37927&highlight=servosensor

Gruß

mic

ossy
13.09.2008, 21:20
Hallo,

die Begrenzung der mechanischen Kraft mit einer Feder würde ich vorsichtshalber vorziehen, wie es mic beschrieben hat.

Wenn du in Basic die Programme schreiben willst, und erst mal Erfahrungen sammeln willst, dann empfehle ich dir die PICAXE-Chips.
Da gibt es ein einfaches Starter-Set, und du kannst mit Basic arbeiten.

Es gibt bei der PICAXE auch Befehle die eine einfache Servo-Steuerung
ermöglichen.

LINK: http://www.roboter-teile.de/Shop/themes/kategorie/detail.php?artikelid=61&source=2

http://www.roboter-teile.de/modules.php?name=Forums

http://www.picaxe.com

Gruß Wolfgang

Rolf-W
13.09.2008, 21:53
Hallo mic und Wolfgang,

das verwenden einer Feder ist selbstverständlich.
Bei meinen jetzigen Antrieben habe ich auch Federdraht um die Kraft auszugleichen.



Auch bietet der Programm-Editor die Möglichkeit, Programme grafisch als Programmablaufplan zu entwerfen und dann in den Controller herunterzuladen

Hört sich an wie FlowCode, wurde in der Zeitschrift Elector vorgestellt und es wurde auch in einigen Beiträgen verwendet.

http://www.elektor.de/Uploads/Files/Product/TEFLC-60-3_1.pdf

Gruß Rolf

the_Ghost666
13.09.2008, 22:04
Achja, die PICAXE hab ich ganz vergessen. Wenn ich mich nicht täusche, sind das normale PICs mit vorinstalliertem Bootloader und einem "Basicinterpreter". Hab mich aber nie damit beschäftigt. Ich fand die Preise immer etwas hoch im Vergleich zu nackten Chips.
Oder sind das PICs die du nurnoch per RS232 steuerst und garnicht mehr programmierst?

Dolfo
14.09.2008, 19:33
Hallo,

darf ich fragen warum Du einen Servo nehmen willst und nicht einfach einen Hubmagnet wie z.B. bei www.roboter-teile.de oder www.tremba.de? Das erschiene mir als günstigere und wesentlich einfachere Möglichkeit - aber vielleicht sehe ich die Argumente nicht, die gegen Hubmagnet und für Servo sprechen.

Grüße,
Dolfo

the_Ghost666
14.09.2008, 21:13
Stimmt eigentlich, vor allem, wenn du eh mit Federn arbeiten willst, so eine Weiche hat ja eh nur 2 Stellungen, und die sind an den Endanschlägen. Man kann natürlich weicher stellen, wenn man einen Servo nimmt.

Rolf-W
15.09.2008, 14:27
Hubmagnet, das ist das was an Weichen von den Herstellern angeboten werden, geht gut keine Frage. Will man die unterirdisch anbauen wird es schon schwieriger, es geht ist aber Mist (ist aber Ansichtssache). Von vielen Bastlern werden darum Motorantriebe angebaut, da gibt es zwei Möglichkeiten. Handelsübliche, sind recht preiswert arbeiten sehr zuverlässig ist aber eine tüchtige Fummelei. Diese verwende ich seit vielen Jahren. Nur haben die einen weiteren Nachteil, sie schalten mit einem ziemlichen Knall schlagartig um. Oder man baut selber einen Antrieb, der alles so macht wie man möchte. Wird aber eine mords Arbeit wenn man viele Antriebe braucht.
Da ist dann aber der Servo das beste, ein Stelldraht lässt sich einfach anbringen die Geschwindigkeit des Stellvorgang kann ich selber bestimmen und wenn ich das so hinkriege wie ich mir das denke entfällt die Fummelei beim justieren, so wie ich das ganz oben beschrieben habe.
Ich könnte so etwas auch als Handelsüblichen Servo-Antrieb kaufen, aber kaufen kann jeder. Dann hätte ich auch meine gesamte Steuerung kaufen können, so habe ich das alles selber gemacht. Macht Spaß, ist preiswerte und ein wenig stolz macht es auch wenn es dann irgendwann klappt.
Wird schon. ;-)

Gruß Rolf

jeffrey
15.09.2008, 14:33
hi,
außerdem sieht der hubmagnet nicht vorbildlich aus. hast du schon mal geshen wie ne weiche schaltet? die bewegt sich ganz langsam, und schaltet nicht ruckartig.
mfg jeffrey

the_Ghost666
15.09.2008, 14:53
Machen die Originalweichen das eigentlich hydraulisch? Bin mir nie sicher, was ich da sehe, wenn ich am Bahnhof stehe, ob Zylinder oder nur ne Schubstange die an nem Getriebe hängt.
Hast du denn schon weitere Infos wie du es realisieren würdest?

Rolf-W
15.09.2008, 16:30
Bei der Bahn werden Weichen über Seilzüge oder mit E-Motoren angetrieben. Bei langen Weichen sind 2 oder mehr Motore angebaut, um die Weiche zu stellen.

Gruß Rolf

Rolf-W
15.09.2008, 16:38
Zitat

Hast du denn schon weitere Infos wie du es realisieren würdest?

Ich bin dabei, bei Sprut erst mal zu lernen.
http://www.sprut.de/electronic/pic/assemble/assembler.html
Einen Servo habe ich mir auch mal besorgt, ich möchte erstmal mit meinem PIC16F627 versuchen weiter zu kommen. Dieser gehört zu dem PIC®-Programmer und Experimentierkasten, geht alles etwas langsam aber ich gebe nicht auf. Zwischendurch muß ich aber auch noch mit meinem Boss seiner 1:1 Eisenbahn spielen ;-) .

Gruß Rolf

oberallgeier
15.09.2008, 16:40
Machen die Originalweichen das eigentlich hydraulisch ...Anfangs machte man das brutal mit Handkraft - es war ja nur ein Abzweig da, ohne Weichenzunge, und das Fahrzeug wurde in die "richtig Richtung" gezogen-gestemmt-geruckelt. Danach kam das, was schon der heutigen Weiche ähnlich war. Die Verstellung der Zunge erfolgte händisch: der Beruf des Weichenstellers, der auch gelegentlich mitten auf der Strecke lebte . . . .

Später wurden die Weichen mit Kabelzügen bedient vom Bahnhof bzw. Stellwerk aus. Dort hatte man meterlange Hebel mit einem Schwenkwinkel von rund 180°. Das ging so bis in die Gegenwart. Mittlerweile geht das mit allerlei Antrieben - und Rückmeldung, damit das Gleisstellbild im zentralen Stellwerk auch der Wirklichkeit entsprechen kann. Hydraulik ist dabei als elektrohydraulischer Antrieb bekannt - aber was soll das: erst Öldruck machen und dann nur einen Aktor verschieben. Das geht wohl einfacher mit einem elektromechanischen Antrieb. Na ja, vielleicht macht Hydraulik bei langgezogenen Lemniskaten oder Klothoidenweichen Sinn - da werden gleich mehrere Teilstücke verfahren. Aber dafür bin ich nicht Fachmann.

the_Ghost666
15.09.2008, 18:56
langgezogenen Lemniskaten oder Klothoidenweichen Sinn - da werden gleich mehrere Teilstücke verfahren. Aber dafür bin ich nicht Fachmann.

LOL ja ne ist klar, ich weiß nichtmal wie man das aussprechen soll *G*


So, aber nochmal zurück zu der Aufgabe, sprut ist wirklich ne gute Geschichte um sich die PICs anzulernen. Ich glaube ich hab nen bekannten, der damals auch mit diesem Conrad-Brenner angefangen hat, hab ihn übers Web supported, als mal die gewohnten Anfängerfallen zuschnappten. Also wenn du bei den ersten Schritten nach Sprut noch Probleme hast, findet sich hier sicher ein offenes Ohr.

Rolf-W
09.10.2008, 23:41
So nun möchte ich berichten wie es bei mir weitergegangen ist. Ich habe es geschafft das sich mein Servo bewegt, :-). Ihr werdet sagen na und was ist dabei, für mich erstmal ein tüchtiger Forschritt.
Nun habe ich von einen Bekannten einen freundlichen Tipp bekommen, mir die Zeitschrift EAM 8/2007 zu besorgen, das habe ich gemacht und bin begeistert.
http://www.eam-magazin.de/
Habe ich dort eine Schaltung gefunden für ein programmierbares Servo. Es werden der Stellweg und die Stellgeschwindigkeit eingestellt und gespeichert.
Die Bestellung für Reichelt ist abgeschickt und demnächst wir die Schaltung aufgebaut.
Das Programm hätte meine Fähigkeiten bei weiten überfordert. Versuche werde ich aber auch weiterhin machen. Dümmer wird man dabei nicht.
Für Interessierte hier kann man das Programm herunterladen.
http://www.eam-magazin.de/download/PIC_55_(8-07).ASM

Gruß Rolf

oberallgeier
10.10.2008, 09:53
Ein interessantens Programm :-k :?: Ich bin schon auf der ersten Codeseite über ein paar Initialisierungen gestolpert:

MIN equ 0C ; Wert für unteren Anschlag
MAX equ 0D ; Wert für oberen Anschlag
MIN2 equ 0E ; MIN/2
MAX2 equ 0F ; MAX/2Das wird zwar unten einjustiert, aber ich vermute, dass eine saubere Programmierung schon die Vorgabewerte einigermassen sinnvoll angeben würde - - und z.B. die Hälfte ist üblicherweise weniger als das Ganze.

Trotzdem: viel Glück und Erfolg

RobbyFan
27.06.2010, 15:11
Hallo,
gibt es irgend ein Tutorila für Flowcode4 AVR ????

MfG Marcel