Explorar o código

切入无感控制,速度,扭矩,母线电流都需要综合当前挡位,用户限制取最小值

Signed-off-by: kevin <huhui@sharkgulf.com>
kevin %!s(int64=2) %!d(string=hai) anos
pai
achega
5709376d6b
Modificáronse 2 ficheiros con 11 adicións e 10 borrados
  1. 1 1
      Applications/foc/foc_config.h
  2. 10 9
      Applications/foc/motor/motor.c

+ 1 - 1
Applications/foc/foc_config.h

@@ -52,7 +52,7 @@
 #define CONFIG_CURRENT_LOOP_DECOUPE    //电流环解耦
 #define CONFIG_SENSORLESS_MAX_IDC 30
 #define CONFIG_SENSORLESS_MAX_TORQUE 100
-#define CONFIG_SENSORLESS_MAX_SPEED 1200
+#define CONFIG_SENSORLESS_MAX_SPEED 3000
 
 #define CONFIG_PHASE_UNBALANCE_PEAK_CNT 3 //计算经过的电周期内的最大值(peak 峰值)
 #define CONFIG_PHASE_UNBALANCE_THROLD 4.0F

+ 10 - 9
Applications/foc/motor/motor.c

@@ -229,15 +229,19 @@ static void _led_off_timer_handler(shark_timer_t *t) {
 
 static void mc_gear_mode_set(void) {
 	gear_t *gears = mc_gear_conf();
-	if (gears != &sensorless_gear) {
-		sensorless_gear.max_torque = gears->max_torque;
-	}else { //slowly changed
+	float vel_lim = (float)min(gears->max_speed, motor.u_set.rpm_lim);
+	float idc_lim = (float)min(gears->max_idc, motor.u_set.idc_lim);
+	float torque_lim = (float)gears->max_torque;
+	if (!foc_observer_is_encoder()) { //slowly changed
 		line_ramp_set_time(&motor.controller.ramp_vel_lim, CONFIG_SENSORLESS_RAMP_TIME);
 		line_ramp_set_time(&motor.controller.ramp_dc_curr_lim, CONFIG_SENSORLESS_RAMP_TIME);
+		vel_lim = min(vel_lim, (float)sensorless_gear.max_speed);
+		idc_lim = min(idc_lim, (float)sensorless_gear.max_idc);
+		torque_lim = min(torque_lim, (float)sensorless_gear.max_torque);
 	}
-	mot_contrl_set_vel_limit(&motor.controller, (float)min(gears->max_speed, motor.u_set.rpm_lim));
-	mot_contrl_set_dccurr_limit(&motor.controller, (float)min(gears->max_idc, motor.u_set.idc_lim));
-	mot_contrl_set_torque_limit(&motor.controller, (float)gears->max_torque);
+	mot_contrl_set_vel_limit(&motor.controller, vel_lim);
+	mot_contrl_set_dccurr_limit(&motor.controller, idc_lim);
+	mot_contrl_set_torque_limit(&motor.controller, torque_lim);
 }
 
 void mc_init(void) {
@@ -266,9 +270,6 @@ motor_t * get_motor(void) {
 
 gear_t *mc_gear_conf_by_gear(u8 n_gear) {
 	gear_t *gears;
-	if (!foc_observer_is_encoder()) { //无感模式,受限运行
-		return &sensorless_gear;
-	}
 	if (motor.b_high_vol_mode) {
 		gears = &mc_conf()->g_n[0];
 	}else {