Procházet zdrojové kódy

1. 母线电流计算,通过D轴电流给一个修正
2. 计算调制比修改

Signed-off-by: huhui <huhui@sharkgulf.com>

huhui před 3 roky
rodič
revize
0ebb06aff2
1 změnil soubory, kde provedl 9 přidání a 6 odebrání
  1. 9 6
      Applications/foc/core/PMSM_FOC_Core.c

+ 9 - 6
Applications/foc/core/PMSM_FOC_Core.c

@@ -61,17 +61,16 @@ static __INLINE float Circle_Limitation(DQ_t *vdq, float vDC, float module, DQ_t
 #ifdef VD_PRIO_HIGH		
 		out->d = vdq->d;
 		out->q = sqrtf(sq_vDC - out->d*out->d);
-		return 1.1f; //just return the modulation big than 1.0
 #else
 		float r = sqrtf(sq_vDC / sq_vdq);
 		out->d = vdq->d * r;
 		out->q = vdq->q * r;
-		return r;
 #endif
+	}else {
+		out->d = vdq->d;
+		out->q = vdq->q;
 	}
-	out->d = vdq->d;
-	out->q = vdq->q;
-	return 1.0f; // s16q5 32 means int 1
+	return sqrtf(sq_vdq/sq_vDC);
 }
 
 static __INLINE void FOC_Set_DqRamp(dq_Rctrl *c, float target, int time) {	
@@ -910,7 +909,11 @@ float PMSM_FOC_Calc_iDC(void) {
 		iDC x vDC = 2/3(iq x vq + id x vd);
 	*/
 	float m_pow = (vd * id + vq * iq); //s32q10
-	float raw_idc = m_pow / get_vbus_float();// * 1.5f * 0.66f; //s16q5
+	float id_thr = ABS(id);
+	if (id_thr >= 100.0f) {
+		id_thr = 100.0f;
+	}
+	float raw_idc = m_pow / get_vbus_float() * (1.0f - 0.2f * id_thr/100.0f);// * 1.5f * 0.66f; //s16q5
 	LowPass_Filter(gFoc_Ctrl.out.s_FilteriDC, raw_idc, 0.01f);
 	return gFoc_Ctrl.out.s_FilteriDC;
 }