2,5V ist wohl das Ergebnis der Messträgheit des Multimeters. Ich tipp auf ein schnellen Wechsel zwischen 0 und +5V mit ordenlicher Frequenz. Deswegen hüpft der auch so oft in deine INT Routine. Da kommt eben auch so viel an ;-)
Druckbare Version
2,5V ist wohl das Ergebnis der Messträgheit des Multimeters. Ich tipp auf ein schnellen Wechsel zwischen 0 und +5V mit ordenlicher Frequenz. Deswegen hüpft der auch so oft in deine INT Routine. Da kommt eben auch so viel an ;-)
Hallo alle miteinander,
ja mich gibts auch noch \:D/ und ich hab endlich mal wieder was zu berichten.
Leider hab ich immer noch nicht rausbekommen warum mein Programm so beharrlich den Dienst verweigert aber auch da bin ich noch dran. (Bin grad dabei mir auch so ein Selbstbau-Oszi zu basteln, hab aber dummerweise das vermaledeite gLCD kaputt gemacht und muss jetzt 3-4 Wochen auf ein neues aus Fernost warten.) Also bei der Großbaustelle gehts nicht voran, darum hab ich mal an nem anderen Ende angefangen (mehrere Baustellen mag ich zwar nicht so gerne (Multitasking ist nix für mich) aber ich möchte auch mal weiter kommen), drum gibts jetzt ein paar Ergebnisse von der Lageerkennung:
ACC's und Gyros funzen. Die Werte werden wunderbar eingelesen und warten jetzt darauf verarbeitet zu werden. Bei den Acc-werten hab ich schon ne kleine Vorregelung programmiert, da die Werte ziemlich schwanken (+- 25 von 255). Hab das ganze bis jetzt auf etwa +- 2 drücken können allerdings bin ich mir nicht sicher ob schnelle Änderungen davon betroffen sind. Ich hab mal ein kleines Video von den Werten gemacht aber leider ist die Quali nicht überragend: http://www.youtube.com/watch?v=48d_R0ncIbA (Man sieht (wenn man was sieht ](*,) ) wie die Werte alle schön mitgehen.)
Die Acc-Regelung nimmt momentan 32 Werte und errechnet den Mittelwert. Allerdings werden nur Werte verarbeitet die im Bereich von +- 3 zum vorhergehenden Wert liegen (also Spitzen werden nicht verarbeitet). Nun könnte es zwar auch passieren das sehr schnelle Änderungen erst als Spitzen erkannt werden und es somit eine kleine Zeitverzögerung gibt bis die schnelle Änderung erkannt wird aber darum mach ich mir jetzt keine Gedanken.
Ich hab auch schon mal ein bissel gespielt und geschaut ob ich den mit den Acc-werten den Bot in Balance halten kann aber das hat noch nicht wirklich geklappt. Ein Video gibts hier: http://www.youtube.com/watch?v=2b4sTebS06s
Die Regelung war da nur fix zusammengeschustert und viel zu grob aber man kann schon erkennen das es in die richtige Richtung geht.
Als nächstes werde ich dann versuchen die acc- und gyro-werte zu einem zu verrechnen und die Servos genauer zu steuern. (Und hoffentlich noch vor Weihnachten damit fertig zu werden 8-[ \:D/ )
Gruß
hi Murdoc_mm,
freut mich wirklich, daß es weitergeht \:D/
ich hatte schon befürchte, daß es vorbei ist, mit dem Mono-Wheel :cry:
Das Video mit den Gewichten zeigt deutlich, wie der Sensor arbeitet.
Wie machen sich die neuen Servo´s; halten die Lager?
Die Ausschläge sind, wie Du auch schreibst, noch etwas heftig.
Was sind ACC´s? Den Begriff kenne ich nicht.
liebe Grüße,
Klingon77
Na, aufgegeben wird erst bei Totalschaden und den werde ich natürlich tunlichst vermeiden. Aber viel schneller werd ich wohl nicht vorankommen (zu wenig Zeit, zu viel Arbeit).Zitat:
Zitat von Klingon77
Naja, die alten sind ja nur kaputt gegangen weil ich sie ständig an den Anschlag hab fahren lassen. Das muss ich auch noch ordentlich vermeiden da momentan nur ein Provisorium programmiert ist.Zitat:
Zitat von Klingon77
ACC ist glaube der englische Begriff für Beschleunigungssensoren. Ist auf jeden Fall viel kürzer.Zitat:
Zitat von Klingon77
Gruß
ACC = acceleration
hi Murdoc_mm,
keine Ahnung wie viel Ahnung du schon von dem ganzen Regelkram hast, ich habe mittlerweile etwas Erfahrung mit ACCs und Gyros angesammelt. Du musst auf jeden Fall das Integral der Gyrowerte (=Absolutwinkel) für deine Regelung verwenden. Accs taugen eigentlich nur etwas um den Drift der Gyros heraus zu bekommen.
Also: Integral des Gyros nutzen um den aktuellen Winkel zu erhalten, dann immer das Gyrointegral langsam in Richtung des ACC-Signals ziehen. Dadurch driftet das Gyro nicht mehr, trotzdem ist deine Regelung sehr schnell.
Ans Gyro muss ein Highpassfilter, an den ACC ein Lowpassfilter (beides am besten als Elektronikschaltung). Deine Regelung sollte dann mindestens mit 150 Hz laufen. Das kann man leicht testen indem man alle 1000 Cycles eine LED an- und ausschaltet und mit ner Stoppuhr die Zeit dazwischen misst.
Falls du noch mehr Hilfe brauchst kann ich dir ein paar mehr Infos geben. Meine Programme sind aber alle in BASCOM.
Ich kann Mathe zwar gut leiden aber mit Regeltechnik kannst du mich jagen. Liegt mir irgendwie nicht.Zitat:
Zitat von Willa
Es fängt schon an das ich nicht mal weiß was nen Integral ist.
Meine momentane "Auswertung" liefert mir etwa 10 Werte pro Sek. \:D/ (Ist aber kein bissel optimiert sondern erstmal Grundlagen(er)forschung und learning-by-doing)
--> also für Hilfe währe ich sehr dankbar, besonders in Bascom, da ich auch damit programmier.
Gruß
Ich gucke mal ob ich meine Regel-Beschreibung noch in meinen gesendeten emails finde, dann poste ich hier eine etwas ausführlichere Variante.
Auf jeden Fall wirst du etwas mit den ACCs und Gyros spielen müssen bis du gute Messwerte bekommst.
hier, gefunden:
Meine Filter sind Hardware und Software. Aber evtl. reicht es den Hoch- und den Tiefpass nur als Hardware auszuführen (Kondensator + Widerstand). Die Cutoff Frequenz könnte z.B. beim ACC 1-5Hz sein, beim Gyro 0,04 - 0,08 Hz oder etwas in der Größenordnung.
Die Mathematik ist im prinzip ziemlich einfach:
Als erstes mal misst du was dein Gyro in Ruhe als Pegel ausgibt. Diesen Wert nennen wir mal "Gyro_init". Den Wert ziehst du jetzt immer von deinem Gyro ab, so dass es null ausgibt wenn es in Ruhe ist, positive Werte bei linksdrehung und negative bei rechtsdrehung (oder andersrum). Dieser Wert geht als P-Anteil in deine Regelung ein.
Nun bildest du von dem Wert das Integral. Das heisst einfach dass du bei jedem Programmdurchlauf den Gyrowert addierst. Wenn sich nix bewegt, dann bleibt das null, wenn du es nach links drehst wird der Wert immer größer (summiert sich eben auf). Stoppst du nun die Drehung bleibt der Wert hoch. Erst wenn du es wieder zurück drehst geht es wieder auf null. Leider sind Gyros driftbehaftet, d.h. das Integral wird dir auch wenn du das Gyro nicht bewegst irgendwann (meist ziemlich schnell) abhauen, dein Integral rast ins "unendliche". Daran kannst du es hindern mit folgender einfachen Gleichung:
x_gyro_i ist das gyrointegral
Xacc ist der Wert direkt aus deinem Acc (wahrscheinlich musst du den hochskalieren damit er ungefähr zum gyrointegral passt, d.h. wenn der ACC 90° gekippt ist sollte er ungefähr einen Wert ausgeben der so groß ist wie das integral vom 90° gekippten gyro.) Das Ergebnis nennt sich dann "Komplementärfilter" (ein fieses Wort für eine einfache Sache), das funktioniert angeblich ähnlich gut wie ein Kalmanfilter (auch bei diesem Wort erstarrt man vor Ehrfurcht). Nur die richtigen Parameter zu finden ist bei ersterem wohl schwieriger.
'Driftkorrektur mit Hilfe des ACCs:
do
blablabla
If X_gyro_i > Xacc Then
X_gyro_i = X_gyro_i - 3
End If
If X_gyro_i < Xacc Then
X_gyro_i = X_gyro_i + 3
End If
blablabla
loop
So wird der integral-wert ständig dem acc nachgeführt. Man erhält die Absolutgenauigkeit eines ACCs gepaart mit der schnellen Reaktion eines Gyros. Die Werte richtig einzustellen ist ein bisschen Fummelei.
Hi Murdoc_mm,
schön, dass es bei Dir mit dem MW weiter geht,
das Video hat mir gut gefallen, gerade auch die sehr schnelle Reaktion der
Servos. Ich denke, dass der Ansatz von Willa gut ist.
Mir scheint nur - bei Deinem "statischen" Versuch - der Kippwinkel noch zu
gross zu sein. Du müsstest vielleicht mal überprüfen, welcher Neigungswinkel im Stand bei den Massenverhältnissen Gesamtmasse(13kg?) zu Pendelmasse( <=1kg ?) und
den Schwerpunkten (maximale Auslenkung Pendelschwerpunkt von Radlängsachse < 6cm) überhaupt beherrschbar ist.
In Fahrt ist das unkritischer, da dann ja mehr Stabilität durch die rotierenden Massen generiert wird.
Gruß
mausi_mick