bldc driver firmware based on hobbyking cheetah compact
Dependencies: BLDC_V2 mbed-dev-f303 FastPWM3
Diff: FOC/foc.cpp
- Revision:
- 47:f4ecf3e0576a
- Parent:
- 44:efcde0af8390
- Child:
- 48:a74e401a6d84
diff -r 6cc428f3431d -r f4ecf3e0576a FOC/foc.cpp --- a/FOC/foc.cpp Mon Jul 30 20:33:23 2018 +0000 +++ b/FOC/foc.cpp Wed May 13 09:53:27 2020 +0000 @@ -96,7 +96,7 @@ //controller->i_d = 0.6666667f*(c*controller->i_a + (0.86602540378f*s-.5f*c)*controller->i_b + (-0.86602540378f*s-.5f*c)*controller->i_c); ///Faster DQ0 Transform //controller->i_q = 0.6666667f*(-s*controller->i_a - (-0.86602540378f*c-.5f*s)*controller->i_b - (0.86602540378f*c-.5f*s)*controller->i_c); - controller->i_q_filt = 0.95f*controller->i_q_filt + 0.05f*controller->i_q; + // controller->i_q_filt = 0.95f*controller->i_q_filt + 0.05f*controller->i_q; observer->i_d_m = controller->i_d; observer->i_q_m = controller->i_q; @@ -106,16 +106,18 @@ observer->e_q_int += observer->e_q; observer->i_d_est += K_O*observer->e_d + .001f*observer->e_d_int; - observer->i_q_est += K_O*observer->e_q + .001f*observer->e_q_int; - + observer->i_q_est += K_O*observer->e_q + .001f*observer->e_q_int; float scog12 = FastSin(12.0f*theta); float scog1 = s; float cogging_current = 0.25f*scog1 - 0.3f*scog12; /// PI Controller /// - float i_d_error = controller->i_d_ref - controller->i_d; - float i_q_error = controller->i_q_ref - controller->i_q + cogging_current; +// float i_d_error = controller->i_d_ref - controller->i_d; + float i_d_error = controller->i_d_ref - observer->i_d_est; +// float i_q_error = controller->i_q_ref - controller->i_q;// + cogging_current*0.6; + float i_q_error = controller->i_q_ref - observer->i_q_est;// + cogging_current; + //float i_q_error = controller->i_q_ref - observer->i_q_est; float v_d_ff = 2.0f*(controller->i_d_ref*R_PHASE - controller->dtheta_elec*L_Q*controller->i_q_ref); //feed-forward voltages float v_q_ff = 2.0f*(controller->i_q_ref*R_PHASE + controller->dtheta_elec*(L_D*controller->i_d_ref + WB)); @@ -127,11 +129,11 @@ //v_q_ff = 0; limit_norm(&controller->d_int, &controller->q_int, V_BUS/(K_SCALE*I_BW*KI_Q)); // Limit integrators to prevent windup - controller->v_d = K_SCALE*I_BW*i_d_error + K_SCALE*I_BW*KI_D*controller->d_int;// + v_d_ff; - controller->v_q = K_SCALE*I_BW*i_q_error + K_SCALE*I_BW*KI_Q*controller->q_int;// + v_q_ff; + controller->v_d = K_SCALE*I_BW*i_d_error + K_SCALE*I_BW*KI_D*controller->d_int+ v_d_ff; + controller->v_q = K_SCALE*I_BW*i_q_error + K_SCALE*I_BW*KI_Q*controller->q_int+ v_q_ff; - //controller->v_q = 4.0f; - //controller->v_d = 0.0f; +// controller->v_q = 0.0f; // always zero +// controller->v_d = 0.0f; //controller->v_d = v_d_ff; //controller->v_q = v_q_ff;