|
|
@@ -145,7 +145,6 @@ bool mc_start(u8 mode) {
|
|
|
return false;
|
|
|
}
|
|
|
if (mc_is_hwbrake()) {
|
|
|
- sys_debug("hw brake\n");
|
|
|
PMSM_FOC_Brake(true);
|
|
|
}
|
|
|
gpio_beep(200);
|
|
|
@@ -164,12 +163,10 @@ bool mc_stop(void) {
|
|
|
|
|
|
if (motor_encoder_get_speed() > 10.0f) {
|
|
|
PMSM_FOC_SetErrCode(FOC_NowAllowed_With_Speed);
|
|
|
- sys_debug("speed error\n");
|
|
|
return false;
|
|
|
}
|
|
|
if (!mc_throttle_released()) {
|
|
|
PMSM_FOC_SetErrCode(FOC_Throttle_Err);
|
|
|
- sys_debug("throttle error\n");
|
|
|
return false;
|
|
|
}
|
|
|
_mc_internal_init(CTRL_MODE_OPEN, false);
|
|
|
@@ -203,7 +200,6 @@ bool mc_set_foc_mode(u8 mode) {
|
|
|
}
|
|
|
|
|
|
bool mc_start_epm(bool epm) {
|
|
|
- sys_debug("%s epm mode\n", epm?"enter":"exit");
|
|
|
if (motor.b_epm == epm) {
|
|
|
return true;
|
|
|
}
|
|
|
@@ -251,7 +247,6 @@ bool mc_is_start(void) {
|
|
|
}
|
|
|
|
|
|
bool mc_start_epm_move(EPM_Dir_t dir, bool is_command) {
|
|
|
- sys_debug("epm dir %d, %d\n", dir, motor.epm_dir);
|
|
|
if (!motor.b_epm || !motor.b_start) {
|
|
|
PMSM_FOC_SetErrCode(FOC_NotAllowed);
|
|
|
return false;
|
|
|
@@ -259,24 +254,26 @@ bool mc_start_epm_move(EPM_Dir_t dir, bool is_command) {
|
|
|
if ((dir == motor.epm_dir) && (is_command == motor.b_epm_cmd_move)) {
|
|
|
return true;
|
|
|
}
|
|
|
+ u32 mask = cpu_enter_critical();
|
|
|
motor.epm_dir = dir;
|
|
|
if (dir != EPM_Dir_None) {
|
|
|
motor.b_epm_cmd_move = is_command;
|
|
|
- u32 mask = cpu_enter_critical();
|
|
|
+
|
|
|
if (!PMSM_FOC_Is_Start()) {
|
|
|
PMSM_FOC_Start(motor.mode);
|
|
|
pwm_enable_channel();
|
|
|
}
|
|
|
- cpu_exit_critical(mask);
|
|
|
float rpm = nv_get_foc_params()->s_maxEpmRPM;
|
|
|
if (dir == EPM_Dir_Back) {
|
|
|
rpm = -rpm;
|
|
|
}
|
|
|
+ sys_debug("rpm %f\n", rpm);
|
|
|
PMSM_FOC_Set_Speed(rpm);
|
|
|
}else {
|
|
|
motor.b_epm_cmd_move = false;
|
|
|
PMSM_FOC_Set_Speed(0);
|
|
|
}
|
|
|
+ cpu_exit_critical(mask);
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
@@ -501,7 +498,6 @@ void MC_Brake_IRQHandler(void) {
|
|
|
motor.b_break = false;
|
|
|
PMSM_FOC_Brake(false);
|
|
|
}
|
|
|
- sys_debug("brake %d\n", motor.b_break);
|
|
|
}
|
|
|
|
|
|
static void _pwm_brake_prot_timer_handler(shark_timer_t *t){
|
|
|
@@ -676,13 +672,12 @@ void Sched_MC_mTask(void) {
|
|
|
pwm_disable_channel();
|
|
|
cpu_exit_critical(mask);
|
|
|
}
|
|
|
- }else {
|
|
|
- if (!PMSM_FOC_Is_Start()) {
|
|
|
- mask = cpu_enter_critical();
|
|
|
- PMSM_FOC_Start(motor.mode);
|
|
|
- pwm_enable_channel();
|
|
|
- cpu_exit_critical(mask);
|
|
|
- }
|
|
|
+ }
|
|
|
+ if (!PMSM_FOC_Is_Start() && (!mc_throttle_released())) {
|
|
|
+ mask = cpu_enter_critical();
|
|
|
+ PMSM_FOC_Start(motor.mode);
|
|
|
+ pwm_enable_channel();
|
|
|
+ cpu_exit_critical(mask);
|
|
|
}
|
|
|
}
|
|
|
if (runMode != CTRL_MODE_OPEN) {
|