Explorar o código

母线的限流,最大值不能超过挡位的限流

Signed-off-by: huhui <huhui@sharkgulf.com>
huhui %!s(int64=3) %!d(string=hai) anos
pai
achega
ae1df0b387

+ 1 - 1
Applications/foc/commands.c

@@ -269,7 +269,7 @@ static void process_foc_command(foc_cmd_body_t *command) {
 		case Foc_Set_iDC_Limit:
 		{
 			u8 current = decode_u8(((u8 *)command->data));
-			PMSM_FOC_DCCurrLimit((float)current);
+			mc_set_idc_limit((float)current);
 			encode_u8(response + 3, (u8)PMSM_FOC_GetDCCurrLimit());
 			len += 1;
 			break;

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

@@ -187,6 +187,14 @@ static void mc_gear_vmode_changed(void) {
 	PMSM_FOC_TorqueLimit(gears[motor.n_gear].u_maxTorque);
 }
 
+static s16 mc_get_gear_idc_limit(void) {
+	if (motor.b_is96Mode) {
+		return nv_get_gear_configs()->gears_96[motor.n_gear].u_maxIdc;
+	}else {
+		return nv_get_gear_configs()->gears_48[motor.n_gear].u_maxIdc;
+	}
+}
+
 void mc_init(void) {
 	fan_pwm_init();
 	adc_init();
@@ -384,6 +392,12 @@ bool mc_set_cruise_speed(bool rpm_abs, float target_rpm) {
 	return ret;
 }
 
+void mc_set_idc_limit(s16 limit) {
+	s16 g_limit = mc_get_gear_idc_limit();
+	limit = min(g_limit, limit);
+	PMSM_FOC_DCCurrLimit(limit);
+}
+
 bool mc_set_foc_mode(u8 mode) {
 	if (mode == motor.mode) {
 		return true;

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

@@ -78,6 +78,7 @@ u16 mc_get_running_status2(void);
 bool mc_enable_cruise(bool enable);
 bool mc_is_cruise_enabled(void);
 bool mc_set_cruise_speed(bool rpm_abs, float target_rpm);
+void mc_set_idc_limit(s16 limit);
 
 static __INLINE float motor_encoder_get_angle(void) {
 #ifdef USE_ENCODER_HALL