we tend to drive a specific bldc sensorless motor using two different algorithms.

both of them are based on zero crossing detection, a vey simple approach.

the algorithm one detects ZCs by analog comparators and of course its corresponsive interrupts to apply the next step of commutation.

the algorithm two detects ZCs using ADC and then comparing the BEMF to VBus/2.

Let me explain how this algorithm works.

firstly, an arbitrary number of steps applies to the motor in order to drive it in open loop mode. After that the algorithm switches to the closed loop mode. then speed is estimated using a timer

the speed is estimated by measuring the time between the point of ZC detection and the instant of the previous commutation step.

here is my broblem. the max speed achieved by algo.1 differes from algo.2 while the applied duty cycle is the same(for both almost 100%)

how could it be possible? I know that the speed is related to duty cycle so I tought the max speed would be the same no matter which algo I used.

I would be grateful if you could help.