Forum: Mikrocontroller und Digitale Elektronik Beschleunigungs Sensor soll mit Servo Platte Wagerecht halten


von Daniel R. (zerrome)


Angehängte Dateien:

Lesenswert?

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 ?

von Gast (Gast)


Lesenswert?

Besser als .. wie? Konkrete Hilfe nicht möglich, da keine konkrete 
Frage, keine Schaltung, kein Code, keine Links auf Datenblätter.

Stichwort: "Regelungstechnik"

von Philipp H. (swissrookie)


Lesenswert?

Stichwort: "Servo stört Analogmessung??"

von ::: (Gast)


Lesenswert?

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

von Daniel R. (zerrome)


Lesenswert?

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.

von Daniel R. (zerrome)


Lesenswert?

Hm, mehr als 50Hz probiere ich mal aus.

Wird aber am schwingen nicht viel ändern glaub ich

von Karl H. (kbuchegg)


Lesenswert?

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.

von Daniel R. (zerrome)


Lesenswert?

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^^

von Michael K. (Gast)


Lesenswert?

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

von Daniel R. (zerrome)


Lesenswert?

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?

von Andreas Häusler (Gast)


Lesenswert?

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

von Andreas Häusler (Gast)


Lesenswert?

Ach ja, evt. reicht ja schon ein Potentiometer auf der Achse, welches 
Dir die Abweichung meldet...

von Daniel R. (zerrome)


Lesenswert?

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 :)

von Andreas Häusler (Gast)


Lesenswert?

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 ;-)

von Daniel R. (zerrome)


Lesenswert?

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 :)

von Reinhard Kern (Gast)


Lesenswert?

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

von Peter (Gast)


Lesenswert?


von Rolf Magnus (Gast)


Lesenswert?

> Bei Fragen an Boeing oder Airbus wenden, so werden Flugzeuge
> gesteuert.

Oder an Graupner oder  Robbe. So kann man nämlich auch Modellflugzeuge 
steuern.

von reflection (Gast)


Lesenswert?

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

von STK500-Besitzer (Gast)


Lesenswert?

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.

von Karsten (Gast)


Lesenswert?

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.

von Daniel R. (zerrome)


Lesenswert?

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...

von Gast (Gast)


Lesenswert?

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.

von Daniel R. (zerrome)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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.

von Karsten (Gast)


Lesenswert?

An die Plattform eine Stange ranbasteln und unten ein Gewicht ranhängen. 
Funktioniert wunderbar und benötigt nichtmal Strom.

von Olli (Gast)


Lesenswert?

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...)

von STK500-Besitzer (Gast)


Lesenswert?

>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

von STK500-Besitzer (Gast)


Lesenswert?

>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"?!).

von Daniel R. (zerrome)


Lesenswert?

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?

von ?? (Gast)


Lesenswert?

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 ?

von Daniel R. (zerrome)


Lesenswert?

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..

von Daniel R. (zerrome)


Angehängte Dateien:

Lesenswert?

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 :)

von Matthias B. (matthias882)


Lesenswert?

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...

von Peter D. (pdiener) Benutzerseite


Lesenswert?

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

von Daniel R. (zerrome)


Angehängte Dateien:

Lesenswert?

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 ?!?

von Zombo (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.