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; | ||||
|         } | ||||
|     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_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