Hallo zusammen
Nun sind die bestellten Teile endlich da und ich hatte Zeit einige Gehversuche zu machen.
Der Motor (https://www.roboternetz.de/community...997#post638997) dreht und Geschwindigkeit/Richtung lassen sich ändern.
Nun zum eigentlichen Thema.
Da die ursprünglich genutzten Servos hinüber sind (waren ja aus einem abgestürzten Modellflieger und allen Zahnräder fehlen einige Zähne) habe ich einen neuen bestellt (Blue Bird BMS-666MG-HS :https://www.conrad.ch/de/bluebird-st...jr-239411.html ).
Mit dem weiter oben von HaWe angegebenen Code konnte ich den Servo in Betrieb nehmen. Das Ganze funktioniert zwar, aber alles ist etwas ruckelig und hastig.
Wie kann ich das etwas - im Englischen würde man "smoother" sagen - machen? Und wie kann ich herausfinden, wie ich den Maximalausschlag nach links und rechts sowie die Mittelstellung über den Code einstellen kann?
Danke für eure weitere Hilfe.
Chris
Hallo Chris,
Den hier ?
https://tutorials-raspberrypi.de/ras...tor-steuerung/
Steht ja ganz unten, direkt unter dem Programm.
p.ChangeDutyCycle(x)
x ist die Position.
Da musst du halt etwas probieren, bei welchen Werten dein Servo am linken und rechten Anschlag ist. Die Mitte liegt dann dazwischen.
MfG Peter(TOO)
Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?
Hallo Peter
Danke für die schnelle Antwort. In dem Fall kann ich mich an die Grenzen tasten. Besteht eine Gefahr, dass ich den Servo zerstöre, wenn ich zu hohe Werte angebe?
Hast du eine Idee zur anderen Frage, wie ich die Bewegungen geschmeidiger machen kann?
Chris
Eigentlich nicht, kam nur bei alten dummen Servos vor.
Du kannst dich mal in 1er Schritten vortasten, du merkst dann schnell wenn er nicht mehr weiter dreht.
[QUOTE=Chris1803;639354]Hast du eine Idee zur anderen Frage, wie ich die Bewegungen geschmeidiger machen kann?
Dies liegt zum Teil am Servo selbst.
Wie schnell sich der Servo zwischen zwei Positionen bewegt hängt vom Servo und dessen Belastung ab. Wenn es langsamer sein soll, kannst du nur entsprechend viel Zwischenpositionen vorgeben und diese immer für eine gewisse Zeit halten.
Das Zittern an einer festen Position kannst du, wie im Link angegeben, durch Ausschalten der PWM verbessern.
Die Ansteuerung der Modellbau-Servos ist eigentlich ein Murks, war aber zu den damaligen Zeiten nicht besser Lösbar. Die ganze Steuerung muss möglichst leicht sein (Flugzeugmodelle).
Du kannst hier im RN-Wissen Bereich einiges darüber nachlesen.
Das technische Problem ist, dass man eine Impulsbreite immer nur mit einem gewissen Jitter erstellen kann. Du hast irgendwo einen festen Takt und die Zeit kann immer nur ein Vielfaches dieser Zeit sein. Da gibt es dann eine Rasterung.
Bei Auswerten hat man das selbe Problem. Auch hier kann man nur auf Taktschritte genau die Impulsbreite messen. Da die Takte nicht synchron sind, kann man schon theoretisch nicht genauer als +/-2 Takte genau messen.
Die Übertragungsstrecke als solche trägt auch noch ihren Teil zum jitter bei.
Der Servo versucht also immer den, aus der Impulsbreite gewonnene, Sollwert mechanisch einzustellen. Durch den Jitter versucht er immer diesen Messfehlern zu folgen. Deshalb zittert das Ding dann, auch wenn man am Sollwert gar nichts ändert.
Stell man das PWM-Signal ab, verwendet er die letzte Messung als Vorgabe.
Allerdings gibt es neben der elektronischen Seite auch noch die Mechanische. Zwischen Motor und Abgang sitzt noch ein Getriebe und dieses hat immer etwas spiel. Hat sich der Motor z.B. zuerst nach links gedreht und soll sich jetzt nach rechts drehen, passiert zuerst gar nichts am Abtrieb, weil der Motor so weit drehen muss, bis sich die anderen Zähne der Zahnräder berühren und Kraft übertragen können.
Das Getriebespiel ist immer ein Qualitätsmerkmal. Ideal sollte man keines haben.
MfG Peter(TOO)
Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?
Die Mittelstellung entspricht normalerweise einer Einschaltzeit von etwa 1,5 ms. Oberer und unterer Anschlag liegen irgendwo im Bereich von 2,1 ms bzw. 0,9 ms. So wie ich das sehe gibst du in deinem Code keine Einschaltzeit ein, sondern ein PWM-Tastverhältnis. Das musst du dann eben noch über die eingestellte PWM-Frequenz umrechnen. Bei 50 Hz (Periodendauer 20 ms) entsprächen 1,5 ms dann 1,5 ms/20 ms = 0,075 = 7,5%.Und wie kann ich herausfinden, wie ich den Maximalausschlag nach links und rechts sowie die Mittelstellung über den Code einstellen kann?
Die Zuordnung zwischen Einschaltzeit und eingestelltem Winkel ist nicht immer ganz eindeutig. Solltest du exakte Winkel anfahren wollen bleibt dir nicht viel anderes übrig als die entsprechenden Signale durch ausprobieren herauszufinden. Ich hatte den entsprechenden Fall schon und habe mir dafür eine kleine Vorrichtung gebastelt:
Bild hier
Modellbauservos sind so parametriert, dass sie die vorgegebene Stellung so schnell wie möglich anfahren. Sprich: hohe Beschleunigung, schnelle Bewegung, abruptes Abbremsen. Falls du das meinst kannst du wie Peter empfohlen hat Zwischenpositionen vorgeben (z.B. einen gleitenden Mittelwertfilter über die Steuergröße legen). Falls der Servo zittert und "falsche" Bewegungen machst solltest du überprüfen ob bei deinem Signal zwischen Pi und Servo irgenwas nicht stimmt (einfach mal mit einem Oszilloskop abgreifen sofern vorhanden). Falls du unterschiedliche Stromquellen zur Versorgung von Pi und Servos verwendest musst du ausserdem sicher stellen dass die Massen verbunden sind.Wie kann ich das etwas - im Englischen würde man "smoother" sagen - machen?
Hallo Chris!
Ja - wenn Du zu lange "heizt"! *gg* Aber eigentlich brauchst Du wenig Bange zu haben. Sinnvoll ist es beim Er-testen der beiden Grenzstellungen ein Labornetzgerät zu benutzen oder ein Ohmmeter mit nem Messbereich bis ca. 2A und drüber in die Versorgungsleitung einzuschleifen. Dann kannst Du sehen wann Du die erlaubten Pulsdauern/Grenzen überschritten hast, weil dann die Stromaufnahme deutlich ansteigt. Ausserdem ist bei vielen Servos dann ein deutliches anderes Geräusch zu hören. Ein paar wenige Sekunden Stromverbrauch im Bereich von 0,5 bis 1A hatte bei meinen Servos nie geschadet (gilt aber nur für lastlosen Servotest). Sonstige Aussagen sind im RNWissen (klick hier) zu sehen. Für solche Tests hatte ich mir Servotester gebaut. Die "neueste" Vorrichtung mit nem 10K-Poti zum Variieren der Pulslänge ist mit nem nanoclone und nem LCD aufgebaut, siehe hier. Das Display zeigt z.B. die aktuelle Periodendauer (oben rechts) und die Pulszeit mit der angesteuert wird (unten rechts), der ADC-Wert ist sozusagen ein Gimmick. Übrigens ist diese Software bei meinen Platinen zum Ansteuern mehrerer Servos als Testmodus bereits eingebaut... Besteht eine Gefahr, dass ich den Servo zerstöre, wenn ich zu hohe Werte angebe ..
Das wurde ja schon mehrfach beantwortet. Softwaremässig habe ich das so gelöst (in C), dass der Servo-Ansteuerungsroutine ein Zielwert und ein Increment vorgegeben wird (und noch zwei Parameter). Nun wird die Pulslänge bei jedem neu ausgegebenen Puls um das Increment verändert (+ oder -) bis der Zielwert überschritten ist. Der letzte Wert wird dann aber nur als der vorher genannte Zielwert eingegeben. Die Incremente sind so bemessen, dass ich für die gesamte Schwenkbreite rund sechstausend Ticks habe (6000), Full speed wird bei ca. 180 Incrementen pro neuer Servoperiode erreicht - also 180 Inc / 20 ms. Das ist für viele Servos zu fein - aber der läuft dann eben wenn die Ansteuerung seine ganz bestimmte (bestimmbare) Mindestpuls-differenz erreicht hat... Hast du eine Idee zur anderen Frage, wie ich die Bewegungen geschmeidiger machen kann? ..
So siehts aus wenn die Servos full speed laufen (Standardgeschwindigkeit - ca. 0,1 bis 0,16 sec pro 60°) und so fahren die servobetätigten Teile mit gebremster/variabler Geschwindigkeit.
Viel Erfolg!
Geändert von oberallgeier (26.09.2017 um 11:12 Uhr) Grund: Incremente pro Periode
Ciao sagt der JoeamBerg
Lesezeichen