bldc driver firmware based on hobbyking cheetah compact

Dependencies:   BLDC_V2 mbed-dev-f303 FastPWM3

Dependents:   BLDC_V2

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;