Преглед изворни кода

参数识别死区调整

Signed-off-by: kevin <huhui@sharkgulf.com>
kevin пре 2 година
родитељ
комит
555d1ae787
1 измењених фајлова са 7 додато и 14 уклоњено
  1. 7 14
      Applications/foc/motor/mot_params_ind.c

+ 7 - 14
Applications/foc/motor/mot_params_ind.c

@@ -94,15 +94,8 @@ static void _rs_ind_timer_handler(shark_timer_t *t) {
 		}
 		}
 		break;
 		break;
 	case 3: {
 	case 3: {
-		float *iabc = motor.controller.foc.in.curr_abc;
-		float d, q;
-		float v_a_final = 0;
-		float v_abc[3] = {0, 0, 0};
-		foc_abc_2_dq(SIGN(iabc[0]), SIGN(iabc[1]), SIGN(iabc[2]), &d, &q);
-		get_uvw_phases_raw(v_abc);
-		v_a_final = LowPass_Filter(v_a_final, v_abc[0], 0.2f);
-		float dtc = ((float)CONFIG_HW_DeadTime/(float)FOC_PWM_period) * motor.controller.foc.in.dc_vol * TWO_BY_THREE;
-		float vd = (rs_vd_now - dtc) * TWO_BY_THREE;
+		float dtc = ((float)CONFIG_HW_DeadTime/(float)FOC_PWM_period) * motor.controller.foc.in.dc_vol * 0.2f;
+		float vd = rs_vd_now * TWO_BY_THREE - dtc;
 		float id = motor.controller.foc.out.curr_dq.d;
 		float id = motor.controller.foc.out.curr_dq.d;
 		float rs = vd / (id + 0.0001f);
 		float rs = vd / (id + 0.0001f);
 		rs_est_value = LowPass_Filter(rs_est_value, rs, 0.2f);
 		rs_est_value = LowPass_Filter(rs_est_value, rs, 0.2f);
@@ -113,8 +106,7 @@ static void _rs_ind_timer_handler(shark_timer_t *t) {
 			finish = true;
 			finish = true;
 			b_rs_ested = true;
 			b_rs_ested = true;
 			sys_debug("est rs = %f-%f\n", rs_est_value, rs);
 			sys_debug("est rs = %f-%f\n", rs_est_value, rs);
-			sys_debug("vd-id is %f-%f-%f-%f, wait %d\n", rs_vd_now, id, dtc/1.5f, vd, wait_iq_0_cnt);
-			sys_debug("Va = %f\n", v_a_final);
+			sys_debug("vd-id is %f-%f-%f-%f, wait %d\n", rs_vd_now, id, dtc, vd, wait_iq_0_cnt);
 		}
 		}
 	}
 	}
 	default:
 	default:
@@ -152,7 +144,7 @@ void mot_params_ind_inductance(float v, float freq, u16 l_type) {
 	hj_n = (float)FOC_PWM_FS / hj_freq;
 	hj_n = (float)FOC_PWM_FS / hj_freq;
 	hj_samples = hj_n * 50;
 	hj_samples = hj_n * 50;
 	K_terms = (s32) (0.5f + hj_samples*hj_freq/(float)FOC_PWM_FS);
 	K_terms = (s32) (0.5f + hj_samples*hj_freq/(float)FOC_PWM_FS);
-	Vdead = motor.controller.foc.in.dc_vol * (float)CONFIG_HW_DeadTime / (float)FOC_PWM_period * TWO_BY_THREE;
+	Vdead = motor.controller.foc.in.dc_vol * (float)CONFIG_HW_DeadTime / (float)FOC_PWM_period;
 	hj_w = 360.0f / hj_n;
 	hj_w = 360.0f / hj_n;
 	sys_debug("hj %f, %f, %f, %f, %f, %f, %f\n", hj_v, hj_freq, hj_n, hj_samples, K_terms, Vdead, hj_w);
 	sys_debug("hj %f, %f, %f, %f, %f, %f, %f\n", hj_v, hj_freq, hj_n, hj_samples, K_terms, Vdead, hj_w);
 	float fft_angle = 360.0f / hj_samples * K_terms;
 	float fft_angle = 360.0f / hj_samples * K_terms;
@@ -261,6 +253,7 @@ void mot_params_calc_inductance(void) {
 	goertzel_dft(i_samples, &i_real, &i_image, &i_mag);
 	goertzel_dft(i_samples, &i_real, &i_image, &i_mag);
 	sys_debug("v %f, %f, %f\n", v_mag/(hj_samples*0.5f), v_real, v_image);
 	sys_debug("v %f, %f, %f\n", v_mag/(hj_samples*0.5f), v_real, v_image);
 	sys_debug("i %f, %f, %f\n", i_mag/(hj_samples*0.5f), i_real, i_image);
 	sys_debug("i %f, %f, %f\n", i_mag/(hj_samples*0.5f), i_real, i_image);
+	sys_debug("vmag %f, %f\n", v_mag, Vdead * hj_samples*0.5f);
 	v_mag -= Vdead * hj_samples*0.5f;
 	v_mag -= Vdead * hj_samples*0.5f;
 	
 	
 	float z_angle = fast_atan_2(i_image, i_real) - fast_atan_2(v_image, v_real);
 	float z_angle = fast_atan_2(i_image, i_real) - fast_atan_2(v_image, v_real);
@@ -272,7 +265,7 @@ void mot_params_calc_inductance(void) {
 	float z_image = z_mag * s;
 	float z_image = z_mag * s;
 	float Rs = rs_est_value;
 	float Rs = rs_est_value;
 	float Ri = (SQ(z_real - Rs) + SQ(z_image))/(z_real - Rs + 0.0000001f);
 	float Ri = (SQ(z_real - Rs) + SQ(z_image))/(z_real - Rs + 0.0000001f);
-	float l = Ri * (z_real - Rs)/(hj_freq * 2 * PI * z_image + 0.0000001f) * 0.9f;
+	float l = Ri * (z_real - Rs)/(hj_freq * 2 * PI * z_image + 0.0000001f);
 	if (n_ind_ld == L_TYPE_D) {
 	if (n_ind_ld == L_TYPE_D) {
 		ld_est_value = l;
 		ld_est_value = l;
 		b_ld_ested = true;
 		b_ld_ested = true;
@@ -291,7 +284,7 @@ static void _flux_ind_timer_handler(shark_timer_t *t) {
 	float delta = We - motVelRadusPers;
 	float delta = We - motVelRadusPers;
 	motVelRadusPers = motor.controller.foc.mot_vel_radusPers;
 	motVelRadusPers = motor.controller.foc.mot_vel_radusPers;
 	if (We > 100 && ABS(delta) < 40) {
 	if (We > 100 && ABS(delta) < 40) {
-		float dtc = ((float)CONFIG_HW_DeadTime/(float)FOC_PWM_Half_Period) * motor.controller.foc.in.dc_vol * 1.5f;
+		float dtc = ((float)CONFIG_HW_DeadTime/(float)FOC_PWM_period) * motor.controller.foc.in.dc_vol * 1.5f;
 		float vq = (motor.controller.foc.out.vol_dq.q - dtc) * TWO_BY_THREE;
 		float vq = (motor.controller.foc.out.vol_dq.q - dtc) * TWO_BY_THREE;
 		float flux = vq / We;
 		float flux = vq / We;
 		flux_est_value = LowPass_Filter(flux_est_value, flux, 0.1f);
 		flux_est_value = LowPass_Filter(flux_est_value, flux, 0.1f);