Hallo, komme nicht weiter. Mit einem Beschleunigungs-Sensor (ADXL330) möchte ich eine Platte immer waagerecht halten. Dazu messe ich den Wert des Sensors einmal in der waagerechten Position, danach soll ein Servo die Platte immer zurück in die waagerechte Position fahren, wenn der Unterbau schief gestellt wird. Anbei auch ein Bild damit man sieht was ich meine ^^ Der rote Pfeil zeigt auf den ADXL330. Der schwarze Pfeil deutet die Bewegung der Platte um die Achse an. Den ganzen unteren Holzklotz, da wo L und R dransteht möchte ich jetzt kippen und der Servo soll nachregeln... Habe jetzt schon verschiedene Szenarien durch. Momentan "schwingt" das so hin und her, um die Mittelstellung rum, regelt aber nach. Mit 50Hz PWM wird der Servo betrieben. Den ADXL330 lese ich immer so vor der Positiven Flanke der Servo Steuerung aus, dass die Bewegung des Servos eigentlich nicht mehr mit durch den Sensor gemessen werden dürfte. Hat da mal einer ein paar Ideen wie man das besser realisieren könnte ?
Besser als .. wie? Konkrete Hilfe nicht möglich, da keine konkrete Frage, keine Schaltung, kein Code, keine Links auf Datenblätter. Stichwort: "Regelungstechnik"
Stichwort: "Servo stört Analogmessung??"
Ein Billigservo schnattert wenn es Drehmoment aufbringen muss mit der Steuerfrequenz. Das ist unguenstig. Daher : a)ein digitalserveo verwenden, dass nicht nur steuert wen der Puls kommt. b)die Ansteuerfrequenz erhoehen. Die 50Hz Repetitionsfrequenz muss nicht sein, kann auch 250Hz sein. c)mit einem kontinuerilichen Stellglied und viel schnellerer, allenfalls analoger Ansteuerung arbeiten
Dachte es würde vielleicht jemand seine Idee, wie er das machen würde posten. Mein Problem ist maßgeblich, dass ich nur nen Beschleunigungs Sensor hab. Als Beispiel: Es wird erkannt, dass ich nach rechts drehen muss, da die Erdbeschleunigung nicht mehr senkrecht nach unten zeigt. Jetzt dreh ich nach rechts, bis die die Erdbeschleunigung wieder senkrecht ist. Da ich aber in einer Bewegung bin und jetzt bremse, erfährt der Sensor wieder eine Beschleunigung aber in die andere Richtung. Ab jetzt wird es blöd, weil nun der Befehl an den Servo kommt fahre nach links. Soll er ja aber nicht. Ich bin ja waagerecht... Dieses schwing-Verhalten muss ich loswerden.
Hm, mehr als 50Hz probiere ich mal aus. Wird aber am schwingen nicht viel ändern glaub ich
Daniel Platte schrieb: > Da ich aber in einer Bewegung bin und jetzt bremse, erfährt der Sensor > wieder eine Beschleunigung aber in die andere Richtung. > Ab jetzt wird es blöd, weil nun der Befehl an den Servo kommt fahre nach > links. Soll er ja aber nicht. Ich bin ja waagerecht... Ich denke du hast das Problem schon erkannt. Du darfst die 'Lotrechte' nur dann ausmessen, wenn du in einer gleichförmigen Bewegung (oder Stillstand) bist. Sobald du beschleunigst oder abbremst, zeigt dein Beschleunigungsmesser nicht mehr das an, was du erwartest. Und genau das ist das Problem, wenn man nur einen Beschleunigungssensor hat: Man kann die Erdbeschleunigung nicht von zusätzlichen Beschleunigungen unterscheiden.
Ja hm, wenn man aber doch weiß man ist in Bewegung müsste man doch abschätzen können wie falsch der Sensor bei einer Änderung liegt. Na ja glaub ich sehe das jetzt schon was klarer. Mal sehen ob ich das auch in Code umsetzten kann^^
Modellier' doch das abbremsen ... schätze die Winkelgeschwindigkeit (PT1 sollte da für nen einfaches Modell reichen) des Servos momentan und zieh den Zentrifugalanteil (Abstand der Drehachse und Winkelbeschleunigung) von Deinen Messwerten ab ... Grüße, Michael
Winkelgeschwindigkeit und so klingt nach Komma Zahlen, die möchte ich eigentlich umgehen, sonst könnte man das tatsächlich einfach Mathematisch erschlagen. Müsste man sehen wie genau das dann wird... Andere Idee, also der Sensor reagiert ja nur auf Beschleunigungs Änderung. Man möchte ja jetzt, das sich nix ändert und nur 1g nach unten "zeigt". Bewegt man das Teil aber jetzt "schwingt" das ganze, weil beim bremsen immer eine Beschleunigung in die andere Richtung auftritt. Wenn man das jetzt dämpfen würde müsste sich das doch einschwingen auf 1g nach unten quasi?!? Wie würde man denn eine Digitale Dämpfung programmieren?
Hi Daniel Wesshalb muss es denn diese Art von Sensor sein. Es geht doch um das messen einer Winkelabweichung, das kriegst Du mit einem Inkremental- Drehgeber auch hin. Vielleicht solltest Du mal in Richtung "geeigneter Sensor" suchen. Gruss Andy
Ach ja, evt. reicht ja schon ein Potentiometer auf der Achse, welches Dir die Abweichung meldet...
Ja sowas ging mir auch schon durch den Kopf, kommt mir aber vor wie aufgeben^^ Wenn ich das digitale Dämpfungsglied so hinkrieg, dann gehts ja auch, glaub ich :)
Tja, Du kannst ja auch mit einem Quecksilber Thermometer die Temperatur messen, und diese dann mittels CCD Chip und Bildbearbeitungssoftware erfassen und auswerten. Nein Spass beiseite, wünsche Dir natürlich viel Glück ;-)
Na ja das is ja schon ein vereinfachtes Modell, soll später mal was tolles werden, da wird das mit nem Poti nicht zu machen sein. Aber bin für alle Vorschläge offen :)
Hallo, um es mal ganz anders anzugehen: du möchtest eine Lage-Regelung. Du misst die Beschleunigung. Die (Winkel) Geschwindigkeit ist das Integral der Beschleunigung. Die Lage (Position) ist das Integral der Geschwindigkeit. Folglich muss die Beschleunigung vor Einsetzen in die Lageregelungs-Gleichung 2 x integriert werden. Das bedingt hohe Anforderungen an Mess- und Rechengenauigkeit. Bei Fragen an Boeing oder Airbus wenden, so werden Flugzeuge gesteuert. Gruss Reinhard
> Bei Fragen an Boeing oder Airbus wenden, so werden Flugzeuge > gesteuert. Oder an Graupner oder Robbe. So kann man nämlich auch Modellflugzeuge steuern.
Ich tippe her darauf, dass die Lagerung der Plattform das Problem ist. So wie es aussieht ist das alles andere als Reibungslos aufgebaut. Dann muss das Servo immer Kraft aufbringen um das Ding in der Position zu halten. Lager das mal mit Kugellagern und probiere es dann noch einmal. Kugellager kannst ja solche aus alten Inline Skates nehmen. Nehme ich auch ab und an zum basteln. Die sind gut und günstig Gruss
Da kommen sich doch zwei Regelkreise in die Quere: Einerseits die äussere Regelschleife mit der Position, andererseits die interne Servo-Regelung. Deine äussere Regelungstrecke müsste wesentlich langsamer laufen als die innere.
So ein "Satellittenschüssel auf Position Haltegerät während der Autofahrt" wollte ich auch mal bauen. Bin ich aber noch nie zu gekommen. Außerdem brauche ich sowas nicht, weshalb ich es wieder verworfen habe.
Moin. Airbus und co werden sich wahrscheinlich eher bedeckt halten bei Einzelheiten :) Die Platte auf der auch der Sensor ist, ist überhaupt nicht gelagert, sondern direkt am Servo befestigt. Das ganze wiegt aber ja auch nur ein paar Gramm. Das mit der Lagerung lasse ich mir mal durch den Kopf gehen, da ich auch den Servo als Störer in Verdacht habe. Bin jetzt dazu übergegangen zum entwickeln die Steuerung auf den PC auszulagern. Mit Matlab lasse ich mir die Daten des Sensors anzeigen und regle danach den Servo. Dieser ist ziemlich ruckelig und das kriegt der Sensor voll ab. Der macht teilweise Vollausschläge, wenn der Servo so richtig Gas gibt. Denke das liegt daran, dass eine PWM Ansteuerung denkbar ungünstig ist für gleichmäßigen Drehmoment... Wenn das ganze so langsam läuft, dass der Servo immer kurz, wenn auch sehr kurz stoppt, hat der Sensor Zeit sich zu beruhigen und die Daten sind OK. Wenn ich die Sensor Regelung irgendwie verfeinern könnte wäre mir da schon geholfen. Langsamer machen, also Samplerate verringern bringt nichts, da dann immer noch die starken Ausschläge dabei sind. Werde später mal versuchen links und rechts Erkennung vom Sensor mit Vorzeichen zu versehen und ein paar Samples zu addieren um eine Tendenz der Richtung zu bekommen...
Hi, ich glaub eher dass dein Problem die Regelung ist. Ich hab auch schon mit Matlab Servos gesteuert, der Input war da eine Kamera. Das ganze ging wunderbar, wenn nur die Regelung richtig funktioniert hat. Des weiteren würde ich mal überlegen ob es nicht sinnvoller ist einen Gyro draufzupacken und den Beschleunigungssensor nur zum korrigieren der Gyro-Drift zu verwenden.
Ich sende mit Matlab nur Kommandos. Stellen macht der AVR mit PWM...Werd ich mir aber nochmal genau anschauen ob da alles Ok ist. Da das ganze sich ja nicht wirklich bewegt oder so sondern nur auf der Stelle steht muss der Beschleunigungssensor reichen. Außerdem sind die viel günstiger als Gyros. Klar, bei etwas das sich durch den Raum bewegt müsste man da Gyros nehmen, aber das Ding soll ja quasi nur das Gleichgewicht halten können... Also der Sensor muss dieser sein. Der Servo nicht um bedingt.
Daniel Platte schrieb: > Klar, bei etwas das sich durch den Raum bewegt müsste man da Gyros > nehmen, aber das Ding soll ja quasi nur das Gleichgewicht halten > können... Was soll es denn eigentlich werden? Ich kenne Berichte, wonach man einen Asuro (kleiner Robot) auf den Hinter-'beinen' (sind eigentlich Räder) balanzieren lassen kann. Als Sensor wird lediglich eine LED und ein Phototransistor benutzt.
An die Plattform eine Stange ranbasteln und unten ein Gewicht ranhängen. Funktioniert wunderbar und benötigt nichtmal Strom.
Daniel, ich denke du hast doch alles schon erkannt, und musst nur noch die richtigen Schlüsse daraus ziehen. Wenn du die Information des Beschleunigungssensors während der Bewegung des Servos mit nehmen willst, dann musst du 1) zweimal integrieren um die Lage zu bekommen UND 2) oft (=schnell) genug messen so dass du die Bewegung auch wirklich auf der Zeitskala auf der sich der Servo bewegt korrekt erfassen kannst. Da das aber sehr schnell ist glaube ich kaum dass das mal so eben auf die Schnelle mit nem einfachen Aufbau klappen kann. Der andere Weg ist also den Servo zu bewegen, warten und sich alles beruhigen lassen, Lage in Bezug zur Gravitation messen, Servo bewegen, usw. ... d.h. du musst langsam machen... Also, entweder erheblich schneller oder erheblich langsamer Messen als wie der Servo sich bewegt. Olli PS: jenachdem wie der Beschleunigungssensor aufgebaut ist bzw funktioniert könnte es evtl. von Vorteil sein den Sensor schief auf die Platte zu montieren PSS: das Prinzip mit der LED würde ich meinen ist dahingehend viel besser als das direkt die Lage gemessen wird (und nicht die 2te Ableitung davon...)
>Ich kenne Berichte, wonach man einen Asuro (kleiner Robot) auf den >Hinter-'beinen' (sind eigentlich Räder) balanzieren lassen kann. Als >Sensor wird lediglich eine LED und ein Phototransistor benutzt. Mit Lego Mindstorm käme dann ein Brickway (Mindstorm Segway) heraus... http://www.youtube.com/watch%3Fv%3DSZGvIYYVMRk&sa=U&start=2&ei=fjpoSv_bHo_KnAP-vuXNCQ&usg=AFQjCNERHnJHUdZ_6YTIXeVa4AFcqPT_Tw
>Langsamer machen, also Samplerate verringern bringt >nichts, da dann immer noch die starken Ausschläge dabei sind. Nicht die Samplerate, sondern die Sollwert-Vorgaben für den Servo als Rampe oder so vorgeben. (Mit Regelungstechnik hatte ich zuletzt vor 5 Jahren zu tun...) Irgendwo schwirrt hier im Forum noch eine Routine herum, mit der man Servos "sanft" betreiben kann (Suche "Sanfte Servos"?!).
Ok, läuft immer noch nicht rund... Bin zwischenzeitlich auf einen anderen Motor umgestiegen, einer aus nem Akkuschrauber, der hatte 80A stall current :) sind glatt ein paar Kabel und ein paar BUZ11 durchgebrutzelt... Bin jetzt wieder bei dem Servo angelangt, die Daten vom ADXL330 filtere ich jetzt mit nem Analog Tiefpass und nem Digitalen. Zur Regelung des Servos einen Digitalen PID Regler mit wenig D. Klappt immer noch nicht befriedigend...Auch mit Servo sanft anfahren läuft es nicht rund.. Was kann man da noch machen?? Kalman-Filter? Doch bei Boeing fragen?
Wenn man die Sensordaten durch einen Tiefpass laesst, das System aber schneller ist, so wird das Ganze nicht stabiler. Was ist jetzt nun das Problem ? Hast du die einzelnen Komponenten bezueglich Linearitaet und Zeitverhalten ausgemessen ?
Ich habe den Tiefpass nur, damit schnelle Schwankungen/Erschütterungen nicht mit in die Berechnung der Lage einfließen. Der Sensor ist sehr sensibel. Linearität des Sensors ist gegeben, Linearität des Servos gehe ich mal von aus, aber was meinst du mit dem Zeitverhalten? Momentan scheitert es glaube ich daran, dass ich den Regler nicht richtig eingestellt bekomme...versuche das mit try and error..
Hallo, nach langem hin und her hab ich festgestellt das ich den PID Regler völlig falsch eingestellt hatte. Ich glaube auch das ein Extremwert Regler besser wäre, habe aber keine Ahnung wie ich den in Code umsetzten soll, hat da wer Erfahrung drin? Anbei mal die Sensor Daten, wenn der Servo nach rechts und links fährt. Wie kann ich da die Spitzen möglichst elegant wegfiltern? Danach sollte die Regelung wesentlich einfacher werden :)
Programmiere dir einen Ringbuffer für sagen wir mal 32 Samples. Ein neues Sample schmeißt praktisch den ältesten Wert raus. Und dann bilde ständig den Mittelwert aus allen Samples im Buffer. Alle Werte addieren und dann durch anzahl der addieten werte dividieren. (möglichst 2er-Potenzen als Anzahl der Werte verwenden sonst ist die division zu rechenaufwändig) Sollte die schmalen Spitzen relativ gut ausfiltern...
Ja, man kann da doch durchaus noch was verbessern. Bau doch beispielsweise den ADXL direkt auf die Drehachse, dann misst er keine Drehbeschleunigung mehr mit, sondern nur noch den Winkel. Die Spitzen in der Beschleunigung sollten irrelevant sein, denn ein D-Anteil ist bei diesem Problem ohnehin nicht das richtige. P und I Anteile reagieren darauf nicht besonders. Grüße, Peter
Hallo, so es läuft zufriedenstellend, zumindest mit diesem kleinen Modell. Der Regler läuft jetzt mit ~1KHz und die Regelstrecke mit ~50Hz. Anbei ein Bild der Daten. Man sieht schön, wie der Regler gegen den Ausschlag des Sensors regelt. Wenn der Sensor sich der waagerechten nähert, also Wert um 0, regelt der Regler zurück. An diesem Punkt sieht man die Gegenbeschleunigung vom bremsen. Das Bild zeigt: Kippen nach rechts, zurück zur Mitte, dann nach links und zurück zur Mitte. Genau durchstiegen wieso das jetzt so gut geht hab ich noch nicht... Danke soweit. Grüße Daniel PS: Sensor ist auf Drehachse. Gefiltert is momentan nix mehr, geht offensichtlich auch so ?!?
hi, hätte da noch ne idee zum thema ruckeln. um die impulse vom servo zu dämpfen könnte man den sensor auf ein stüch moosgummi kleben. dadurch wird die empfindlichkeit bei kurzen stößen geringer. hab das selbe problem bei meinen hubschraubern. wenn der gyro da direkt am gestell verbaut ist dreht die regelung total durch. mit moosgummi funktioniert das dann aber wunderbar.
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.