|
|
|
|
@ -69,11 +69,11 @@ static void motor_control_task(void *pvParameters) {
|
|
|
|
|
(m_param.kd * d_error) + m_param.op_offset;
|
|
|
|
|
|
|
|
|
|
// Clip duty correction to the maximum allowed ramp
|
|
|
|
|
if ((m_status[m_id].duty - old_motor_duty) > (MAX_DUTY_RAMP * MC_ITERATION_TIME)) {
|
|
|
|
|
m_status[m_id].duty = old_motor_duty + (MAX_DUTY_RAMP * MC_ITERATION_TIME);
|
|
|
|
|
} else if ((m_status[m_id].duty - old_motor_duty) < (MAX_DUTY_RAMP * MC_ITERATION_TIME)) {
|
|
|
|
|
m_status[m_id].duty = old_motor_duty - (MAX_DUTY_RAMP * MC_ITERATION_TIME);
|
|
|
|
|
}
|
|
|
|
|
//if ((m_status[m_id].duty - old_motor_duty) > (MAX_DUTY_RAMP * MC_ITERATION_TIME)) {
|
|
|
|
|
// m_status[m_id].duty = old_motor_duty + (MAX_DUTY_RAMP * MC_ITERATION_TIME);
|
|
|
|
|
//} else if ((m_status[m_id].duty - old_motor_duty) < (MAX_DUTY_RAMP * MC_ITERATION_TIME)) {
|
|
|
|
|
// m_status[m_id].duty = old_motor_duty - (MAX_DUTY_RAMP * MC_ITERATION_TIME);
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
// Clip motor duty output if it's saturated
|
|
|
|
|
// Only add to the integrated error accumulator if we're not saturated (anti-windup), or the change
|
|
|
|
|
|