1
\$\begingroup\$

I'm driving a BLDC motor with FOC. Right now, I have Space Vector modulation working, where I can give it a magnitude and an angle, and the algorithm will drop the right values into three PWM registers. If I slowly increase the angle argument and call the SVM function periodically, the motor will spin (slowly) open-loop.

I am currently feeding a contrived angle into the function, but in practice I need to know the rotors position so I can perform all my clark/park/PI transform calculations relative to the rotor's angle.

I believe this can be done via a current observer, in which I feed back an error estimate to a SW-implementation of the HW-motor, and thanks to gains and high feedback, I'll be able to drive the BEMF estimate to zero and extract the angle information...But, I'm not sure if I've got that right!

I've read several application notes from TI, NXP, MicroSemi, Microchip as well as Dave Wilson's excellent video series 'Teaching Old Motors New Tricks', and I must say, the terminology and different flavors of doing this have got me a bit confused as where to go from here.

I am trying to go all sensorless by reading shunt resistors off of phase A & B....The current observer/BEMF estimator should be able to close the loop as sufficient speeds, but I'm not sure how to implement that, because it looks like it also needs the Clarke-Park transforms and PI controller to be working...But, I can't get that stuff working if I don't know the rotor angle.

What is the most sensible way to proceed with this development cycle?

\$\endgroup\$
1
\$\begingroup\$

You're already there. The common approach is to force the motor to a known start position, as you are doing with your open-loop spin. Once your rotor is in the correct position, stop advancing and you can go from there. Your sensorless motor controller then must then start in an open-loop mode to get it moving so your loop can take over. You need to choose a ramp rate, ramp time and ramp torque that reasonably fits your motor's friction, inertia and expected load. Once you get it spinning, you can transition to closed loop operation.

\$\endgroup\$
  • \$\begingroup\$ Thanks for the encouragement, but where I'm coming up short is when you say "let the loop take over"....I don't have a loop yet, and I'm unsure how to unit test one without having to have the whole system designed...Chicken and the Egg. \$\endgroup\$ – testname123 Feb 12 '18 at 19:56
  • \$\begingroup\$ When you are running open-loop, you have a good idea of the rotor position because of your knowledge of where you started and the motor parameters. The motor won't be exactly in the right place (your target speed), but you will be turning so now your BEMF estimator will be able to give you an observed angle and speed and tell you whether you are leading or lagging. You don't want to change the motor speed instantaneously, so you will use this incrementally change increase or decrease your speed by an amount that is a fraction of the error between your target and observed speeds. \$\endgroup\$ – John Birckhead Feb 12 '18 at 20:17

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.