Hallo,
ich verwende im Modellbau Servos um Tore zu öffnen und schließen. Das
funktioniert auch - fast.
Da ich dem Servo durch die Impulsdauer einen Winkel vorgebe wird dieser
auch mit voller Leistung angefahren.
Jetzt mein Problem. Es kann sein, dass zwischen Ausschalten (Spannung
weg) und einschalten die Position des Servos manuell verändert wird (Tor
geöffnet). Mein Programm geht aber davon aus, dass das Tor zu ist. Also
wird beim Bestromen die Tür mit voller Leistung geschlossen. Unschön und
laut, wer weiß wie lange die Mechanik das mitmacht.
Kann ich den Servo nach dem Einschalten dazu bringen, mit ganz wenig
Leistung die Sollgröße anzufahren? Beispielsweise indem ich die Spannung
verringere oder einen Widerstand in die Versorgung einbaue? Testen geht
leider nicht so einfach, da alles verbaut ist.
Es handelt sich um den billigen 5Eur Servo von Conrad.
Alternativ müsste ich mir noch einen Sensor bauen, um die Position zu
kennen und langsam in die Startposition zu fahren. Aber auch das wäre
sehr aufwendig und optisch wahrscheinlich nicht so schön.
Christopher schrieb:> Alternativ müsste ich mir noch einen Sensor bauen, um die Position zu> kennen und langsam in die Startposition zu fahren. Aber auch das wäre> sehr aufwendig und optisch wahrscheinlich nicht so schön.
oder einfach den vorhanden Sensor (poti) vom Servo mit anzapfen.
Christopher schrieb:> Kann ich den Servo nach dem Einschalten dazu bringen, mit ganz wenig> Leistung die Sollgröße anzufahren? Beispielsweise indem ich die Spannung> verringere oder einen Widerstand in die Versorgung einbaue? Testen geht> leider nicht so einfach, da alles verbaut ist.
Nein. Modellbauservos sind relativ dumm.
Und wie du schon selbst erkannt hast, bräuchtest du eine Rückmeldung,
die das Servo alleine nicht bietet.
Du könntest natürlich das Poti im Servo für deine Zwecke missbrauchen,
indem du dessen Wert/Spannung mittels ADC misst und Pulsweite für das
Servo entsprechend einstellst. Das wäre Ein Draht zusätzlich aus dem
Servo und ein ADC-Kanal am ansteuernden Mikrocontroller. Die Masse
sollte ja die gleiche sein.
Christopher schrieb:> Alternativ müsste ich mir noch einen Sensor bauen, um die Position zu> kennen und langsam in die Startposition zu fahren.
Ein Taster für die Endpositionen würde schon reichen.
Bzw. einen evtl. vorhandenen Schließmechanismus 'anzapfen'.
Ralf G. schrieb:> Christopher schrieb:>> Alternativ müsste ich mir noch einen Sensor bauen, um die Position zu>> kennen und langsam in die Startposition zu fahren.>> Ein Taster für die Endpositionen würde schon reichen.
Und was ist, wenn das Tor "fast" offen oder "fast" zu ist? Dann steht er
wieder vor dem gleichen Problem. Nein, eine Rückmeldung der Position
braucht er schon.
Ralf G. schrieb:> npn schrieb:>> Und was ist, wenn das Tor "fast" offen oder "fast" zu ist?>> Kann ich dir erklären.> Position 'geschlossen' erfassen reicht:if ( Stromausfall() &&> !TorGeschlossen() )> {> GaaanzVorsichtigZumachen();> }
Okay, issn Argument. Einverstanden :-)
Ralf G. schrieb:> Ralf G. schrieb:>> GaaanzVorsichtigZumachen();>> Wobei...> Ich denk' noch mal drüber nach.
Wenn man zwei Endschalter hat, ist es schon okay. Wenn keiner der beiden
betätigt ist, langsam fahren. Wenn einer betätigt ist, weiß man die
Position und kann die jeweils andere anfahren. Passt schon, oder?
Man könnte nach einem Stromausfall (aka. power-on-reset) per
Mikrocontroller (ATTiny) zunächst "im Schleichgang" alle Tore öffnen
(oder schliessen), bis ein Endschalter (oder Gabel/Reflexlichtschranke)
reagiert, quasi das System "nullen". Danach dann die im EEProm
gespeicherte letzte Position anfahren ...
Frank schrieb:> Man könnte nach einem Stromausfall (aka. power-on-reset) per> Mikrocontroller (ATTiny) zunächst "im Schleichgang" alle Tore öffnen> (oder schliessen),
Man kann einen Servo nicht im Schleichgang irgendwo hin fahren, wenn
vorher nicht bekannt ist wo der Servo gerade steht.
Wie soll denn da der erst Impuls aussehen (wie lang soll er sein)?
... Ulli-B
npn schrieb:> Ralf G. schrieb:>> Ralf G. schrieb:>>> GaaanzVorsichtigZumachen();>>>> Wobei...>> Ich denk' noch mal drüber nach.>> Wenn man zwei Endschalter hat, ist es schon okay. Wenn keiner der beiden> betätigt ist, langsam fahren.
Wie soll das gehen.
WEnn der Strom kommt, dann macht das Servo erst mal einen Satz von der
Position auf der es steht zu der Position mit der
GaaanzVorsichtigZumachen() beginnt, um das Tor zu schliessen.
Genau darum geht es ja, diesen Satz wegzukriegen. Sonst könnte man das
gaaanz vorsichtig schliessen auch bleiben lassen und das Servo gleich in
die Position 'geschlossen' den Satz machen lassen.
Hi
Verstehe ich es richtig, du hast einen µC, mit dem du die Servos
ansteuerst? Hast du noch einen Ausgang für einen Transistor frei, mit
dem du die Servos erst freigeben kannst ?( Versorgungsspannung über
Transistor zuschalten) Dann mach doch folgendes: Erst, wenn die
Initialiesierung durchlaufen ist, gibst du auch die Position des Tores
vor. Mittelstellung. Dazu nutzt du einfach eine Zählvariable, die
zwischen Min und Max über Zeit getriggert wird. Also, Zählvariable =
Mittelstellung. Das ist dann auch der Wert für die Pulsweite. Im
schlimmsten Fall fährt das Tor eben einen vollen Zyklus auf Mitte und
und dann langsam in die gewünschte Stellung. Nimm das gleich als
Funktionstest beim Einschalten der Anlage.
Gruß oldmax
Hallo Christopher,
versuchs mal mit erster Position in der Mitte von Tor auf und Tor zu.
Somit hast Du eine definierten Punkt von dem Du die Endlage des Tores
anfährst. Entweder per Default Tor auf oder Tor zu. Falls Du den Wert
nach erreichen der Postition speichern solltest dann aber vielleicht in
einem zentralen (I2S)-EEPROM. Die Anzahl der Speicherungen im uC ist
meist etwas begrenzt.
Gruß
RomanK
Karl Heinz schrieb:> npn schrieb:>> Ralf G. schrieb:>>> Ralf G. schrieb:>>>> GaaanzVorsichtigZumachen();>>>>>> Wobei...>>> Ich denk' noch mal drüber nach.>>>> Wenn man zwei Endschalter hat, ist es schon okay. Wenn keiner der beiden>> betätigt ist, langsam fahren.>> Wie soll das gehen.> WEnn der Strom kommt, dann macht das Servo erst mal einen Satz von der> Position auf der es steht zu der Position mit der> GaaanzVorsichtigZumachen() beginnt, um das Tor zu schliessen.> Genau darum geht es ja, diesen Satz wegzukriegen. Sonst könnte man das> gaaanz vorsichtig schliessen auch bleiben lassen und das Servo gleich in> die Position 'geschlossen' den Satz machen lassen.
Stimmt. Manchmal hat man einen Knoten im Hirn :-)
Ohne Rückmeldung der momentanen Position kann man den Servo nicht
langsam steuern. Wenn man die Position kennt, kann man natürlich den
Sollwert so langsam ändern, wie man will, und der Servo folgt dann
genauso langsam.
Meine erste Aussage war schon richtig:
Beitrag "Re: Servo nach dem Einschalten langsamer machen"
Wenn das Servo fest mit dem Türchen gekoppelt ist (Annahme 1), und Du
nur 2 Endlagen-Impulslängen nutzt (Annahme 2), wird das Servo beim
händischen Öffnen mitverstellt.
Auf Dauer funktionieren würde eine Entkopplung der Mechanik, etwa
Schleifkupplung (am Servo die Rundscheibe anstelle Servoarm verwenden),
das Tor mit axialer Filzplatte aufliegen lassen, dreht sich bis zu den
Endstellungen mit.
Dann nur noch vor jedem Öffnen das Servo erst schließen, dann öffnen
lassen - voila.
Geht genausogut mit Servoarm und Ziehgummi, dann mit mehr als 90°
Drehwinkel. Diese Lösung zieht das Türchen immer wieder in die von der
Steuerung vorgegebene Stellung zurück.
Gruß
Was passiert denn, wenn der Servo zwar weit weg vom Sollwert steht, die
Versorgungsspannung aber sehr langsam von 0 nach 5 Volt erhöht wird?
Z.B. innerhalb von 10 Sekunden.
Kann es gerade nicht ausprobieren.
Ich weiß nicht wie ein Servo da reagiert. Doch theoretisch würde es dann
relativ kraftlos (und damit ohne starken Ruck) in seine Sollposition
fahren. Vielleicht am Anfang noch etwas zittern. Müsste mal jemand
ausprobieren.
Ulli-B
Hallo.
Danke für die Hinweise.
Die Idee, das Tor immer zuerst in die Mittelstellung zu fahren gefällt
mir. Ist zwar praktisch unschön, sollte aber nur beim Einschalten
vorkommen. So knallt es wenigstens nicht in die Endanschläge.
Großer Vorteil --> nur Softwareänderungen notwendig.
Ich habe mir schon überlegt, langfristig (2015++) das ganze durch
Schrittmotoren zu ersetzen, die kein Endanschlag haben und dann mit
(einem) Endlagenschalter zu arbeiten. Somit kann ich am Anfang ja immer
langsam in die Ursprungsposition fahren.
Ich hatte halt Angst, ich habe eine einfache triviale Möglichkeit im
Umgang mit Servos vergessen, bzw. noch nie gekannt.
Ulli-B schrieb:> Was passiert denn, wenn der Servo zwar weit weg vom Sollwert> steht, die> Versorgungsspannung aber sehr langsam von 0 nach 5 Volt erhöht wird?> Z.B. innerhalb von 10 Sekunden.> Kann es gerade nicht ausprobieren.> Ich weiß nicht wie ein Servo da reagiert. Doch theoretisch würde es dann> relativ kraftlos (und damit ohne starken Ruck) in seine Sollposition> fahren. Vielleicht am Anfang noch etwas zittern. Müsste mal jemand> ausprobieren.>> Ulli-B
Da dafür Umbaumaßnahmen notwendig sind, würde ich das erst mal einfacher
probieren, mit einer Fahrt in die Mittelstellung und dann langsam in die
Startposition.
Ulli-B schrieb:> Was passiert denn, wenn der Servo zwar weit weg vom Sollwert steht, die> Versorgungsspannung aber sehr langsam von 0 nach 5 Volt erhöht wird?> Z.B. innerhalb von 10 Sekunden.> Kann es gerade nicht ausprobieren.
Dann wird die servo-interne Elektronik auch nur ganz langsam
hochgefahren.
Das ist keine Lösung.
Du brauchst eine Rückmeldung der Position.
Dazu kannst du entweder einen Sensor an der Tür montieren oder das Potim
im Servo abgreifen. Das Servo bewegt sich erst, wenn es einen Impuls
erkennt.
Also beim Einschalten erst die Poti-Position per ADC messen und dann die
Tür langsam schließen, indem du den Impuls für die aktuelle Position
sendest und den dann schrittweise änderst, bis die Tür zu ist.
Christopher schrieb:> Ich habe mir schon überlegt, langfristig (2015++) das ganze durch> Schrittmotoren zu ersetzen, die kein Endanschlag haben und dann mit> (einem) Endlagenschalter zu arbeiten. Somit kann ich am Anfang ja immer> langsam in die Ursprungsposition fahren.
man kann den Servo entsprechend umbauen. Einfach die Elektronik
rausbauen und direkt an deinen Controller hängen. Dann hast du die
Position (Poti) und kannst den Motor recht links entsprechend steuern.
Eventuell kann man die H-Brücke von der Elektronik noch übernehmen. Dann
braucht man nur 5 Leitungen zum Servo. ( Plus, Minus, Poti, Rechts/Link,
On/off )
> Ulli-B schrieb:>> Was passiert denn, wenn der Servo zwar weit weg vom Sollwert steht, die>> Versorgungsspannung aber sehr langsam von 0 nach 5 Volt erhöht wird?>> Z.B. innerhalb von 10 Sekunden.>> Kann es gerade nicht ausprobieren.>> Dann wird die servo-interne Elektronik auch nur ganz langsam> hochgefahren.
Folglich: gleich die volle Spannung anlegen, aber nur kurz und dann so
oft hintereinander bis die Startposition erreicht ist.
D.h. die Versorgung mit einer geigneten PWM anlegen.
Dann will das Servo zwar mit maximalem Tempo zur Startposition, wird
aber jeweils nur ganz kurz eingeschaltet.
Frequenz, Dutycycle und Burstdauer der Versorgungsspannung in der
Einschaltphase gilt es noch zu ermitteln.
Oje,
stellt Euch mal kurz die Servoelektronik als übersteuerte
Leistungs-Audio-Endstufe vor (ist es ja im kleinen mit
Gegentakt-Endstufen). Und die soll jetzt zigmal pro Sekunde ein- und
abgeschaltet .... da möchte ich nicht dabei sein ;(
Außerdem passen bei dieser Lösung dier ermittelten Werte auf genau einen
Servotyp. Was ist, wenn verschiedene verbaut werden?
Gruß
>dann so oft hintereinander bis die Startposition erreicht ist.
Woher soll er wissen, wann die Startposition erreicht ist, wenn er
nicht weis, wo er gerade ist?
Weis denn unser Christopher, wie ein
1
den billigen 5Eur Servo von Conrad.
funktioniert?
Poti-Mittelabgriff ist die Lösung, wenn das Poti fest an der/dem
Tür(chen) hängt.
Tja, ich denke da kommt so einiges zusammen.
Mit welcher Geschwindigkeit fährt der Servo denn sonst das Tor auf/zu?
Das erfolgt auch mit voller Geschwindigkeit?! Ansonsten baue Dir eine
Routine die die gleichen Werte entsprechend häufig ausgibt. Was übrig
bleibt ist das Zittern des Tores aufgrund von Ungenauigkeiten im Servo (
5.- EUR?).
Entgegen meiner Aussage weiter oben, möchte ich den Endpunkt in Tor auf
ändern. Mit Mikroschalter zur Positionserkennung. Grund ist die
Möglichkeit das gerade eine Lok sich im Tor befinden kann. Eine
händische Verstellung ist mit einer Positionserkenung über Mikroschalter
als Bezugspunkt auch egal.
Gruß
RomanK
Bussard schrieb:> Außerdem passen bei dieser Lösung die ermittelten Werte auf genau einen> Servotyp.
D.h. du hältst die Methode grundsätzlich für machbar.
Falls er andere Servos benutz, kann er entweder die Parameter anpassen
oder eine andere Lösung suchen.
Schimanski schrieb:> Woher soll er wissen, wann die Startposition erreicht ist?
braucht er nicht zu wissen. Er muss sie nur so lange anwenden, bis der
Servo auch den maximal möglichen Weg geschafft haben kann.
Hi
Ich geh immer noch davon aus, das es sich um ein normales Modelbauservo
handelt. Die werden mit einem Impuls, Zeitraster 20 mSek zwischen 1 und
2 mSek von Min nach Max gefahren, das heißt 1,5 mSek ist Mittelstellung.
Dein µC muss also nur alle 20 mSek einen Impuls von 1,5 mSek erzeugen
und du hast Mittelstellung der Tore. Dazu erzeugst du einen Zeittakt für
den Zähler von 0,01 msek und addierst den Wert des Zählers auf den
Grundwert von 10. Du brauchst keine Info, wo die Tore stehen. Wozu. Die
Pulsweite definiert die Stellung des Servo. Ich weiß ja nicht, wie du
die Werte vorgibst, aber nur mal so im Ansatz:
µC aus Anlage tot
Spannung wird zugeschaltet, alle System liegen irgendwo im Nirwana
Daher Initialisierung und bis fertig füße stillhalten
Wenn Initialisierung abgeschlossen, dann Position Servo vorgeben
(Pulsweite bereitstellen)
eventuell dann erst alle Systeme freigeben (Transistor, Relais...)
Ein Timer setzt alle 20 mSek. einen Ausgang und startet einen zweiten
Timer, der alle 10 nSek. einen Interrupt auslöst. In der ISR zählst du
eine Variable bis zum vorgegebenen Stellwert (Bereich 0-99)
Ist der Wert erreicht, schaltest du den Ausgang ab und stoppst den
zweiten Timer. Nach 20 mSek. geht der Spaß von vorn los. Ob du die
Vorgabe über Poti oder per PC oder sonstwie in den µC schreibst ist
dabei völlig Wurst.
Gruß oldmax
@ npn (Gast)
>Ohne Rückmeldung der momentanen Position kann man den Servo nicht>langsam steuern. Wenn man die Position kennt, kann man natürlich den>Sollwert so langsam ändern, wie man will, und der Servo folgt dann>genauso langsam.
Doch, es geht ohne DIREKTE Rückmeldung der Position. Dazu muss der
Controller allerdings einen Stromausfall schnell erkennen und die
AKTUELLE Position im EEPROM speichern. Nach dem Neustart weiß er, wo der
Servo steht und kann ganz relaxt weitermachen.
http://www.mikrocontroller.net/articles/Speicher#EEPROM_Schreibzugriffe_minimieren
Falk Brunner schrieb:> @ npn (Gast)>>>Ohne Rückmeldung der momentanen Position kann man den Servo nicht>>langsam steuern. Wenn man die Position kennt, kann man natürlich den>>Sollwert so langsam ändern, wie man will, und der Servo folgt dann>>genauso langsam.>> Doch, es geht ohne DIREKTE Rückmeldung der Position. Dazu muss der> Controller allerdings einen Stromausfall schnell erkennen und die> AKTUELLE Position im EEPROM speichern. Nach dem Neustart weiß er, wo der> Servo steht und kann ganz relaxt weitermachen.>> http://www.mikrocontroller.net/articles/Speicher#E...
Mal weiter überlegen. Was passiert, wenn der Servo einen Stromausfall
hat und eine Weile nicht mehr auf die Fernsteuerimpulse reagiert,
währenddessen das Tor von Hand zu einer anderen Position bewegt wird?
Ich denke, jeden Fall kann man nicht abfangen. Es sei denn, der µC kann
die Position des Servos ermitteln.
npn schrieb:> Mal weiter überlegen. Was passiert, wenn der Servo einen Stromausfall> hat und eine Weile nicht mehr auf die Fernsteuerimpulse reagiert,> währenddessen das Tor von Hand zu einer anderen Position bewegt wird?
genau das ist ja das Problem
> Es kann sein, dass zwischen Ausschalten (Spannung> weg) und einschalten die Position des Servos manuell> verändert wird (Tor geöffnet).
Christopher schrieb:> Kann ich den Servo nach dem Einschalten dazu bringen, mit ganz wenig> Leistung die Sollgröße anzufahren? Beispielsweise indem ich die Spannung> verringere
Richtig.
Normale Servos verwenden Permanentmagnet.Gleichstrommotore und laufen
bei weniger Spannung langsamer mit weniger Kraft.
Aber die Elektronik will eine Mindestspannung, meist so 3V, also ist
bloss die halbe Drehzahl drin.
Noch langsamer mit noch weniger Kraft kann man erreichen, in dem man die
1-2msec Impulse langsamer seldet, also nicht alle 20msec, sondern z.B:
jede Sekunde.
Die analogen Chips (SN76604/SN28654=B654, ZN409, NE544, neuer: NJR2611,
M51660, M52461, M64611, AA51880) arbeiten nämlich so, daß sie die
Differenz aus kommendem Impuls und internem Impuls ermitteln und auf
(20msec) verlängern um den Motor nach links oder rechts drehen zu
lassen. Nach (20msec) hat der Motor dann keinen Strom mehr, wobei die
Impulsverlängerung bei grösserer Abweichung vom Sollwert auch weit über
20msec hinaus gehen kann.
Wenn es analoge servos sind, dann kann man das Drehmoment (in einem
gewissen Rahmen) kastrieren indem man seltener als alle 20 ms ein Signal
sendet.
Das umgekehrte geht btw. auch: öfter als alle 20 ms gibt etwas mehr
torque (kann man aber nur sehr begrenzt nutzen); Spektrum
Fernbedienungen nutzen zb 11 ms frames.
Falk Brunner schrieb:> Nach dem Neustart weiß er, wo der> Servo steht und kann ganz relaxt weitermachen.Christopher schrieb:> Es kann sein, dass zwischen Ausschalten (Spannung> weg) und einschalten die Position des Servos manuell verändert wird (Tor> geöffnet).
Hei,
zwei Hinweise hätte ich noch für Dich:
Es gibt programmierbare Servos. Da kann man die Geschwindigkeit
drosseln.
Nutzt man z.B. bei Modellen mit Einziehfahrwerk. Da schaut es auch
komisch aus, wenn die rein und raus knallen...
Wenn Du einen Servo auf einen harten Anschlag fährst, dann ist das
schlecht, weil: Die servointerne Elektronik möchte ja gerne noch ein
winziges Stückchen weiter fahren und bestromt deswegen den Motor und das
dauerhaft. Dadurch hast Du eine reihe unerwünschter Effekte wie z.B.:
höherer Verschleiß, höherer Stromverbrauch, Motor kann durchbrennen
usw...
Ich würde auch das mit der Mittelstellung probieren, weil das keinen
Umbau notwendig macht...
Grüße,
Tom
Hallo,
eine Antwort habe ich jetzt noch nicht gelesen.
Ich habe mich da dunkel an etwas erinnert, und tatsächlich, es ist aus
diesem Wiki!
Hier das zugehörige Zitat (aus
http://www.mikrocontroller.net/articles/AVR-Tutorial:_Servo#Das_Servo-Impulstelegram):
Kommen die Impulse selten, also z.B. alle 50ms, läuft der Servo
langsamer in seine Zielposition (praktische Erfahrungen, vermutlich
nirgends spezifiziert). Dieses Verhalten lässt sich nutzen, um die
manchmal unerwünschten ruckartigen Bewegungen eines Servos abzumildern.
Probier das bitte mal aus!
Grüße, JK
Das funktioniert aber nur mit analogen servos. Die gehen nämlich bei
jedem steuerpuls einen kurzen drehimpuls auf den Motor. Digitale servos
machen das anders: die rekonstruieren aus der pulsdauer den
"wunschwinkel" und fahren den dann mit einer eigenen Regelung an.
Es gibt für Roboter auch Servos die eine UART Schnittstelle besitzen. Da
kannst du die Kräfte einstellen, die Position abfragen usw.
Zum Beispiel:
Dynamixel MX-28T Robot Servo
Ist aber teurer. Kannst ja mal selber googeln, eventuell gibt es was
günstigeres.
Matthias xxx schrieb:> Dynamixel MX-28T Robot Servo
Das scheint zwar ein gutes Teil zu sein, aber ich denke, daß fast 200€
für Christopher nicht in Frage kommen, nachdem er schrieb:
Christopher schrieb:> Es handelt sich um den billigen 5Eur Servo von Conrad.
Ich kann mich natürlich auch irren :-)
> Das scheint zwar ein gutes Teil zu sein, aber ich denke, daß fast 200€> für Christopher nicht in Frage kommen, nachdem er schrieb:>> Christopher schrieb:>> Es handelt sich um den billigen 5Eur Servo von Conrad.>> Ich kann mich natürlich auch irren :-)
nein du irrst dich nicht. 200Eur ist das gesamte Bauwerk nicht wert ;-)
Das mit dem seltenen Senden der Impulse werde ich mal probieren. Aber
leider erst am Wochenende.