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'.
:
Bearbeitet durch User
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.
npn schrieb: > Und was ist, wenn das Tor "fast" offen oder "fast" zu ist? Kann ich dir erklären. Position 'geschlossen' erfassen reicht:
1 | if ( Stromausfall() && !TorGeschlossen() ) |
2 | {
|
3 | GaaanzVorsichtigZumachen(); |
4 | }
|
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.
:
Wiederhergestellt durch User
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 )
Man könnte auch ein Dynamixel AX-12 Servo mit Positionsrückmeldung und Torque nehmen.
> 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
J. K. schrieb: > eine Antwort habe ich jetzt noch nicht gelesen. Doch, schon zweimal. Drei Beiträge höher, von Max D. und MaWin :-)
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 :-)
Dynamixel XL-320 kostet "nur" 20Euro. Wie gesagtm diese Modelle kenne ich. Es kann gut sein das der Chinese etwas günstigeres hat.
:
Bearbeitet durch User
> 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.
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.