0
\$\begingroup\$

I implemented a Field Oriented Control (FOC) controller for a synchronous motor, which works already pretty good. Now the I-part of the PI controllers is necessary to achieve a good reference tracking, but slows down the dynamics drastically. I heard that a feed-forward term and prefiltering can be used to get rid of this problems, but I actually don't know how this could be achieved. The motor will mostly be driven at very slow speeds, but also here, a huge current seems to be difficult to track.

I heard that the plant of the BLDC motor for each phase can be simplified as follows:

$$\frac{1}{Ls + R}$$

Such that the output current is related to the Space Vector Modulation (SVM) voltages, but I don't see how to go from here.

How can prefiltering and feed-forward control be used to achieve better performance in Field Oriented Control (FOC)?

Edit: What I find is mostly the feed-forward part to compensate for the speed of the system, but this is not necessary in my application, since it is used for position control or slow speed only.

enter image description here

Is there a way to take feedforward terms into account to achieve better current control? Maybe I'm just bad at tuning my PI-controllers for current control, but it seems that the current is very sensitive to the P-part and so to get best current tracking mostly the I-part is used. So I'm interessted in how to achieve better and faster control of I_q and I_d.

\$\endgroup\$
  • \$\begingroup\$ Do you know what feed-forward is and what it achieves in some control systems? \$\endgroup\$ – Andy aka Jul 17 '18 at 17:04
  • \$\begingroup\$ Yes, in this context an additional feed-forward controller can be used to come up with the control signals that already lie in the range where they should be to achieve the necessary plant output. The feed-back term is then used to overcome the uncertainty of the plant. \$\endgroup\$ – HansPeterLoft Jul 17 '18 at 17:14
  • \$\begingroup\$ Then doesn't that answer your question partially? \$\endgroup\$ – Andy aka Jul 17 '18 at 17:20
1
\$\begingroup\$

Consider an R-L load, the transconductance transfer function is as you wrote:

\$ \frac{I_{out}}{V_{in}}= \frac{1}{Ls + R} = \frac{ \frac{1}{R}}{\frac{L}{R}}s +1 \equiv \frac{K_{dc}}{\tau s + 1}\$

This can be viewed as your plant model P(s) and you can then create a controller C(s) to control the current in this RL load

\$ \frac{Y(s)}{X(s)} = \frac{G(s)}{1 + G(s)H(s)} = \frac{C(s)P(s)}{1 + C(s)P(s)H(s)}\$

Your controller could be a PI controller to minimise any errors in your load and equally control the bandwidth of the overall response. A voltage is applied to the load to realise the needed current. At DC the voltage needed is that to overcome the resistive component, at AC it is the voltage needed to overcome the resistive and reactive component and the controllers response aims to control this.

The plants terminal voltage is thus: \$ i(t)R + j\omega Li(t) \$

But what about synchronous machines? (wound rotor, BLAC, BLDC? ). Current is needed to produce torque to either accelerate an inertia or oppose some load. With increase velocity the backEMF increases. This is a disturbance into the current loop. The terminal voltage is now:

\$ i(t)R + j\omega_e Li(t) + K_e \omega_m\$

So the current controller now needs to demand more voltage for the same torque. Under a constant speed situation there is no problem and is obvious you need more terminal voltage while running at a given speed to overcome the backEMF. But what about under dynamic responses? bandwidth testing? higher loop disturbance rejection? The current loop's is no longer outputting a response needed to produce torque but to mitigate a disturbance and this decreases the currentloops response.

This disturbance however is well understood and thus can be mitigated via a feedforward term to "inject" a voltage demand that would be known to be needed to overcome the backEMF at the present velocity, this leave the current loop to respond purely to the torque demand, be it due to load changes or demand changes

You have already included a diagram at to where the feed-forward term would be injected (I usually do not inject on the d-term unless I am employing some form of field weakening) and hopefully I have provided at least an initial insight as to how you may benefit from it when you have outer control loops and system dynamic's to control.

\$\endgroup\$
  • \$\begingroup\$ I would. Words of warning 1) only do about 70% feed forward 2) ensure you speed feedback is clean and stable 3) take care about any filtering on the demand into the feedforward w.r.t. the current loop bandwidth.... It is very easy to create an oscillator .. \$\endgroup\$ – JonRB Jul 18 '18 at 9:19

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.