Fork and fix for mwork
Dependencies: mbed-dev-f303 FastPWM3 millis
Diff: FOC/foc.cpp
- Revision:
- 59:568e7be5232f
- Parent:
- 51:6cd89bd6fcaa
diff -r fb799e99a5f7 -r 568e7be5232f FOC/foc.cpp --- a/FOC/foc.cpp Mon Jun 29 03:34:16 2020 +0000 +++ b/FOC/foc.cpp Mon Jun 29 09:36:26 2020 +0000 @@ -132,7 +132,7 @@ observer->temperature2 = (double)(25.0f + ((observer->resistance*6.0606f)-1.0f)*275.5f); double e = observer->temperature - observer->temperature2; observer->temperature -= .001*e; - //printf("%.3f\n\r", e); + /// Commutation Loop /// @@ -167,6 +167,7 @@ controller->fw_int += .001f*(0.5f*OVERMODULATION*controller->v_bus - controller->v_ref); controller->fw_int = fmaxf(fminf(controller->fw_int, 0.0f), -I_FW_MAX); controller->i_d_ref = controller->fw_int; + //float i_cmd_mag_sq = controller->i_d_ref*controller->i_d_ref + controller->i_q_ref*controller->i_q_ref; limit_norm(&controller->i_d_ref, &controller->i_q_ref, I_MAX); @@ -192,7 +193,7 @@ controller->v_q = controller->k_q*i_q_error + controller->q_int ;//+ v_q_ff; controller->v_ref = sqrt(controller->v_d*controller->v_d + controller->v_q*controller->v_q); - + // printf("%.3f - %.3f - %.3f \n\r", controller->i_q_filt,controller->i_d_filt,0); limit_norm(&controller->v_d, &controller->v_q, OVERMODULATION*controller->v_bus); // Normalize voltage vector to lie within curcle of radius v_bus float dtc_d = controller->v_d/controller->v_bus; float dtc_q = controller->v_q/controller->v_bus; @@ -202,7 +203,7 @@ controller->v_q = dtc_q*controller->v_bus; abc(controller->theta_elec + 0.0f*DT*controller->dtheta_elec, controller->v_d, controller->v_q, &controller->v_u, &controller->v_v, &controller->v_w); //inverse dq0 transform on voltages svm(controller->v_bus, controller->v_u, controller->v_v, controller->v_w, &controller->dtc_u, &controller->dtc_v, &controller->dtc_w); //space vector modulation - + if(PHASE_ORDER){ // Check which phase order to use, TIM1->CCR3 = (PWM_ARR)*(1.0f-controller->dtc_u); // Write duty cycles TIM1->CCR2 = (PWM_ARR)*(1.0f-controller->dtc_v); @@ -213,7 +214,7 @@ TIM1->CCR1 = (PWM_ARR)*(1.0f-controller->dtc_v); TIM1->CCR2 = (PWM_ARR)*(1.0f-controller->dtc_w); } - + controller->theta_elec = theta; } @@ -222,6 +223,7 @@ void torque_control(ControllerStruct *controller){ float torque_ref = controller->kp*(controller->p_des - controller->theta_mech) + controller->t_ff + controller->kd*(controller->v_des - controller->dtheta_mech); //float torque_ref = -.1*(controller->p_des - controller->theta_mech); + controller->i_q_ref = torque_ref/KT_OUT; controller->i_d_ref = 0.0f; }