J24F8: mit Windows, Beschleunigung ermitteln
Moderator: Guido Körber
J24F8: mit Windows, Beschleunigung ermitteln
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!
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!
-
- Site Admin
- Posts: 2856
- Joined: Tue Nov 25, 2003 10:25 pm
- Location: Germany/Berlin
- Contact:
Re: J24F8: mit Windows, Beschleunigung ermitteln
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.
Re: J24F8: mit Windows, Beschleunigung ermitteln
Ich habe die möglichen API-Funktionen angesehen, finde aber nichts passendes.
Gibt es alternative Wege auf die J24F8 zuzugreifen?
Gibt es alternative Wege auf die J24F8 zuzugreifen?
- Christoph Jung
- Posts: 670
- Joined: Sun Oct 08, 2006 3:43 pm
- Location: Germany / Berlin
- Contact:
Re: J24F8: mit Windows, Beschleunigung ermitteln
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.
-
- Posts: 2
- Joined: Mon Nov 19, 2012 10:46 am
Re: J24F8: mit Windows, Beschleunigung ermitteln
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
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
- Christoph Jung
- Posts: 670
- Joined: Sun Oct 08, 2006 3:43 pm
- Location: Germany / Berlin
- Contact:
Re: J24F8: mit Windows, Beschleunigung ermitteln
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.
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.
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
Die Werte werden mit einem Media-Filter nicht genauer aber unempfindlicher da hier stöße ausgefiltert werden können.
-
- Site Admin
- Posts: 2856
- Joined: Tue Nov 25, 2003 10:25 pm
- Location: Germany/Berlin
- Contact:
Re: J24F8: mit Windows, Beschleunigung ermitteln
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.
- Christoph Jung
- Posts: 670
- Joined: Sun Oct 08, 2006 3:43 pm
- Location: Germany / Berlin
- Contact:
Re: J24F8: mit Windows, Beschleunigung ermitteln
Ah sorry nicht 14 Bit, sondern 10 Bit.... Ist ja der JW24F8
-
- Posts: 2
- Joined: Mon Nov 19, 2012 10:46 am
Re: J24F8: mit Windows, Beschleunigung ermitteln
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:
Durch die Einstellung
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 :-)
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)
};
Code: Select all
JOYINFOEX m_data;
m_data.dwFlags = JOY_RETURNRAWDATA | JOY_RETURNBUTTONS;
//Aulsesen
Vielen Dank nochmal :-)