Explorar o código

通过宏开关指定母线电流的计算使用重建的相电压还是电流环给定的相电压,需要硬件支持

Signed-off-by: kevin <huhui@sharkgulf.com>
kevin %!s(int64=2) %!d(string=hai) anos
pai
achega
82b66f06a8
Modificáronse 2 ficheiros con 13 adicións e 2 borrados
  1. 12 1
      Applications/foc/core/controller.c
  2. 1 1
      Applications/foc/foc_config.h

+ 12 - 1
Applications/foc/core/controller.c

@@ -337,15 +337,26 @@ bool mot_contrl_update(mot_contrl_t *ctrl) {
 	LowPass_Filter(ctrl->out_vdq_filterd.q, foc->out.vol_dq.q ,lowpass/1.5f);
 
 	/* 计算母线电流 */
+#if (CONFIG_IBUS_CALC_SAMPLED_V)
+	float v_alpha = ctrl->phase_v_ab.a;
+	float v_beta = ctrl->phase_v_ab.b;
+	float i_alpha = foc->in.curr_ab.a;
+	float i_beta = foc->in.curr_ab.b;
+#else
 	float vd = ctrl->out_vdq_filterd.d;
 	float vq = ctrl->out_vdq_filterd.q;
 	float id = ctrl->out_idq_filterd.d;
 	float iq = ctrl->out_idq_filterd.q;
+#endif
     /*
 		根据公式(等幅值变换,功率不等):
-		iDC x vDC = 3/2(iq x vq + id x vd);
+		iDC x vDC = 3/2(iq x vq + id x vd) = 3/2(i_alpha * v_alpha + i_beta * v_beta);
 	*/
+#if (CONFIG_IBUS_CALC_SAMPLED_V)
+	float m_pow = (v_alpha * i_alpha + v_beta * i_beta);
+#else
 	float m_pow = (vd * id + vq * iq);
+#endif
 	float raw_idc = 0.0f;
 	float v_dc = get_vbus_float();
 	if (v_dc != 0.0f) {

+ 1 - 1
Applications/foc/foc_config.h

@@ -65,7 +65,7 @@
 #define CONFIG_CONTRL_FW_START_DUTY 0.9F
 
 #define CONFIG_ENABLE_IAB_REC 1   // for phase current/voltage debug
-
+#define CONFIG_IBUS_CALC_SAMPLED_V 1
 
 #ifdef CONFIG_SPEED_LADRC
 	#define CONFIG_LADRC_Wo  200.0F