Hi,
I am using the FCL controller and am seeing different torque outputs for the same Iq value depending on if the motor is running in quadrants 2 or 3.
This resulted in me digging into the FCL_PI implementation since there is a speed element in its implementation. However, after I teased the pieces from the CLA and ISR, it doesn't look like any PI that I have worked with before.
From my understanding, here is what the PI controller does:
At time n:
err_n = ir_ref - iq_measured
Kp = L * I * wcc / V - Assume Relatively Constant
Ki = R * I * wcc * dt / V - Assume Relatively Constant
Kerr = Ki / 2 + Kp
Kerr_old = Ki / 2 - Kp
carry_over = (err_n * Kerr_old) + Bemf *dSpeed
carry_over = err_n* Ki/2 - err_n* Kp + Bemf*dSpeed
At time n+1:
err_n_1 = ir_ref - iq_measured
Out = err_n_1* Kerr + carry_over
Out = err_n_1 * Ki/2 + err_n_1*Kp + err_n *Ki/2 - err_n*Kp + Bemf*dSpeed
Out = Ki* (err_n_1 + err_n) /2+ Kp *(err_n_1 - err_n) + Bemf*dSpeed
So sumarizing:
Out = Ki * avg_err (over 2 cycles) + Kp * (change in err) + Bemf * (change in speed)
Is there any documentation about how the FCL_PI works? Where is the integrator? Why is Kp getting applied to the change in Iq error instead of the error itself? Why is Bemf constant multiplied by the motor acceleration?
It seems like the implementation has combined a lot of logic and optimized for performance. Which is great, but makes it hard to understand. And before I am directed to Dave Wilsons blog, I've already read it and wasn't able to figure out this implementation
Thanks a bunch,
-Colin