J24F8: mit Windows, Beschleunigung ermitteln

Dies ist das deutsche Forum für alle Themen um den JoyWarrior. Beiträge bitte nur in Deutsch.

Moderator: Guido Körber

Post Reply
furious
Posts: 2
Joined: Thu Aug 09, 2012 2:21 am

J24F8: mit Windows, Beschleunigung ermitteln

Post by furious »

Hallo Community,

ich möchte mit einem J24F8 die Beschleunigungs-, Verzögerungs- und Seitenbeschleunigungswerte eines PKWs visualisieren. Der Chip ist auf +/-2G und einer Frequenz von 25 Hz eingestellt. Wie ich diversen Beschreibung entnehmen konnte, kann auf den Chip als Joystick zugegriffen werden - finde ich toll und war auch mit dem Aufruf "joyGetPos" der "winmm.dll" erfolgreich.

Nun werden mir Werte zwischen 0 und 65535 geliefert für die x- und y-Achse geliefert. Ich habe viel im Forum gelesen und das Datenblatt einstudiert, aber finde keinen eindeutigen Weg, die Werte zu verrechnen, um auf einen Wert Beschleunigungswert in "m/s²" zu kommen.

Wo finde ich weitere Dokumentationen, um hier voran zu kommen oder kann mir jemand den vorgesehenen Weg nennen, wie über den Joystick-Anschluß die Beschleunigung ermittelt werden soll? Laut Datenblatt ist bei 2G ein maximaler Wert von 4096 zu erwarten. Woher weiß ich aber, ob 65535 tatsächlich der korrekte Referenzwert ist?

Vielen Dank für Eure Hilfe!
Danke!
Guido Körber
Site Admin
Posts: 2856
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Re: J24F8: mit Windows, Beschleunigung ermitteln

Post by Guido Körber »

Der Joysticktreiber versucht immer die Daten von Geräten auf 16 Bit zu normieren. Bei den meisten Joystick APIs gibt es die Option unkalibrierte Daten zu lesen, das wären dann die Rohdaten vom Sensor.
furious
Posts: 2
Joined: Thu Aug 09, 2012 2:21 am

Re: J24F8: mit Windows, Beschleunigung ermitteln

Post by furious »

Ich habe die möglichen API-Funktionen angesehen, finde aber nichts passendes.
Gibt es alternative Wege auf die J24F8 zuzugreifen?
User avatar
Christoph Jung
Posts: 670
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: J24F8: mit Windows, Beschleunigung ermitteln

Post by Christoph Jung »

Die Funktionen sind in joyPosEx (oder so ähnlich). In den "Ex" funktionenen gibts ne Einstellune, wo man sagen kann, dass man die RAW Daten lesen möchte.
Abteilung: Softwareentwicklung
Folge uns auf Twitter
Follow us on twitter
beschlmesser
Posts: 2
Joined: Mon Nov 19, 2012 10:46 am

Re: J24F8: mit Windows, Beschleunigung ermitteln

Post by beschlmesser »

Ich habe einen JoyWarrior 24F14 und lese momentan meine Daten ebenfalls über die Funktion joyGetPos aus. Ich bekomme die Daten auch als 16Bit-Wert und somit Werte von 0 bis 65535.
Eingestellt habe ich einen Messbereich von -2g bis 2g. Ich gehe nun davon aus, dass für die durch joyGetPosEx erhaltenen Werte und der Beschleunigung folgende Beziehung gilt:

Beschleunigung : -2g -1g 0g 1g 2g
Glieferter digitaler Wert: 0 16383 32767 49151 65535

Ich nehme an, dass sich die Zwischenwerte linear verteilen. Wenn ich dann hier allerdings lese, dass eventuell "unkalibrierte" Daten eingelesen werde, bin ich mir nicht mehr so sicher, ob diese Vorgehensweise so richtig ist.
Soweit ich das sehen kann, hat die Funktion JoyGetPosEX auch keine Einstellung um RAW Daten zu lesen.

Kann mir vielleicht jemand sagen ob diese Vorgehensweise so korrekt ist?


Kann die Genauigkeit der Beschleunigungswerte über einen Median-Filter erhöht werden? In der Dokumentation steht zwar, dass die Werte bereits über einen Median gefiltert werden(wodurch eine weitere Meidanfilterung ja unnötig wäre)... ich bin mir aber nicht sicher ob dass auch gilt, wenn ich die Werte über JoyGetPos ausgelesen werden.

Danke schon mal für Antworten :-)


Gruß

beschlmesser
User avatar
Christoph Jung
Posts: 670
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: J24F8: mit Windows, Beschleunigung ermitteln

Post by Christoph Jung »

Ich würde die vorgegebenen 14 Bit nutzen. Bei den 16 Bit Werden handelt es sich um einen von Windows aufegeblasenen Wert (nicht die RAW Daten).
Lieber die RAW-Daten nehmen, damit lässt sich besser rechnen.

Code: Select all

JOYINFOEX m_data; 
m_data.dwFlags = JOY_RETURNRAWDATA | JOY_RETURNBUTTONS;

//Aulsesen

Und mit den Werten verhält sich das so, dass von 0 bis 16383 immer z.B. -1G ... 1G oder -4G ... 4G sind. Die Werte sind dazwischen linear verteilt.
Die Werte werden mit einem Media-Filter nicht genauer aber unempfindlicher da hier stöße ausgefiltert werden können.
Abteilung: Softwareentwicklung
Folge uns auf Twitter
Follow us on twitter
Guido Körber
Site Admin
Posts: 2856
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Re: J24F8: mit Windows, Beschleunigung ermitteln

Post by Guido Körber »

Der Medianfilter senkt das Rauschen des Signals, an der Genauigkeit ändert sich nichts. Mit dem Filter im JoyWarrior wird die zeitliche Auflösung auch nicht reduziert, da intern ein Oversampling passiert, die Daten werden 8x schneller aus dem Sensor gelesen, als dann über den USB geschickt.
User avatar
Christoph Jung
Posts: 670
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: J24F8: mit Windows, Beschleunigung ermitteln

Post by Christoph Jung »

Ah sorry nicht 14 Bit, sondern 10 Bit.... Ist ja der JW24F8
Abteilung: Softwareentwicklung
Folge uns auf Twitter
Follow us on twitter
beschlmesser
Posts: 2
Joined: Mon Nov 19, 2012 10:46 am

Re: J24F8: mit Windows, Beschleunigung ermitteln

Post by beschlmesser »

Danke für die fixe Antwort!

Meine frage hat sich sogar auf den F14 bezogen, also war das mit den 14 Bit schon richtig ;-).
Hab mir nur grade ewig einen Wolf gesucht bis ich die enum gefunden habe, die ich für dwFlags benötige.

Falls noch jemand auf der suche nach ihnen ist, hier sind sie:

Code: Select all

  public enum JoystickFlags
        {
            JOY_RETURNX = 0x1,
            JOY_RETURNY = 0x2,
            JOY_RETURNZ = 0x4,
            JOY_RETURNR = 0x8,
            JOY_RETURNU = 0x10,
            JOY_RETURNV = 0x20,
            JOY_RETURNPOV = 0x40,
            JOY_RETURNBUTTONS = 0x80,
            JOY_RETURNRAWDATA = 0x100,
            JOY_RETURNALL = (JOY_RETURNX | JOY_RETURNY | JOY_RETURNZ | JOY_RETURNR | JOY_RETURNU | JOY_RETURNV | JOY_RETURNPOV | JOY_RETURNBUTTONS)
        };
Durch die Einstellung

Code: Select all

JOYINFOEX m_data; 
m_data.dwFlags = JOY_RETURNRAWDATA | JOY_RETURNBUTTONS;

//Aulsesen
kriege ich nun 14 Bit Daten. Ich weiß zwar nicht genau wieso die Daten nicht mehr 16 Bit sind, aber es scheint sich bei den Daten um die von Windows unbehandelten RAW-Daten zu handeln. Jetzt muss ich nur noch meinen Sensor kalibrieren, da er mir leider für die Z-Achse eine Erdanziehung von 0,95g bzw. -1,05g angibt.

Vielen Dank nochmal :-)
Post Reply