|
|
@@ -91,6 +91,10 @@ motor_t * mc_params(void) {
|
|
|
return &motor;
|
|
|
}
|
|
|
|
|
|
+void mc_need_update(void) {
|
|
|
+ motor.b_updated = true;
|
|
|
+}
|
|
|
+
|
|
|
bool mc_start(u8 mode) {
|
|
|
if (motor.b_start) {
|
|
|
return true;
|
|
|
@@ -290,14 +294,14 @@ void mc_get_running_status(u8 *data) {
|
|
|
data[0] = motor.mode;
|
|
|
data[0] |= PMSM_FOC_Get()->out.n_RunMode << 2;
|
|
|
data[0] |= (PMSM_FOC_Get()->in.b_cruiseEna?1:0) << 4;
|
|
|
- data[0] |= (PMSM_FOC_Is_CruiseEnabled()?1:0) << 5;
|
|
|
+ data[0] |= (motor.b_start?1:0) << 5;
|
|
|
data[0] |= (mc_is_epm()?1:0) << 6;
|
|
|
data[0] |= (0) << 7; //motor locked
|
|
|
}
|
|
|
|
|
|
|
|
|
void mc_encoder_off_calibrate(s16 vd) {
|
|
|
- if (PMSM_FOC_Is_Start()) {
|
|
|
+ if (motor.b_start) {
|
|
|
return;
|
|
|
}
|
|
|
motor.b_calibrate = true;
|
|
|
@@ -412,7 +416,7 @@ bool mc_lock_motor(bool lock) {
|
|
|
|
|
|
|
|
|
bool mc_throttle_released(void) {
|
|
|
- return get_throttle_float() < CONFIG_THROTTLE_LOW_VALUE;
|
|
|
+ return get_throttle_float() <= nv_get_foc_params()->n_minThroVol;
|
|
|
}
|
|
|
|
|
|
static bool mc_is_hwbrake(void) {
|
|
|
@@ -473,7 +477,7 @@ void MC_Protect_IRQHandler(void){
|
|
|
}
|
|
|
|
|
|
void TIMER_UP_IRQHandler(void){
|
|
|
- if (!motor.b_start || !PMSM_FOC_Is_Start()) {
|
|
|
+ if (!motor.b_start && !PMSM_FOC_Is_Start()) {
|
|
|
motor_encoder_update();
|
|
|
}
|
|
|
}
|
|
|
@@ -549,14 +553,12 @@ void Sched_MC_mTask(void) {
|
|
|
return;
|
|
|
}
|
|
|
/* 堵转处理 */
|
|
|
- if (mc_run_stall_process(runMode)) {
|
|
|
- return;
|
|
|
- }
|
|
|
- if (runMode == CTRL_MODE_CURRENT) {
|
|
|
+ if (mc_run_stall_process(runMode) || (runMode == CTRL_MODE_CURRENT)) {
|
|
|
eCtrl_Running();
|
|
|
PMSM_FOC_Slow_Task();
|
|
|
return;
|
|
|
}
|
|
|
+
|
|
|
if ((runMode != CTRL_MODE_OPEN) || (motor.mode != CTRL_MODE_OPEN)) {
|
|
|
#ifndef CONFIG_DQ_STEP_RESPONSE
|
|
|
if (motor.mode != CTRL_MODE_OPEN) {
|
|
|
@@ -580,8 +582,9 @@ void Sched_MC_mTask(void) {
|
|
|
if (runMode != CTRL_MODE_OPEN) {
|
|
|
eCtrl_Running();
|
|
|
float f_throttle = get_throttle_float();
|
|
|
- if (f_throttle != motor.throttle) {
|
|
|
+ if ((f_throttle != motor.throttle) || motor.b_updated) {
|
|
|
motor.throttle = f_throttle;
|
|
|
+ motor.b_updated = false;
|
|
|
if (!motor.b_epm_cmd_move) {//通过命令前进后退,不处理转把
|
|
|
torque_speed_target(runMode, f_throttle);
|
|
|
}
|