Electrical – Field Oriented Control Feed Forward Term

control systemmotor

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.

Best Answer

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.