• Hallo TT-Modellbahner, schön, dass du zu uns gefunden hast.
    Um alle Funktionen nutzen zu können, empfehlen wir dir, dich anzumelden. Denn vieles, was das Board zu bieten hat, ist ausschließlich angemeldeten Nutzern vorbehalten. Du benötigst nur eine gültige E-Mail-Adresse und schon kannst du dich registrieren.
    Deine Mailadresse wird für nichts Anderes verwendet als zur Kommunikation zwischen uns.
    Die Crew des TT-Boardes

Servosteuerung

Peo

Foriker
Beiträge
490
Reaktionen
2
Ort
Baden-Württemberg
Hallo

ich habe nun einiges hier und auch im www gelesen. Nur bin ich mir nicht sicher, ob ich das richtig verstanden. Bitte berichtigt mich, wenn ich mich irre:

1. Servos brauchen alle 0,02 sec einen Steuerimpuls.
2. Ist der Impuls länger als 1,5 ms, bewegt sich der Servo in die eine Richtung
3. Ist der Impuls kürzer als 1,5 ms, bewegt sich der Servo in die andere Richtung
4. Ist der Impuls 1,5ms, bewegt er sich gar nicht.

Und nun bleibt noch eine Frage:

Wie genau müssen die 0,02 s für die Taktgabe eingehalten werden?

mfg

Peo
 
Ist so nicht ganz richtig. Ein Servo hat nicht nur zwei Endpunkte sondern kann jede beliebige Position einnehmen (ist ja eigentlich für Modellfernsteuerungen).
Die Position die der Servo einnimmt ergibt sich aus der Impulslänge. Laut Standard muß der Impuls 1ms bis 2ms lang sein. Dann folgt einen Pause von 20ms,
wobei dieser Wert unkritisch ist. Es läßt sich auch eine Pause von 30ms verwenden, je länger die Pause ist um so langsamer regelt der Servo die Position nach.
Kurz gesagt bedeutet 1ms unterer Anschlag oder 0° 1,5ms Mittelstellung oder 90° und 2ms bedeuten oberen Anschlag oder 180°. Es kann aber jeder beliebige
Wert von 1ms-2ms verwendet werden, der Servo stellt sich dann auf den daraus resultierenden Winkel ein und regelt diese Position aus. Wenn man versucht
den Servo per Hand zu drehen stellt er sich wieder in die Position zurück, solange der Impuls noch anliegt.
Ich hoffe ich habe mich verständlich ausgedrückt, wenn nicht frage einfach noch mal.
 
*Gordon zustimm*
Man sollte allerdings beachten das eine zu langsame Impulsfolge eine Art "pumpen" des Servos zur Folge hat. Soll heißen das er mit fühlbaren Schlägen in Richtung Sollposition zurückrattert.
Ist die Impulsfolge zu kurz dann erzeugt der Regelkreis Fehler und der Servo lässt sich nicht mehr ansteuern.
Nach meinen Erfahrungen machen Frequenzen von rund 40 bis knapp 90 Herz keine Probleme.
Einen Punkt hätte ich noch:
Die Regelkreise reagieren meist sehr zickig wenn sich mit der Impulslänge gleichzeitig die Frequenz ändert.
 
Danke erstmal für die Informationen.

Die Frage nach der Genauigkeit der Zeitabstände diente zur Klärung, wie genau ein PIC programmiert werden müsste. 0,02s +- ein paar ms zu erreichen, dürfte keinerlei Probleme darstellen.

Um dann für einen Weichenantrieb die richtige Impulslänge herauszufinden,müsste ich quasi den Servo mit 1ms erstmal auf 0 Grad bringen und dann schauen, wie weit er sich drehen muss, um die Weiche in die gegenüberliegende Stellung zu bringen.

Wenn ich, aus dem oberen Beispiel abgeleitet, also einen Impuls von 1,75 ms anlege, dürfte der Motor bei 135 Grad stehen bleiben und sich, egal wie lange ich den Impuls anlege, nicht weiter drehen. Sehe ich das richtig?

Da in einem anderen Thread geschrieben wurde, dass das Impulssignal vor der Betriebsspannugn anliegen sollte um Störungen zu vermeiden, wäre also eine Schaltung der Betriebsspannung durch den PIC über eine Darlington-Transistorschaltung, die nach dem Impulssignal aktiviert wird, sinnvoll, oder?

Somit bräuchte ich 5 Pins pro Servo ->
- Taster für Stellung 1
- Taster für Stellung 2
- Ausgang für Impuls
- Ausgang zum Schalten der Betriebsspannung
- Ausgang für LED zwecks Rückmeldung über Servostand

mfg

Peo
 
Das mit dem Stellbereich (180° bei 1ms-2ms) ist nur ein theoretischer Wert. Um 180° in der Praxis zu erreichen mußte bei meinem Servo schon eine
Impulsbreite von 0,9ms - 1,1ms angelegt werden, ist sicher von Servo zu Servo verschieden.

Nun zu deinen Fragen. Der genaue Wert der Pause ist nicht so kritisch nur sollte er nach Möglichkeit immer gleich lang sein. Das ganze Timing lässt sich
aber mit Timerinterrupts leicht lösen.

Das mit dem Impuls hast du richtig verstanden. Wenn der Servo seine Position hat kann der Impuls auch komplett abgeschaltet werden. Er läßt sich
dann aber von Hand drehen, bzw. wenn die Gegenkraft zu groß ist dreht er sich wieder ein Stück zurück. Die Eigenhemmung eines Servos ist aber durch
die starke Getriebeübersetzung ziemlich groß.

Die verzögerten Zuschaltung der Servospannung solltest du nicht überbewerten. Die Servos zucken nur kurz an. Das passiert aber eben nur einmal
beim Einschalten der Anlage. Wen das stört der muß halt eine Verzögerung realisieren.

5 Pins brauchst nicht pro Servo. Es kommt drauf an wie viele Servos du mit einem Controller steuern willst. Zum Umschalten reicht ein Taster aus.
Bei Tastendruck wird halt in die andere Lage umgeschaltet, oder du schließt nen Kippschalter an L entspricht dann der einen und H der anderen Endlage.
Die Spannungszuschaltung brauchst du auch nur einmal für alle Servos. Allerdings würd ich für jede Endlage einen Ausgang vorsehen zur Ansteuerung von
Relais zur Herzstückpolarisierung. Und dann brauchst du noch Eingänge zur Programmierung der Servoparameter.
Bei meinem Controller (Atmega 8515) sind die Anschlüsse folgendermaßen belegt. Es stehen 35 Anschlüsse zur Verfügung die wie folgt aufgeteilt sind:
8 Servoimpuls für 8 Servos, 8 untere Endlage, 8 obere Endlage, 8 hier ist eine Tastaturmatrix mit 16 Tasten angeschlossen, 1 DCC Eingang,
1 verzögerte Spannungszuschaltung, 1 LED (für Programmiermodus)

Warum willst du eigentlich das Fahrrad noch mal neu erfinden. Holgi hat doch hier schon eine Lösung mit PIC`s vorgestellt.

Viele Grüße aus Brandenburg
 
...Warum willst du eigentlich das Fahrrad noch mal neu erfinden. Holgi hat doch hier schon eine Lösung mit PIC`s vorgestellt.

Viele Grüße aus Brandenburg

@Gordon
Das ist der Forscherdrang und wenn man etwas selbst entwickelt, weiss man hinterher auch wie so etwas funktioniert.
Das geht mir auch so.
@Peo
Du solltest dir mal meine Schaltungen dazu ansehen, z.b. wie ich die Spannung für die Servos schalte.
Ich lasse den PIC mit 4 MHz internem Takt laufen, die Genauigkeit ist völlig ausreichend und schalte nach Erreichen der Endlage auch den Impuls ab, er ist nicht mehr nötig.

Holge
 
Hallo

Holgi hat den Nagel auf den Kopf getroffen. Ich möchte das selber nachvollziehen können. Außerdem reizt mich die Herausforderung.
Wenn man etwas selbst entwickelt, versteht man die Abläufe, so dass man auch, wenn es mal notwendig ist, dieses Wissen für andere Problem anwenden kann.

@Holgi
Das Schaltbild ist bei mir schwer zu erkennen. Deswegen kann ich das momentan noch nciht so ganz nachvollziehen. Aber das werde ich schon noch hinbekommen.

mfg

Peo
 
Hallo Peo,

du kannst gern Fragen stellen, dafür haben wir das Board.
Das Schaltbild wird bei dir evtl. verkleinert dargestellt, speichere es über rechte Maustaste und du hast es in voller Auflösung.

Holger
 
Ich nutze MPLAB und verwende dabei Assembler.

Allerdings bin ich noch nicht sonderlich versiert, da ich mcih langsam vorarbeite. Aber das wird schon noch. Für ordentliche LED-Effekte reicht es schon :)
Die Ansteuerung eines Servos wäre mal eine deutlich forderndere Aufgabe, der ich mich doch gerne widmen würde.

mfg

Peo
 
Hallo Peo,

ich nutze auch MPLAB.
Empfehlen kann ich aber auch das Basic von www.oshonsoft.com
Damit mache ich oft kleinere Programmteile und "mopse" mir das erzeugte ASM File. Das Basic ist nicht kostenlos, hat aber z.b. einen Simulator mit dem man recht komfortabel einfache Programme debuggen/simulieren kann.
In letzter Zeit benutze ich es aber immer weniger.

Holger
 
Nur Mut das wird schon, ich programmiere zwar auch in Assembler aber bei PIC`s kann ich dir da nicht wirklich helfen.
Ich hoffe du hälst uns auf dem laufenden mit deinen Fortschritten.
 
@Holgi

Wenn ich deinen Plan richtig lese, werden die Pics durch einen Spannungsregler versorgt und die Servos durch einen zweiten Spannungsregler.

Was mich etwas verwirrt ist Folgendes: Du hast 3 mal 3 Klemmen für die Servos. Die jeweils untere Klemme ist Masse, die mittlere +5,1V und dann müsste die obere ja der Steuerimpuls sein.
In deinem Diagramm kommendann die Impuls von RA0, RA1 und RA3. Soweit alles klar.

Aber wofür ist der ULN-Chip? Um die Relais zu treiben?
Ich schätze, du hast für jeden der sechs Tastereingänge einen Optokoppler verwendet?
Wieso hat aber der obere Optokoppler eine Verbindung zu RA5 und Vdd (mit 4,7KOhm dazwischen)?

mfg

Peo
 
Hallo Peo,

ja richtig 2 Spannungsregler. Einer nur für die PIC's, der andere für die Servos mit etwa 5,1 Volt.
Die Trennung schützt einerseits die PIC's vor Strom/Spannungsspitzen von den Servos, zum anderen lässt sich die Spannung für die Servos recht komfortabel schalten.
Von welcher Schaltung sprichts du ? DCC oder Analog ? Ich vermute mal analog.
Die 3 Anschlüsse sind die Servos, Masse, Betriebsspannung und der Impuls.
Der ULN2803 ist für das Relais. Ja der ist etwas oversized, aber praktischer zu löten als 3 Transistoren + Vorwiderstände +Freilaufdioden.
Jeder Eingang hat bei mir einen Optokoppler.
Der obere Optokoppler geht an RA5, der Eingang hat keinen internen PullUp Widerstand, deshalb der externe Widerstand.

Holger
 
Die freien Anschlüsse des ULN könnte man für weitere Rückmeldeanschlüsse nutzen... (nur mal so als Einwurf)

@Peo:
Wenn Du Basic halbwegs beherrschst und vor den moderneren AVR's nicht zurückschreckst sei Dir Bascom empfohlen. Etwas preiswerter sind sei meistens auch.
Bascom besitzt extrem viele Basicbefehle und stellt auch die Möglichkeit zur Verfügung Assembler und Basic zusammen zu verwenden.
 
@Holgi

Ja, ich meinte die analoge Schatlung, da mir digital schalten irgendwie zu kompliziert erscheint, zwar nicht in Bezug auf die Schaltung, aber bei einer Anlage mit z. Zt. 25 geplanten Weichen glaube ich, dass die Bedienung über ein Gleisbild mit Tastern einfach schneller geht als jede Weiche einzeln über einen Decoder anzuwählen.
Ich habe auch nicht vor, die Anlage mit einem PC zu steuern. Da sollen meine Söhne drauf rumfahren können. Die haben richtig Freude am Zug fahren, sogar auf dem popligen Gleisoval aus dem Start-Set.

@Peo:
Wenn Du Basic halbwegs beherrschst und vor den moderneren AVR's nicht zurückschreckst sei Dir Bascom empfohlen. Etwas preiswerter sind sei meistens auch.
Bascom besitzt extrem viele Basicbefehle und stellt auch die Möglichkeit zur Verfügung Assembler und Basic zusammen zu verwenden.

Basic kann ich wahrscheinlich nach ein paar Stunden wieder recht gut. Ich habe früher mal als Jugendlicher viel damit programmiert, da der einzige Rechner, der zur Verfügugn stand, der KC 85 war. Mit 32KB extra-Ram !!!!!

Aber ich bleibe erstmal bei den PICs, weil ich für deren Programmierung die Hardware habe und das ganz gut funktioniert. AVRs mögen evtl. besser sein, nur fehlt mir die Lust, mich in ein neues System einzuarbeiten.

Was ich noch spannend finde, da ich dies noch nicht kann, ist die Frage, wie ich digitale Signale, die nicht nur ein Bit haben, mit dem PIC verarbeite. Aber da gut Ding bekanntlich Weile haben soll, wird dies schon noch in den kalten, trostlosen Winterabenden hier am Fuße der Schwäbischen Alb, also quasi in der Pampa, eine weitere Beschäftigungsmöglichkeit sein.

mfg

Peo
 
Hallo Peo,

wenn ich neu anfangen würde würde ich auch AVR's nehmen. Nun hab ich aber den ganzen Krempel mit PIC's angefangen, also bleibe ich dabei. Obwohl ich auch schon AVR's gebrannt habe.
Schau dir mal das Basic an, was ich weiter oben beschrieben habe.
Ich denke damit kommst du gut zurecht.
Es gibt glaub ich eine 30 Tage Version gratis.
Gerade durch den Simulator /Debugger kann man zeitunkritische Probleme gut testen auch ohne die Hardware vor Ort zu haben.
Mir hat das an Anfang viel geholfen, mich in die doch etwas seltsam anmutende Assemblersprache des PIC einzuarbeiten. Da war ich von Z80, Z8 und 6502 anderes gewohnt ....

Holger
 
@holgi:
Bascom hat auch nen Simulator eingebaut der sämtliche Timingprozesse abarbeiten kann.

...Aber ich bleibe erstmal bei den PICs, weil ich für deren Programmierung die Hardware habe und das ganz gut funktioniert...

Ein ISP-Programmer (In-System-Programming) für AVR's besteht minimal aus einem 74373 sowie einer extra Stromversorgung mittels 7805 und kostet Dich mitsamt Nullkraftsockel und Platine höchstens zehn Euro. Den kannst Du dann ganz bequem an den Druckeranschluß anschließen. Schaltpläne gibts davon zuhauf im Netz.
Es gibt auch Bauanleitungen ohne Puffer (74373) zwischen µC und LPT-Port. Davon rate ich aber dringends ab weil man dabei Gefahr läuft sich bei einem Fehler in der Schaltung gleich den ganzen Druckerport kaputt zu machen.
 
Ah, ich glaube, ich habe die Steuerung der Betriebsspannung der Servos verstanden. Gestern erschien mir das noch ominös, deswegen habe ich das auf heute vertagt.

Du schaltest die Spannung ab, in dem du RA2 auf "Input" setzt, so dass der Transistor keine positive Spannung mehr an der Basis hat, da die +5,1V in den RA2 fließen und nicht über den 2,2K Wiederstand zum Transistor.
Um den Strom einzuschalten, wird RA2 auf "Output" gesetzt, so dass Strom fließt.

Mit ist allerdings noch unklar, wozu der 4,7K Widerstand zwischen RA2 und dem ersten Spannungsregler ist.

mfg

Peo
 
Na doch noch nicht ganz....
RA2 ist immer Augang,
"high" --> Transistor durchgeschaltet--> Servospannung aus
"Low" --> Transistor gesperrt --> Servospannung ein

Der Widerstand nach + steuert den Transistor während der Initialisierung des PIC (also während der PIN noch Eingang ist) durch, danach dieht er als PullUp für den Ausgang.
Der Spannungsregler wird also beim durchschalten des Transistors quasi ausgeschaltet.(In Wirklichkeit auf etwa 1 Volt gesetzt, was aber einem Ausschalten entspricht)

Holger
 
Ja, da habe ich mich unpräzise ausgedrückt. Asche über mein Haupt.

Du schaltest RA2 als Ausgang und danach passiert dann das :)
Du setzt halt zum Einschalten bcf PORTA,2 und zum Ausschalten bsf PORTA,2.

Jetzt richtig?

Ansonsten muss ich passen. Die Schaltung beim 2. Spannungsregler ist mir noch zu hoch. Das liegt aber vielleicht daran, dass ich mich mit den LM noch nicht intensiv auseinander gesetzt habe.

mfg

Peo
 
Den Transistor erstmal als Schalter sehen, der von RA2 geschaltet wird.
Der LM317 ist ein einstellbarer Spannungsregler. Je nach dem Spannungsteiler an Pin1 wird eine Ausgangspannung eingestellt.
Mit dem Spannungsteiler 220/680 Ohm werden genau diese 5,1 Volt eingestellt. Mit dem Transistor bringe ich jetzt diesen Spannungsteiler "durcheinander" (durch "überbrücken" des Widerstandes 680 Ohm mit dem "Schalter" Transistor) und der LM317 regelt entsprechend dem verändertem Spannungsteiler nach und das ist eine geringe Spannung.

Holger
 
Okay, jetzt habe ich das auch verstanden. Das erklärt auch, wie du auf die 5,1V kommst. Vor allem aber, warum du nicht einen zweiten 7805 verwendet hast, da man den nicht runter regeln. Geniale Sache!

Die Gleichung für die Spannung ist ja recht übersichtlich.

Und schon wieder was gelernt! So macht das Spaß!

mfg

Peo
 
Hallo Zusammen,

ich war heute auf der "Kölnmesse" und habe etwas gehört von einem Hersteller der Servomotoren mit Platine für die Digitalsteuerung anbietet.

Es soll sich um MB oder MD Elektronik handeln. Leider habe ich bei meinen Recherchen die Fa. noch nicht ausfindig machen können.

Weiß einer von Euch etwas davon?

Gruß Florian
 
Zurück
Oben