So, I = P/V = 5250W / 84V = 62.5A
No. power dissipation is conduction losses plus switching losses.How to calculate power dessipated by the mosfet ?
P = VI = 84V * 10A = 840W ?
The Full-Bridge mode does not provide dead-band
delay. As one output is modulated at a time, dead-band
delay is generally not required. There is a situation
where dead-band delay is required. This situation
occurs when both of the following conditions are true:
1. The direction of the PWM output changes when
the duty cycle of the output is at or near 100%.
2. The turn off time of the power switch, including
the power device and driver circuit, is greater
than the turn on time.
Code C - [expand] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 #define NUMBER_OF_TABLE_ENTRIES_FOR_180_DEGREES 64 #define FACTOR_TO_GET_360_DEGREES char i = 0; unsigned int sin_table[64] = {128,140,152,165,176,188,198,208, 218,226,234,240,245,250,253,254, 255,254,253,250,245,240,234,226, 218,208,198,188,176,165,152,140, 128,115,103,90,79,67,57,47, 37,29,21,15,10,5,2,1, 0,1,2,5,10,15,21,29, 37,47,57,67,79,90,103,115 }; unsigned int TBL_POINTER_NEW, TBL_POINTER_OLD, TBL_POINTER_SHIFT, SET_FREQ = 410; char DUTY_CYCLE = 0; //Timer2 //Prescaler 1:1; Postscaler 1:1; TMR2 Preload = 97; Actual Interrupt Time : 19.6 us //Place/Copy this part in declaration section void InitTimer2(){ T2CON = 0x04; PR2 = 97; TMR2IE_bit = 1; INTCON = 0xC0; } void interrupt(){ if(TMR2IF_bit) { TMR2IF_bit = 0; if(sin_table[DUTY_CYCLE] != 255) { TBL_POINTER_NEW = TBL_POINTER_OLD + SET_FREQ; if (TBL_POINTER_NEW < TBL_POINTER_OLD) { CCP1CON.P1M1 = ~CCP1CON.P1M1; } TBL_POINTER_SHIFT = TBL_POINTER_NEW >> 10; DUTY_CYCLE = TBL_POINTER_SHIFT; CCPR1L = sin_table[DUTY_CYCLE]; TBL_POINTER_OLD = TBL_POINTER_NEW; } else { //To eliminate dead band /* If changing PWM direction at high duty cycle is required for an application, two possible solutions for eliminating the shoot-through current are: 1. Reduce PWM duty cycle for one PWM period before changing directions. 2. Use switch drivers that can drive the switches off faster than they can drive them on. */ TBL_POINTER_NEW = TBL_POINTER_OLD + SET_FREQ; TBL_POINTER_SHIFT = TBL_POINTER_NEW >> 10; DUTY_CYCLE = TBL_POINTER_SHIFT; TBL_POINTER_OLD = TBL_POINTER_NEW; } } } double map(double x, double in_min, double in_max, double out_min, double out_max) { return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; } void main() { Delay_ms(200); ANSELA = 0x00; ANSELB = 0x00; CM1CON0 = 0x00; CM2CON0 = 0x00; TRISA = 0xC1; TRISB = 0x00; TRISC = 0x00; PORTA = 0x00; PORTB = 0x00; PORTC = 0x00; LATA = 0x00; LATB = 0x00; LATC = 0x00; TBL_POINTER_SHIFT = 0; TBL_POINTER_NEW = 0; TBL_POINTER_OLD = 0; DUTY_CYCLE = 0; PWM1_Init(50000); PWM1_Set_Duty(0); CCP1CON.P1M0 = 1; CCP1CON.P1M1 = 0; InitTimer2(); PWM1_Start(); while(1) { } }
Code C - [expand] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 char i = 0; unsigned int sin_table[128] = { 512,537,562,587,611,636,660,684, 707,730,753,774,796,816,836,855, 873,890,907,922,937,950,963,974, 984,993,1001,1008,1013,1017,1021,1022, 1023,1022,1021,1017,1013,1008,1001,993, 984,974,963,950,937,922,907,890, 873,855,836,816,796,774,753,730, 707,684,660,636,611,587,562,537, 512,486,461,436,412,387,363,339, 316,293,270,249,227,207,187,168, 150,133,116,101,86,73,60,49, 39,30,22,15,10,6,2,1, 0,1,2,6,10,15,22,30, 39,49,60,73,86,101,116,133, 150,168,187,207,227,249,270,293, 316,339,363,387,412,436,461,486 }; unsigned int TBL_POINTER_NEW, TBL_POINTER_OLD, TBL_POINTER_SHIFT, SET_FREQ = 128; char DUTY_CYCLE = 0; //Timer2 //Prescaler 1:1; Postscaler 1:1; TMR2 Preload = 97; Actual Interrupt Time : 19.6 us //Place/Copy this part in declaration section void InitTimer2() { T2CON = 0x04; PR2 = 97; TMR2IE_bit = 1; INTCON = 0xC0; } void interrupt(){ if(TMR2IF_bit) { TMR2IF_bit = 0; if(sin_table[DUTY_CYCLE] == 1023) { TBL_POINTER_NEW = TBL_POINTER_OLD + SET_FREQ; if (TBL_POINTER_NEW < TBL_POINTER_OLD) { CCP1CON.P1M1 = ~CCP1CON.P1M1; } TBL_POINTER_SHIFT = TBL_POINTER_NEW >> 9; DUTY_CYCLE = TBL_POINTER_SHIFT; CCP1CON.DC1B1 = 0; CCP1CON.DC1B0 = 0; CCPR1L = 0; TBL_POINTER_OLD = TBL_POINTER_NEW; } else if(sin_table[DUTY_CYCLE] != 1023) { TBL_POINTER_NEW = TBL_POINTER_OLD + SET_FREQ; if (TBL_POINTER_NEW < TBL_POINTER_OLD) { CCP1CON.P1M1 = ~CCP1CON.P1M1; } TBL_POINTER_SHIFT = TBL_POINTER_NEW >> 9; DUTY_CYCLE = TBL_POINTER_SHIFT; CCP1CON.DC1B1 = (sin_table[DUTY_CYCLE] & 0b00000010) >> 1; CCP1CON.DC1B0 = (sin_table[DUTY_CYCLE] & 0b00000001); CCPR1L = (sin_table[DUTY_CYCLE] & 0b11111100) >> 2; TBL_POINTER_OLD = TBL_POINTER_NEW; } } } void main() { Delay_ms(200); ANSELA = 0x00; ANSELB = 0x00; CM1CON0 = 0x00; CM2CON0 = 0x00; TRISA = 0xC0; TRISB = 0x00; TRISC = 0x00; PORTA = 0x00; PORTB = 0x00; PORTC = 0x00; LATA = 0x00; LATB = 0x00; LATC = 0x00; TBL_POINTER_SHIFT = 0; TBL_POINTER_NEW = 0; TBL_POINTER_OLD = 0; DUTY_CYCLE = 0; PWM1_Init(51020); PWM1_Set_Duty(0); CCP1CON.CCP1M3 = 1; CCP1CON.CCP1M2 = 1; CCP1CON.CCP1M1 = 0; CCP1CON.CCP1M0 = 0; CCP1CON.P1M0 = 1; CCP1CON.P1M1 = 0; InitTimer2(); PWM1_Start(); while(1) { } }
What is the 380V DC mentioned in page no. 7 and 8 of sprabw0b.pdf ? Is it a voltage used for transformer less full-bridge Inverter ? From where he is getting 380V DC 380 V DC ? If it is for transformer less Inverter than why he has used transformer in page 15 ? He is only using 1x 12V battery.
Code C - [expand] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 unsigned int sin_table[1024] = {512,515,518,521,524,527,530,533, 537,540,543,546,549,552,555,559, 562,565,568,571,574,577,580,583, 587,590,593,596,599,602,605,608, 611,614,617,621,624,627,630,633, 636,639,642,645,648,651,654,657, 660,663,666,669,672,675,678,681, 684,687,690,693,696,699,701,704, 707,710,713,716,719,722,725,727, 730,733,736,739,741,744,747,750, 753,755,758,761,764,766,769,772, 774,777,780,782,785,788,790,793, 796,798,801,803,806,809,811,814, 816,819,821,824,826,829,831,834, 836,838,841,843,846,848,850,853, 855,857,860,862,864,866,869,871, 873,875,878,880,882,884,886,888, 890,893,895,897,899,901,903,905, 907,909,911,913,915,917,919,920, 922,924,926,928,930,931,933,935, 937,939,940,942,944,945,947,949, 950,952,953,955,957,958,960,961, 963,964,966,967,968,970,971,973, 974,975,977,978,979,980,982,983, 984,985,986,988,989,990,991,992, 993,994,995,996,997,998,999,1000, 1001,1002,1003,1004,1004,1005,1006,1007, 1008,1008,1009,1010,1011,1011,1012,1013, 1013,1014,1014,1015,1015,1016,1017,1017, 1017,1018,1018,1019,1019,1020,1020,1020, 1021,1021,1021,1021,1022,1022,1022,1022, 1022,1023,1023,1023,1023,1023,1023,1023, 1023,1023,1023,1023,1023,1023,1023,1023, 1022,1022,1022,1022,1022,1021,1021,1021, 1021,1020,1020,1020,1019,1019,1018,1018, 1017,1017,1017,1016,1015,1015,1014,1014, 1013,1013,1012,1011,1011,1010,1009,1008, 1008,1007,1006,1005,1004,1004,1003,1002, 1001,1000,999,998,997,996,995,994, 993,992,991,990,989,988,986,985, 984,983,982,980,979,978,977,975, 974,973,971,970,968,967,966,964, 963,961,960,958,957,955,953,952, 950,949,947,945,944,942,940,939, 937,935,933,931,930,928,926,924, 922,920,919,917,915,913,911,909, 907,905,903,901,899,897,895,893, 890,888,886,884,882,880,878,875, 873,871,869,866,864,862,860,857, 855,853,850,848,846,843,841,838, 836,834,831,829,826,824,821,819, 816,814,811,809,806,803,801,798, 796,793,790,788,785,782,780,777, 774,772,769,766,764,761,758,755, 753,750,747,744,741,739,736,733, 730,727,725,722,719,716,713,710, 707,704,701,699,696,693,690,687, 684,681,678,675,672,669,666,663, 660,657,654,651,648,645,642,639, 636,633,630,627,624,621,617,614, 611,608,605,602,599,596,593,590, 587,583,580,577,574,571,568,565, 562,559,555,552,549,546,543,540, 537,533,530,527,524,521,518,515, 512,508,505,502,499,496,493,490, 486,483,480,477,474,471,468,464, 461,458,455,452,449,446,443,440, 436,433,430,427,424,421,418,415, 412,409,406,402,399,396,393,390, 387,384,381,378,375,372,369,366, 363,360,357,354,351,348,345,342, 339,336,333,330,327,324,322,319, 316,313,310,307,304,301,298,296, 293,290,287,284,282,279,276,273, 270,268,265,262,259,257,254,251, 249,246,243,241,238,235,233,230, 227,225,222,220,217,214,212,209, 207,204,202,199,197,194,192,189, 187,185,182,180,177,175,173,170, 168,166,163,161,159,157,154,152, 150,148,145,143,141,139,137,135, 133,130,128,126,124,122,120,118, 116,114,112,110,108,106,104,103, 101,99,97,95,93,92,90,88, 86,84,83,81,79,78,76,74, 73,71,70,68,66,65,63,62, 60,59,57,56,55,53,52,50, 49,48,46,45,44,43,41,40, 39,38,37,35,34,33,32,31, 30,29,28,27,26,25,24,23, 22,21,20,19,19,18,17,16, 15,15,14,13,12,12,11,10, 10,9,9,8,8,7,6,6, 6,5,5,4,4,3,3,3, 2,2,2,2,1,1,1,1, 1,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 1,1,1,1,1,2,2,2, 2,3,3,3,4,4,5,5, 6,6,6,7,8,8,9,9, 10,10,11,12,12,13,14,15, 15,16,17,18,19,19,20,21, 22,23,24,25,26,27,28,29, 30,31,32,33,34,35,37,38, 39,40,41,43,44,45,46,48, 49,50,52,53,55,56,57,59, 60,62,63,65,66,68,70,71, 73,74,76,78,79,81,83,84, 86,88,90,92,93,95,97,99, 101,103,104,106,108,110,112,114, 116,118,120,122,124,126,128,130, 133,135,137,139,141,143,145,148, 150,152,154,157,159,161,163,166, 168,170,173,175,177,180,182,185, 187,189,192,194,197,199,202,204, 207,209,212,214,217,220,222,225, 227,230,233,235,238,241,243,246, 249,251,254,257,259,262,265,268, 270,273,276,279,282,284,287,290, 293,296,298,301,304,307,310,313, 316,319,322,324,327,330,333,336, 339,342,345,348,351,354,357,360, 363,366,369,372,375,378,381,384, 387,390,393,396,399,402,406,409, 412,415,418,421,424,427,430,433, 436,440,443,446,449,452,455,458, 461,464,468,471,474,477,480,483, 486,490,493,496,499,502,505,508 }; unsigned int index = 0; unsigned char myFlags = 0; sbit change_direction_flag at myFlags.B0; //Timer1 //Prescaler 1:1; TMR1 Preload = 65497; Actual Interrupt Time : 9.75 us //Place/Copy this part in declaration section void InitTimer1() { T1CON = 0x01; TMR1IF_bit = 0; TMR1H = 0xFF; TMR1L = 0xD9; TMR1IE_bit = 1; INTCON = 0xC0; } void interrupt(){ //Interrupt occurs once every 9.75 us //Sine table is for 180 degrees //1024 values //9.75 us * 1024 = 9.984 ms //for full wave 9.984 * 2 = 19.968 ms //F = 1/T = 1/19.968 ms = 50.08 Hz approx 50 Hz if (TMR1IF_bit){ TMR1IF_bit = 0; TMR1H = 0xFF; TMR1L = 0xD9; //Enter your code here //PWM duty is 10 bit //2 LSBs of PWM duty CCP1CON.DC1B1 = (sin_table[index] & 0x02) >> 1; CCP1CON.DC1B0 = (sin_table[index] & 0x01); //8 MSBs of PWM duty CCPR1L = (sin_table[index] & 0b1111111100) >> 2; if((sin_table[index] == 0) && (change_direction_flag == 0)) { CCP1CON.P1M1 = ~CCP1CON.P1M1; change_direction_flag = 1; } if((sin_table[index] == 1) && (change_direction_flag == 1))change_direction_flag = 0; if(++index > 1023)index = 0; } } void main() { Delay_ms(200); ANSELA = 0x00; ANSELB = 0x00; ANSELC = 0x00; CM1CON0 = 0x00; CM2CON0 = 0x00; SLRCON = 0x00; TRISA = 0xC0; TRISB = 0x00; TRISC = 0x00; PORTA = 0x00; PORTB = 0x00; PORTC = 0x00; LATA = 0x00; LATB = 0x00; LATC = 0x00; PWM1_Init(102564); PWM1_Set_Duty(0); InitTimer1(); PR2 = 255; CCP1CON.CCP1M3 = 1; CCP1CON.CCP1M2 = 1; CCP1CON.CCP1M1 = 0; CCP1CON.CCP1M0 = 0; CCP1CON.P1M0 = 1; CCP1CON.P1M1 = 0; GIE_bit = 1; PWM1_Start(); while(1) { } }
I believe the paper explains the topology well with a block diagram. You have a 12-to-380 VDC isolating DC/DC converter using a high frequency transformer. And the said transformerless output stage. It's the preferred topology for compact battery inverters and is used e.g. in most recent UPS. The paper mentions a rated power of 100 W for the reference design. You'll probably use a higher battery voltage for higher powers than e.g. 500 W.
I am referring this link for Output Transformer design.
**broken link removed**
What should be the current ratings of the Pri and Sec windings of the transformer for 5.25KW Inverter ?
I was wrong. That transformer calculation is for high frequency transformer for DC-DC Converter.
What Does a DC-DC Converter need on the input side ? Is 50 KHz PWM enough for the input side ? Is 48V enough for the input side of the DC-DC converter which has to give 325 V DC at the output side for the Inverter ?
Does high frequency PWM good for a DC-DC Boost Converter ? Say 400 KHz ?
Can I use UC3843 IC for the DC-DC converter for the design. I will power the IC from 12V (1 battery) and use 4x 12V batteries in series to get 48V DC for the primary side of the transformer. What DC voltage I have to input to the primary of the high frequency transformer to get 325V DC for a 5.25KW Inverter ?
I will design a transformer using standard ferrite core and post the calculation here soon.
- - - Updated - - -
I designed this DC-DC Converter but it is not working as expected in Proteus. The output voltage is fluctuating in voltmeter (Simulation). I think it is because I don't have a filter capacitor at the output of the bridge rectifier. I am using 50% duty PWM generated by 18F46K22. In Proteus disable 18F26K22 and simulate.
What PWM duty is good for the DC_DC converter ?
I am thinking about measuring the voltage across load of the Inverter and based on it adjust the duty of the PWM signal for the DC-DC converter to maintain constant output voltage of 230V AC.
Should I choose ferrite core for the DC-DC converter transformer ?
Can I use Logic gate Mosfet for the DC-DC Converter. I will not be using UC3843. I have generated PWM from PIC itself. I am using the same calculations that Tahmid has done in the switching transformer calculations. Link in the previous post.
I will be using 4x 12V 150 Ah batteries in series. Is it enough to get 325 VDC for a 5.25KW inverter ?
For the first attempt to build a real device, I would suggest to head for the lowest possible switching frequency, e.g. 15 or 20 kHz.
Often a single Vbus source and one or two capacitors providing the AC center point
Both in case of doubt.For what ?
DC-DC Converter or for the SPWM signals ?
That's a calculation for Irms. Ipeak = √2*Irms.I = P/V = 5250W/230V = 22.83 A
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?