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.

One is a bit different than the others

One is a bit different than the others

The Inspiration

The new PS5 controller with its haptics and adaptive triggers marks the dawn of a new era.

Adaptive triggers internals, isn’t that cool?

Adaptive triggers internals, isn’t that cool?

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:

  1. Oversteer while cornering: is the car on the verge of losing control of the back end of the car and spin around.
  2. Understeer while cornering: the front end of the car is sliding and there’s nothing you can do to change that.
  3. Weight transfer side to side: this one it’s a bit harder to explain in one sentence…
  4. 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.

Just a few extra parts to illustrate what’s inside besides the motor and the driver board

Just a few extra parts to illustrate what’s inside besides the motor and the driver board

Parts list:

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.

The project repo

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.