I want to drive my BLDC motor sinusoidal. In this point I want to model my system correctly to analyze it better. So I want to simulate it in simulink first.

To get model with sinusoidal driving:

  1. I have an encoder to detect where my rotor is.
  2. I do not have current sensors. So, cant use the FOC algorithm with Clarke/Park transformations. As far as I know, transformations based on currents(Id, Iq).
  3. I am modelling this paper on simulink, BLDC Modelling with Matlab. I want to change the converter part to get 90 degrees between stator and rotor continuously.

As i said do not have a current sensor to implement FOC algorithm. So, can I implement sinusoidal driving with only encoder's data? Actually, I know it can be done but I need a little help here to make converter side to give correct phases to get 90 degrees between rotor and stator all the time. Please let me know if there any examples.

Any paper, suggestion, idea will be appreciated.

  • \$\begingroup\$ Sounds like you want to envision phase-oriented-control. Shouldn't that be "as simple as" comparing the encoder phase to the driven phase divergence? Adjust current/voltage/frequency as necessary to maintain some minimum difference to calculated phase. Dunno, never tried this. But sounds challenging - how will you know if the rotor is 15° out-of-phase, or 375°? Encoder have a Z output pulse? \$\endgroup\$
    – rdtsc
    Commented Dec 16, 2021 at 15:31
  • \$\begingroup\$ How precise is your angle sensor? Typically it only distinguishes the 6 phases, and a sinusoid samples at only 6 points degenerates to trapezoidal control. If you have a more precise sensor or put an estimator on top (perhaps based on either phase-locked-loop theory or Kalman theory) then you can get a better estimate of angle continuously, to generate more steps on the sinusoid. \$\endgroup\$
    – Ben Voigt
    Commented Dec 16, 2021 at 16:36
  • \$\begingroup\$ Makes no sense to me, like reinventing warm water. The encoder gives you the rotor angle, but you will never know the stator angle since you don't have current sensors. \$\endgroup\$ Commented Dec 16, 2021 at 17:54
  • \$\begingroup\$ I can say that my encoder is capable to keep 90 degrees between rotor and stator in corresponding frequencies. In my algorithm, (for the sake of simplicity I will give electrical degrees and Lets assume that it will be in 0-360 degrees), after the calibration I mean adding after offset, I am arranging 3 phases(Va,b,c) for stator to adjust 90 degrees to rotor. After my encoder senses the first step of rotor, I am adjusting stator to keep 90 degrees again. \$\endgroup\$
    – raymurai
    Commented Dec 16, 2021 at 17:55
  • \$\begingroup\$ I am just here because I am not sure about this algorithm like how far it can go and wondering if there are any more robust or more creative algorithm(with using transformations i.e.Park/Clarke for foc) to achieve this algorithm. \$\endgroup\$
    – raymurai
    Commented Dec 16, 2021 at 17:56

1 Answer 1


Yes, it is very straightforward to do what you want. Simply use your encoder signal as \$ \theta_{elec} \$ for your inverse park transform (with some linear transform, to account for offsets and number of motor pole pairs), set \$ V_d = 0 \$ and set \$V_q \$ to control the synchronous motor voltage. You can think of this as the functional equivalent of transforming your brushless DC motor into a brushed DC motor and applying \$ V_q \$ to its terminals. The PI controllers in the full FOC loop are just changing the \$V_q\$ and \$V_q\$ knobs to give you the current you want; the actual commutation part is inverse park and inverse clarke.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.