Triyak Diyak ve Pic ile lamba karartma devresi

merhaba basit proğram derken bu uygulamada yavaş karartma veya yavaş açma opto triyak led gırışıne bır potla gırersenız veya yuksek kapasıtelı kondansator takarsanız açılmada yavaç olur kapanmadaistedığınız buysa ama ıstedığım sevıyede otomatık kalsın ıstıyorsanız yazılım la olur bence
 
// #include "D:\I-R-F\12f675 triac kontrol.h"

//--- pic 12f 675-------------------

#fuses XT, NOWDT, NOMCLR, PROTECT, NOBROWNOUT

#include <math.h>
#use delay(clock=4000000)

#define timer 1
int16 adc;
int i=0;

#int_timer0
void zero_crossing()
{
set_timer0(timer);
set_adc_channel(0);
adc=read_adc();

if(input(pin_a1)==0) //sıfır geçiş sinyali
{
i++;
while(input(pin_a1)==0)
{

}

delay_us(adc*35); // 35 değeri ile
// oynayarak başlangıc
// ve bitiş ayarlanabilir



output_high(pin_a2); // triyak'a giden uç
delay_us(5);
output_low(pin_a2);

}
}

void main()
{

setup_adc(ADC_CLOCK_INTERNAL );
setup_adc_ports( AN0_analog);
delay_ms(1);
set_adc_channel(0);


setup_timer_0(RTCC_INTERNAL | RTCC_DIV_1);
set_timer0(timer);

enable_interrupts(INT_TIMER0);
enable_interrupts(GLOBAL);
while(1);


}



// kodu olduğu gibi kopyala yapıştır
// bu kodun benzerini” dimmer” ve”12f 675 triyak kontrol”
// konulu sayfalarda vermiştim.
// kolaygelsin
 
// #include "D:\I-R-F\12f675 triac kontrol.h"

//--- pic 12f 675-------------------

#fuses XT, NOWDT, NOMCLR, PROTECT, NOBROWNOUT

#include <math.h>
#use delay(clock=4000000)

#define timer 1
int16 adc;
int i=0;

#int_timer0
void zero_crossing()
{
set_timer0(timer);
set_adc_channel(0);
adc=read_adc();

if(input(pin_a1)==0) //sıfır geçiş sinyali
{
i++;
while(input(pin_a1)==0)
{

}

delay_us(adc*35); // 35 değeri ile
// oynayarak başlangıc
// ve bitiş ayarlanabilir



output_high(pin_a2); // triyak'a giden uç
delay_us(5);
output_low(pin_a2);

}
}

void main()
{

setup_adc(ADC_CLOCK_INTERNAL );
setup_adc_ports( AN0_analog);
delay_ms(1);
set_adc_channel(0);


setup_timer_0(RTCC_INTERNAL | RTCC_DIV_1);
set_timer0(timer);

enable_interrupts(INT_TIMER0);
enable_interrupts(GLOBAL);
while(1);


}



// kodu olduğu gibi kopyala yapıştır
// bu kodun benzerini” dimmer” ve”12f 675 triyak kontrol”
// konulu sayfalarda vermiştim.
// kolaygelsin

teşekkürler proton ile yazıyorum biraz uğraşayım bakalım çevirebilecekmiyim
 
Program bir yana, ilk mesajınızdaki devre ile sadece aç-kapa yaptırabilirsiniz.Yukarıda da bahsettiğim gibi, sıfır geçişleri algılamadan sinüs istenen değeri yakalayacak şekilde kıyılamaz, ancak tesadüfi değerler sözkonusu olur.

Diyelim ki rms değerini %50 azaltmak istiyorsunuz:

*Mcu önce sıfır geçişi algılayacak
*Yarım period süresince bekleyecek. Yani 50 hz için yarım period 10 ms dersek, bunu yarısı 5 ms
*5 ms dolduğunda triyağı iletime geçirecek
*5 ms dolduğunda triyak kendiliğinden kesime gidecek
*Bu arada işlemci yeni sıfır geçiş algılamış olduğundan, yine 5 ms beklemeye başlayacak
*Aynı anahtarlama alternansın diğer yönünde tekrarlanacak.

Bunu sürekli yapınca da çıkışta rms %50'ye inecek

Farklı yüzdeler için de işlemcinin sıfır geçiş algıladıktan sonraki bekleme sürelerini ayarlayacaksınız.
yukarıda bahsettiğiniz işlemi PLL devresi kurarak yapmak mümkünmü?
 
Olabilir, şebeke frekansını referans sinyali olarak alır, pll ile bunun katlarını elde eder, çıkış frekansını da birtakım lojik işlemlerden geçirirseniz triyak çıkışını belli bir çözünürlükte on-off yapabilirsiniz ama yukarıda tarif ettiğim gibi daha basit yolları var.

Peki mcu olmadan nasıl yapılır? Bize öyle bir devre lazım ki, sıfır geçiş sinyali ile resetlenecek, pot vs. ile ayarlı süre kadar bekleyip çıkış değiştirecek. Yeni sıfır geçiş palsi ile tekrar resetlenip başa dönecek. 555 ile kolayca yapılabilir gibi geliyor
 

Forum istatistikleri

Konular
129,832
Mesajlar
930,569
Kullanıcılar
452,658
Son üye
yılmaz_yılan
Geri
Üst