mikrocontroller.net

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


Autor: Daniel R. (zerrome)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Gast (Gast)
Datum:

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

Stichwort: "Regelungstechnik"

Autor: Philipp H. (swissrookie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stichwort: "Servo stört Analogmessung??"

Autor: ::: (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Daniel R. (zerrome)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Daniel R. (zerrome)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm, mehr als 50Hz probiere ich mal aus.

Wird aber am schwingen nicht viel ändern glaub ich

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Daniel R. (zerrome)
Datum:

Bewertung
0 lesenswert
nicht 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^^

Autor: Michael K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Daniel R. (zerrome)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Andreas Häusler (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andreas Häusler (Gast)
Datum:

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

Autor: Daniel R. (zerrome)
Datum:

Bewertung
0 lesenswert
nicht 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 :)

Autor: Andreas Häusler (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ;-)

Autor: Daniel R. (zerrome)
Datum:

Bewertung
0 lesenswert
nicht 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 :)

Autor: Reinhard Kern (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: reflection (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Daniel R. (zerrome)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Daniel R. (zerrome)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karsten (Gast)
Datum:

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

Autor: Olli (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...)

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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=...

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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"?!).

Autor: Daniel R. (zerrome)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: ?? (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Daniel R. (zerrome)
Datum:

Bewertung
0 lesenswert
nicht 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..

Autor: Daniel R. (zerrome)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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 :)

Autor: Matthias Becher (matthias882)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Peter Diener (pdiener) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Daniel R. (zerrome)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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 ?!?

Autor: Zombo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.