فهرست منبع

相错误的时候,保存电流侧瞬时电流,电压

Signed-off-by: huhui <huhui@sharkgulf.com>
huhui 3 سال پیش
والد
کامیت
26b45a5567
4فایلهای تغییر یافته به همراه31 افزوده شده و 13 حذف شده
  1. 5 2
      Applications/foc/motor/motor.c
  2. 1 0
      Applications/foc/motor/motor.h
  3. 22 10
      Applications/foc/samples.c
  4. 3 1
      Applications/foc/samples.h

+ 5 - 2
Applications/foc/motor/motor.c

@@ -941,8 +941,9 @@ void MC_Protect_IRQHandler(void){
 	if (!motor.b_start) {
 		return;
 	}
-	mc_error.vbus_x10 = (s16)(get_vbus_float() * 10.0f); 
-	mc_error.ibus_x10 = (s16)(get_vbus_current() * 10.0f);
+	mc_error.vbus_x10 = (s16)(sample_vbus_raw() * 10.0f); 
+	mc_error.ibus_x10 = (s16)(sample_ibus_raw() * 10.0f);
+	mc_error.vacc_x10 = (s16) (sample_acc_vol_raw() * 10.0f);
 	mc_error.id_ref_x10 = (s16)(PMSM_FOC_Get()->idq_ctl[0].s_Cp * 10.0f);
 	mc_error.iq_ref_x10 = (s16)(PMSM_FOC_Get()->idq_ctl[1].s_Cp * 10.0f);
 	mc_error.id_x10 = (s16)(PMSM_FOC_Get()->out.s_RealIdq.d * 10.0f);
@@ -977,6 +978,8 @@ int mc_get_phase_errinfo(u8 *data, int dlen) {
 	len += 2;
 	encode_s16(data, mc_error.ibus_x10);
 	len += 2;
+	encode_s16(data, mc_error.vacc_x10);
+	len += 2;
 	encode_s16(data, mc_error.id_ref_x10);
 	len += 2;
 	encode_s16(data, mc_error.iq_ref_x10);

+ 1 - 0
Applications/foc/motor/motor.h

@@ -54,6 +54,7 @@ typedef struct {
 typedef struct {
 	s16 vbus_x10;
 	s16 ibus_x10;
+	s16 vacc_x10;
 	s16 id_x10;
 	s16 iq_x10;
 	s16 vd_x10;

+ 22 - 10
Applications/foc/samples.c

@@ -184,28 +184,40 @@ void sample_vref(void) {
 	LowPass_Filter(_vref.filted_value, _vref.value, _vref.lowpass);
 }
 
+float sample_vbus_raw(void) {
+	s16 vadc = adc_get_vbus();
+	return (float)vadc * VBUS_VOL_CEOF;
+}
+
+float sample_acc_vol_raw(void) {
+	s16 vadc = adc_get_acc();
+	return (float)vadc * VBUS_VOL_CEOF;
+}
+
 void sample_vbus(void){
 	u32 ticks = task_ticks_abs();
-	s16 vadc = adc_get_vbus();
-	_vbus.value = (float)vadc * VBUS_VOL_CEOF;
+	_vbus.value = sample_vbus_raw();
 	LowPass_Filter(_vbus.filted_value, _vbus.value, _vbus.lowpass);
 	_vbus.filted_int = (int)_vbus.filted_value;
 #ifdef ACC_V_CHAN
-	vadc = adc_get_acc();
-	acc_vol.value = (float)vadc * VBUS_VOL_CEOF;
+	acc_vol.value = sample_acc_vol_raw();
 	LowPass_Filter(acc_vol.filted_value, acc_vol.value, acc_vol.lowpass);
 	acc_vol.filted_int = (int)acc_vol.filted_value;
 #endif
 }
 
-void sample_ibus(void) {
-#ifdef VBUS_I_CHAN
-	#ifdef VBUS_I_POSITIVE
+float sample_ibus_raw(void) {
+#ifdef VBUS_I_POSITIVE
 	s16 vadc = adc_get_ibus() - _ibus.adc_offset;
-	#else
+#else
 	s16 vadc = _ibus.adc_offset - adc_get_ibus();
-	#endif
-	_ibus.value = (float)vadc * VBUS_I_CEOF;
+#endif
+	return (float)vadc * VBUS_I_CEOF;
+}
+
+void sample_ibus(void) {
+#ifdef VBUS_I_CHAN
+	_ibus.value = sample_ibus_raw();
 	LowPass_Filter(_ibus.filted_value, _ibus.value, _ibus.lowpass);
 #endif
 }

+ 3 - 1
Applications/foc/samples.h

@@ -25,6 +25,8 @@ float get_thro2_5v_float(void);
 float get_thro_5v_float(void);
 float get_throttle2_float(void);
 void sample_uvw_phases_raw(s16 *uvw_raw);
-
+float sample_ibus_raw(void);
+float sample_acc_vol_raw(void);
+float sample_vbus_raw(void);
 #endif /* _SAMPLES_H__ */