Hallo zusammen. :)
ich wende mich heute an euch, da ich mit meinem Wissen nicht weiter
komme und hoffe, hier die passenden Denkanstöße und/oder Lösungsansätze
mitgeteilt zu bekommen.
Für alle Versuche in diese Richtung, und die damit verbundene
Inanspruchnahme eurer Zeit, möchte ich mich im Vorfeld bereits bedanken!
Thematik
Ich bin einer der Menschen, der gerne und viel am PC spielt, unter
Anderem auch Simulatoren. Und da ich diese Spiele sehr gerne
"realitätsnah" spielen möchte, baue ich mir hierfür diverse
Erweiterungen, wie z.B. Seitenkonsolen.
In der Vergangenheit habe ich mir zwei PC-Joysticks gekauft und diese so
modifiziert, dass sie Griffstücke aus Baggern besaßen. Somit war das
"Feeling" deutlich angenehmer und vor allem gewohnter (ich selber bin
Servicetechniker für Baumaschinen).
Problem
Die meisten PC-Controller (unabhängig ob Joystick oder Gamepad) nutzen
Potentiometer zum Erfassen der Analogsignale und können demzufolge mit
ihren verbauten Mikrocontroller auch nur diese Art Signal verarbeiten.
Joysticks aus Baumaschinen hingegen verwenden heutzutage fast nur noch
Hall-Sensoren zur Erfassung von elektrischen Winkelsignalen.
Aus diesem Grund konnte ich die Daumenräder (Hall-Sensor) der
Baggergriffstücke (stammten aus einem ATLAS-Bagger) nicht verwenden, da
der Mikrocontroller des verwendeten PC-Joysticks (Logitech Extreme 3D
Pro) diese nicht verarbeiten konnte (ein Versuch endete mit einem
permanent schwankendem Signal im Spiel -> der PC "dachte" da wackelt
jemand die ganze Zeit am Daumenrad). Hall-Sensoren sind eben deutlich
empfindlicher als Potis. :D
Ziel
Zwei separate Joysticks (einen für links, einen für rechts) als
Eingabegeräte am PC verwenden zu können, die Hall-Sensoren zur Erfassung
nutzen.
Gegebenheiten
Nach etwas Recherche habe ich ein Gamepad gefunden, das seine
Analogsticks via Hall-Sensoren erfasst. Hierbei handelt es sich um das
"Gamesir T4 Kaleid". Dieses nutzt je einen Hall-Sensor für die X- und
Y-Achse. Die Spannungsversorgung des Gamepads beträgt 5,0 Volt via
USB-C-Verbindung zum PC (kein kabelloser Betrieb), die des Sensors
selbst 3,3 Volt.
Jeder Sensor liefert ein Signal von 0,0 bis 3,3 Volt (Anschlag <->
Anschlag im 1-Achs-Betrieb) und in Mittelstellung 1,65 Volt. Im
Diagonalbetrieb (gleichzeitig in X- und Y-Richtung) sind die Minimal-
bzw. Maximalwerte nicht am Endpunkt, da der Bewegungsraum ja kreisfürmig
und nicht quadratisch ist.
Als Joysticks sollen zwei aus einem "Bobcat S450 mit vollelektrischer
Steuerung" zum Einsatz kommen. Diese werden original mit 12 Volt
betrieben und sind an die Maschine via CAN-Bus angeschlossen. Um dies zu
gewährleisten besitzt jeder Joystick eine eigene Steuerplatine.
Die Hallsensoren, die original verbaut waren, waren "Micronas HAL 401",
welche zwei gegenläufige Signale ausgeben. Verbaut waren dabei je
Joystick 4 Stück, also 2 für die X-Achse und 2 für die Y-Achse, wobei
die Paare jeweils gegenüber angeordnet sind. Somit ergibt sich für jede
Achse, dass insgesamt 4 Signale erfasst werden, in Summe also 8 Signale
je Joystick.
Ein erster Versuch, diese Hall-Sensoren (je einer für X und Y und auch
nur ein Ausgang je Sensor) direkt (auf der kleinen Platine der "HAL 401"
sind noch ein paar Kondensatoren und Widerstände, ich vermute zur
Entstörung und Versorgunsspannungsstabilisierung) an das Gamepad mit 3,3
Volt anzuschließen, ergab, dass das Signal des "HAL 401" in Ruhestellung
nicht "mittig" lag und auch einen viel zu geringen Ausschlag bei
Ansteuerung brachte (getestet über die Webseite "hardwaretester.com").
Erster Problempunkt hierbei war schon, dass der "HAL 401" laut
Datenblatt mit einer Versorgungsspannung von 4,8 bis 12 Volt angegeben
ist.
Also habe ich mich etwas belesen und mir verschiedene Hall-Sensoren
bestellt. Dabei waren sowohl Bipolare als auch Unipolare, damit ich ein
wenig mit dem Einfluss des Magnetfeldes "spielen" und testen kann.
Nach all den Versuchen zeigte sich, dass die "besten" Ergebnisse mit dem
"Allegro A1304ELHLX-T" erziehlt worden, wenn gleich sie nicht einmal in
die Nähe von "so soll es sein" kamen. Ausgewechselt wurden alle 4
Sensoren auf der Platine (Sensor 1 und 3 = Y-Achse; Sensor 2 und 4 =
X-Achse).
Folgende Messwerte der Sensoren ergaben sich anschließend:
Mittelstellung des Joysticks:
- Sensor 1 -> 1,05 Volt
- Sensor 3 -> 1,06 Volt
- Sensor 2 -> 1,01 Volt
- Sensor 4 -> 1,05 Volt
Anschlag Vor:
- Sensor 1 -> 1,20 Volt
- Sensor 3 -> 0,82 Volt
- Sensor 2 -> 1,02 Volt
- Sensor 4 -> 1,05 Volt
Anschlag zurück:
- Sensor 1 -> 0,74 Volt
- Sensor 3 -> 1,24 Volt
- Sensor 2 -> 1,02 Volt
- Sensor 4 -> 1,05 Volt
Anschlag links:
- Sensor 1 -> 1,05 Volt
- Sensor 3 -> 1,05 Volt
- Sensor 2 -> 0,73 Volt
- Sensor 4 -> 1,22 Volt
Anschlag rechts:
- Sensor 1 -> 1,06 Volt
- Sensor 3 -> 1,07 Volt
- Sensor 2 -> 1,19 Volt
- Sensor 4 -> 0,79 Volt
Alles in Allem also ein recht kleiner Arbeitsbereich der Sensoren.
Außerdem
merkt man nach kurzem Überlegen (am Beispiel von Sensor 1), dass der
Nullpunkt des Joysticks (1,05 Volt) nicht der Mittelpunkt des
Spannungsverlaufes (
Volt) ist.
Ein physischer Umbau des Joysticks, sodass die Sensoren näher am
Magneten sind oder gar andere Magneten ist für mich nicht realisierbar.
Vorgaben / Hindernisse
Da das Gamepad via USB an den PC angeschlossen wird, habe ich ohnehin
nur maximal 5 Volt als Spannungsquelle zur Verfügung. Allerdings konnte
ich auf der Platine keinen frei zugänglichen Punkt finden, der mir mit
Sicherheit die 5 Volt vom USB-Port zur Verfügung stellt. Sicher ist nur
die Versorgung mit 3,3 Volt am Anschluss des ehemaligen Analoggebers
(ist bereits ausgelötet).
Fragestellung
Was in meinem Augen nun gemacht werden müsste, wäre die Wandlung der
Spannung des Bereiches (im Falle des Sensor 1) von 0,74 bis 1,20 Volt
auf 0,05 bis 3,3 Volt, wobei 1,05 Volt eben 1,65 Volt entsprechen
müssten. Der Spannungsverlauf eines Sensors ist meiner Auffassung nach
nicht linear. Meine Idee hierzu war, das man jeweils das
zusammengehörende Sensorpaar (Sensor 1 zsm. mit Sensor 3; Sensor 2 zsm.
mit Sensor 4) auswertet, bspw. durch Mittelwertbildung. Dies sollte ja
einen geradlinigen Verlauf ergeben.
Zugegebener Maßen habe ich das aber noch nicht berechnet, ob dem auch
wirklich so ist; wird aber noch nachgeholt.
_Frage 1_: Kann ich die Wandlung der Spannung mit einer elektronischen
Schaltung realisieren? Und wenn ja, in welcher Form?
_Frage 2_: Kann man die Wandlung über einen Mikrokontroller laufen
lassen und den gewandelten Wert direkt aus einem Analogausgang auf den
Eingang des Gamepads schicken?
Vielen Dank und Gruß,
CHI
Christian schrieb:> _Frage 2_: Kann man die Wandlung über einen Mikrokontroller laufen> lassen und den gewandelten Wert direkt aus einem Analogausgang auf den> Eingang des Gamepads schicken?
Ich fang mal mit Frage 2 an:
Wenn du einen Mikrocontroller in Betracht ziehen möchtest, dann kannst
du einen nehmen, der nativ USB mitbringt und sich am PC als
Joystick/Gamepad vorstellt. Denkbar wäre der klassische STM32F103,
bekannt als "Blue Pill"
Der ADC hat 12bit, mit der richten Referenzspannung sollte das direkt
eine ausreichend hohe Auflösung liefern.
Mit USB selber muss man sich dabei dann nicht viel rumschlagen. Ich
werfe mal das böse Wort "Arduino" in den Raum - In dem Ökosystem ist
auch der STM32F103 sehr gut eingepflegt und für USB-Joysticks gibt es
bereits entsprechende Bibliotheken, die einem die Bitpopelei auf
Fußpilzebene abnehmen:
https://github.com/rogerclarkmelbourne/Arduino_STM32/tree/master/STM32F1/libraries/USBComposite
Für Frage 1:
Mit Operationsverstärkern geht das. Aus den 0.8...1.2V kann man mit
einem Subtrahierer 0.8V abziehen, dann hat man 0...0.4V, das ganze dann
etwa um Faktor 8 verstärken, macht 0...3.2V - Die Details mit Offset und
so sind dann auch nicht mehr schwierig.
Christian schrieb:> Hall-Sensoren sind eben deutlich empfindlicher als Potis. :D
Nein, sie sind anders.
Christian schrieb:> Nach etwas Recherche habe ich ein Gamepad gefunden, das seine> Analogsticks via Hall-Sensoren erfasst.
Egal, du kannst den schon vorhandenen Logitech Extreme mit dem HAL 401
Hallsensor aus dem Bobcat S450 nutzen.
Christian schrieb:> Allerdings konnte> ich auf der Platine keinen frei zugänglichen Punkt finden, der mir mit> Sicherheit die 5 Volt vom USB-Port zur Verfügung stellt
Keine Sorge, den gibt es, direkt an der USB Buchse.
Christian schrieb:> Folgende Messwerte der Sensoren
Sind vermutlich nutzlos weil sie die Offsetkompensation nicht beachten.
Dem Datenblatt nach muss die Differenz zwischen OUT2 und OUT4 mit einem
DualSlope Multimeter ausgewertet werden
Christian schrieb:> _Frage 1_: Kann ich die Wandlung der Spannung mit einer elektronischen> Schaltung realisieren? Und wenn ja, in welcher Form?
Ja, ein Differenzverstärker. ABER: Du musst wissen, auf welche Art dein
Joystick seine alten Potis oder Hallsensoren ausgewertet hat. Da gibt es
mehrere Möglichkeiten und ohne Kenntnis der Beschaltung und Auswertung
ist es NICHT möglich, das nachzubilden. Glaskugeln sind gerade
ausverkauft.
Also erst mal den Schaltplan deiner Logitech Extreme abzeichnen und
vorstellen, mit Messwerten ja nach Joystickstellung.
Ausserdem die Schaltung der kleine PLatine am HAL 401 abzeichnen, es
kann gut sein, daß es GENAU die Beschaltung ist die man zum Ausgleich
der Offsetkorrektur braucht.
Ohne solche Fakten aus der Schaltungenanalye ist jegliches Gebastel
nutzloses stochern im Nebel.
Vorweg vielen Dank für eure Antworten!
Sebastian R. schrieb:
> Ich fang mal mit Frage 2 an:> Wenn du einen Mikrocontroller in Betracht ziehen möchtest, ........>> ....... gibt es> bereits entsprechende Bibliotheken, die einem die Bitpopelei auf> Fußpilzebene abnehmen:
Danke für den Schubs in diese Richtung. Ich schaue mir das einmal an,
bestelle mir einen und versuche einmal mein Glück in der Programmierung.
Mal schauen, wie Feinfühlig oder grobmotorisch das Ganze dann ausschauen
wird.
Sebastian R. schrieb:
> Für Frage 1:> Mit Operationsverstärkern geht das. Aus den 0.8...1.2V kann man mit> einem Subtrahierer 0.8V abziehen, dann hat man 0...0.4V, das ganze dann> etwa um Faktor 8 verstärken, macht 0...3.2V - Die Details mit Offset und> so sind dann auch nicht mehr schwierig.
Auch hier werde ich mich einmal belesen. Wenn ich etwas in meinen Augen
brauchbares erstellt habe, melde ich mich dazu wieder.
Michael B. schrieb:
> Nein, sie sind anders.
Ja, so kann man das auch sagen, das stimmt wohl. Für mich kam es in den
Versuchen "feinfühliger" vor, daher meine Aussage.
Michael B. schrieb:
> Egal, du kannst den schon vorhandenen Logitech Extreme mit dem HAL 401> Hallsensor aus dem Bobcat S450 nutzen.
Das hatte ich ja versucht, erhielt dabei aber nur "schwammige" Signale
am PC, oder anders formuliert, der PC empfing ständig eine Betätigung,
obwohl er nicht bewegt wurde.
Michael B. schrieb:
> Keine Sorge, den gibt es, direkt an der USB Buchse.
Die USB-C-Buchse des Gamesir T4 Kaleid ist in SMD-Bauweise und
übersteigt meine Löttechnik. Leiterbahnen verfolgen ist leider nicht
möglich, da es verdeckte Layer gibt.
Michael B. schrieb:
> Sind vermutlich nutzlos weil sie die Offsetkompensation nicht beachten.> Dem Datenblatt nach muss die Differenz zwischen OUT2 und OUT4 mit einem> DualSlope Multimeter ausgewertet werden
Dies hatte ich zwar im Datenblatt gelesen, überstieg aber mein
Verständnis. An dieser Stelle stand für mich erstmal das probieren.
Michael B. schrieb:
> Ja, ein Differenzverstärker. ABER: Du musst wissen, auf welche Art dein> Joystick seine alten Potis oder Hallsensoren ausgewertet hat. Da gibt es> mehrere Möglichkeiten und ohne Kenntnis der Beschaltung und Auswertung> ist es NICHT möglich, das nachzubilden. Glaskugeln sind gerade> ausverkauft.
Wenn du mit "ausgewertet" meinst, welche Spannungen über den
Signaleingang vom Poti kamen: das kann ich nachmessen. ich habe die
alten Joysticks ja noch.
Michael B. schrieb:
> Also erst mal den Schaltplan deiner Logitech Extreme abzeichnen und> vorstellen, mit Messwerten ja nach Joystickstellung.
Werde ich versuchen nachzuholen, sofern es für mich machbar ist.
Michael B. schrieb:
> Ausserdem die Schaltung der kleine PLatine am HAL 401 abzeichnen, es> kann gut sein, daß es GENAU die Beschaltung ist die man zum Ausgleich> der Offsetkorrektur braucht.
Das habe ich bereits skizzenhaft gemacht. Ich versuche mal es lesbar zu
gestalten und poste ihn dann hier. Meiner Auffassung nach könnte es sich
aber nach der Beschaltung handeln, wie sie im Datenblatt des HAL401 auf
Seite 18 Fig. 4-1 zu sehen ist.
- ein Kondensator zwischen VDD und GND
- je ein Widerstand (Aufdruck "102") in Reihe zum Output
- je ein Kondensator zwischen Output und GND vor dem Widerstand
- je ein Kondensator zwischen Output und GND nach dem Widerstand
Michael B. schrieb:
> Ohne solche Fakten aus der Schaltungenanalye ist jegliches Gebastel> nutzloses stochern im Nebel.
Ich bin gewillt zu lernen, zu lesen und zu verstehen, aber ich bin nicht
"vom Fach" und kann damit nicht direkt mit allem wichtigen Informationen
aufwarten, die ein Anderer, der deutlich mehr Verständnis und Kenntnis
der Materie hat, benötigt. Dies hoffe ich mir nachzusehen.
Ich mach dann mal Hausaufgaben. :)
du musst dir das wie eine Open Kollektor Schaltung bei einem Optokoppler
vorstellen. Der Hallgeber zieht die 5V die am Pullup anliegen gegen
Masse, mit einem weiteren Widerstand(R2) kannst du gleich einen
Spannungsteiler draus machen falls du statt 5V nur 3,3V benötigst.
https://i.stack.imgur.com/O77bb.png
Bei so Landmaschinen ist das aus Sicherheitsgründen meisten doppelt und
gegenläufig ausgeführt. Man hat also ein Signal das von 0-5V geht und
das andere geht von 5-0V zusammen ergeben Sie dann immer 5V.
Beispiel: 25% Stellung Poti/Hallgeber1 gibt 1,25V aus und das
gegenläufige Poti/Hallgeber2 3,75V. 1,25V+3,75V=5V also ist das Signal
plausibel.
Gäbe es nur 1 Poti/Hallgeber und dieses/r zeigt 1,25V an weiß man nicht
obs defekt ist, es könnte ja sein das der Hebel auf 100% steht.
Für deine Spiele ist das egal, da nimmst du dir eben das eine welches an
oder absteigt und da Hallgeber eh verschleißfrei sind, hast du eben nur
das Risiko wenn ein Kabel abfällt aber das macht sich im Spiel ja sofort
bemerkbar.