add mppt agaritme
This commit is contained in:
parent
57c874dfef
commit
8f25d91738
@ -2,13 +2,12 @@
|
|||||||
|
|
||||||
## vrij - 22 jan
|
## vrij - 22 jan
|
||||||
|
|
||||||
[ ] deze planning maken
|
[x] deze planning maken
|
||||||
[ ] mppt algaritme programeren
|
[ ] mppt algaritme programeren
|
||||||
[ ] code controleeren
|
[ ] code controleeren
|
||||||
|
|
||||||
## weekend - 23-24 jan
|
## weekend - 23-24 jan
|
||||||
|
|
||||||
[ ] msp software maken
|
|
||||||
[ ] ADC aanluiten
|
[ ] ADC aanluiten
|
||||||
|
|
||||||
[ ] test voor mppt
|
[ ] test voor mppt
|
||||||
|
|||||||
78
src/MPPT.c
78
src/MPPT.c
@ -63,15 +63,77 @@ void mppt_setPWM(double d){
|
|||||||
void mppt_start(){
|
void mppt_start(){
|
||||||
PWM_start(mppt_pwm);
|
PWM_start(mppt_pwm);
|
||||||
|
|
||||||
//TODO: implement the mppt algaritme
|
//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, step = 0.01;
|
double duty = 0, bigStap = 0.05, smallStap = 0.002;
|
||||||
while(1){ //(Status == WORKING){
|
enum mppt_state {
|
||||||
|
bigStaps,
|
||||||
|
smallStaps
|
||||||
|
} state;
|
||||||
|
int16_t vermogenDiff, lastVermogen;
|
||||||
|
while(1){
|
||||||
mppt_setPWM(duty);
|
mppt_setPWM(duty);
|
||||||
duty += step;
|
if(state == bigStaps){
|
||||||
if(duty > 1 || duty < 0){
|
while(1){
|
||||||
step = -step;
|
// set stap
|
||||||
duty += step;
|
if(mppt_vermogen - *(mppt_setpointP) > 0){
|
||||||
|
duty += bigStap;
|
||||||
|
}else{
|
||||||
|
duty -= bigStap;
|
||||||
}
|
}
|
||||||
usleep(100);
|
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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void mppt_deinit(){
|
||||||
|
mppt_setPWM(0);
|
||||||
|
PWM_stop(mppt_pwm);
|
||||||
|
}
|
||||||
|
|||||||
@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
void mppt_init();
|
void mppt_init();
|
||||||
void mppt_start();
|
void mppt_start();
|
||||||
|
void mppt_deinit();
|
||||||
void mppt_setSetpointOverride(uint8_t vermogen);
|
void mppt_setSetpointOverride(uint8_t vermogen);
|
||||||
void mppt_setSetpoint(uint8_t vermogen);
|
void mppt_setSetpoint(uint8_t vermogen);
|
||||||
|
|
||||||
|
|||||||
@ -55,6 +55,7 @@ void stopSys(){
|
|||||||
pthread_exit(treads.noodstop);
|
pthread_exit(treads.noodstop);
|
||||||
pthread_exit(treads.mppt);
|
pthread_exit(treads.mppt);
|
||||||
|
|
||||||
|
treads.mppt = createSimplePTread(1, &mppt_deinit);
|
||||||
treads.noodstop = createSimplePTread(3, &noodstop_deinit);
|
treads.noodstop = createSimplePTread(3, &noodstop_deinit);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -51,7 +51,7 @@ uint8_t noodstop_getTempratuur(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
uint8_t noodstop_readTemp(uint8_t ch){
|
uint8_t noodstop_readTemp(uint8_t ch){
|
||||||
uint16_t v = ADC_read(&SPI_ADC);
|
uint16_t v = ADC_read(ch);
|
||||||
|
|
||||||
//TODO: add real fomula
|
//TODO: add real fomula
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user