pıc ile ıgbt tetikleme

Başlatan arif14, 14 Mayıs 2013, 20:30:50

arif14

merhaba
pıc ten elde ettiğimiz pwm sinyali ile ıgbt çalıştırmak istiyorum.
devremizin çalışma sistemi şöyle olacak
güçlü bir trafomuz var (5kw) bu trafonun giriş gerilimini 5 kademe olacak şekilde belirlemem lazım bunun için
pıcın girişine bağlı iki adet butonumuz var birinci butona bastığımızda yukarı ikinci butona bastığımda aşağıya 5 kademeli bir pwm çıkışı elde ettik.
Bu pwm sinyali ile ıgbt kontrol ederek trafonun giriş gerilimini değişik voltajlarda verebileceğim ben pıcle olan kısmı halletdim
Benim sorunum pıcle ıgbt yı tetikleme yapamadım
(kullanmam gereken ıgbt mcc 72-12 )

esensoy

mcc 72-12 ıgbt değil tristor moduludur,
ıgbt kullanacaksanız vla500-01 hibrit sürücü kullanışlı olabilir,
bu arada frekans nedir?
En tehlikeli an "zafer" anıdır.

F.T

muhtemelen şebekedir.50 hz.fakat pwm çıkışı ile direk nasıl kontrol olacak.aslında siz sıfır noktasını tesbit edip ateşleme zamanını oynayarak çalışma yapsanız daha iyi olur.ayrıca trafoyu pwm ile tristörü kontrol ederek sürmek zor olacak.neticede tristör tetik aldımı alternans sonuna kadar iletimde kalacak.kurgunuzu farklı yaparsanız daha iyi olur.sıfırı yakalayıp ateşleme zamanını oynayıp tristörü ateşleyip trafoyu kontrol edin.ama bu kontrol şeklide trafo için çok sağlıklı değil.
Hakk şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

arif14

cevaplarınız için teşekkür ederim
konu açmadan önce yaptığım araştırmalarda hep sıfır noktası belirlenmesi zamanın ayarlanması gibi şeyler okudum bunu nasıl yapabilirim bide sizce bu iş daha sağlıklı nasıl olabilir yani trafoya 5 kademede nasıl gerilim uygulayabilirim

ben özel sektörde tekniker olarak çalışmaktayım böyle birşey yapmam istendi.

esensoy

hocam aslında bana yöntem mantıklı geldi, yalnız sıfır geçişleri yakalamak lazım, pwm periyodu sıfır geçişte başlayacak,
alternans sonunda zaten tristör kesime gidecek, bu sefer ters tetik ile diğer tristör ateşlenecek,
ac kıyıcı yapacak yani, çıkışına trafo konunca ne olur birşey diyemiyorum tabi
En tehlikeli an "zafer" anıdır.

frederic

Arkadaş ac kıyıcı yapacak belli, fakat tristörü igbt sanmış. Ayrıca bu tarz yüksek akımlı uygulamalar da, pulse trafosu kullanmak yerin de bir tercih olacaktır. AC kıyıcılar pwm ile değil de faz açısı kontrolü ile tasarlanırlar, pulse trafosu kullanıldığın da ise, tetik için mikroişlemci ile bir darbe treni oluşturulur tek pulse yerine. Tristörün tun-on time zamanı da kesinlikle atlanmamalıdır.

kenan_re

Ben bitane hazırladım arkadaşlar ama tam verimli olmadı. Örnek olarak verebilirim isterseniz !

Mr.Java

Eklerseniz devreyi sorun daha çabuk çözülür.

arif14

yaptığınız çalışmayı verebilirseniz eğer bi örnek yada fikir olabilir

kenan_re

Kodlar bunlar ama yaşadığım sorun düşük voltajlara inememe ve kararlı bir çıkış olmamamsı( örneğin çıkışın 12 olması gerekirken 11- 13 arasında hareket etmesi ? )

#include <pic.h>
#include <htc.h>
#include "lcd.h"
#include <stdio.h>
#include <htc.h>
#include "usart.h"

#ifndef _XTAL_FREQ
#define _XTAL_FREQ 8000000
#endif
__CONFIG(FOSC_XT & WDTE_OFF & PWRTE_OFF & BOREN_OFF & LVP_OFF & CPD_OFF & CP_OFF & CPD_OFF & DEBUG_OFF); 

unsigned int tmr1_value=1,tmr1_an=0;
static bit i=0;

void _yaz(unsigned int pwm0,unsigned char adres){
lcd_goto(adres);//2. satır
lcd_putch((pwm0%100000)/10000+48);					
lcd_putch((pwm0%10000)/1000+48);
lcd_putch((pwm0%1000)/100+48);
lcd_putch((pwm0%100)/10+48);
lcd_putch(pwm0%10+48);
}

void main ()
{
TRISA	= 0x00;
TRISB 	= 0x03; //RB0 kesme için ayarlandığından giriş olarak ayarlandı.
TRISC 	= 0x00;
TRISD	= 0x00;
TRISE 	= 0x07;

PORTA	= 0x00;
PORTB 	= 0x00;
PORTC 	= 0x00;
PORTD 	= 0x00;
PORTE 	= 0x00;
//////////// Genel kesmeler kapatılıyor//////////////////
PEIE	=0x00; // Yardımcı kesme izni veriliyor
GIE		=0x00; // Genel kesme izni veriliyor
///////////////////////////////////////////////
// Kesmeler Ayarlanıyor
TMR1IF	=0x00; // TMR1 kesme bayrağı temizleniyor
TMR1IE	=0x01; // TMR1 kesmesine izin veriliyor
TMR1ON	=0x00; // TMR1 kapalı

TXIF	=0x00;		// usart gönderme kesmesi kapalı(PIR,4 biti)
RCIF	=0x00;		// usart alma kesmesi açık(PIR,5 biti)
TXIE	=0x00;		// usart gönderme kesmesi kapalı(Pie1,4 biti)
RCIE	=0x01;		// usart alma kesmesi açık(Pie1,5 biti)



//RB0 kesme ayarları yapılıyor
RBIF	=0x00; // RB0/INT kesme bayrağı temizleniyor
RBIE	=0x00; // RB0/INT kesme bayrağı temizleniyor
INTEDG	=0x01; // Yükselen kenarda kesme olacak
INTE	=0x01; // RB0/INT izni veriliyor




ADCON1  = 0x06; //analog pinler dijitale çevrildi

//timer1 ayarlanıyor
TMR1	=45535; // TMR1'e değer yükleniyor.(10ms)
TMR1CS=0; 		// Dahili osilatör
T1CKPS1=0; 		// Prescaler 1:1 oluyor
T1CKPS0=0;		// Prescaler 1:1 oluyor
T1SYNC=1; 		// Senkronizasyon yok

//LCD ayarlanıyor
lcd_init();
lcd_clear();
lcd_goto(0); //ayarla; temizle; ilk satıra geç
lcd_puts("TMR1   TMR1V");//ilk değerler yazılıyor

//usart(rs232) ayarları
init_comms();	// usart ayarları yapılıyor usart.h

_yaz(TMR1,0x40);
_yaz(tmr1_value,0x47);

//////////Genel kesmeler başlatılıyor/////////////////
PEIE	=0x01; // Yardımcı kesme izni veriliyor(INTCON,6. biti)
GIE		=0x01; // Genel kesme izni veriliyor(INTCON,7. biti)
//////////////////////////////////////////////////////
while(1){
		if(RE0)
				{
			TMR2ON=0x00; while(RE0); PR2++; TMR2ON=0x01; _yaz(PR2,0x40);
			}
		if(RE1)
			{
			TMR2ON=0x00; while(RE1); CCPR1L++; TMR2ON=0x01;	_yaz(CCPR1L,0x47);
			}


		if(RA0&&(tmr1_value<=8000))
			{
			while(RA0);	tmr1_value = tmr1_value+1; _yaz(tmr1_value,0x47);i=1;
			} 
		if(RA1&&(tmr1_value<=8000))
			{
			while(RA1);	tmr1_value = tmr1_value+10; _yaz(tmr1_value,0x47);i=1;
			} 
		if(RA2&&(tmr1_value<=8000))
			{
			while(RA2);	tmr1_value = tmr1_value+100; _yaz(tmr1_value,0x47);i=1;
			}
		if(RA3&&(tmr1_value<=8000))
			{
			while(RA3); tmr1_value = tmr1_value-10; _yaz(tmr1_value,0x47);i=1;
			}
 
		if(i)_yaz(tmr1_value,0x47);i=0;
		}

}
unsigned int veri;
static void interrupt // Kesme fonksiyonu
isim(void) // Kesme fonksiyon ismi (önemsiz)
{
		if(TMR1IF) // TMR1 kesme olmuş mu
			{	
				TMR1ON	=0; // TMR1 durdu
				
				RD0		=1;
				__delay_us(200);
				RD0		=0;				
				
				TMR1IF	=0; // Tekrar dış kesme alınabilmesi için kesme bayrağı temizleniyor
			}
		if(INTF) // RB0 Dış kesme oluşmuş mu bakılıyor
			{
				TMR1ON	=0; // TMR1 durdu	
						
				TMR1	=((45535)+tmr1_value); // 5 değeri durdurulup başlatana kadarki geçen süre
				TMR1ON	=1; // TMR1 açık
				
				INTF	=0;	// Tekrar dış kesme alınabilmesi için kesme bayrağı temizleniyor
			}

		if(RCIF) // usart Dış kesme oluşmuş mu bakılıyor
			{
				veri = getch();	// veri oku	
				tmr1_value=veri*30;
				putch(veri);
				i=1;
				
				RCIF	=0; // Tekrar dış kesme alınabilmesi için kesme bayrağı temizleniyor			
			}
			



}

kenan_re

PI kontorlü gerekiyor şimdi bunun üzeride çalışmaya başladım