فهرست منبع

三相平衡检测,加入时间维度,防止转速太低,检测时间过长

Signed-off-by: huhui <huhui@sharkgulf.com>
huhui 2 سال پیش
والد
کامیت
8ca5e9d862

+ 4 - 1
Applications/foc/core/PMSM_FOC_Core.c

@@ -353,6 +353,7 @@ static __INLINE void PMSM_FOC_Phase_Unbalance(void) {
 	static u32 _cycle_cnt = 0, _last_mod_cnt = 0;
 	static float a_max = 0, b_max = 0, c_max = 0;
 	static u32 _unbalance_cnt = 0;
+	static u32 _unbalance_time = 0;
 	float lowpass = gFoc_Ctrl.in.s_motVelDegreePers * FOC_CTRL_US / 2.0f;
 	if (lowpass > 1.0f) {
 		lowpass = 1.0f;
@@ -364,6 +365,7 @@ static __INLINE void PMSM_FOC_Phase_Unbalance(void) {
 		gFoc_Ctrl.in.s_angleLast = gFoc_Ctrl.in.s_motAngle;
 		a_max = b_max = c_max = 0;
 		_unbalance_cnt = 0;
+		_unbalance_time = get_tick_ms();
 		_cycle_cnt = 0;
 		_last_mod_cnt = 0;
 		phase_unbalance_r = 0;
@@ -406,13 +408,14 @@ static __INLINE void PMSM_FOC_Phase_Unbalance(void) {
 		}
 		float unbalance_r = (i_max - i_min - CONFIG_PHASE_UNBALANCE_THROLD)/(i_max + 1e-8f);
 		if (unbalance_r >= CONFIG_PHASE_UNBALANCE_R) {
-			if (_unbalance_cnt++ >= 500) {
+			if ((_unbalance_cnt++ >= 500) || (get_delta_ms(_unbalance_time) >= 1000*10)) {
 				if (mc_set_critical_error(FOC_CRIT_PHASE_UNBalance_Err)) {
 					mc_crit_err_add(FOC_CRIT_PHASE_UNBalance_Err, (s16)i_max, (s16)i_min);
 				}
 			}
 		}else {
 			_unbalance_cnt = 0;
+			_unbalance_time = get_tick_ms();
 		}
 		phase_unbalance_r = unbalance_r;
 		phase_a_max = a_max;

+ 2 - 0
Applications/foc/foc_config.h

@@ -65,6 +65,8 @@
 
 #define CONFIG_CRUISE_ENABLE_ACCL 1 //定速巡航可以加速,油门回退,继续定速巡航
 
+#define CONFIG_TCS_ENABLE         1
+
 #define CONFIG_MAX_NEG_TORQUE 0.0F
 #ifdef CONFIG_SPEED_LADRC
 	#define CONFIG_LADRC_Wo  200.0F

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

@@ -47,6 +47,7 @@ static motor_t motor = {
 	.u_set.ebrk_torque = IDC_USER_LIMIT_NONE,
 	.u_set.ebrk_time = MAX_U16,
 	.u_set.n_brkShutPower = MAX_U8,
+	.u_set.n_tcs = CONFIG_TCS_ENABLE,
 };
 /* 无感运行的挡位,限制速度,母线电流,最大扭矩 */
 static mc_gear_t sensorless_gear = {

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

@@ -21,6 +21,7 @@ typedef struct {
 	s16 ebrk_torque;
 	u16 ebrk_time;
 	u8  n_brkShutPower;
+	u8  n_tcs;
 }user_rt_set;
 
 typedef struct {

+ 3 - 3
Applications/foc/motor/motor_param.h

@@ -76,9 +76,9 @@ float motor_get_ebreak_toruqe(float rpm);
 #define CONFIG_DEFAULT_PHASE_CURR_LIM 500
 #define CONFIG_MAX_FW_D_CURR     300.0F //d轴最大的退磁电流
 #define CONFIG_CURRENT_LOOP_DECOUPE    //电流环解耦
-#define CONFIG_SENSORLESS_MAX_IDC 30
-#define CONFIG_SENSORLESS_MAX_TORQUE 80
-#define CONFIG_SENSORLESS_MAX_SPEED 3000
+#define CONFIG_SENSORLESS_MAX_IDC 60
+#define CONFIG_SENSORLESS_MAX_TORQUE 100
+#define CONFIG_SENSORLESS_MAX_SPEED 5000
 
 #elif CONFIG_MOT_TYPE==MOTOR_BLUESHARK_NEW2
 #define MOTOR_R   0.013f