MikroC kullanarak gecikme açısı verme

Başlatan sinbeipta, 22 Mart 2016, 19:07:25

sinbeipta

Merhaba arkadaşlar

Ben zerocross devresinden aldığım sinyalin, pic16f877a ya yazdığım kod ile sıfır geçişlerini bulup sonra da ADC yaparak Potansiyometre yardımı ile gecikme vermek istiyorum ve böylece 2 scr 3 diyot modülü (vhf36-16ı05) tetikleyerek DC motorun hızını kontrol etmek istiyorum. Projemi proteus ta sorunsuz bir şekilde çalıştırıyorum. yani şöyle açıklayayım, Zero cross dan aldığım sinyali pic16f877a ya okutup pot yardımı ile gecikme verebiliyorum, ayrı bir devrede de BT151 tetikliyorum. 2scr 2 diyot kurduğum devreyi de tetikliyorum.
Fakat bu devrelerden mikroişlemci kullanıp gecikme verdiğim devreyi breadrboarda kurduğumda osiloskopta hiçbir sinyal göremiyorum, aynı zamanda bt151 tetiklediğim devrede de SCR belli bir süre iletimde gözüküp yarım dalga doğrulturken belli bir süre sonra da sinyal gözükmüyor yani bir süre sonra kendi kendine kesime gidiyormuş gibi oluyor. Bunun nedenini kullandığımız yük olarak düşünüyoruz. Bu devrede yük beyaz led ve 1k direnç kullanmıştık bu sonucu elde etmiştik. Aynı devreyi akkor lamba kullanarak tekrar deneyip sağlıklı sonuç alacağımızı umuyoruz fakat yazılım kısmında, yani pic16f877a da ki sorunumuzun neden kaynaklandığını anlayamadık.
Bu konu hakkında tavsiye verip yardımcı olabilecek birileri var mı acaba ? Yazılımda mı devrede mi ? nerde sıkıntımız var yardımcı olabilir misiniz ? Teşekkürler

Yazdığımız kod
long int veri=0;float voltaj=0,gerilim=0;unsigned char FlagReg;sbit ZC at FlagReg.B0;void interrupt(){if (INTCON.INTF){ //kesme oluşması için INTCON.INTF bayrağı kaldırdıZC = 1;INTCON.INTF = 0if (ZC){ //zero crossing oluştu Vdelay_ms(gerilim); // gerilim değerine göre gecikme zamanıPORTD.f0 = 1;delay_us(100); //100us pulse göndersin POZİTİF ALTERNANSDAKİ SCR Yİ TETİKLEMEK İÇİNPORTD.f0 = 0;delay_us(9000); //iki scrnin tetiklenme sürelerinin farkıPORTD.f1 = 1;delay_us(100); //100us pulse göndersin NEGATİF ALTERNANSDAKİ SCR Yİ TETİKLEMEK İÇİNPORTD.f1 = 0;ZC = 0;}}}void main() {TRISA= 0b00000100;   // potansiyometre girişiTRISD = 0b11111100; // RD0 ve RD1 is outputTRISB = 0x01; //RB0 giriş yapıldıOPTION_REG.INTEDG = 1; //yükselen  kenarda tetiklemeINTCON.INTF = 0; // INT bayrağını silINTCON.INTE = 1; //Rb0 KESMESİNE MÜSADE ETINTCON.GIE = 1; //BÜTÜN KESMELERE MÜSADE ET   adcon0=0b10010000// kanal2(AN2)seçildi.   adcon1=0b10000010; // 5 analog,3 dijital uç olacak şekilde ayarlandı do{        veri=ADC_Read(2); //Kanal 2 seçildiğinde ADC_Read(2) olur.        voltaj=(0.004887586*veri);        gerilim=11*voltaj; // Gerilim bölücüyle 11 kat gerilimi küçültük.Yazılımla 11 kat büyütüyoruz.  }while(1);}


Çalışmalarımız

https://www.dropbox.com/sh/iuh6xm7afg6x2xw/AADAUlCPbDqratMXl1N8yUfVa?dl=0

Powered by EzPortal