PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RN Control + 3 Achsen Accelerometer + Echtzeit



dirtyklaus
22.08.2009, 00:58
Hallo,

habe den Control RN-Contro AVR32 - und den 3 Achsen Accelerometer.
Wenn ich die 3 Achsen über die AD Wandler einlese, dann dauert es sehr lange - zumindest für Echtzeit - bis die 3 Werte im Mega32 umgewandelt sind. Das liegt sicher an der approximativen Wandlung, die dauert halt.

Das ist mir aber zu langsam, denn je größer die Voltzahlen werden umso länger dauert die Wandlung.

Ich möchte über einen angesteuerten Servo - und die echtzeit Lagererkennung des Sensors eine Kamera immer in die gleiche Richtung zeigen lassen - und das nützt nichts wenn die Messung dann 1/2 Sekunde später erst beim Servo ankommt und dieser reagiert.

Gibt es eine Möglichkeit die Wandlung viel schneller vorzunehmen - wer weiß da einen Trick?

LG

Klaus

Suggarman
22.08.2009, 08:54
Wenn das eine halbe Sekunde dauert, hängt etwas anderes. Die Wandlung geht doch viel schneller.

mfg

Stefan

radbruch
22.08.2009, 09:56
Hallo

Ich bin auch der Meinung, dass bei 1/2 Sekunde Wartezeit nicht nur das Wandeln der analogen Werte bremst.

Zum Thema "schnelle Wandelzeiten mit dem ADC" hatte ich früher schon mal etwas geforscht. Der "Trick" ist ein gnadenlos kleiner Prescaler. Vielleicht hilft das allgemein beim Auslesen von Lage- und Beschleunigungssensoren in schnellen Regelkreisen:
https://www.roboternetz.de/phpBB2/viewtopic.php?t=33070

Meine Anwendung war die Kamera am AVR:
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=33228

Gruß

mic

dirtyklaus
23.08.2009, 19:20
Danke für die schnelle Hilfe, werde es mal probieren.

Gruß

Klaus

dirtyklaus
09.09.2009, 00:29
Hi,

habe mal ein Video gedreht wie es jetzt funktioniert. Alle Werte werden korrekt übertragen und auch empfangen. Hier der Link zum Video:

http://www.youtube.com/watch?v=vkqEk1hFiYE

Gruß - Klaus

holzi
09.09.2009, 05:23
Guten Morgen Klaus,
das sieht wirklich gut aus. Jedenfalls um einiges besser als bei mir.

http://www.youtube.com/watch?v=It1FpnNcyvc

Könntest Du Deinen Code hier zur Verfügung stellen?

Gruß Peter

dirtyklaus
09.09.2009, 19:48
Hi,

Der mega32 liest die Daten vom XYZ Chip und gibt sie ohne veränderung am RS232 aus (3 Werte, je von 0..360)

Am PC lese ich die RS232 Daten mit PureBasic wieder ein, und die drei Werte landen in x_in, y_in, z_in - noch ungefiltert, also sehr hackelig - wie bei dir auf dem Video.

In PureBasic filtere ich dann die 3 Daten mit einem Tiefpassfilter - das ist nichts anderes als eine Samplekette durch die alle werte durchgeschoben werden. Z.B in einem Array von 10 Samples stehen nun die letzten 10 eingelesenen Werte von X. Wenn ich die 10 Samples addiere und durch 10 Teile erhalte ich den Mittelwert.
Die Anzahl der Samples ist als Variable, da ich damit die Steilheit des Filters einstellen kann. Probier mal 100 als "Tiefpass".

Hier der Code des Tiefpass - in PureBasic, solte aber verständlich sein:
_________________________________

dim count as byte ; Hilfsvar
dim tiefpass as byte ; die Anzahl der Samples

; die Länge/Steilheit des Filters
tiefpass = 10


; jetzt die Arrays in denen die Samples landen
dim array filter_x.w(tiefpass) as word
dim array filter_y.w(Tiefpass) as word
dim array filter_z.w(Tiefpass) as word


; ---------- FILTER 1 ------------------
; alle einen nach links schieben
; ich benutze vom Array die Stelle 0 nicht
; der letzte Werte wird später der neue

For count = 2 To tiefpass
filter_x.w(count-1)=filter_x.w(count)
filter_y.w(count-1)=filter_y.w(count)
filter_z.w(count-1)=filter_z.w(count)
Next count

; den letzten Sample mit dem aktuell eingelesenen wert füllen
filter_x.w(tiefpass)=x_in
filter_y.w(tiefpass)=y_in
filter_z.w(tiefpass)=z_in

; die Summe löschen
sum_x.w=0
sum_y.w=0
sum_z.w=0

; und den Mittelwert bilden
For count= 1 To tiefpass
sum_x.w = sum_x.w+filter_x.w(count)
sum_y.w = sum_y.w+filter_y.w(count)
sum_z.w = sum_z.w+filter_z.w(count)
Next count


; und noch durch die Anzahl der Samples teilen
; und das Ergebnis steht in den folgende Vars:
x_smooth = Abs(sum_x.w / tiefpass)
y_smooth = Abs(sum_y.w / tiefpass)
z_smooth = Abs(sum_z.w / tiefpass)


; voila

_______________________________

Der Nachteil dieses Tiefpasses: Es dauert natürlich bis die BErechnung getätigt ist, und zwar solange wie die Länge des Arrays (tiefpass).

Habe in meinem Code 3 kleine Filter hintereinandergeschaltet - das kannst du auch mal versuchen.

gruß - Klaus

holzi
12.09.2009, 18:13
Hallo Klaus,
ich habe mir nun auch einen Tiefpassfilter in meine Software eingebaut. Dabei handelt es sich um eine gleitende Mittelwertbildung über 10 Messwerte. Siehe da, nun ist die Anzeige wirklich OK. Wobei ich die Z-Werte zur Veranschaulichung nicht über einen Tiefpassfilter gebe. Der Unterschied ist klar ersichtlich.
http://www.youtube.com/watch?v=-retG343Vbk
Danke für Deinen Tip

Gruss Peter

dirtyklaus
12.09.2009, 23:12
Das sieht doch super aus. Auch das Z nicht gefiltert ist - ist nicht schlecht. Vielleicht kannst du ja dort einen kleiner Filter nehmen (also nur ein bisschen beruhigen 2-3 Samples).

3 Fragen habe ich noch:

1) Was ist das denn für eine Software in der du das auf dem Monitor anzeigst? Sieht aus wie ein Flugsimulator???

2) Was ich nicht ganz verstehe sind die Werte, die der XYZ Chip ausgibt. Was passiert denn, wenn ich mich um meine Achse drehe? Eigendlich gar nichts - oder?
X und Y sind mir klar - aber was zeigt Z an?

3) wie bekommst du so eine Superqualität auf youtube? Das sieht ja echt scharf aus. Welche Auflösung hat dein Originalvideo und welchen Codec?


Gruß - Klaus


Frage 4) was willst du denn mit den XYZ Daten anfangen?

holzi
13.09.2009, 07:23
Guten Morgen Klaus,
die Z-Achse brauche ich nicht. Ich habe sie nur zur Veranschaulichung ungefiltert momentan im Testprogramm gelassen, damit die Filterung klar zu erkennen ist.
Zur Software: Sie ist von mir komplett selber geschrieben. Schau Dir mal meine Web-Seite an, dann weisst Du, um was es da geht.
Die Kamera ist eine normale WEB-Cam, die ich als Werbung geschenkt bekommen habe. Ich erstell den Film dann mit Camtasia. Also wirklich nichts besonderes. Ich muss gestehen, die Auflösung weiss ich gar nicht. Muss ich mal nachschauen.
Gruss Peter

dirtyklaus
13.09.2009, 14:31
Ich glaube die z Achse brauche ich auch nicht - finde ich eher verwirrend - die Daten.

Die Web Site ist ja cool. Da hats du dir ja was vorgenommen. Wow.

Was erzeugt den Campasia für eine Datei? Eine WMV oder eine MOV datei?

Gruss Klaus

holzi
13.09.2009, 17:01
Das kannst Du Dir einstellen. Ich erzeuge mir eine AVI. Einzustellen ist auch Bildschirminhalt mit oder ohne Kamera gleichzeitig.

Gruss Peter