add mppt agaritme
This commit is contained in:
parent
57c874dfef
commit
8f25d91738
@ -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
|
||||
|
||||
78
src/MPPT.c
78
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);
|
||||
}
|
||||
|
||||
@ -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);
|
||||
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user