|
|
@@ -48,6 +48,7 @@ bool mot_contrl_enable(mot_contrl_t *ctrl, bool start) {
|
|
|
line_ramp_init(&ctrl->target_vel, CONFIG_CRUISE_RAMP_TIME);
|
|
|
line_ramp_init(&ctrl->target_current, CONFIG_CURRENT_RAMP_TIME);
|
|
|
line_ramp_init(&ctrl->input_torque, CONFIG_DEFAULT_TORQUE_RAMP_TIME);
|
|
|
+ line_ramp_init(&ctrl->ramp_adv_angle, CONFIG_CURRENT_RAMP_TIME);
|
|
|
mot_contrl_pid(ctrl);
|
|
|
mot_contrl_ulimit(ctrl);
|
|
|
mot_contrl_rtlimit(ctrl);
|
|
|
@@ -276,9 +277,9 @@ static void mot_contrl_dq_assign(mot_contrl_t *ctrl) {
|
|
|
float target_current = line_ramp_get_interp(&ctrl->target_current);
|
|
|
if (ctrl->b_mtpa_calibrate && (ctrl->adv_angle != INVALID_ANGLE)) {
|
|
|
float s, c;
|
|
|
- arm_sin_cos(ctrl->adv_angle + 90.0f, &s, &c);
|
|
|
+ float angle_step = line_ramp_step(&ctrl->ramp_adv_angle);
|
|
|
+ arm_sin_cos(angle_step + 90.0f, &s, &c);
|
|
|
ctrl->target_idq.d = target_current * c;
|
|
|
-
|
|
|
if (ctrl->target_idq.d > ctrl->hwlim.fw_id) {
|
|
|
ctrl->target_idq.d = ctrl->hwlim.fw_id;
|
|
|
}else if (ctrl->target_idq.d < -ctrl->hwlim.fw_id) {
|
|
|
@@ -679,6 +680,7 @@ bool mot_contrl_set_force_torque(mot_contrl_t *ctrl, float torque) {
|
|
|
|
|
|
void mot_contrl_mtpa_calibrate(mot_contrl_t *ctrl, bool enable) {
|
|
|
if (enable) {
|
|
|
+ line_ramp_reset(&ctrl->ramp_adv_angle, 0);
|
|
|
ctrl->b_mtpa_calibrate = true;
|
|
|
ctrl->adv_angle = 0;
|
|
|
}else {
|