|
|
@@ -9,9 +9,9 @@ typedef struct {
|
|
|
float kd;
|
|
|
float max;
|
|
|
float min;
|
|
|
- float Ui;
|
|
|
+ float ui;
|
|
|
float sat;
|
|
|
- float DT;
|
|
|
+ float ts;
|
|
|
bool is_sat;
|
|
|
}PI_Controller;
|
|
|
|
|
|
@@ -26,7 +26,7 @@ static __INLINE void PI_Controller_max(PI_Controller *pi, float max, float min)
|
|
|
pi->min = min;
|
|
|
}
|
|
|
static __INLINE void PI_Controller_Reset(PI_Controller *pi, float init) {
|
|
|
- pi->Ui = (init);
|
|
|
+ pi->ui = (init);
|
|
|
pi->sat = 0.0f;
|
|
|
pi->is_sat = false;
|
|
|
}
|
|
|
@@ -34,9 +34,9 @@ static __INLINE void PI_Controller_Reset(PI_Controller *pi, float init) {
|
|
|
static __INLINE float PI_Controller_Run(PI_Controller *pi, float err) {
|
|
|
float kp_err = (err) * pi->kp;
|
|
|
float ki_err = (err) * pi->ki;
|
|
|
- float integral = ki_err * pi->DT;
|
|
|
- pi->Ui = fclamp(pi->Ui + integral, pi->min, pi->max);
|
|
|
- float out = pi->Ui + kp_err;
|
|
|
+ float integral = ki_err * pi->ts;
|
|
|
+ pi->ui = fclamp(pi->ui + integral, pi->min, pi->max);
|
|
|
+ float out = pi->ui + kp_err;
|
|
|
float sat_out = fclamp(out, pi->min, pi->max);
|
|
|
if (out != sat_out) {
|
|
|
pi->is_sat = true;
|
|
|
@@ -49,16 +49,16 @@ static __INLINE float PI_Controller_Run(PI_Controller *pi, float err) {
|
|
|
static __INLINE float PI_Controller_RunVel(PI_Controller *pi, float err) {
|
|
|
float kp_err = (err) * pi->kp;
|
|
|
float ki_err = (kp_err) * pi->ki;
|
|
|
- float integral = ki_err * pi->DT;
|
|
|
+ float integral = ki_err * pi->ts;
|
|
|
|
|
|
- pi->Ui = pi->Ui + integral;
|
|
|
- float out = pi->Ui + kp_err;
|
|
|
+ pi->ui = pi->ui + integral;
|
|
|
+ float out = pi->ui + kp_err;
|
|
|
if (out > pi->max) {
|
|
|
out = pi->max;
|
|
|
- pi->Ui = out - kp_err;
|
|
|
+ pi->ui = out - kp_err;
|
|
|
}else if (out < pi->min) {
|
|
|
out = pi->min;
|
|
|
- pi->Ui = out - kp_err;
|
|
|
+ pi->ui = out - kp_err;
|
|
|
}
|
|
|
return out;
|
|
|
}
|
|
|
@@ -68,18 +68,18 @@ static __INLINE float PI_Controller_RunVel(PI_Controller *pi, float err) {
|
|
|
static __INLINE float PI_Controller_Current(PI_Controller *pi, float err, float ff) {
|
|
|
float kp_err = (err) * pi->kp;
|
|
|
float ki_err = (kp_err) * pi->ki;
|
|
|
- float integral = ki_err * pi->DT;
|
|
|
+ float integral = ki_err * pi->ts;
|
|
|
|
|
|
- pi->Ui = pi->Ui + integral;
|
|
|
- float out = pi->Ui + kp_err + ff;
|
|
|
+ pi->ui = pi->ui + integral;
|
|
|
+ float out = pi->ui + kp_err + ff;
|
|
|
if (out > pi->max) {
|
|
|
out = pi->max;
|
|
|
pi->is_sat = true;
|
|
|
- pi->Ui = out - (kp_err + ff);
|
|
|
+ pi->ui = out - (kp_err + ff);
|
|
|
}else if (out < pi->min) {
|
|
|
out = pi->min;
|
|
|
pi->is_sat = true;
|
|
|
- pi->Ui = out - (kp_err + ff);
|
|
|
+ pi->ui = out - (kp_err + ff);
|
|
|
}else {
|
|
|
pi->is_sat = false;
|
|
|
}
|
|
|
@@ -90,18 +90,18 @@ static __INLINE float PI_Controller_Current(PI_Controller *pi, float err, float
|
|
|
static __INLINE float PI_Controller_RunSerial(PI_Controller *pi, float err) {
|
|
|
float kp_err = (err) * pi->kp;
|
|
|
float ki_err = (kp_err) * pi->ki;
|
|
|
- float integral = ki_err * pi->DT;
|
|
|
+ float integral = ki_err * pi->ts;
|
|
|
|
|
|
- pi->Ui = pi->Ui + integral;
|
|
|
- float out = pi->Ui + kp_err;
|
|
|
+ pi->ui = pi->ui + integral;
|
|
|
+ float out = pi->ui + kp_err;
|
|
|
if (out > pi->max) {
|
|
|
out = pi->max;
|
|
|
pi->is_sat = true;
|
|
|
- pi->Ui = out - kp_err;
|
|
|
+ pi->ui = out - kp_err;
|
|
|
}else if (out < pi->min) {
|
|
|
out = pi->min;
|
|
|
pi->is_sat = true;
|
|
|
- pi->Ui = out - kp_err;
|
|
|
+ pi->ui = out - kp_err;
|
|
|
}else {
|
|
|
pi->is_sat = false;
|
|
|
}
|
|
|
@@ -118,11 +118,11 @@ typedef struct {
|
|
|
float observer;
|
|
|
float kp;
|
|
|
float ki;
|
|
|
- float Ui;
|
|
|
+ float ui;
|
|
|
float out;
|
|
|
s32 max_wp;
|
|
|
bool ob_wp;
|
|
|
- float DT;
|
|
|
+ float ts;
|
|
|
}PLL_t;
|
|
|
|
|
|
static __INLINE void PLL_Reset(PLL_t *pll, float sample) {
|
|
|
@@ -142,8 +142,8 @@ static __INLINE float PLL_run(PLL_t *pll, float sample, float comp) {
|
|
|
observer = -comp - pll->observer;
|
|
|
}
|
|
|
float delta = sample - observer;
|
|
|
- pll->observer = observer + (pll->out + pll->kp * delta) * pll->DT;
|
|
|
- pll->out += pll->ki * delta * pll->DT;
|
|
|
+ pll->observer = observer + (pll->out + pll->kp * delta) * pll->ts;
|
|
|
+ pll->out += pll->ki * delta * pll->ts;
|
|
|
return pll->out;
|
|
|
}
|
|
|
|