Sinus Ups (Kesintisiz guc Kaynagi) yapmak baslangic

Başlatan Tarik konca, 02 Eylül 2023, 12:37:56

Tarik konca

Sinus Ups (Kesintisiz guc Kaynagi) yapmak baslangic

Piyasada satilan Standart  ups leri kullanirken bilgisayar televizyon yazici cep telefonu sarzi

gibi sistemlerde hic bir sorun cikarmaz cunku bu gibi sistemler de ac 220 volt girisinden itibaren sistem soyle devam eder

giriste kopru diyot ondan sonra kondansitor ve spms sistemi olarak yani bu sistemlerde girisin ac veya dc olmasi farketmez

sorun trafolu sistemlerde veya ac motor sistemlerinde baslar kombi gibi kombinin icinde ac motor tarafindan calistirilan

bir devir daim pompasi vardir yani piyasadan normal bir ups alip kombi gibi sistemlerde kullanicak olursaniz

gurultulu calisacaktir ve ac motoru gereginden fazla akim cekip isinacak ve ariza olusturacaktir uzun sureli kullanimlarda

bunun icin sinus cikisi olan ups kullanmaniz gerekecek piyasada bulabilirsiniz


Siz boyle bir sistem yapmak isterseniz sebeke frekansini taklit etmeniz gerekecek

timerlarla pwm isiyle ugrasinca aklima geldi bir tanede ben cikisi sinus olan ups yapayim dedim aklimda soyle bir dusunce

var ilk once 12 voltu 320 volt dc ye yukseltmek reguleli olarak yuke gelince bayilmasin

320 volt dc den sonra H kopru yapip onuda picle sinus olarak surup 220 volt ac cikis almak tabiki modifiye sunus pwm le

diger eski usul olani akliniza bile getirmeyin bunun icin baslangic olarak basit bir program yazdim

sadece pwm le sinus cikartmaya calisiyor basarili gibi bu isi yaparken hazir sinus tablo kullandim her seferinde mcu ya

hesap yaptirmak istemedim (istesemde yapamazdim matematigim okadar iyi degil) internette hazir sinus tablo olusturan

siteler var eleman sayisini ve elemanin kac bit oldugunu yaziyorsunuz size hazir tablo cikartiyor

simdilik boyle bir baslangic yaptim programi ekledim baslangic yapmak isteyenlere belki lazim olur

mcu yu belki degistiririm ilerde 2 kanal dahili pwm i olan baska bir mcu ile duruma gore

simdilik malzeme listesi cikartiyorum denemeler yapiyorum bakalim ne zaman biter eksik malzemelerim var onlari topluyorum

yuksek voltajli hizli diyot mosnfet driver ir 2101 2102 2103 2104 artik hangisi olursa deneyecegim yuksek voltajli mosfet

gibi eksikler var onlari tamamlayinca baslarim

niyetim iki kanal pwm ve ir2104 le yoluma devam etmek sebebi ir2104 girilen bir tane pwmi high ve low olarak iki tane

yapiyor dead time var ve en onemlisi Cross-conduction prevention logic ozelligi var yani mosnfet leri yanlis atesliyerek

istesenizde patlatamiyorsunuz

sizi bir cok zahmetten kurtariyor genede H kopruyle ugrasirken dikkatli olmak gerekiyor bakalim kac tane mosnfet patlaticagim bu projede

low voltage tarafi icin olan lar var gibi 12 voltu 320 volta cikarmayi denedim oldu

yuksek frekans tafosu ile 200 wat civarinda yapacagim

proteus dosyasinda sinus efectini gorebilmek icin osiloskop girisine rc filtre yaptim akliniz karismasin sadece efecti gormek icin

normal devrede olmayacak

mikrobasic ve proteus dosyalari ekde


Kodlar:


program MyProject
dim pwm0_duty ,pwm1_duty ,pwm2_duty ,tmr0_duty,tmr0_tmp ,tmr1_duty,tmr1_tmp ,tmr2_duty ,tmr2_tmp,pwm0_sayac,pwm1_sayac,pwm2_sayac,adc_sec,delay,tork,adc_sayac as byte
const sine_table_a as byte[21] = (0, 38, 75, 111, 144, 173, 199, 221, 237, 249, 254, 254, 249, 237, 221, 199, 173, 144, 111, 75, 38)
sub procedure interrupt() iv 0x0004 ics ICS_AUTO
 if  intcon.TMR0IF=1 then
   if portb.0=1 then
     tmr0_tmp=tmr0_duty
   end if
   if portb.0=0 then
     tmr0_tmp=255-tmr0_duty
     tmr0_duty=pwm0_duty
   end if
   portb.0=not portb.0
   portb.1=not portb.0
   tmr0=tmr0_tmp
   intcon.TMR0IF=0
   INTCON.5=1
end if
 if  PIR1.TMR1IF =1 then
     t1con.tmr1on=0
   if portb.2=1 then
     tmr1_tmp=tmr1_duty
   end if
   if portb.2=0 then
     tmr1_tmp=255-tmr1_duty
     tmr1_duty=pwm1_duty
   end if
   portb.2=not portb.2
   portb.3=not portb.2
   tmr1h=255
   tmr1l=tmr1_tmp
   PIR1.TMR1IF = 0
   pie1.0=1
   t1con.tmr1on=1
end if
  if  PIR1.TMR2IF =1 then
 t2con.tmr2on=0
   if portb.4=1 then
     tmr2_tmp=tmr2_duty
   end if
   if portb.4=0 then
     tmr2_tmp=255-tmr2_duty
     tmr2_duty=pwm2_duty
   end if
   portb.4=not portb.4
   portb.5=not portb.4
   tmr2=tmr2_tmp
   PIR1.TMR2IF = 0
    t2con.tmr2on=1
end if
end sub
main:
trisb=0
portb=255
INTCON = %11100000
OPTION_REG = %00001000
T1CON = %00000101
PIR1.TMR1IF = 0
PIE1.TMR1IE  = 1
T2CON=%10000100
PIE1.TMR2IE = 1
adcon1.adfm=0
adcon1.3=0
adcon1.2=0
adcon1.1=0
adcon1.0=0
adcon0.adon=1
adcon0.3=0
adcon0.4=0
adcon0.5=0
adcon0.1=1
adcon0.7=0
adcon0.6=1
pwm0_sayac=0
pwm1_sayac=8
pwm2_sayac=16
adc_set:
if adc_sec=0 then
delay=adresh
'portc=delay
if delay=0 then
delay=10
end if
adcon0.3=1
adcon0.4=0
adcon0.5=0
end if
if adc_sec=1 then
tork=adresh/25
adcon0.3=0
adcon0.4=0
adcon0.5=0
end if
adc_sec=adc_sec+1
if adc_sec=2 then
  adc_sec=0
  end if
  for adc_sayac=0 to 10 step 1
    pwm0_duty=((sine_table_a[pwm0_sayac]/10)*tork)
    pwm1_duty=((sine_table_a[pwm1_sayac]/10)*tork)
    pwm2_duty=((sine_table_a[pwm2_sayac]/10)*tork)
    pwm0_sayac=pwm0_sayac+1
    pwm1_sayac=pwm1_sayac+1
    pwm2_sayac=pwm2_sayac+1
    if pwm0_sayac=21 then
    pwm0_sayac=0
    end if
    if pwm1_sayac=21 then
    pwm1_sayac=0
    end if
    if pwm2_sayac=21 then
    pwm2_sayac=0
    end if
    delay_cyc(delay)
    next adc_sayac
    adcon0.2=1
pwm_loop:
    pwm0_duty=((sine_table_a[pwm0_sayac]/10)*tork)
    pwm1_duty=((sine_table_a[pwm1_sayac]/10)*tork)
    pwm2_duty=((sine_table_a[pwm2_sayac]/10)*tork)
    pwm0_sayac=pwm0_sayac+1
    pwm1_sayac=pwm1_sayac+1
    pwm2_sayac=pwm2_sayac+1
    if pwm0_sayac=21 then
    pwm0_sayac=0
    end if
    if pwm1_sayac=21 then
    pwm1_sayac=0
    end if
    if pwm2_sayac=21 then
    pwm2_sayac=0
    end if
    delay_cyc(delay)
    if adcon0.2=1 then
    goto pwm_loop
    end if
goto adc_set
end.
Tek Care Format C:

ahmet_zxc


Powered by EzPortal