|
@@ -48,6 +48,7 @@ static m_contrl_t motor = {
|
|
|
.b_ind_start = false,
|
|
.b_ind_start = false,
|
|
|
.s_target_speed = MAX_S16,
|
|
.s_target_speed = MAX_S16,
|
|
|
.u_set.idc_lim = IDC_USER_LIMIT_NONE,
|
|
.u_set.idc_lim = IDC_USER_LIMIT_NONE,
|
|
|
|
|
+ .u_set.rpm_lim = RPM_USER_LIMIT_NONE,
|
|
|
.u_set.ebrk_lvl = 0,
|
|
.u_set.ebrk_lvl = 0,
|
|
|
.u_set.n_brkShutPower = CONFIG_Settings_BrkShutPower,
|
|
.u_set.n_brkShutPower = CONFIG_Settings_BrkShutPower,
|
|
|
.u_set.b_tcs = CONFIG_Settings_TcsEnable,
|
|
.u_set.b_tcs = CONFIG_Settings_TcsEnable,
|
|
@@ -224,23 +225,12 @@ static void mc_gear_vmode_changed(void) {
|
|
|
eRamp_set_time(&(PMSM_FOC_Get()->rtLim.rpmLimRamp), CONFIG_SENSORLESS_RAMP_TIME, CONFIG_SENSORLESS_RAMP_TIME);
|
|
eRamp_set_time(&(PMSM_FOC_Get()->rtLim.rpmLimRamp), CONFIG_SENSORLESS_RAMP_TIME, CONFIG_SENSORLESS_RAMP_TIME);
|
|
|
eRamp_set_time(&(PMSM_FOC_Get()->rtLim.DCCurrLimRamp), CONFIG_SENSORLESS_RAMP_TIME, CONFIG_SENSORLESS_RAMP_TIME);
|
|
eRamp_set_time(&(PMSM_FOC_Get()->rtLim.DCCurrLimRamp), CONFIG_SENSORLESS_RAMP_TIME, CONFIG_SENSORLESS_RAMP_TIME);
|
|
|
}
|
|
}
|
|
|
- PMSM_FOC_SpeedLimit((float)gears->max_speed);
|
|
|
|
|
|
|
+ PMSM_FOC_SpeedLimit((float)min(gears->max_speed, motor.u_set.rpm_lim));
|
|
|
PMSM_FOC_DCCurrLimit((float)min(gears->max_idc, motor.u_set.idc_lim));
|
|
PMSM_FOC_DCCurrLimit((float)min(gears->max_idc, motor.u_set.idc_lim));
|
|
|
PMSM_FOC_TorqueLimit((float)gears->max_torque);
|
|
PMSM_FOC_TorqueLimit((float)gears->max_torque);
|
|
|
sys_debug("change %d, %d, %d\n", gears->max_idc, gears->max_speed, gears->max_torque);
|
|
sys_debug("change %d, %d, %d\n", gears->max_idc, gears->max_speed, gears->max_torque);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-static s16 mc_get_gear_idc_limit(void) {
|
|
|
|
|
- if (!foc_observer_is_encoder()) {
|
|
|
|
|
- return sensorless_gear.max_idc;
|
|
|
|
|
- }
|
|
|
|
|
- if (motor.b_is96Mode) {
|
|
|
|
|
- return mc_conf()->g_n[motor.n_gear].max_idc;
|
|
|
|
|
- }else {
|
|
|
|
|
- return mc_conf()->g_l[motor.n_gear].max_idc;
|
|
|
|
|
- }
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
void mc_init(void) {
|
|
void mc_init(void) {
|
|
|
fan_pwm_init();
|
|
fan_pwm_init();
|
|
|
adc_init();
|
|
adc_init();
|
|
@@ -514,11 +504,18 @@ void mc_set_idc_limit(s16 limit) {
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
motor.u_set.idc_lim = limit;
|
|
motor.u_set.idc_lim = limit;
|
|
|
- s16 g_limit = mc_get_gear_idc_limit();
|
|
|
|
|
- limit = min(g_limit, limit);
|
|
|
|
|
- PMSM_FOC_DCCurrLimit(limit);
|
|
|
|
|
|
|
+ mc_gear_vmode_changed();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+void mc_set_rpm_limit(s16 limit) {
|
|
|
|
|
+ if ((limit == motor.u_set.rpm_lim) || (limit < 0)) {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ motor.u_set.rpm_lim = limit;
|
|
|
|
|
+ mc_gear_vmode_changed();
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
bool mc_set_ebrk_level(u8 level) {
|
|
bool mc_set_ebrk_level(u8 level) {
|
|
|
if (level < CONFIG_EBRK_LVL_NUM) {
|
|
if (level < CONFIG_EBRK_LVL_NUM) {
|
|
|
motor.u_set.ebrk_lvl = level;
|
|
motor.u_set.ebrk_lvl = level;
|