SPWM ile inverter hakkında birkaç soru

Başlatan certy, 06 Ocak 2015, 20:15:51

certy

Alıntı yapılan: restore - 07 Ocak 2015, 20:27:01
akımı takip eden spwm bu şartlarda imkansız gibi görünüyor fxdev  in önerisi tecrubedir.

en basiti uc3826 akım kontrolünde  incelenebilinir. uc3844 gibi gibi . başlangıç yapabilirsin.



İmkansız görülmesinin sebebi nedir?
TA1USS

restore

en basitinden kaliteli bir anahtarlama için akımın ani yükselişini yakalamamız gerekir .dijital ile bunu yapmak yavaş kalabilir. ve daha pahalıdır. zordur.
akım kontrollü çalışan uc3844  her kare dalga da akımı takip edip ona göre anahtarlayabilir.  bunu incelemende fayda var. 

certy

Alıntı yapılan: restore - 07 Ocak 2015, 21:34:37
en basitinden kaliteli bir anahtarlama için akımın ani yükselişini yakalamamız gerekir .dijital ile bunu yapmak yavaş kalabilir. ve daha pahalıdır. zordur.
akım kontrollü çalışan uc3844  her kare dalga da akımı takip edip ona göre anahtarlayabilir.  bunu incelemende fayda var. 

Ben şu şekilde düşünmüştüm. Sistemi maksimum gücünün 20W civarı aşağısında çalıştırıp çekilen güç sistemin vereceği max. güce yaklaştıkça çıkış voltajını aşağıya çekmek gibi. Diğer bir seçenek, akım sınırlaması. Bence en garantili yöntem.
TA1USS

eem2015

merhaba ;
ben spwm tekniği kullanarak bir h-bridge inverter tasarlıyorum.16f877a ile yazılmış bir kod var elimde inceleyebilirmisiniz spwm üretiyor mu?.bir de bu teoride 50hz sinüs sinyali ile isteğidiğimiz anahtarlama frekansında üçgen sinyali karşılaştırma işlemi bu programda yapılmış mı?PIC çıkışından aldığım spwm fotoğrafını ekledim.

unsigned char sin_table[64]={0,12,25,37,49,61,73,84,96,107,118,129,139,149,159,168,177,185,193,201,208,214,220,226,231,235,239,243,245,247,249,250,250,250,249,247,245,243,239,237,231,226,220,214,208,201,193,185,177,168,159,149,139,129,118,107,96,84,73,61,49,37,25,12};


unsigned int TBL_POINTER_NEW, TBL_POINTER_OLD, TBL_POINTER_SHIFT, SET_FREQ;
unsigned int TBL_temp;
unsigned char DUTY_CYCLE;

sbit MOSA at RD0_bit;
sbit MOSB at RD1_bit;
sbit MOSC at RD2_bit;
sbit MOSD at RD3_bit;

unsigned char FlagReg;
sbit Direction at FlagReg.B0;
//0 -> MOS A + D
//1 -> MOS B + C

void interrupt(){
     if (TMR2IF_bit == 1){
        TBL_POINTER_NEW = TBL_POINTER_OLD + SET_FREQ;
        if (TBL_POINTER_NEW < TBL_POINTER_OLD){
           //CCP1CON.P1M1 = ~CCP1CON.P1M1; //Reverse direction of full-bridge
           if (Direction == 0){
              MOSA = 0;
              MOSD = 0;
              MOSB = 1;
              MOSC = 1;
              Direction = 1;
           }
           else{
                MOSB = 0;
                MOSC = 0;
                MOSA = 1;
                MOSD = 1;
                Direction = 0;
           }
        }
        TBL_POINTER_SHIFT = TBL_POINTER_NEW >> 10;
        DUTY_CYCLE = TBL_POINTER_SHIFT;
        CCPR1L = sin_table[DUTY_CYCLE];
        TBL_POINTER_OLD = TBL_POINTER_NEW;
        TMR2IF_bit = 0;
     }
}

void main() {
     SET_FREQ = 820;
     PORTD = 0;
     TRISD = 0;
     PR2 = 249; // 8kHz
     CCPR1L = 0;
     CCP1CON = 12; //PWM mode
     TRISC = 0xFF;
     TMR2IF_bit = 0;
     T2CON = 0x04; //TMR2 on
     while (TMR2IF_bit == 0);
     TMR2IF_bit = 0; //Clear TMR2IF
     PORTC = 0;
     TRISC = 0;
     TMR2IE_bit = 1;
     GIE_bit = 1;
     PEIE_bit = 1;

     while (1);

}


certy

#19
Bugün birkaç deneme yaptım. 50 Hz için hertz başına 255 duty değeri olacak şekilde bir program yazdım. Periyot başı 20000 uS olduğu için 20000/255'ten 78 uS'de bir pwm duty değerini set ediyorum. Pwm frekansını 255*50'den 12750 Hz olarak ayarlıyorum. Pwm çıkışında 12750 Hz alabiliyorum ama 16F628'in komut işleme hızındaki problemden dolayı Pwm'in içinden 50 Hz alacağıma 6 Hz alıyorum.

Programım:

@ DEVICE PIC16F628A
@ DEVICE PIC16F628A, WDT_ON
@ DEVICE PIC16F628A, PWRT_ON
@ DEVICE PIC16F628A, PROTECT_OFF
@ DEVICE PIC16F628A, HS_OSC

CMCON=7
TRISA=%00000000
TRISB=%00000000

DEFINE OSC 8

DEFINE CCP1_REG PORTB
DEFINE CCP1_BIT 3

E    VAR BYTE
DUTY VAR BYTE

PORTA=0
PORTB=0

PROGRAM:
PAUSEUS 78
GOSUB CEK
E=E+1
GOTO PROGRAM

CEK:
LOOKUP E,[128,131,134,137,140,143,146,149,152,155,158,162,165,167,170,173,176,179,182,185,188,190,193,196,198,201,203,206,208,211,213,215,218,220,222,224,226,228,230,232,234,235,237,238,240,241,243,244,245,246,248,249,250,250,251,252,253,253,254,254,254,255,255,255,255,255,255,255,254,254,254,253,253,252,251,250,250,249,248,246,245,244,243,241,240,238,237,235,234,232,230,228,226,224,222,220,218,215,213,211,208,206,203,201,198,196,193,190,188,185,182,179,176,173,170,167,165,162,158,155,152,149,146,143,140,137,134,131,128,124,121,118,115,112,109,106,103,100,97,93,90,88,85,82,79,76,73,70,67,65,62,59,57,54,52,49,47,44,42,40,37,35,33,31,29,27,25,23,21,20,18,17,15,14,12,11,10,9,7,6,5,5,4,3,2,2,1,1,1,0,0,0,0,0,0,0,1,1,1,2,2,3,4,5,5,6,7,9,10,11,12,14,15,17,18,20,21,23,25,27,29,31,33,35,37,40,42,44,47,49,52,54,57,59,62,65,67,70,73,76,79,82,85,88,90,93,97,100,103,106,109,112,115,118,121,124],DUTY
HPWM 1,DUTY,12750
RETURN

END
TA1USS

EFESU

kardeş biraz  teknik ve teorik  hatalar var
adım adım gidelim ..
1:şebeke 50 hz değilmi  o zaman 20 ms dolayısı ile 10msaniye negatif pals 10ms pozitif pals
2.lokup tablosunda kaç adet sayı var diyelim 64  olsun  20/64 bölüp   timer  kurup bölüm sonucu  çıkan
sayı timer interupta gitmeli yani lokuup 20 msaniye içinde bitirmeli

bu sayfayı  mutlaka  incele
http://www.powere.dynamictopway.com/i12.htm
bende  uğraştım son aşmaya geldim sayılır
şu an  vatani görevdeyim bitince bitiririm büyük ihtimalle



certy

#21
Alıntı yapılan: EFESU - 04 Nisan 2015, 13:06:50
kardeş biraz  teknik ve teorik  hatalar var
adım adım gidelim ..
1:şebeke 50 hz değilmi  o zaman 20 ms dolayısı ile 10msaniye negatif pals 10ms pozitif pals
2.lokup tablosunda kaç adet sayı var diyelim 64  olsun  20/64 bölüp   timer  kurup bölüm sonucu  çıkan
sayı timer interupta gitmeli yani lokuup 20 msaniye içinde bitirmeli

bu sayfayı  mutlaka  incele
http://www.powere.dynamictopway.com/i12.htm
bende  uğraştım son aşmaya geldim sayılır
şu an  vatani görevdeyim bitince bitiririm büyük ihtimalle

Teorik hata yok. Şöyle ki Lookup tablonun 1 tur dönmesiyle 50 Hz için 1 saykıl oluşmuş oluyor. Lookup tablo 255 değerli ve her 78 uS'de bir değer çektiğim için 255*78 den 19890 uS oluyor ki bu da zaten 20 mS'ye denk geliyor. Yani mantıken 50 Hz almam lazım ama olmuyor. Aradaki 78 uS'yi kaldırsam bile 50 Hz'ye çıkamıyorum. Pic yetişemiyor bu şekilde.

Kesme ile nasıl yaptığını açıklarsan sevinirim.
TA1USS