i trying to control 3 phase BLDC motor. I already done 6 step commutation which works fine. Now i going for sinusoidal control. Have studied more about sinusoidal control in bldc and got some idea.

  • I created sin LUT table for 360 degree using = 127.5 + 127.5(sin x ) 0 < x < 6.28 radians
  • My table size 2^8=256
  • table {127,.....255......127......0......127}
  • By using the table i get good sin wave and i also generated 3 sin wave which are phase shifted 120 degree each other

enter image description here enter image description here

  • But i am struggling how to interface this sin LUT with hall sensor angles. I knew that by using PLL logic we can achieve.

Some one clear explain me about hall sensor synchronization with sin LUT. Hope that will help me.


enter image description here In the above image, yellow= input pwm to fet & green = phaseA to gnd

The Output wave look ok but motor consumes more than 10amp at 15hz speed. Any guess why its like that. I am confused,.

  • \$\begingroup\$ Usually it is done with FOC + SVPWM, else you have nowhere to use the feedback. \$\endgroup\$ – Marko Buršič Jan 29 '20 at 8:40
  • \$\begingroup\$ Before going for FOC and space vector, i like to control using SPWM(sinusoidal commutation). \$\endgroup\$ – Bud Jan 29 '20 at 10:11
  • \$\begingroup\$ @bud Make a timer triggered/reset by the hall sensor edges. Use the timer and the assumption the RPM between current and previous cycle is the same to interpolate rotor position. Use this to simulate an encoder position signal. \$\endgroup\$ – DKNguyen Jan 29 '20 at 14:10
  • \$\begingroup\$ Do it open loop, at this point it doesn't matter. Make a ramping setpoint up/down, if the motor stalls, then you will notice it. \$\endgroup\$ – Marko Buršič Jan 29 '20 at 14:24
  • \$\begingroup\$ @dknguyen , actually i used timer to calculate rpm using hall sensor signal. But my doubt is how to synchronization the rpm data with sin LUT table (spwm). could you give a example or small logic code so that understand even better. \$\endgroup\$ – Bud Jan 29 '20 at 17:10

You're on the right track. It looks like your PWM is implemented correctly. I do recommend writing an SVM PWM modulation routine, as you will need it down the line. You should also try and get your motor to spin open loop using either sinusoidal PWM or SVM PWM. It should spin smoothly without drawing a significant amount of current.

With respect to your hall sensor, you have a few problems to sort out. If you're using the low-res 3 phase type of encoder, you'll have to figure out a way to interpolate it based on your estimated motor RPM to get a continuous angle. This probably won't work terribly well at slow speeds.

Once you have a continuous rotor angle estimation, you'll likely have some nonzero offset angle between your true electrical/rotor angle and the angle you're pulling from your encoder. If this offset is large, your motor will spin inefficiently. If it's too large, it won't spin at all. You're going to need to figure out some way of taking this offset out.

Finally, the simplest way to put these components together is with inverse park + inverse clarke (i.e. SVM PWM...) transforms. If you have a PMBLDC motor, set your D term to 0, set your Q term to some fixed value, and use your encoder angle for theta. This is essentially the same as running a brushed dc motor with a fixed supply voltage; if you have the correct relationship between your encoder angle and your rotor angle, your motor will spin.

  • \$\begingroup\$ You can also do an inverse park + inverse clarke transform with a fixed Q term, zero D term, and a linearly increasing injected value of theta; this is the same as open loop commutation, and could be a useful debugging step \$\endgroup\$ – Ocanath Jan 29 '20 at 18:52
  • \$\begingroup\$ Open loop in the sense, by driving the motor with 3 sin wave (120 degree shifted each other) with getting the knowledge of Hall sensor (RPM data). Right? \$\endgroup\$ – Bud Jan 31 '20 at 6:34
  • \$\begingroup\$ yep, or with 3 svm voltage waveforms and no knowledge of the sensor data. bonus points if you are generating those waveforms from inverse park \$\endgroup\$ – Ocanath Jan 31 '20 at 13:39
  • \$\begingroup\$ Yes i done in open loop configuration, and the output waveform is attached in the edited content. But still my motor sucks more than 10 amp. And what is inverse park basically. \$\endgroup\$ – Bud Feb 1 '20 at 5:35
  • \$\begingroup\$ lower your equivalent phase voltage when you're doing open loop commutation, your current draw will go down. As for inverse park, that answer is too large to put in a comment. If you're still confused after researching it a bit, post another question to SE \$\endgroup\$ – Ocanath Feb 2 '20 at 19:25

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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