 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
laco Član

Pridružen-a: Pon 06 Jun 2011 19:32 Prispevkov: 13 Aktiv.: 0.08 Kraj: Hrvatska
|
Objavljeno: Ned Jun 10, 2012 3:23 pm Naslov sporočila: Bascom MEGA16/32 Sine Wave Inverter |
|
|
Radim projekt 12/24V DC / 220 AC inverter. Kod programa je napisan u Bascom Avr-u. Projekt sam testiraou u Proteusu tako da je izlaz ATMEGA mikrokontrolera PWM1a - 1/2 pozitina perioda sinusoide , a PWM1B 1/2 negativna polovica sinusoida. Na PWM su spojeni IRF44N sa 1K otporom, transformator 12/24V x 2/220V. Filter na izlazu je 2.2mH sa 2.2 uF.
Vrhovi pozitivne i negativne poluperide su nestabilni i kreću se od 178-182V uz ulaz transformatora 24V (baterija) Treb stručnu pomoć ne zna da li su oscilogrami u redu ili nešto treba mijenjati u kodu.
Koda: |
'*********************************************
'* Program : PWM Sine Wave 50Hz inverter.bas
'* Date : 05-06-12
'* Processor : ATMEGA 16/32 16 MHz
'* Input: Internal sine wave value table
'* Process : Pulse width modulation
'*********************************************
$regfile = "m16def.dat" ' specify the used micro
$crystal = 16000000 ' used crystal frequency
$baud = 19200 ' use baud rate
$hwstack = 128 ' default use 32 for the hardware stack
$swstack = 64 ' default use 10 for the SW stack
$framesize = 64
' variable
Dim Half_cycle As Byte
Dim Sine_table(32) As Byte ' sine_table
Dim Index As Byte
' Positive or Negativ Half_cycle
' Config
Config Pind.5 = Output 'Pin OC1A - PWM1a
Config Pind.4 = Output 'Pin OC1B - PWM1b
'***********************************************************
'* Halfperiod = 10 ms.
'* There are 32 pwm values in a halfperiod.
'* We need to change the OCR value every 10000/32 =312.5 microsec
'*
'* Let Timer0 overflow after 312.5 us.
'* Set prescaler to 64
'* 1 timer step = 64/16MHz = 4 us ; 312.5/4 = 78.12
'* Preload value = 256 - 78.
'************************************************************
Config Timer0 = Timer , Prescale = 64
Enable Ovf0
On Ovf0 Timer0_ovf
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 1
' pwm freq cca 30 kHz
Start Timer0
Start Timer1
'restore Sine_dat ' restore sinedat
For Index = 0 To 31
' Sine_table(index + 1) = Lookup(index , Sine_dat) ' read sine_dat
Next Index
Index = 1
Half_cycle = 0 ' positiv sine cycle
Enable Interrupts
Do
Index = Lookup(0 , Sine_dat)
Loop ' Loop forever
End ' end program
'************************ Interrupt0 ******************************
Timer0_ovf:
Timer0 = 256 - 78 'preload
If Half_cycle = 0 Then ' select half cycle positiv
Pwm1a = Sine_table(index + 1) ' positive half cycle
Pwm1b = 0
Else
Pwm1b = Sine_table(index + 1) ' negativ sine cycle
Pwm1a = 0
End If
Incr Index ' increments Index for 1
If Index => 32 Then
If Half_cycle = 0 Then
Half_cycle = 1 ' Select negativ Half Cycle
Else
Half_cycle = 0 ' Select positiv Half Cycle
End If
End If
Return
'*********************** SINE WAVE DATA **********************
Sine_dat:
Data 25 , 50 , 74 , 98 , 120 , 142 , 162 , 180 , 197 , 212 , 225 , 235 , 244_
250 , 254 , 255 , 254 , 250 , 244 , 235 , 225 , 212 , 197 , 180 , 162 , 142_
120 , 98 , 74 , 50 , 25 , 0 |
Opis: |
|
Velikost datoteke: |
184.08 KB |
Pogledana: |
14 krat |

|
Opis: |
|
Velikost datoteke: |
176.88 KB |
Pogledana: |
17 krat |

|
_________________ Lijep pozdrav,
Ivica Lacmanovic |
|
Nazaj na vrh |
|
 |
pirpy Član


Pridružen-a: Ned 30 Maj 2004 21:57 Prispevkov: 774 Aktiv.: 3.27 Kraj: Topolšica
|
Objavljeno: Sre Nov 28, 2012 12:25 pm Naslov sporočila: |
|
|
Lp
tole je pa zanimivo .
Ali lahko priložiš načrt ,shemo ,
transformator bi moral biti 240 /18 sicer neboš dosegel 230V
Tole bi bilo uporabno tudi za grid tie inverter" z malo modifikacijo programa
Borut
|
|
Nazaj na vrh |
|
 |
int47 Član


Pridružen-a: Pon 15 Dec 2003 0:10 Prispevkov: 2104 Aktiv.: 8.88 Kraj: Ljubljana
|
Objavljeno: Sre Nov 28, 2012 7:07 pm Naslov sporočila: |
|
|
pirpy je napisal/a: |
transformator bi moral biti 240 /18 sicer ne boš dosegel 230V |
Če se PB baterija prazni do 1,8V / celico, imaš pri 2*6 celic in prazni bateriji napetost le 21,6V.
Efektivna napetost je torej 21,6V / 1,41 = 15,3V.
Od te napetosti je potrebno odšteti še padec napetosti na mosfetih RDSon*I24 in padca napetosti na navitjih transformatorja.
N = 230/24 prestavno razmerje transformatorja (približna vrednost),
R230 je upornost navitja na 230V strani,
R24 je upornost navitja na 24V strani
I24 je RMS tok skozi navitje na 24V strani pri polni obremenitvi.
RDSon = upornost kanala mosfeta pri uporabljeni Ug
Ug= Krmilna napetost med G in S priključkoma mosfeta
Padec napetosti na navitju transformatorja (preračunano na 24V stran) je (računano za sinusno obliko toka) ((R230/ (N*N)) + R24) * I24
Na 24V strani imaš lahko navitje za največ
15, 3 - ((R230/ (N*N)) + R24) * I24 - RDSon*I24 [V]. Raje še nekoliko manj.
S to napetostjo tvegaš, da bo šlo pri polni bateriji jedro transformatorja v nasičenje. Temu se lahko izogneš tako, da na 24V strani uporabiš navitje za ustrezno napetost 26 / SQRT(2) = cca 18,6, ter na 230V strani popraviš napetost navitja tako, da bo pri prazni bateriji na izhodu 230V.
Na 230V strani bi rabil napetost navitja 230*18,6/(15, 3 - ((R230/ (N*N)) + R24) * I24 - RDSon*I24) [V] Na žalost to ne bo standardni transformator.
Pri napajanju iz baterij, se ti bo vhodna (in s tem izhodna) napetost precej spreminjala. 100* 26/21,6 = cca 20% brez ostalih vplivov.
Z uC meri izhodno napetost in glede na odstopanje spreminjaj čase odprtja mosfetov (PWM).
Edit: popravljena napaka v izračunu.
|
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 493 dni
Powered by phpBB © 2001, 2005 phpBB Group
|