add mppt agaritme

This commit is contained in:
Mats van Reenen 2021-01-22 15:31:32 +01:00
parent 57c874dfef
commit 8f25d91738
5 changed files with 74 additions and 11 deletions

View File

@ -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

View File

@ -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);
}

View File

@ -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);

View File

@ -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);
}

View File

@ -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