Pārlūkot izejas kodu

1. 死区补偿暂时关闭,效果不明显
2. 编码器I信号处理,不报错(测试机I的干扰比较大)

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

huhui 2 gadi atpakaļ
vecāks
revīzija
30a7e82b10

+ 2 - 2
Applications/bsp/gd32/board_mc105_v3.h

@@ -60,8 +60,8 @@
 #define TSampleMIN (TDead + TRise + TADC) //采样需要的总时间
 #define TSampleBefore (TDead + TRise) //采样开始前需要等待的时间
 
-#define CONFIG_START_LINE_DTC_CURRENT 5.0F /* 死区补偿开始电流,取决于电流噪声 */
-#define COMFIG_END_LINE_DTC_CURRENT   15.0F
+//#define CONFIG_START_LINE_DTC_CURRENT 5.0F /* 死区补偿开始电流,取决于电流噪声 */
+//#define COMFIG_END_LINE_DTC_CURRENT   15.0F
 
 #define ADC_REFERENCE_VOLTAGE  (3.3F)
 #define ADC_FULL_MAX          (4095.0F)

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

@@ -354,6 +354,9 @@ static __INLINE void PMSM_FOC_Phase_Unbalance(void) {
 	static float a_max = 0, b_max = 0, c_max = 0;
 	static u32 _unbalance_cnt = 0;
 	float lowpass = gFoc_Ctrl.in.s_motVelDegreePers * FOC_CTRL_US / 2.0f;
+	if (lowpass > 1.0f) {
+		lowpass = 1.0f;
+	}
 	LowPass_Filter(gFoc_Ctrl.in.s_iABCFilter[0], gFoc_Ctrl.in.s_iABC[0], lowpass);
 	LowPass_Filter(gFoc_Ctrl.in.s_iABCFilter[1], gFoc_Ctrl.in.s_iABC[1], lowpass);
 	gFoc_Ctrl.in.s_iABCFilter[2] = -(gFoc_Ctrl.in.s_iABCFilter[0] + gFoc_Ctrl.in.s_iABCFilter[1]);
@@ -522,6 +525,9 @@ static __INLINE bool PMSM_FOC_Update_Input(void) {
 
 	Park(&iAB, gFoc_Ctrl.in.s_motAngle, &gFoc_Ctrl.out.s_RealIdq);
 	float lowpass = gFoc_Ctrl.in.s_motVelDegreePers * FOC_CTRL_US * 2.0f;
+	if (lowpass > 1.0f) {
+		lowpass = 1.0f;
+	}
 	LowPass_Filter(gFoc_Ctrl.out.s_FilterIdq.d, gFoc_Ctrl.out.s_RealIdq.d, lowpass);
 	LowPass_Filter(gFoc_Ctrl.out.s_FilterIdq.q, gFoc_Ctrl.out.s_RealIdq.q, lowpass);
 

+ 3 - 3
Applications/foc/motor/encoder.c

@@ -386,7 +386,7 @@ static void encoder_sync_pwm_abs(void) {
 }
 
 /*I 信号的中断处理,一圈一个中断*/
-//static int abi_I_delta = 0xFFFFFFF;
+static int abi_I_delta = 0xFFFFFFF;
 void ENC_ABI_IRQHandler(void) {
 	g_encoder.z_index_cnt = _abi_count();
 #if 0
@@ -407,7 +407,7 @@ void ENC_ABI_IRQHandler(void) {
 		if (g_encoder.z_index_cnt <=10 || g_encoder.z_index_cnt >= (g_encoder.cpr - 10)) {
 			g_encoder.align_cnt = 0;
 		}else if (g_encoder.enc_maybe_err == ENCODER_NO_ERR){
-			g_encoder.enc_maybe_err = ENCODER_AB_ERR;
+			abi_I_delta = g_encoder.z_index_cnt;
 		}
 	}
 #endif
@@ -493,7 +493,7 @@ float encoder_get_abi_angle(void) {
 
 void encoder_log(void) {
 	sys_debug("pwm %f, abi %f\n", encoder_get_pwm_angle(), encoder_get_abi_angle());
-	sys_debug("pwm count %d, I count %d,%d,%d\n", g_encoder.pwm_count, _abi_count(), g_encoder.align_cnt, g_encoder.align_step);
+	sys_debug("pwm count %d, I count %d,%d,%d\n", g_encoder.pwm_count, abi_I_delta, g_encoder.align_cnt, g_encoder.align_step);
 	sys_debug("pwm freq %f, err %d, %f, %f\n", enc_get_pwm_freq(), pwm_duty_err, pwm_err_min, pwm_err_max);
 	if (g_encoder.enc_maybe_err) {
 		sys_debug("E:%d,%d,%d,%d,%d,%d, %d\n", enc_test1, enc_test2, enc_test3, enc_r, enc_cnt, enc_last_cnt, enc_test4);