Custom force-feedback controller and next gen predictions
TL;DR
I wanted a controller specifically made for racing sim games, with force feedback like on the big expensive sim racing wheels, so I made one.
The Inspiration
The new PS5 controller with its haptics and adaptive triggers marks the dawn of a new era.
What even is FFB? and why it makes things better? Maybe the industry will move towards an “FFB all the things” approach, maybe not, let’s test it out and see its pros and cons.
History lesson
A joystick, i.e., the thing that moves in at least two dimensions X and Y is nothing new, also nothing new is FFB for joysticks. Microsoft made some decent devices in the late 90 specifically for flight simulators.
FFB sim racing wheels impossible to get your hands on during the pandemic, then there’s the crazy expensive industrial FFB joysticks.
Plenty of examples to draw inspiraton from.
I’m just trying to play racing simulators with one finger without compromising on FFB.
Why FFB is important? if implemented properly the FFB delivers a lot of data about the forces that the car is experiencing, things like:
- Oversteer while cornering: is the car on the verge of losing control of the back end of the car and spin around.
- Understeer while cornering: the front end of the car is sliding and there’s nothing you can do to change that.
- Weight transfer side to side: this one it’s a bit harder to explain in one sentence…
- Road texture/vibrations: Self-explanatory, not always realistic but helps with immersion.
In short, FFB gives you the feedback you would need to drive more on the edge doing cool drifts if that your thing. Yes, It can’t replace the experience of driving a car but you weren’t expecting that, did you? We’re just building a joystick here.
First iteration
Pretty much just glued the output shaft of a brushed motor to the left X joystick axis. This worked surprisingly well, for a motor welded to a joystick axis, it was an instant success if we ignore the extreme inefficiency/power consumption/generated heat of that motor working in a stalled state and the overall low torque.
Second iteration
The second iteration was based on a servo as the thing that was driving the joysticks X axis, it addressed the lack of torque and inefficiency of the first design. Also, the original servo motor was replaced with a coreless motor to make the back driving as smooth as possible.
While torque wasn’t a problem anymore, the road details and other high-frequency forces were lost in the backlash between gear teeth, only low-frequency details would come through.
Third iteration
The third prototype was based on a BLDC motor, I decided to use directly the motor body as the “joystick” itself.
Parts list:
- BLDC motor: Flashhobby GBM2606-90T 120KV 14P12N a high torque, high impedance, low RPM motor.
- BLDC controller: Bgc 3.1 2 Axis Brushless Gimbal Controller basically an Arduino Nano + a bunch of MOSFETs
- Arduino Leonardo: as the thing that pretends it’s a sim racing wheel.
- Magnetic encoder: AS5600 - to read the motor angle.
- Diametrically polarized magnet: it’s a magnet.
First impressions: great direct feedback, lots of torque, all the torque in the world, had to dial it very low to be usable.
Second impressions: there’s always a bit of resistance to rotation, I can feel stator armature and magnetic poles aligning when the controller applies little or no torque.
Still power-hungry, USB should provide more than 0.5A but I did not have the time to figure out why it wasn’t the case for me, used an external power supply.
The software
The software running on main Arduino Leonardo is built on top of the VNWheel project, required some heavy refactoring and cleanup.
The gimbal controller software is using mainly the FOC library it handles the motor + encoder, can do both torque and position control, very useful library.
Communication between boards is done using the I2C bus.
Epilogue
An FFB joystick provides an additional dimension to the gaming experience, but it comes at a cost, the battery life would suffer the most if all axis should get the FFB treatment.
Most of the complexity lies in the hardware, vector control or field-oriented control in synchronous motors is nothing new and the software is trivial in the grand scheme of things. The challenge would be to make them small and efficient enough to play well with the limited battery capacity.
My prediction is that in a generation or two mainstream consoles would offer a force feedback everything controller bundled with their top tier console.
What was the point of this prototype? As I said I just wanted to play racing games on my couch instead of using the wheel, first-world problems.