diff --git a/planning.md b/planning.md index 4daf1df..bb18de9 100644 --- a/planning.md +++ b/planning.md @@ -2,13 +2,12 @@ ## vrij - 22 jan -[ ] deze planning maken +[x] deze planning maken [ ] mppt algaritme programeren [ ] code controleeren ## weekend - 23-24 jan -[ ] msp software maken [ ] ADC aanluiten [ ] test voor mppt diff --git a/src/MPPT.c b/src/MPPT.c index 622a614..5d311a8 100644 --- a/src/MPPT.c +++ b/src/MPPT.c @@ -63,15 +63,77 @@ void mppt_setPWM(double d){ void mppt_start(){ PWM_start(mppt_pwm); - //TODO: implement the mppt algaritme - double duty = 0, step = 0.01; - while(1){ //(Status == WORKING){ + //TODO: addjust stap size so that big stap is a bit less than 5 wattand small stap is less than .5 watt + double duty = 0, bigStap = 0.05, smallStap = 0.002; + enum mppt_state { + bigStaps, + smallStaps + } state; + int16_t vermogenDiff, lastVermogen; + while(1){ mppt_setPWM(duty); - duty += step; - if(duty > 1 || duty < 0){ - step = -step; - duty += step; + if(state == bigStaps){ + while(1){ + // set stap + if(mppt_vermogen - *(mppt_setpointP) > 0){ + duty += bigStap; + }else{ + duty -= bigStap; + } + mppt_setPWM(duty); + + // wait for change to happen + //TODO: finetune delay + usleep(10E3); + + // mesure power + mppt_meetVermogen(); + + // check the dirrerance width the setpoint + vermogenDiff = mppt_vermogen - *(mppt_setpointP); + if(vermogenDiff < 0) // get absolute value + vermogenDiff = -vermogenDiff; + + if(vermogenDiff < 50 || mppt_vermogen < lastVermogen){ + state = smallStaps; + break; + } + } + }else{ + while(1){ + // set stap + if(mppt_vermogen - *(mppt_setpointP) > 0){ + duty += smallStap; + }else{ + duty -= smallStap; + } + mppt_setPWM(duty); + + // wait for change to happen + //TODO: finetune delay + usleep(10E3); + + // mesure power + mppt_meetVermogen(); + + // check the dirrerance width the setpoint + vermogenDiff = mppt_vermogen - *(mppt_setpointP); + if(vermogenDiff < 0) // get absolute value + vermogenDiff = -vermogenDiff; + + if(vermogenDiff > 5){ + state = bigStaps; + break; + } + + usleep(100E3); + mppt_meetVermogen(); + } } - usleep(100); } } + +void mppt_deinit(){ + mppt_setPWM(0); + PWM_stop(mppt_pwm); +} diff --git a/src/MPPT.h b/src/MPPT.h index a58c07f..b5d8401 100644 --- a/src/MPPT.h +++ b/src/MPPT.h @@ -5,6 +5,7 @@ void mppt_init(); void mppt_start(); +void mppt_deinit(); void mppt_setSetpointOverride(uint8_t vermogen); void mppt_setSetpoint(uint8_t vermogen); diff --git a/src/main.c b/src/main.c index 0594e0d..7c710c4 100644 --- a/src/main.c +++ b/src/main.c @@ -55,6 +55,7 @@ void stopSys(){ pthread_exit(treads.noodstop); pthread_exit(treads.mppt); + treads.mppt = createSimplePTread(1, &mppt_deinit); treads.noodstop = createSimplePTread(3, &noodstop_deinit); } diff --git a/src/noodstop.c b/src/noodstop.c index 892b847..55dfa59 100644 --- a/src/noodstop.c +++ b/src/noodstop.c @@ -51,7 +51,7 @@ uint8_t noodstop_getTempratuur(){ } uint8_t noodstop_readTemp(uint8_t ch){ - uint16_t v = ADC_read(&SPI_ADC); + uint16_t v = ADC_read(ch); //TODO: add real fomula