Mosfet Driver

Dependencies:   mbed

Committer:
HMFK03LST1
Date:
Mon May 06 18:47:34 2013 +0000
Revision:
2:bdd944abaf86
Parent:
1:19d350e383e6
Child:
3:af6a6f498276
v1.2

Who changed what in which revision?

UserRevisionLine numberNew contents of line
HMFK03LST1 0:4f562ff70d13 1 #include "mbed.h"
HMFK03LST1 0:4f562ff70d13 2
HMFK03LST1 2:bdd944abaf86 3 LocalFileSystem local("local"); //init Flashdrive for reading config file
HMFK03LST1 2:bdd944abaf86 4 FILE *fp; //Pointer to local Config File
HMFK03LST1 0:4f562ff70d13 5
HMFK03LST1 0:4f562ff70d13 6 #define USR_POWERDOWN (0x104) //Power Down Mbed Interface (save 50% or 45 mA)
HMFK03LST1 0:4f562ff70d13 7
HMFK03LST1 2:bdd944abaf86 8 float version = 0.8; //Program Version
HMFK03LST1 2:bdd944abaf86 9
HMFK03LST1 2:bdd944abaf86 10 bool mosfet1_open = true ; //Mosfet1 geschlossen
HMFK03LST1 2:bdd944abaf86 11 bool mosfet1_close = false; //Mosfet1 offen
HMFK03LST1 1:19d350e383e6 12
HMFK03LST1 0:4f562ff70d13 13 DigitalOut myled (LED1);
HMFK03LST1 0:4f562ff70d13 14 DigitalOut myled1 (LED2);
HMFK03LST1 0:4f562ff70d13 15 DigitalOut myled2 (LED3);
HMFK03LST1 1:19d350e383e6 16 DigitalOut myled3 (LED4);
HMFK03LST1 0:4f562ff70d13 17
HMFK03LST1 0:4f562ff70d13 18 DigitalOut purge (p33);
HMFK03LST1 0:4f562ff70d13 19 DigitalOut pump (p34);
HMFK03LST1 0:4f562ff70d13 20 DigitalOut mosfet1(p35);
HMFK03LST1 0:4f562ff70d13 21 DigitalOut mosfet2(p36);
HMFK03LST1 0:4f562ff70d13 22 DigitalIn In1 (p30);
HMFK03LST1 0:4f562ff70d13 23 DigitalIn In2 (p29);
HMFK03LST1 0:4f562ff70d13 24 DigitalIn In3 (p28);
HMFK03LST1 0:4f562ff70d13 25 DigitalIn In4 (p27);
HMFK03LST1 0:4f562ff70d13 26 AnalogIn AI1 (p17);
HMFK03LST1 2:bdd944abaf86 27 AnalogIn cur_in (p18);
HMFK03LST1 0:4f562ff70d13 28 AnalogIn bz_in (p19);
HMFK03LST1 0:4f562ff70d13 29 AnalogIn cap_in (p20);
HMFK03LST1 0:4f562ff70d13 30
HMFK03LST1 0:4f562ff70d13 31 Serial pc(USBTX, USBRX);
HMFK03LST1 2:bdd944abaf86 32 Ticker PC_OUT_timer; // Output Monitoring to Serial
HMFK03LST1 2:bdd944abaf86 33 Ticker LED_timer; // Set Status LED´s
HMFK03LST1 1:19d350e383e6 34
HMFK03LST1 0:4f562ff70d13 35 Timer t;
HMFK03LST1 0:4f562ff70d13 36
HMFK03LST1 2:bdd944abaf86 37
HMFK03LST1 2:bdd944abaf86 38 // Brennstoffzellen Parameter
HMFK03LST1 2:bdd944abaf86 39 float bz_max = 30.5; //Brennstoffzelle Spannung Abs. max.
HMFK03LST1 2:bdd944abaf86 40 float bz_p_oben = 10.0; //Brennstoffzelle Prozent Load bei bz_max
HMFK03LST1 2:bdd944abaf86 41 float bz_on = 29.0; //Brennstoffzelle Spannung für Ladefreigabe)
HMFK03LST1 2:bdd944abaf86 42 float bz_min = 26.0; //Brennstoffzelle Spannung min. Laden beenden
HMFK03LST1 2:bdd944abaf86 43 float bz_p_unten = -20.0; //Brennstoffzelle Prozent Load bei bz_min
HMFK03LST1 2:bdd944abaf86 44 float bz_current = 1.5; //Brennstoffzellen Strom nominal
HMFK03LST1 2:bdd944abaf86 45 float bz_cur_max = 2.0; //Brennstoffzellen Strom max
HMFK03LST1 2:bdd944abaf86 46
HMFK03LST1 2:bdd944abaf86 47 // SuperCap Parameter
HMFK03LST1 2:bdd944abaf86 48 float cap_max = 25.0; //CAP Spannung max. (Abschaltung)
HMFK03LST1 2:bdd944abaf86 49 float cap_min = 20.0; //CAP Spannung min. (Zelle an)
HMFK03LST1 2:bdd944abaf86 50 float cap_p_min = 2.0; //CAP Prozent Load bei 0V
HMFK03LST1 2:bdd944abaf86 51 float cap_delta = 1.5; //Absenkung der Spannung mit Din
HMFK03LST1 0:4f562ff70d13 52
HMFK03LST1 2:bdd944abaf86 53 // Pump & Purge Parameter
HMFK03LST1 2:bdd944abaf86 54 float purge_start = 3.0; //s before starting purch
HMFK03LST1 2:bdd944abaf86 55 float purge_end = 3.2; //s after finishing purch
HMFK03LST1 2:bdd944abaf86 56 float boost_time = 0.2; //s Pump runup with 100% Duty Cycle
HMFK03LST1 2:bdd944abaf86 57 int pwm_cycle = 20; //ms für PWM Period
HMFK03LST1 2:bdd944abaf86 58 int pwm_on = 12; //ms für PWM high
HMFK03LST1 2:bdd944abaf86 59
HMFK03LST1 2:bdd944abaf86 60 // Monitoring Parameter
HMFK03LST1 2:bdd944abaf86 61 int debug = 1; //Serial Output on (1)
HMFK03LST1 2:bdd944abaf86 62 float sample = 5; //Serial Output Samples per Second
HMFK03LST1 0:4f562ff70d13 63
HMFK03LST1 2:bdd944abaf86 64 // Temp Variable
HMFK03LST1 2:bdd944abaf86 65 bool Load = false; //Laderegler aktiv
HMFK03LST1 2:bdd944abaf86 66 bool pump_on = false; //Pumpenzustand
HMFK03LST1 2:bdd944abaf86 67 int boost = 0; //Number of PWM-Cycles for Pump runup boost calc in load_cfg
HMFK03LST1 2:bdd944abaf86 68 int Zelle_Level = 0; //% Load aus Bz Spannung
HMFK03LST1 2:bdd944abaf86 69 int Cap_Level = 0; //% Load aus Cap Spannung
HMFK03LST1 2:bdd944abaf86 70 int Cur_Level = 0;
HMFK03LST1 2:bdd944abaf86 71 int Load_Level = 0; //% Load aus Bz und Cap
HMFK03LST1 2:bdd944abaf86 72 float bz = 0; //Spannung Brennstoffzelle
HMFK03LST1 2:bdd944abaf86 73 float cap = 0; //Spannung SuperCap
HMFK03LST1 2:bdd944abaf86 74 float current = 0; //Strom in den Mosfet
HMFK03LST1 2:bdd944abaf86 75 unsigned int counter_cycle = 0; //Counter PWM-Cycles for Pump-Purge
HMFK03LST1 2:bdd944abaf86 76 unsigned int counter_ms = 0; //Counter for PWM Pump
HMFK03LST1 0:4f562ff70d13 77
HMFK03LST1 2:bdd944abaf86 78
HMFK03LST1 0:4f562ff70d13 79 void load_cfg()
HMFK03LST1 0:4f562ff70d13 80 {
HMFK03LST1 2:bdd944abaf86 81 char read[17][8];
HMFK03LST1 0:4f562ff70d13 82
HMFK03LST1 0:4f562ff70d13 83 char i = 0;
HMFK03LST1 0:4f562ff70d13 84 char j = 0;
HMFK03LST1 0:4f562ff70d13 85 int c = 0;
HMFK03LST1 0:4f562ff70d13 86 float temp;
HMFK03LST1 0:4f562ff70d13 87
HMFK03LST1 2:bdd944abaf86 88 for (j = 0; j<17; j++)
HMFK03LST1 0:4f562ff70d13 89 {
HMFK03LST1 2:bdd944abaf86 90 for (i = 0; i<8; i++)
HMFK03LST1 0:4f562ff70d13 91 {
HMFK03LST1 0:4f562ff70d13 92 read[j][i] = '\0';
HMFK03LST1 0:4f562ff70d13 93 }
HMFK03LST1 0:4f562ff70d13 94 }
HMFK03LST1 0:4f562ff70d13 95
HMFK03LST1 0:4f562ff70d13 96 i=0;
HMFK03LST1 0:4f562ff70d13 97 j=0;
HMFK03LST1 0:4f562ff70d13 98
HMFK03LST1 0:4f562ff70d13 99 fp = fopen("/local/power.cfg", "r");
HMFK03LST1 0:4f562ff70d13 100 if ( fp != NULL )
HMFK03LST1 0:4f562ff70d13 101 {
HMFK03LST1 0:4f562ff70d13 102 while((c != EOF) && (c !=10))
HMFK03LST1 0:4f562ff70d13 103 {
HMFK03LST1 0:4f562ff70d13 104 c = fgetc(fp);
HMFK03LST1 0:4f562ff70d13 105 if (c == ';'){read[j][0] = i; i = 0; j++;}
HMFK03LST1 0:4f562ff70d13 106 else {i++; read[j][i] = c;}
HMFK03LST1 0:4f562ff70d13 107 }
HMFK03LST1 0:4f562ff70d13 108 fclose(fp);
HMFK03LST1 0:4f562ff70d13 109
HMFK03LST1 0:4f562ff70d13 110
HMFK03LST1 2:bdd944abaf86 111 sscanf(&read[ 0][1], "%f", &temp); bz_max = temp;
HMFK03LST1 2:bdd944abaf86 112 sscanf(&read[ 1][1], "%f", &temp); bz_p_oben = temp;
HMFK03LST1 2:bdd944abaf86 113 sscanf(&read[ 2][1], "%f", &temp); bz_on = temp;
HMFK03LST1 2:bdd944abaf86 114 sscanf(&read[ 3][1], "%f", &temp); bz_min = temp;
HMFK03LST1 2:bdd944abaf86 115 sscanf(&read[ 4][1], "%f", &temp); bz_p_unten = temp;
HMFK03LST1 2:bdd944abaf86 116 sscanf(&read[ 5][1], "%f", &temp); cap_max = temp;
HMFK03LST1 2:bdd944abaf86 117 sscanf(&read[ 6][1], "%f", &temp); cap_min = temp;
HMFK03LST1 2:bdd944abaf86 118 sscanf(&read[ 7][1], "%f", &temp); cap_p_min = temp;
HMFK03LST1 2:bdd944abaf86 119 sscanf(&read[ 8][1], "%f", &temp); cap_delta = temp;
HMFK03LST1 2:bdd944abaf86 120 sscanf(&read[ 9][1], "%f", &temp); purge_start = temp;
HMFK03LST1 2:bdd944abaf86 121 sscanf(&read[10][1], "%f", &temp); purge_end = temp;
HMFK03LST1 2:bdd944abaf86 122 sscanf(&read[11][1], "%f", &temp); boost_time = temp;
HMFK03LST1 2:bdd944abaf86 123 sscanf(&read[12][1], "%f", &temp); pwm_cycle = temp;
HMFK03LST1 2:bdd944abaf86 124 sscanf(&read[13][1], "%f", &temp); pwm_on = temp;
HMFK03LST1 2:bdd944abaf86 125 sscanf(&read[14][1], "%f", &temp); debug = temp;
HMFK03LST1 2:bdd944abaf86 126 sscanf(&read[15][1], "%f", &temp); sample = temp;
HMFK03LST1 0:4f562ff70d13 127
HMFK03LST1 2:bdd944abaf86 128 boost = (boost_time * 1000) / pwm_cycle;
HMFK03LST1 2:bdd944abaf86 129 }
HMFK03LST1 0:4f562ff70d13 130
HMFK03LST1 2:bdd944abaf86 131 pc.printf("\n\r" );
HMFK03LST1 2:bdd944abaf86 132 pc.printf("******************************* \n\r" );
HMFK03LST1 2:bdd944abaf86 133 pc.printf("* Brennstoffzellenregler V%03.1f * \n\r",version);
HMFK03LST1 2:bdd944abaf86 134 pc.printf("******************************* \n\r" );
HMFK03LST1 2:bdd944abaf86 135 pc.printf("--------------BZ--------------- \n\r" );
HMFK03LST1 2:bdd944abaf86 136 pc.printf(" BZ max [V] : %4.1f \n\r",bz_max );
HMFK03LST1 2:bdd944abaf86 137 pc.printf(" BZ max [%] : %4.1f \n\r",bz_p_oben );
HMFK03LST1 2:bdd944abaf86 138 pc.printf(" BZ Laden on [V] : %4.1f \n\r",bz_on );
HMFK03LST1 2:bdd944abaf86 139 pc.printf(" BZ Laden off [V] : %4.1f \n\r",bz_min );
HMFK03LST1 2:bdd944abaf86 140 pc.printf(" BZ Laden off [%] : %4.1f \n\r",bz_p_unten );
HMFK03LST1 2:bdd944abaf86 141 pc.printf(" BZ Strom norm [A] : %4.1f \n\r",bz_current );
HMFK03LST1 2:bdd944abaf86 142 pc.printf(" BZ Strom max. [A] : %4.1f \n\r",bz_cur_max );
HMFK03LST1 2:bdd944abaf86 143 pc.printf("-------------CAP--------------- \n\r" );
HMFK03LST1 2:bdd944abaf86 144 pc.printf(" CAP max [V] : %4.1f \n\r",cap_max );
HMFK03LST1 2:bdd944abaf86 145 pc.printf(" CAP min [V] : %4.1f \n\r",cap_min );
HMFK03LST1 2:bdd944abaf86 146 pc.printf(" CAP min [%] : %4.1f \n\r",cap_p_min );
HMFK03LST1 2:bdd944abaf86 147 pc.printf(" CAP lo on Din[-V] : %4.1f \n\r",cap_delta );
HMFK03LST1 2:bdd944abaf86 148 pc.printf("----------Pump & Purge--------- \n\r" );
HMFK03LST1 2:bdd944abaf86 149 pc.printf(" Purge on [s] : %4.1f \n\r",purge_start );
HMFK03LST1 2:bdd944abaf86 150 pc.printf(" Purge off [s] : %4.1f \n\r",purge_end );
HMFK03LST1 2:bdd944abaf86 151 pc.printf(" Boost [s] : %4.1f \n\r",boost_time );
HMFK03LST1 2:bdd944abaf86 152 pc.printf(" PWM cycle [ms]: %4d \n\r" ,pwm_cycle );
HMFK03LST1 2:bdd944abaf86 153 pc.printf(" PWM on [ms]: %4d \n\r" ,pwm_on );
HMFK03LST1 2:bdd944abaf86 154 pc.printf("------------Monitor------------ \n\r" );
HMFK03LST1 2:bdd944abaf86 155 pc.printf(" Serial output : %4d \n\r" ,debug );
HMFK03LST1 2:bdd944abaf86 156 pc.printf(" Samplerate [Hz]: %4.0f \n\r",sample );
HMFK03LST1 2:bdd944abaf86 157 pc.printf("******************************* \n\r" );
HMFK03LST1 2:bdd944abaf86 158 pc.printf("\n\r" );
HMFK03LST1 0:4f562ff70d13 159 }
HMFK03LST1 0:4f562ff70d13 160
HMFK03LST1 2:bdd944abaf86 161
HMFK03LST1 1:19d350e383e6 162 int semihost_powerdown()
HMFK03LST1 1:19d350e383e6 163 {
HMFK03LST1 1:19d350e383e6 164 uint32_t arg;
HMFK03LST1 1:19d350e383e6 165 return __semihost(USR_POWERDOWN, &arg);
HMFK03LST1 1:19d350e383e6 166 }
HMFK03LST1 1:19d350e383e6 167
HMFK03LST1 2:bdd944abaf86 168
HMFK03LST1 1:19d350e383e6 169 void SEND()
HMFK03LST1 1:19d350e383e6 170 {
HMFK03LST1 2:bdd944abaf86 171 if (debug == 1)
HMFK03LST1 2:bdd944abaf86 172 {
HMFK03LST1 2:bdd944abaf86 173 mosfet1 = mosfet1_open;
HMFK03LST1 2:bdd944abaf86 174 pc.printf("BZ: %4.1f/%4.1f-%4.1f+%4.1f CAP: %4.1f/%4.1f-%4.1f Purge: %4.1f/%4.1f-%4.1f Load: %03d Current: %4.2f \n\r"
HMFK03LST1 2:bdd944abaf86 175 ,bz,bz_min,bz_on,bz_max,cap,cap_min,cap_max,float(counter_cycle)/(1000/pwm_cycle),purge_start,purge_end,Load_Level, current);
HMFK03LST1 2:bdd944abaf86 176 }
HMFK03LST1 1:19d350e383e6 177 }
HMFK03LST1 1:19d350e383e6 178
HMFK03LST1 1:19d350e383e6 179
HMFK03LST1 1:19d350e383e6 180 void LED()
HMFK03LST1 1:19d350e383e6 181 {
HMFK03LST1 2:bdd944abaf86 182 if (bz < bz_min ) myled = 1; else myled = 0; //LED = Spannung an der BZ IO
HMFK03LST1 1:19d350e383e6 183 if (cap > cap_min) myled1 = 1; else myled1 = 0; //LED = Spannung an den Cap´s IO
HMFK03LST1 1:19d350e383e6 184 if (mosfet1 == mosfet1_close) myled2 = 1; else myled2 = 0; //LED = Gate Zustand Mosfet 1
HMFK03LST1 1:19d350e383e6 185 if (pump == 1) myled3 = 1; else myled3 = 0; //LED = Pumpe an
HMFK03LST1 1:19d350e383e6 186 }
HMFK03LST1 0:4f562ff70d13 187
HMFK03LST1 0:4f562ff70d13 188
HMFK03LST1 1:19d350e383e6 189 void PUMPE()
HMFK03LST1 1:19d350e383e6 190 {
HMFK03LST1 2:bdd944abaf86 191 counter_ms++;
HMFK03LST1 2:bdd944abaf86 192 if (((cap <= cap_min) || (pump_on == true)) && (bz < bz_max) && (cap < (cap_max - (In1 * cap_delta)))) //Pumpe Einschaltbedingung
HMFK03LST1 2:bdd944abaf86 193 {
HMFK03LST1 1:19d350e383e6 194 pump_on = true;
HMFK03LST1 2:bdd944abaf86 195 if (counter_ms > (pwm_cycle - pwm_on)) pump = 1 ; //Set PWM from low to high
HMFK03LST1 1:19d350e383e6 196
HMFK03LST1 2:bdd944abaf86 197 if (counter_ms >= pwm_cycle) //End PWM cycle
HMFK03LST1 1:19d350e383e6 198 {
HMFK03LST1 2:bdd944abaf86 199 counter_cycle++;
HMFK03LST1 2:bdd944abaf86 200 counter_ms = 0;
HMFK03LST1 2:bdd944abaf86 201
HMFK03LST1 1:19d350e383e6 202 if (boost > 0) boost--;
HMFK03LST1 1:19d350e383e6 203
HMFK03LST1 2:bdd944abaf86 204 if ((counter_cycle < (1000 / pwm_cycle) * purge_start) || (boost <= 0) || (In1 == 0))
HMFK03LST1 1:19d350e383e6 205 {
HMFK03LST1 2:bdd944abaf86 206 pump = 0; //PWM Betrieb
HMFK03LST1 1:19d350e383e6 207 purge = 0;
HMFK03LST1 1:19d350e383e6 208 }
HMFK03LST1 1:19d350e383e6 209 else
HMFK03LST1 1:19d350e383e6 210 {
HMFK03LST1 2:bdd944abaf86 211 if (pump == 1) purge = 1; //Purge Betrieb
HMFK03LST1 1:19d350e383e6 212 }
HMFK03LST1 1:19d350e383e6 213
HMFK03LST1 2:bdd944abaf86 214 if (counter_cycle > (1000 / pwm_cycle) * purge_end) //Purge Ende
HMFK03LST1 1:19d350e383e6 215 {
HMFK03LST1 2:bdd944abaf86 216 counter_cycle = 0;
HMFK03LST1 1:19d350e383e6 217 purge = 0;
HMFK03LST1 1:19d350e383e6 218 pump = 0;
HMFK03LST1 1:19d350e383e6 219 }
HMFK03LST1 1:19d350e383e6 220 }
HMFK03LST1 1:19d350e383e6 221 }
HMFK03LST1 1:19d350e383e6 222 else
HMFK03LST1 1:19d350e383e6 223 {
HMFK03LST1 1:19d350e383e6 224 pump_on = 0; pump = 0; purge = 0; //Pumpe aus
HMFK03LST1 1:19d350e383e6 225 boost = (boost_time * 1000) / pwm_cycle; // Boost für nächsten Start setzen
HMFK03LST1 1:19d350e383e6 226 }
HMFK03LST1 0:4f562ff70d13 227
HMFK03LST1 1:19d350e383e6 228 }
HMFK03LST1 1:19d350e383e6 229
HMFK03LST1 1:19d350e383e6 230 int main()
HMFK03LST1 2:bdd944abaf86 231 {
HMFK03LST1 0:4f562ff70d13 232 pc.baud(115200); //config Serial Port
HMFK03LST1 0:4f562ff70d13 233 load_cfg(); //init config File
HMFK03LST1 0:4f562ff70d13 234 semihost_powerdown(); //Mbed Interface powerdown
HMFK03LST1 1:19d350e383e6 235 PC_OUT_timer.attach(&SEND , (1/sample)); //Serial output Timer
HMFK03LST1 1:19d350e383e6 236 LED_timer.attach (&LED , 0.200 ); //LED Status Timer
HMFK03LST1 0:4f562ff70d13 237 t.start(); //Timer für PWM starten
HMFK03LST1 2:bdd944abaf86 238 float bz_faktor; //Temp Variable
HMFK03LST1 2:bdd944abaf86 239
HMFK03LST1 2:bdd944abaf86 240 bz_faktor = ((bz_p_oben - bz_p_unten)/(bz_max - bz_min)); //Prozent Umrechnung BZ
HMFK03LST1 2:bdd944abaf86 241
HMFK03LST1 2:bdd944abaf86 242
HMFK03LST1 0:4f562ff70d13 243
HMFK03LST1 0:4f562ff70d13 244 while(1)
HMFK03LST1 0:4f562ff70d13 245 {
HMFK03LST1 2:bdd944abaf86 246 bz = ((bz_in * 92.0) + bz )/3; //BZ RAW in Spannung umrechnen (2*neu zu 1*alt Glättung)
HMFK03LST1 2:bdd944abaf86 247 cap = ((cap_in * 92.0) + cap)/3; //CAP RAW in Spannung umrechnen (2*neu zu 1*alt Glättung)
HMFK03LST1 2:bdd944abaf86 248 current = (cur_in * 23.82) - 4.00;
HMFK03LST1 2:bdd944abaf86 249
HMFK03LST1 2:bdd944abaf86 250 PUMPE(); //Pumpen PWM aufrufen
HMFK03LST1 2:bdd944abaf86 251
HMFK03LST1 2:bdd944abaf86 252 Zelle_Level = (bz_faktor * (bz - bz_min) + bz_p_unten) * 10; //%Load aus Zellenspannung berechnen
HMFK03LST1 2:bdd944abaf86 253 Cap_Level = ((cap / cap_max) + cap_p_min) * 10; //%Load aus Cap Level
HMFK03LST1 2:bdd944abaf86 254 Cur_Level = (current/bz_current)*100;
HMFK03LST1 2:bdd944abaf86 255 Load_Level = Zelle_Level + Cap_Level - Cur_Level; //%Load Summe Cap + Bz
HMFK03LST1 2:bdd944abaf86 256
HMFK03LST1 2:bdd944abaf86 257 if (Load == true) // Laden aktiv
HMFK03LST1 2:bdd944abaf86 258 {
HMFK03LST1 2:bdd944abaf86 259 // Timer für 1 kHz starten
HMFK03LST1 2:bdd944abaf86 260 if (bz > bz_min) // Zelle über min. Spannung
HMFK03LST1 2:bdd944abaf86 261 {
HMFK03LST1 2:bdd944abaf86 262 while (t.read_us() <= 1000) // während der PWM (1khz Periode)
HMFK03LST1 2:bdd944abaf86 263 {
HMFK03LST1 2:bdd944abaf86 264 if (t.read_us() < Load_Level) // %Load PWM zu Timer vergleich
HMFK03LST1 2:bdd944abaf86 265 {mosfet1 = mosfet1_close;} // %Load PWM nicht erreicht Mosfet an
HMFK03LST1 2:bdd944abaf86 266 else
HMFK03LST1 2:bdd944abaf86 267 {mosfet1 = mosfet1_open;} // %Load PWM erreicht Mosfet aus
HMFK03LST1 2:bdd944abaf86 268 }
HMFK03LST1 2:bdd944abaf86 269 }
HMFK03LST1 2:bdd944abaf86 270 else
HMFK03LST1 2:bdd944abaf86 271 {
HMFK03LST1 2:bdd944abaf86 272 mosfet1 = mosfet1_open ; // Mosfet wegen Unterspannung BZ auskoppeln
HMFK03LST1 2:bdd944abaf86 273 Load = false; // Laden beenden bis BZ > BZ on (Sicherungsschaltung)
HMFK03LST1 2:bdd944abaf86 274 }
HMFK03LST1 2:bdd944abaf86 275 }
HMFK03LST1 2:bdd944abaf86 276 else
HMFK03LST1 2:bdd944abaf86 277 {
HMFK03LST1 2:bdd944abaf86 278 if (bz >= cap){mosfet1 = mosfet1_open ;} // Mosfet im nicht Ladebetrieb auskoppeln
HMFK03LST1 2:bdd944abaf86 279 else {mosfet1 = mosfet1_close;} // Mosfet im nicht Ladebetrieb einkoppeln (Treiber stromfrei = Stromsparen)
HMFK03LST1 2:bdd944abaf86 280 while (t.read_us() <= 1000){};
HMFK03LST1 0:4f562ff70d13 281 }
HMFK03LST1 2:bdd944abaf86 282
HMFK03LST1 0:4f562ff70d13 283
HMFK03LST1 2:bdd944abaf86 284 if (((cap < cap_min) && (bz > bz_on))||(bz > bz_max)) Load = true ;// Cap unter Minimum oder BZ über Maximum = Laden beginnen
HMFK03LST1 2:bdd944abaf86 285 if ( cap >= cap_max ) Load = false;//
HMFK03LST1 2:bdd944abaf86 286 t.reset();
HMFK03LST1 0:4f562ff70d13 287 }
HMFK03LST1 0:4f562ff70d13 288
HMFK03LST1 0:4f562ff70d13 289 }