Close

Less springs, more cams

A project log for KSP Controller Hardware

Building a set of controllers for Kerbal Space Program including attitude, translation, throttle and hotkey inputs

tobiasTobias 01/17/2022 at 07:550 Comments

After using the prototype of the attitude joystick the feel of the return springs was really unsatisfactory. Looking at high-end joysticks the common solution appears to be cams actuated by a roller - as the joystick is tilted a bearing is rolled across a cam surface on a lever, and the lever acts on a spring. Here's the resulting design:

By changing the shape of the cam surface you can achieve just about any resistance profile, for example an exponential curve where a small movement away from the center encounters little resistance, but a pushing all the way to the end-stops will result in an exponentially increasing resistance. A linear curve will give the same resistance from the center to the end-stops, and will always snap back to the center. Finally, all of the properties can be combined to produce a completely custom feel.

This isn't a new idea by any means, and you should check out the great work by Olukelo at Thingiverse which provided a great amount of inspiration.

Of course, I went through a lot of design iterations and test prints, here's the first one:

It was pretty clear that the pivots for the cam arms needed to be higher. This version also used a really simple design for the cam surface, and it was clear that some more math would be required to create the right shape (more on this below).

Here's the next prototype with cams for the x-axis:


The shape of the cam surface is pretty complex, and took a few iterations:

From top to bottom:

  1. Cam surface based on a convex and concave circle.
  2. Next attempt with a really simple v-shape with two straight lines. Because this is a cam, these straight lines do not result in a linear amount of deflection
  3. This is the first version where the surface is based on a mathematical formula. Unfortunately the formula didn't take into account the radius of the bearing, and so didn't really work
  4. The first successful version. This weird shape results in linear deflection - tilt the joystick 1 degree and the spring gets stretched by 2mm, tilt 2 degrees and the spring is stretched 4mm, and so on

There's a lot more to the design of the surface, and I plan on going into more detail in a future post.

So, what's next? Unfortunately I'm now waiting on a stack of parts to arrive so that I can make sure that everything works and fits together

Discussions