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 new PS5 controller with its haptics and adaptive triggers marks the dawn of a new era . At least that’s what the reviewers say, I’ll give them the benefit of the doubt since I can’t get my hands on one.
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.
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.
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.
Driving simulators are a good starting point, there’s only one axis respectively one motor and plenty of games should support FFB wheels.
Started with tearing down an old cheap controller, got the spring out that centers the joystick locked the vertical axis. Used a simple brushed motor, just soldered the brass gear onto the shaft of the joystick axis.
This worked surprisingly well, for a motor welded to a joystick, 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.
The second iteration was based on a servo, it should address 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.
Torque wasn’t a problem anymore, but the road details and other high-frequency forces were lost in the spaces between gear teeth, only low-frequency details would come through, no good!
The third prototype was based on a BLDC motor, I decided to use directly the motor body as the “joystick” itself.
- 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 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.
An FFB joystick provides another dimension to the gaming experience, but it comes at a cost.
If similar tech is to be implemented in the next-gen controllers there’s some work on the way there:
- Console manufacturers need to design the hardware and the SDK, pretty feasible, considering its not new tech.
- Game engine developers have to implement the SDK and expose a higher-level API to the engine users, also doable.
- Game developers need to think about FFB as they think about sound or visual effects. Canned effects like resistance or impacts can be used for regular games, additional work required for dedicated flight or driving sims, or just fall back to good old regular spring simulation.
- Battery tech/capacity improvements, this is a big one, any additional motor is a drain on the battery, I imagine battery life to be in the range of a few hours with current battery tech.
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.