35 m_motorMaxPower = m_motor.maxPower();
52 return m_desiredSpeed;
73 m_actualSpeed = m_encoder.speed();
75 float error = m_desiredSpeed - m_actualSpeed;
76 m_errorSum += m_config.coefficientI * error;
77 if (m_errorSum > m_config.antiWindup) {
78 m_errorSum = m_config.antiWindup;
84 float output = m_config.coefficientP * error + m_errorSum;
87 }
else if (output < 0 || m_desiredSpeed < m_config.nullSpeedThreshold) {
91 m_actualSpeed < m_config.nullSpeedThreshold && output > m_config.nullSpeedPower) {
92 output = m_config.nullSpeedPower;
95 output = output * m_motorMaxPower;
96 m_motor.power(int32_t(output));
132 float m_desiredSpeed = 0;
133 float m_actualSpeed = 0;
134 uint16_t m_motorMaxPower = 0;
135 float m_errorSum = 0;
MotorControl(Motor &motor, Encoder &encoder, Config config)
Definition: MotorControl.h:30
float nullSpeedPower
Definition: MotorControl.h:20
void reset()
Definition: MotorControl.h:121
float actualSpeed() const
Definition: MotorControl.h:60
float desiredSpeed() const
Definition: MotorControl.h:50
float coefficientI
Definition: MotorControl.h:16
Definition: BorderDetector.h:6
void setConfig(Config &config)
Definition: MotorControl.h:112
float coefficientP
Definition: MotorControl.h:15
Config config() const
Definition: MotorControl.h:102
void setSpeed(float desiredSpeed)
Definition: MotorControl.h:43
void regulate(uint16_t timeSinceLastCallUs)
Definition: MotorControl.h:71
Definition: MotorControl.h:14
float nullSpeedThreshold
Definition: MotorControl.h:19
Definition: MotorControl.h:12
float antiWindup
Definition: MotorControl.h:18