Note: If you are seeing this note, then you are looking at an incomplete draft. Keep checking back as I complete these series of blog posts over the next week or two.
I am starting my own flight simulator cabinet build. I want it to resemble the F15/16/18s I would see growing up on various Airforce bases and also be a good fit for some of the early 90s arcade flight simulators I played back in the day like Steel Talons. I figured the best place to start would be the controls. I went looking around for a nice HOTAS setup. I really liked Thrustmaster’s Warthog, but I didn’t want to spend $500. I turned to looking on eBay, finding an old school Suncom SFS Throttle/F-15 Tactical Flight Controller for $50- just in time for Christmas. Christmas day, I ripped open my present and absolutely loved the look and feel of these controls!
They are amazing controllers, but go cheap because they require an obsolete gameport to connect. I wanted so badly to try them out, so I hooked them up to a USB gameport adapter I had on hand. Sadly, it didn’t work for any of the flight simulators I tried. Even though the gameport adapter works, it appears the controls need special drivers to work. I found the FUSBA from a cursory Google search on conversion kits, but it costs $100.
The case for a full on USB HID Joystick conversion was mounting- no need for an expensive USB converter or special drivers. I ended up purchasing two $10 P-Star 25K50 Micro boards from Pololu and converted both controllers to USB myself. The conversion wasn’t that difficult. I converted the joystick to use a scanning matrix with some 1N4148 diodes, slightly modified the throttle’s scanning matrix and adapted Microchips USB HID Joystick demo.
I took apart the joystick grip to see what I am working with.
It appears to have some kind of encoding circuitry already, which I promptly desoldered, so I could replace it with a simpler 2 x 4 diode scanning matrix. I modified the PCB so that I could put the hat switch on one row and the Guns, Missile, Thumb and Pinky switches on another.
Confused about matrix scanning and why there are diodes in the circuit? Check out my blog post on matrix scanning <read more tag here>.
Gameports typically used slope conversion, which measures the time it takes to charge and discharge a capacitor through an input resistance. So the potentiometers are wired as variable resistors using two wires, which the successive approximation ADC on the P-Star can’t read directly. To produce the voltage signal the ADC needs, I simply added a connection to the potentiometer that would let it be used as a voltage divider as shown:
If you can maneuver your soldering iron around the small space, I can tell you from experience it might be preferable to dismantling the joystick gimbal and spending the next hour trying to reassemble it. Later, I will revisit the gimbal with some improvements that address the large amount of backlash present.
Another issue that surfaced was the fact that these potentiometers were 100K, way higher than the maximum 10K source impedance the PIC18F25K50’s ADC on the P-Star can accommodate. This resulted in inaccurate readings during tests, until I upped the acquisition time (TACQ) to 64 TAD. In this case TAD was set to 1.3 microseconds (FOSC/64 at 48Mhz.) It might have been possible to add a small capacitor across the input terminals, but I wanted to keep the component count as low as possible.
Lastly, there’s a beautiful jumbo red LED right next to the hat switch. Maybe I can have it flash during a missile warning or serve as some kind of master caution. I wanted to make it accessible to flight simulators and MAME, so I wired it to the P-Star’s RB5 output for around 5 mA of drive current. Of course I would have to incorporate an additional USB driver to tie into the simulator’s output subsystem, but at least the functionality is enabled for when the time comes.
You can find the software here, how it works <here> and how to modify it <here>.
Almost done with the joystick! I finished up by organizing the wires, adding strain relief for the USB cable, soldering the headers and P-Star into a breadboard and mounting it as shown:
The throttle is considerably more complicated, probably to implement the keyboard interface and mapping.
I removed the circuit boards, disconnected the headers and reversed engineered the scan matrix.
I modified the matrix to have 3 rows and 8 columns by connecting the blue wire from the right throttle grip to the green wire on the left throttle grip. Then, I connected the orange, brown, yellow and red lines on the left grip to the brown, purple, black and gray lines on the right grip respectively.
As with the joystick, I had to add a third wire to the potentiometers so that they can be read by the ADC. I was able to avoid dismantling the throttle assembly by careful maneuvering during soldering.
The throttle’s potentiometers suffered from the same bad readings as those on the joystick and it was easily resolved by increasing the acquisition time to 64 TAD. I’m not satisfied with the response curve from the linear pot arrangement, so I will be revisiting this soon and replacing them with rotary ones.
Finally, I organized the wires, added strain relief for the USB cable, soldered the headers and P-Star into a breadboard and mounted it as shown:
Of course, the software for the throttle was a pretty straightforward modification of the one I created for the joystick. I had no problems getting these controls to work (even with Linux) on X-Plane, Warthunder and various MAME arcade games like Steel Talons, Wing war, F-15 Strike Eagle, Air Combat and Starblade.
Not only do I have a nice Joystick and Throttle, but a template for converting other controls, like a rudder or interfacing to things like landing gear, flaps, etc. In the end, I spent around $75 on this project, so things are off to a good start. Stay tuned for the rest of the flight simulator cabinet build, more to come soon!