Nema17-based Stewart Platform


there are tons of implementations of stewart platforms using servo motors as actuators. They all have one problem: they are very noisy on operation. For my usecase, I need the system to act as quietly as possible. Fast reaction and durability are also desired.
The System should be able to record an episode of movement to e.g. a sd-card and reproduce it later.

So seeing, what can be done with simplefoc and stepper motors, I came up with the idea to use a typical servo motor design but replace the six servo motors with nema 17 steppers equipped with magnetic encoders.

For the proof of concept, I chose a low cost setup with AS5600 and a I2C multiplexer from Adafruit (reason: all AS5600 have the same I2C address). For computation I took a Nucleo 64 / F401RE and the raw readings from all encoders seem to work fine.

The next problem is motor contol: For 6 nema 17 steppers, I need 6 x 4 = 24 pwm-outputs. So again some kind of multiplexing ist necessary. I found a 24ch pwm multiplexer on aliexpress, normaly used for LEDs and ordered it.

The longer I think of it, the more I get concerned about the needed computing power. So I need some imput from the community: Am I going in the right direction? Or should I try a completely other road by e.g. getting some cnc- or 3d-printer-boards that can handle up to 8 steppers?

Your thoughts are very welcome …


Depending on the speed you wish to run your motors at, you might have some issues. 10 FOC iterations per electrical rotation seems to work fine. Not counting sensor readout, this board should be able to perform one FOC calculation in ~80us or about ~500us for all 6 motors. That translates to a top speed of 200 electrical rotations per second. With a 50 pole pair stepper, that’s 4 rotations per second.

It appears you have enough hardware to run a single motor. Why don’t you put some delayMicroseconds() in your loop() to see if the performance is acceptable for your use case?

I have no idea what the response time of a PWM multiplexer is. If it’s less than a single FOC iteration, it’s probably fine.