www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Bascom MEGA16/32 Sine Wave Inverter

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> AVR, LPC900, x51
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
laco
Član
Član



Pridružen-a: Pon 06 Jun 2011 19:32
Prispevkov: 13
Aktiv.: 0.08
Kraj: Hrvatska

PrispevekObjavljeno: Ned Jun 10, 2012 3:23 pm    Naslov sporočila:  Bascom MEGA16/32 Sine Wave Inverter Odgovori s citatom

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



Oscilloscope-Inverter OUT-2.jpg
 Opis:
 Velikost datoteke:  184.08 KB
 Pogledana:  14 krat

Oscilloscope-Inverter OUT-2.jpg



Oscilloscope-Inverter PWM1A and PWM1B-1.jpg
 Opis:
 Velikost datoteke:  176.88 KB
 Pogledana:  17 krat

Oscilloscope-Inverter PWM1A and PWM1B-1.jpg



_________________
Lijep pozdrav,
Ivica Lacmanovic
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
pirpy
Član
Član



Pridružen-a: Ned 30 Maj 2004 21:57
Prispevkov: 774
Aktiv.: 3.27
Kraj: Topolšica

PrispevekObjavljeno: Sre Nov 28, 2012 12:25 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
int47
Član
Član



Pridružen-a: Pon 15 Dec 2003 0:10
Prispevkov: 2104
Aktiv.: 8.88
Kraj: Ljubljana

PrispevekObjavljeno: Sre Nov 28, 2012 7:07 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> AVR, LPC900, x51 Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
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