different PID
This commit is contained in:
parent
b395e77117
commit
3a6e6bdcea
29
fw/main.c
29
fw/main.c
@ -466,7 +466,7 @@ __attribute__((noreturn)) int main(void)
|
|||||||
u8g2_DrawStr(u8g2, x_off+45, y_off+15, "D:");
|
u8g2_DrawStr(u8g2, x_off+45, y_off+15, "D:");
|
||||||
u8g2_DrawStr(u8g2, x_off+55, y_off+15, u8g2_u16toa(pd_profile.max_duty, 3));
|
u8g2_DrawStr(u8g2, x_off+55, y_off+15, u8g2_u16toa(pd_profile.max_duty, 3));
|
||||||
u8g2_SendBuffer(u8g2);
|
u8g2_SendBuffer(u8g2);
|
||||||
Delay_Ms(5000);
|
// Delay_Ms(5000);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -490,7 +490,7 @@ __attribute__((noreturn)) int main(void)
|
|||||||
|
|
||||||
if (has_pd) {
|
if (has_pd) {
|
||||||
static uint16_t vbus_mv, current_ma;
|
static uint16_t vbus_mv, current_ma;
|
||||||
static int16_t temp_c, tip_temp_c;
|
static volatile int16_t temp_c, tip_temp_c;
|
||||||
static uint16_t power;
|
static uint16_t power;
|
||||||
static s32 e;
|
static s32 e;
|
||||||
vbus_mv = U16_FP_EMA_K4(vbus_mv, ((u32)adc_buffer[0]*VCC_MV*11)/4096);
|
vbus_mv = U16_FP_EMA_K4(vbus_mv, ((u32)adc_buffer[0]*VCC_MV*11)/4096);
|
||||||
@ -539,8 +539,10 @@ __attribute__((noreturn)) int main(void)
|
|||||||
FR_printNumF(buf_putc, e, R, 0, 3);
|
FR_printNumF(buf_putc, e, R, 0, 3);
|
||||||
u8g2_DrawStr(u8g2, x_off+0, y_off+15, buf_get());
|
u8g2_DrawStr(u8g2, x_off+0, y_off+15, buf_get());
|
||||||
// Display current
|
// Display current
|
||||||
u8g2_DrawStr(u8g2, x_off+45, y_off+15, "A:");
|
// u8g2_DrawStr(u8g2, x_off+45, y_off+15, "A:");
|
||||||
u8g2_DrawStr(u8g2, x_off+55, y_off+15, u16toa(current_ma));
|
// u8g2_DrawStr(u8g2, x_off+55, y_off+15, u16toa(current_ma));
|
||||||
|
u8g2_DrawStr(u8g2, x_off+45, y_off+15, "W:");
|
||||||
|
u8g2_DrawStr(u8g2, x_off+55, y_off+15, u16toa(power));
|
||||||
|
|
||||||
|
|
||||||
if (enabled) {
|
if (enabled) {
|
||||||
@ -569,19 +571,26 @@ __attribute__((noreturn)) int main(void)
|
|||||||
|
|
||||||
if (pwm) {
|
if (pwm) {
|
||||||
const uint16_t tim_max = FUNCONF_SYSTEM_CORE_CLOCK / PWM_FREQ_HZ - 1;
|
const uint16_t tim_max = FUNCONF_SYSTEM_CORE_CLOCK / PWM_FREQ_HZ - 1;
|
||||||
static s32 err_p, err_i, err_d, prev_err;
|
static s32 err_p, err_i, err_d, dt, fpt, prev_fpt;
|
||||||
|
static u32 t, prev_t;
|
||||||
uint16_t duty;
|
uint16_t duty;
|
||||||
// absolute temperature error
|
// absolute temperature error
|
||||||
s32 err = I2FR(delta, R);
|
s32 err = I2FR(delta, R);
|
||||||
|
fpt = I2FR(tip_temp_c, R);
|
||||||
|
t = funSysTick32();
|
||||||
|
|
||||||
|
dt = FR_DIV(I2FR((t-prev_t)/DELAY_MS_TIME, R), R, I2FR(1000, R), R);
|
||||||
err_p = err;
|
err_p = err;
|
||||||
err_i = FR_CLAMP(FR_FixAddSat(err_i, err), I2FR(-1000, R), I2FR(1000, R));
|
// Conditional integration
|
||||||
err_d = FR_SUB(err, R, prev_err, R);
|
if (delta > 40 && delta < -40) err_i = FR_CLAMP(FR_FixAddSat(err_i, FR_FixMulSat(err, dt)), I2FR(-1000, R), I2FR(1000, R));
|
||||||
prev_err = err;
|
err_d = FR_DIV(FR_FixAddSat(prev_fpt, -fpt), R, dt, R);
|
||||||
|
prev_t = t;
|
||||||
|
prev_fpt = fpt;
|
||||||
|
|
||||||
const s32 kp = FR_numstr("0.00700", R);
|
const s32 kp = FR_numstr("1.2000", R);
|
||||||
const s32 ki = FR_numstr("0.00001", R);
|
const s32 ki = FR_numstr("0.05000", R);
|
||||||
const s32 kd = FR_numstr("0.00000", R);
|
const s32 kd = FR_numstr("0.00000", R);
|
||||||
|
e = 0;
|
||||||
e = FR_FixAddSat(e, FR_FixMulSat(err_p, kp));
|
e = FR_FixAddSat(e, FR_FixMulSat(err_p, kp));
|
||||||
e = FR_FixAddSat(e, FR_FixMulSat(err_i, ki));
|
e = FR_FixAddSat(e, FR_FixMulSat(err_i, ki));
|
||||||
e = FR_FixAddSat(e, FR_FixMulSat(err_d, kd));
|
e = FR_FixAddSat(e, FR_FixMulSat(err_d, kd));
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user