SPWM Circuit
SPWM Circuit
Written by
GEORGE LEON
Nagercoil, India.
[email protected]
This inverter is based on fullll bridge configuration with sinusoidal PWM modulation. PIC16F886 is used to generate required control signals. ECCP
module of PIC16F886 is used in half bridge mode. TLP250 is used as IGBT driver as well as electrical isolation. The circuit iis designed to deliver 230V, 50Hz,
1.5KVA output. 325V DC input should not be grounded and it should be floating supply. 18V DC auxiliary supply is also floating used as Vcc for TLP250.
During +ve half cycle T3 conducts continuously and T1’s conduction is modulated. During –ve
ve half cycle T4 conducts continuously and T2
T2’s
conduction is modulated. Dead time is implemented in the program to avoid shoot through current.
The output filter is low pass LC filter consist of 3 milli-henry air cored inductor and 5 MFD capacitor. The cut-off
off frequency of LC filter is 1300Hz
which is far below switching frequency of 19.53 KHz and above the output fundamental frequency of 50 Hz. Air cored inductor is preferred because core
saturation does not arise while supplying peak currents, makes it suitable for RCD loads such as computer SPMS etc. But copper loss is somewhat more
compared to ferrite cored inductor which can be tolerated
tolerated.
The inductance of multilayer air cored inductor can be calculated using the
formula as given in the diagram. For typical 3 milli-henry
henry inductance, 330 Turns of 19 SWG
enameled copper wire wound over a bobbin of 1 inch diameter and 1 inch length.
IGBT FGA25N120 has built in anti parallel diode so no need of providing external
diodes. TLP250 driving low side directly receives power from 18 V auxiliary supply while
TLP250 driving high side receives power through BA159 diode and stored in 100MFD
capacitor. Polyester capacitor of 0.1MFD is connected across 100MFD electrolytic
capacitors to overcome high inductance of electrolytic capacitors.
;************************************************************************************************************
;************************************************************************************************************
;TIMER 0 IS USED TO INTERRUPT FOR EVERY 166 MICRO SECONDS TO UPDATE DUTY CYCLE
;FROM LOOKUP TABLE, AND FOR ONE CYCLE 120 LOOKUP TABE VALUES ARE USED.
; 0 TO 59 OF LOOKUP TABLE IS FOR +VE HALF CYCLE AND 60 TO 119 FOR -VE HALF CYCLE.
; -VE HALF CYCLE VALUES ARE (255 - POSITIVE HALF CYCLE VALUES).
;USE TLP250 MOSFET DRIVER, 3 MILLI HENRY AIR CORED INDUCTOR AND 4.7 MFD CAPACITOR AS OUTPUT FILTER
;**************************************************************************************
list p=16f886
list n=0
#include p16f886.inc
__config _CONFIG1, _DEBUG_OFF & _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF & _CPD_OFF & _MCLRE_OFF & _PWRTE_OFF & _WDT_OFF &
_HS_OSC
GOTO START
GOTO ISR
ORG 0X0005
TABLE ADDWF PCL,F ;LOOK UP TABLE SHOULD BE LOCATED IN FIRST ;BECAUSE LAST MEMORY OF TABLE SHOULD NOT EXCEED 256
RETLW .13 ;1
RETLW .27 ;2
RETLW .40
RETLW .53
RETLW .66
RETLW .79
RETLW .91
RETLW .104
RETLW .116
RETLW .127
RETLW .139
RETLW .150
RETLW .160
RETLW .171
RETLW .180
RETLW .190
RETLW .198
RETLW .206
RETLW .214
RETLW .221
RETLW .227
RETLW .233
RETLW .238
RETLW .243
RETLW .246
RETLW .249
RETLW .252
RETLW .254
RETLW .255
RETLW .255
RETLW .255
RETLW .254
RETLW .252
RETLW .249
RETLW .246
RETLW .243
RETLW .238
RETLW .233
RETLW .227
RETLW .221
RETLW .214
RETLW .206
RETLW .198
RETLW .190
RETLW .180
RETLW .171
RETLW .160
RETLW .150
RETLW .139
RETLW .127
RETLW .116
RETLW .104
RETLW .91
RETLW .79
RETLW .66
RETLW .53
RETLW .40
RETLW .215
RETLW .202
RETLW .189
RETLW .176
RETLW .164
RETLW .151
RETLW .139
RETLW .128
RETLW .116
RETLW .105
RETLW .95
RETLW .84
RETLW .75
RETLW .65
RETLW .57
RETLW .49
RETLW .41
RETLW .34
RETLW .28
RETLW .22
RETLW .17
RETLW .12
RETLW .9
RETLW .6
RETLW .3
RETLW .1
RETLW .0
RETLW .0
RETLW .0
RETLW .1
RETLW .3
RETLW .6
RETLW .9
RETLW .12
RETLW .17
RETLW .22
RETLW .28
RETLW .34
RETLW .41
RETLW .49
RETLW .57
RETLW .65
RETLW .75
RETLW .84
RETLW .95
RETLW .105
RETLW .116
RETLW .128
RETLW .139
RETLW .151
RETLW .164
RETLW .176
RETLW .189
RETLW .202
RETLW .215
MOVLW 0X00
MOVLW 0X00
MOVLW 0X01
MOVWF ADCON1
MOVWF OSCCON
MOVWF PWM1CON
MOVLW B'00000001' ;TMR0 INT CLOCK, PRESCALER 1:4, TMR 0 START ALSO
MOVWF OPTION_REG
MOVLW 0XFF ;FOR 19.53 KHZ SWITCHING FREQUENCY WITH 20 MHZ CRYSTAL
MOVWF PR2
MOVWF ANSEL
MOVLW 0X00
MOVWF ANSELH
MOVWF ADCON0
CLRF PORTB
CLRF PORTC
MOVWF 0X20
MOVLW 0X21
MOVWF FSR
INCF FSR,F
DECFSZ 0X20,F
GOTO CLRREG
CALL HLFSEC
CALL HLFSEC
BSF FMO ;MAINS ON FLAG TO AVOID INVERTER TRIGGER WHEN MAINS ALREADY AVAILABLE
LOOP NOP
MOVWF CHN_NO
CALL ANASCAN
MOVF AD_RES,W
BTFSC STATUS,C
MOVF AD_RES,W
SUBLW .180 ;VOLTAGE UPPER CUT OUT
BTFSS STATUS,C
MOVF AD_RES,W
BTFSC STATUS,C
MOVF AD_RES,W
BTFSS STATUS,C
GOTO MAINNC
BTFSC FMO ;IF MAINS ON FALG NOT SET THEN BLINK MAINS LED
GOTO MAINNC
MOVF MSTBC,W
BTFSS STATUS,Z
GOTO MAINNC
GOTO MAINNC
MAINNC NOP
BCF F20MS
XORWF TMCOU,W
BTFSS STATUS,Z
GOTO LOOP
CLRF TMCOU
BSF FHSEC ;SET HALF SECOND FLAG CAN BE USED FOR ANY TIMING
SWAPF STATUS,W
MOVWF STATUS_TEMP
MOVLW .60 ;IF PULSE WIDTH COUNTER REACHES 60 MEANS +VE TO -VE
XORWF PWCOU,W
BTFSS STATUS,Z
MOVLW .255 ;THE INSTRUCTIONS FROM BCF MOSF3 TO BSF MOSF4 FORMS DEAD TIME
MOVLW 0XFE ;SINCE THE NEW DUTYCYCLE WILL BE LATCHED WHEN TMR2
CALL INVSHD ;CALL INVERTER SHUTDOWN ( SHUT DOWN INVERTER WHEN O/P VOLTAGE IS ZERO )
GOTO NOTRN
CK120 MOVLW .120 ;IF PULSE WIDTH COUNTER REACHES 120 -VE TO +VE
XORWF PWCOU,W
BTFSS STATUS,Z
MOVLW .0 ;THE INSTRUCTIONS FROM BCF MOSF4 TO BSF MOSF3 FORMS DEAD TIME
MOVLW 0XFE ;SINCE THE NEW DUTYCYCLE WILL BE LATCHED WHEN TMR2
CALL TABLE ;GET PWM DUTY CYCLE FOR PURE SINE WAVE
MOVWF TMR0 ;255 - 199 = 56 FOR 50 HZ (TIME TAKEN BY INSTRUCTIONS IN ISR TO BE DECUCTED)
MOVWF STATUS
SWAPF W_TEMP,F
SWAPF W_TEMP,W
ISRTM MOVLW .120 ;ISR WHEN INVERTER NOT RUNNING FOR TIMING PURPOSE ALONE
XORWF PWCOU,W ;IF PULSE WIDTH COUNTER REACHES 120 MEANS 20 MILLI SECOND OVER
BTFSS STATUS,Z
MOVWF STATUS
SWAPF W_TEMP,F
SWAPF W_TEMP,W
MOVWF CCPR1L
MOVLW B'00000100' ;TIMER2 ON, PRESCALER 1:1, POSTSCALE 1:1
MOVWF T2CON
RETURN
BCF MOSF4
RETURN
MOVWF W_TEMP1
BCF STATUS,C
RLF W_TEMP1,F
IORWF W_TEMP1,F
MOVF W_TEMP1,W
MOVWF ADCON0
MOVWF 0X20
GOTO AQTIME
GOTO ADCONV1
MOVF ADRESH,W
MOVWF AD_RES
RETURN
MOVWF DCOU3
GOTO COU3
DECFSZ DCOU2,F
GOTO COU4
DECFSZ DCOU3,F
GOTO COU5
RETURN
END
:020000040000FA
:020000007E2858
:040002000034003492
:02000800E628E8
:06000A00820700340D34F2
:100010001B342834353442344F345B346834743400
:100020007F348B349634A034AB34B434BE34C6340D
:10003000CE34D634DD34E334E934EE34F334F634FC
:10004000F934FC34FE34FF34FF34FF34FE34FC3426
:10005000F934F634F334EE34E934E334DD34D634B1
:10006000CE34C634BE34B434AB34A03496348B347E
:100070007F34743468345B344F344234353428343C
:100080001B340D34FF34F234E434D734CA34BD3475
:10009000B034A43497348B348034743469345F348E
:1000A00054344B34413439343134293422341C34FF
:1000B000163411340C34093406340334013400345A
:1000C0000034003401340334063409340C34113460
:1000D00016341C34223429343134393441344B340D
:1000E00054345F346934743480348B349734A4349A
:1000F000B034BD34CA34D734E434F234831600301B
:100100008600003087000130850000309F000030FD
:100110008F0004309B0001308100FF309200831675
:1001200003170130880000308900831203138030E8
:100130009F008B160B118501860187015A30A000A4
:10014000213084008001840AA00BA2285021502174
:1001500050218B173A14861700000030A9003C216B
:1001600028082D3C0318D4282808B43C031CD428A4
:1001700028084B3C0318D9282808A03C031CD92880
:100180003A18D9283A1DD928861FC8288613C928A5
:100190008617A60A2608143A031DD9283A1486178A
:1001A000A601BA18BA15D9283A108613A601BA1CA6
:1001B000232100003A113A1EAC283A12A50A193040
:1001C0002506031DAC28A5013A15AC28F000030E46
:1001D000F1008301A40ABA1C15293C302406031D32
:1001E000FC288711FF30950017129712FE309100FE
:1001F0000716BA1931210A2978302406031D0A2965
:10020000A4013A1607120030950017169716FE3013
:1002100091008715240805209500383081000B11C6
:10022000710E8300F00E700E090078302406031D55
:100230001B29A4013A16373081000B11710E83007F
:10024000F00E700E09008616BC3097000130950044
:1002500004309200A40107128715BA140617BA11C8
:100260000800871107129701920107110611BA10B1
:100270000613BA11861208002908A7000310A70D5B
:10028000A70D8130A70427089F001430A000A00B01
:1002900047299F149F184A291E08A8000C1308001C
:1002A0005030A300A200A100A10B5429A20B532996
:0602B000A30B5229080017
:02400E00D220BE
:02401000FF3F70
:00000001FF