BLDC with AS5048 enocder to move a small step size like stepper motor

I have a setup of a BLDC motor with at AS5048 14bit absolute encoder for feedback control. It is working fine with PID angle moving control but recently I have a project to index the motor in very small step size around 2counts only for each step like a stepper motor. I had tried to tune different PID but the motion still bounce a bit before it move the to new target position which is 2 counts apart.

Does anyone has similar experience can share? should I try to use some open loop control instead?
Thank you very much

Hi @Fung612 , and welcome to SimpleFOC!

When you say 2 counts, do you mean 2 counts out of the 14 bit resolution? So 13bits of resolution to your steps? I think this will be a challenge.

While the AS5048A is a 14 bit sensor, whether you get effective 14 bits of accuracy can depend on the situation - motor speed, ambient magnetic fields, electrical noise, etc…

May I ask, with the motor powered but not turning (no position set), how stable is your position reading? Try to print it to 5 decimal places, and see which decimal place is “stable” when at rest.
And you could repeat the experiment when you power the motor and set a fixed position, so the motor is holding this position… how stable is the position reading from the sensor?

Hi @runger

Thanks for you reply. I have applied a moving average filter to the encoder reading and it will stable in +/-1 count. Basically I can achieve a accuracy in the angle moving control in +/-1 count with proper PID, I did the measurement by approaching the same target from 60deg from CW and CCW 120 times and calculate the accuracy.

For the small step size yes you are correct I want a 13bit resolution step. Actually it is responsive to my command and really move but just the motion will bounce or vibrate a bit before it reach the new target position. Just thinking if a open loop control may help to make the motion smoother. What I am thinking is like the open loop micro-stepping control in stepper motor. I am not sure if it will help or not just want to ask if someone got similar project or experience


I can’t say I have concrete experience with this…

but from the point of view of the software, open-loop should allow significantly finer control than a 14 bit sensor… the 14 bit sensor is for the whole physical revolution, but the open-loop control sets PWM levels according to a sine-wave pattern that repeats per electrical revolution. The number of electrical revolutions per physical revolution depends on the pole count of the motor.

In terms of position accuracy it will be limited by:

  • the number of PWM levels the hardware can output to simulate this sine-wave’s amplitude. The higher the PWM resolution, the finer the level of control
  • the number of pole-pairs of the motor, determining, the number of electrical revolutions per physical revolution
  • the accuracy of the SimpleFOC algorithms, limited by float precision, but in this case probably more limited by the number of entries we have the lookup table that we use to compute sin(x)

But remember that open loop will use significantly more energy (causing more heat!) and that all this increased precision is very theoretical if you lose the real position due to friction, direction changes, etc…

1 Like

Thanks for your information, in my project I am using a motor with 11pole pair and the lookup take is 512 entries. I will give it a try and my objective is to smooth micro-step indexing motion with hope it works

1 Like