pic ile triac kontrolu

Başlatan calicadnus, 03 Ağustos 2007, 00:21:30

calicadnus

arkadaşlar benim sorunum pic 877 ile bir opto diac vasıtasıyla bir triacı tetiklemek.
pbp kullanıyorum. komutlar biraz sanırım hantal. 4mhz clock hızında .birtakım işlemler ve ölçümler yaptıktan sonra alternansın sıfır noktasını bulup gerektiiği kadar gecikmeli triacı ateşliyorum. fakat arada sırada pic sıfır noktasını kaçırıyor. bu da dimm yaptığım ışık kaynağında hemen hissediliyor.
acaba pvm çıkışını kullanıp 0-5 volt arası gezdirerek sıfır noktasına bakmadan  direkt 0-180 derece faz kontrolu yapabilir miyiz?saygılarımla.

alayli

Sevgili calicadnus;

O dediğin de mümkün ama, işin içine opamp vs. girer. Devren gereksiz kalabalıklaşır. Pic uygun kodla sıfır geçişleri atlamaz. Kodunu buraya taşırsan yardımcı oluruz. Büyük ihtimal kodda bir yerlerde hata yapıyorsundur. Ki basettğin devre için 16F877 çok fazla. 12F509 ile bile olur o iş...

Saygılar...
Anca kazganmiş itmiş ilimiz törümüz erti. Türk Oguz begleri budun esiding. Üze tengri basmasar, asra yir telinmeser, Türk budun, ilingin törüngin kim artati? (udaci erti)

alayli

Sonradan fark ettim... Mesajında

Alıntı yapılan: "calicadnus"............................................. 4mhz clock hızında .birtakım işlemler ve ölçümler yaptıktan sonra alternansın sıfır noktasını bulup gerektiiği kadar gecikmeli triacı ateşliyorum. ................................................

demişsin. "gerektiiği kadar gecikmeli" derken mesela ne kadar? Eğer bu gecikme + "birtakım işlemler ve ölçümler" 'in yapıldığı sırada geçen zaman 10 ms'den fazlaysa; PIC'in sıfır geçişleri kaçırması kaçınılmaz zaten. Nitekim 50Hz'lik şebekenin her bir periyodu 20ms, doğal olarak her bir sıfır geçiş 10ms'dir. Daha önce de dediğim gibi kodunu paylaşırsan yardımcı oluruz...

Saygılar...
Anca kazganmiş itmiş ilimiz törümüz erti. Türk Oguz begleri budun esiding. Üze tengri basmasar, asra yir telinmeser, Türk budun, ilingin törüngin kim artati? (udaci erti)

calicadnus

loop:
A=1
   if buton_escape=1 then write 1,0:call sett
   adcon0.2 = 1               'Start Conversion
notdone:   

   if ADCON0.2 = 1 Then goto notdone   'wait for low on bit-2 of ADCON0, conversion finished
   adval.highbyte=ADRESH         'move HIGH byte of result to adval
   adval.lowbyte=ADRESL         'move LOW byte of result to adval
   
   birler=adval dig 0
   onlar=adval  dig 1
   yuzler=adval dig 2
   binler=adval dig 3
 

   lcdout $fe,$89,dec binler,DEC YUZLER,DEC ONLAR,".",DEC BIRLER,"C"

'**********************************************PID MODULU BAŞLIYOR*******************************************************************

   IF ADVAL>SET   THEN i=9000:CALL FAZ
   IF ADVAL=SET   THEN i=8700:CALL FAZ
   IF SET-ADVAL>= 1 and  SET-ADVAL<=5   THEN i=7600: CALL FAZ
   IF SET-ADVAL>= 6 and  SET-ADVAL<=10  THEN i=6900: CALL FAZ    
   IF SET-ADVAL>=11 and  SET-ADVAL<=15  THEN i=6200: CALL FAZ
   IF SET-ADVAL>=16 and  SET-ADVAL<=20  THEN i=5500: CALL FAZ  
   IF SET-ADVAL>=21 and  SET-ADVAL<=25  THEN i= 4800:CALL FAZ
   IF SET-ADVAL>=26 and  SET-ADVAL<=30  THEN i=3900: CALL FAZ    
   IF SET-ADVAL>=31 and  SET-ADVAL<=35  THEN i= 3400:CALL FAZ
   IF SET-ADVAL>=36 and  SET-ADVAL<=40  THEN i=2700: CALL FAZ    
   IF SET-ADVAL>=41 and  SET-ADVAL<=45  THEN i= 2000:CALL FAZ
   IF SET-ADVAL>=46 and  SET-ADVAL<=50  THEN i=1300: CALL FAZ    
   IF SET-ADVAL>51 THEN i=600:call faz

'*********************************************PID MODULU SONA ERDİ*******************************************************************

faz:
 
  if dedektor=1 then  pauseus i:diac=1:pauseus 2:diac=0:call faz2
   goto faz
   
faz2:
   A=A+1
  if a=1000 then  goto loop
   call faz    
     
End

a değişkeni 1000 olana kadar sorun yok.
bu bir ısı kontrol cihazı olacak pid kontrollü
set edilen değere yaklaşılınca triac i değişkeni kadar gecikmeli ateşleyecek.
her 1000 seferde bir kere adc den sıcaklık değerini tazelerken o alternansı kaçırıyor. sorun da orada. ben oraya ısıtıcı rezistans bağlayacağım. şu anda test aşamasında olduğu için 100w flamanlı lamba bağladım. bu kırpılma hemen anlaşılıyor.
devre yüksek akım çekeceği için ortamda bu kaçırılan alternans hemen farkedilecek maalesef.
saygılar.

alayli

Alıntı yapılan: "calicadnus"loop:
A=1
   if buton_escape=1 then write 1,0:call sett
   adcon0.2 = 1               'Start Conversion
notdone:   

   if ADCON0.2 = 1 Then goto notdone   'wait for low on bit-2 of ADCON0, conversion finished
   adval.highbyte=ADRESH         'move HIGH byte of result to adval
   adval.lowbyte=ADRESL         'move LOW byte of result to adval
   
   birler=adval dig 0
   onlar=adval  dig 1
   yuzler=adval dig 2
   binler=adval dig 3
 

   lcdout $fe,$89,dec binler,DEC YUZLER,DEC ONLAR,".",DEC BIRLER,"C"

'**********************************************PID MODULU BAŞLIYOR*******************************************************************

   IF ADVAL>SET   THEN i=9000:CALL FAZ
   IF ADVAL=SET   THEN i=8700:CALL FAZ
   IF SET-ADVAL>= 1 and  SET-ADVAL<=5   THEN i=7600: CALL FAZ
   IF SET-ADVAL>= 6 and  SET-ADVAL<=10  THEN i=6900: CALL FAZ    
   IF SET-ADVAL>=11 and  SET-ADVAL<=15  THEN i=6200: CALL FAZ
   IF SET-ADVAL>=16 and  SET-ADVAL<=20  THEN i=5500: CALL FAZ  
   IF SET-ADVAL>=21 and  SET-ADVAL<=25  THEN i= 4800:CALL FAZ
   IF SET-ADVAL>=26 and  SET-ADVAL<=30  THEN i=3900: CALL FAZ    
   IF SET-ADVAL>=31 and  SET-ADVAL<=35  THEN i= 3400:CALL FAZ
   IF SET-ADVAL>=36 and  SET-ADVAL<=40  THEN i=2700: CALL FAZ    
   IF SET-ADVAL>=41 and  SET-ADVAL<=45  THEN i= 2000:CALL FAZ
   IF SET-ADVAL>=46 and  SET-ADVAL<=50  THEN i=1300: CALL FAZ    
   IF SET-ADVAL>51 THEN i=600:call faz

'*********************************************PID MODULU SONA ERDİ*******************************************************************

faz:
 
  if dedektor=1 then  pauseus i:diac=1:pauseus 2:diac=0:call faz2
   goto faz
   
faz2:
   A=A+1
  if a=1000 then  goto loop
   call faz    
     
End

a değişkeni 1000 olana kadar sorun yok.
bu bir ısı kontrol cihazı olacak pid kontrollü
set edilen değere yaklaşılınca triac i değişkeni kadar gecikmeli ateşleyecek.
her 1000 seferde bir kere adc den sıcaklık değerini tazelerken o alternansı kaçırıyor. sorun da orada. ben oraya ısıtıcı rezistans bağlayacağım. şu anda test aşamasında olduğu için 100w flamanlı lamba bağladım. bu kırpılma hemen anlaşılıyor.
devre yüksek akım çekeceği için ortamda bu kaçırılan alternans hemen farkedilecek maalesef.
saygılar.

Sevgili calikadnus;

Ne yapmak istediğini ve sorununu anladım. Bu işi en güzel kesme kullanarak çözersin. Önceki mesajımda bahsettiğim 10 ms olayını zaten programında oluşturmaya çalışmışsın. PID dediğin kısımda (burada kanımca sadece P (proportional-oransal kısım var ve ID integral türevsel kısım göremiyorum ben) Set ettiğin değer ile AD çeviriciden okuduğun değeri işleyip kendine oransal bir gecikme (600Us ile 9000 us; yani .6 ms ile 9 ms arası bir gecikme) tayin etmeye çalışıyorsun. Programından anlayabildiğim kadarıyla (gecenin bu saatinde) zaten A değişkenin 1000 değerini alıncaya kadar program sürekli aynı duty saykıl ile diyakını besliyor ve burda belli bir kısır döngüye girip sadece sıfır geçişleri kontrol ediyor. Ne zaman ki A 1000 değerini alınca yeniden AD okuma ve hesap yapmak üzere loop etiketine dallanıyorsun sorunun başlıyor. Bu kısımdaki işlemler sırasında dedektor olarak tanımladığın pinindeki sıfır geçişleri kaçırıyorsun...

Ama şunu söylemeliyim ki bu sorunu gerek kesme kullanarak aşmayı ve gerekse PIC'den PWM çıkıp sıfır geçişleri dedekte etmeyi analog bir kısma yaptırmayı da denesen PID kontrollü bir ısı kontrol cihazı yapabilmek için hem PIC programlama tekniklerine hem de PID tekniğine baraz daha kafa yorman gerekiyor.

İşe aşağıdaki linkleri inceleyerek başlamanda fayda var...

*Parallax 'ın Proses kontrol tekniklerine yönelik faydalı bir dökümanı, maalesef İngilizce ama bu döküman içinde Basic Stamp ile yapılmış güzel bir PID ısı kontrol örneği kodlarıyla birlikte mevcut...

http://www.parallax.com/dl/docs/prod/sic/Web-PC-v1.0.pdf

*ON-OFF, P, PI, PD, PID kontrol tekniklerini özet açıklayan Türkçe bir pdf...

http://rapidshare.com/files/46820604/PID_ek_genel.pdf

*İlk mesajında istediğin sıfır geçişleri şebekeden bir tafonun uçlarından alan ve şebekeye senkron 50Hz PWM ile diyak tetikleyebileceğin devre şeması ve ISIS dizayn dosyası. Burada köprünün önüne küçük bir trafo bağlarsan şebeke sıfır geçişlerine senkron bir testere dişi dalga üretir ilk opamp, ikinci op-amp bu testeredişi dalga ile 5 nolu bacağındaki DC gerilimi karşılaştırıp 7 nolu bacaktan sana şebekeye senkron bir PWM verir. 7 nolu bacağı uygun bir seri direnç ile MOC3020 vb. gibi bir opto triyak sürücüye bağlaman 5 nolu bacaktaki potu kaldırıp bu bacağa PIC pwm çıkışını uygun şekilde filtre edip girmen yeterli.

Bu proteus dosyasının linki;
http://rapidshare.com/files/46820740/PWM.zip

Bu da şema;



Pazartesiye kadar nette yokum maalesef. Sen yol katedersen yardımcı olmaya çalışırım.

Saygılar...
Anca kazganmiş itmiş ilimiz törümüz erti. Türk Oguz begleri budun esiding. Üze tengri basmasar, asra yir telinmeser, Türk budun, ilingin törüngin kim artati? (udaci erti)

calicadnus

eyvallah bayağı ilgilenmişsin .sağol.
saygılar.

files

pbp dimmer:

dimmer. zip  (PBP) PICBASIC PRO program is used to dim intensity of an AC line load (lamp). Developed for 60 Hz line and based on a 12F675.  Schematic included.  Written by Steve Monfette

http://www.melabs.com/resources/samples/submitted/dimmer.zip

fractal

Alaylı yukardaki rapid linkleri çalışmıyor...bu dosyları nasıl edinebilirim..
Restantum cogniscutur Quantum deligutur

alayli

Alıntı yapılan: "fractal"Alaylı yukardaki rapid linkleri çalışmıyor...bu dosyları nasıl edinebilirim..

Dosyaları 4shared'e kopyaladım. Yeni linkler aşağıda...

PID_Ek_Genel.pdf

Şebeke_Senkron_50Hz_pwm
Anca kazganmiş itmiş ilimiz törümüz erti. Türk Oguz begleri budun esiding. Üze tengri basmasar, asra yir telinmeser, Türk budun, ilingin törüngin kim artati? (udaci erti)

fractal

alaylı teşekkürler.bu sıfır geçiş işini ben transitör ile  yapıyorum. moc 3021 ile triac sürüyorum.ama proteusta ne kadar uğraştıysam kıyılmış sinüs göremedim.proteus 7.5 kullanıyorum.proteusta çalışan böyle bir devre varmıdır?
bu benim devre....
http://www.dosya.tc/triac675.rar.html
Restantum cogniscutur Quantum deligutur