diff --git a/src/main.c b/src/main.c index 18f7c6b..7cb6712 100644 --- a/src/main.c +++ b/src/main.c @@ -436,6 +436,18 @@ struct MPPState { #define MPP_TEST_STEPS 6 const int32_t mpp_pwm_offsets[MPP_TEST_STEPS] = {-1, 2, -6, 5}; +static void mpp_init(struct MPPState *mpp_state) +{ + mpp_state->powerSamples = 0; + mpp_state->powerAccu = 0; + mpp_state->maxPower = 0; + mpp_state->refPower = 0; + mpp_state->nextTestStepTime = 0; + mpp_state->testIdx = -1; + mpp_state->maxPWM = CONV_PWM_MAX; + mpp_state->refPWM = CONV_PWM_MAX; +} + static void mpp_run( uint32_t time_in_state, struct MPPState *mpp_state, struct PowerState *power_state, int32_t *pwm) @@ -635,14 +647,7 @@ int main(void) power_state.temp_avg = fxp_from_int(-999); /* initialize mpp_state */ - mpp_state.powerSamples = 0; - mpp_state.powerAccu = 0; - mpp_state.maxPower = 0; - mpp_state.refPower = 0; - mpp_state.nextTestStepTime = 0; - mpp_state.testIdx = -1; - mpp_state.maxPWM = CONV_PWM_MAX; - mpp_state.refPWM = CONV_PWM_MAX; + mpp_init(&mpp_state); init_clock(); init_rtc(); @@ -830,7 +835,6 @@ int main(void) } if(time_in_state > 1000 && power_state.vout_avg < VOLTAGE_THR_CV_TO_MPP) { - pwm = CONV_PWM_PERIOD * 8 / 10; operState = ConvMPP; } @@ -896,7 +900,6 @@ int main(void) } if(time_in_state > 1000 && power_state.vout_avg < VOLTAGE_THR_FLOAT_TO_MPP) { - pwm = CONV_PWM_MAX * 8 / 10; operState = ConvMPP; } @@ -952,6 +955,11 @@ int main(void) break; case ConvMPP: + if(time_in_state == 0) { + pwm = CONV_PWM_MAX * 8 / 10; + mpp_init(&mpp_state); + } + mpp_run(time_in_state, &mpp_state, &power_state, &pwm); if(pwm > CONV_PWM_MAX) {