PID ile optokuplör üzerinden triyak tetikleme

Başlatan mehmetsahan42, 04 Mayıs 2015, 15:43:20

mehmetsahan42

Merhaba arkadaslar.PID den gelen 4-20mA bilgiyi voltaja cevirip bu voltaj bilgisine göre optokuplör üzerinden triyak tetiklemesi yapmam gerekiyor.Devreyi yaptım ama kodlarda sorun var galiba anlayan arkadaslar bakabılır mı?
#include <16F877A.h>
#device adc=10
#FUSES NOWDT //No Watch Dog Timer
#FUSES LP //Low power osc < 200 khz
#FUSES NOPUT //No Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for
I/O
#FUSES NOCPD //No EE protection
#use delay(clock=4000000)
long int T=2000;
long int AN1;
#int_EXT
void EXT_isr(void)
{
delay_us(T);//Triyak tetikleme için bekleme süresi
output_high(PIN_C3);//Triac tetikleme sinyali
delay_us(100);
output_low(PIN_C3);
}
void main()
{
setup_adc_ports(ALL_ANALOG);
setup_adc(ADC_CLOCK_DIV_32);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
set_adc_channel(0);
delay_us(20);
output_high(PIN_C2);
delay_ms(1000);
output_low(PIN_C2);
delay_ms(1000);
while(TRUE){
AN1=read_adc(); //analog değer okunuyor (10 bit, 0-5 V 0-1023 olarak okunuyor.
T=9*AN1; //Bekleme süresi(tetikleme açısı) ayarlanıyor- 0-9000 mikrosaniye arası
T=T+2;
if (T>7000){
T=2000;
}
enable_interrupts(INT_EXT);
ext_int_edge(0,L_TO_H);
enable_interrupts(GLOBAL); }
}

elektronart

Griac dediğine göre AC ile çalışıyor olmalısın. Koduna telefondan bakıyorum ve gördüğüm kadarıyla while dan sonra main kapanmamış. Devreni de koysaydın konuşması daha rahat olurdu. 0 geçişini nasıl algıladığın önemli. Bazı devrelerde geçiş sürekli yön değiştirirken bazılarında sürekli çıkış veya iniş tetiklemeli. Bu durumda harici interruptı ayarladığın yer ve yöntem değişir. Sabitse whiledan önce olmalı. Değişkense inturruptın içinde sürekli değişmeli. Bir de tetikleme süresi 100us uzun olabilir. Benim kullandığım opto triac ile 1-2us de tetiklemiyordu.
Açık Elektronik

mehmetsahan42

Yön değiştirmelerde tetikleme yapıyor sıfır devresi.Programın dedıgınız yerlerını düzeltmiştim daha önce suan burda da düzelttim tekrar bakabilirsiniz.Devrenin fotografını da yukluyorum.

elektronart

kod düzelmiş gibi görünmüyor. Interrupt yön değişimini göremedim ve interrupt ilkleme yine whileın içinde
Açık Elektronik

mehmetsahan42

Hocam dediğinizi tam anlayamadım şimdi sıfır devresi + dan - ye, -den + ya geçişlerde tetikleme yapıyor.Şimdi benim en alttaki 3 satırı while ın dısına mı cıkarmam lazım.Birde tetikleme süresi demişinizde orada ne düzeltmesi yapayım?