AC DİMMER

Başlatan harmanx, 13 Kasım 2018, 23:05:19

ete

Önceki programdan bir komut satırı kalmış kesme içinde (toggle GPIO.1) bu yapıyordur mutlaka. Düzlttim aşağıdaki linkten yükle. Denemeler yapıyordum. Yüksekten başlamayı ayarlamıştım. Onuda düzelttim.
Bak bakalım çalışıyormu?

https://1drv.ms/u/s!AvTLMS2z03FNgYMV_SOBTiEH9NiVUg

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

harmanx

#31
deniyeceğim...

harmanx

#32
Ete hocam programı denedim ac giriş portunu sıfıra çektiğim anda çıkış kesiliyor.. tamam
fakat ac girişi low da iken  triyak tetikleme çıkışında  rastgele tetiklemeler oluyor..
ve canlı devrede kesme yaparken  aniden kesmiyor  nerde yakalarsa bazen hızlı bazen gecikmeli kararsız kesiyor..
birde minumum seviyede alt limitte zero cros 20ms de bir tetikliyor

  Alt_limit=80  alt limit 100 ün altına düştüğünde  tetikleme problem oluyor 10ms yerine 20ms oluyor   voltajı sıfıra kadar indirmem 100 altına
düşmesi gerekiyor..
  Ust_limit=230
https://yadi.sk/d/_wa860Lz20NP7g

ete

Bu sıfır geçiş yakalama şemasını hiç beğenmedim. Bana kalırsa sorun şemada. Benim verdiğimi dene opto izolatörlü olan. Sorun olmaması gerek. Benim başka yapabileceğim bir şey yok maalesef.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

ete

Bahsettiğin sorunla ilgili olarak simulasyonu epeyce inceledim.
Gördüğüm kadarı ile şebeke kesilince sistemi başa döndürmek yetmiyor. Zira program sürekli başa gidiyor orada kesmeler yeniden aktive ediliyor ve kesme oluşuncada istenmeyen triac tetiklemesi meydana geliyor. Burada çözüm şebeke kesilince o iki kesmeyide kapatmak ve programı başa göndermeden önce şebekein gelmesini beklemek olacak. Bu şekilde yaparsam sorun kalmıyor gözüküyor. Derleme yapabiliyor isen aşağıdaki programı bir dene. Bu arada programın başına açılış gecikmesi ekledim bu olmadan da sorun çıkıyor.

'Device 12F675
#CONFIG
  __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF & _CP_OFF
#ENDCONFIG
Define OSC 4

;I/O symbols
Symbol Triac_out = GPIO.0 ;triac pin
SYMBOL Test_giris= GPIO.1 ; Şebeke var yok girişi
Symbol Zero_cross = GPIO.2 ;zero-cross algilama pini
Symbol Dim_UP_Button = GPIO.4
Symbol Dim_DOWN_Button = GPIO.5

;interrupt symbols
Symbol GIE = INTCON.7 ; Global Interrupt Enable 1 = enable, 0 = disable
Symbol T0IE = INTCON.5 ;TMR0 Overflow Interrupt Enable bit
Symbol INTE = INTCON.4 ;GP2/INT External Interrupt Enable 1 = enable, 0 = disable
Symbol T0IF = INTCON.2 ;TMR0 Overflow Interrupt Flag bit
Symbol INTF = INTCON.1 ;External Interrupt Flage 1 =
  ;external interrupt occurred (must be cleared in software)

'degiskenler
Load_Value VAR Word 56
I VAR word 58
SURE VAR WORD 60
tus_basili VAR Byte
Alt_limit var byte
Ust_Limit var byte
'***********************************************************************************
 PAUSE 500
On Interrupt GOTO Interrupt_Detect
GoTo BEGIN
'************************************************************************************


'************************************************************************************
BEGIN:
  ANSEL=0
  SURE=0
  CMCON = 7 ;comparator kapali
  'OPTION_REG.7 = 0 ;pull-ups aktif
  OPTION_REG = %01010101 ;presc 1:64 ,External Interrupt Edge to rising edge
  TRISIO = %000111110;1-giris, 0-cikis
  WPU =%00110000
 
  ;interrupt (kesme) tanimlamalari
  T0IF = 0 ;TMR0 overflaw bayragini sil
  INTF = 0 ;External Interrupt bayragini silg
  Alt_limit=110
  Ust_limit=235
  Load_Value = ALt_limit
'  GIE = 0 ' tüm kesmeleri kapat
'  While GIE = 1:GIE = 0:Wend ' kesmelerin kapandigindan emin ol
 
  INTE = 1 ' Enable External Interrupt
  GIE = 1 ' Enable global interrupts

MAIN:
     if Test_Giris=0 then
       INTE=0:T0IE=0
       PAUSE 100
       WHILE TEST_GIRIS=0:WEND
       INTE=1:T0IE=1
       clear
       @  clrf PCLATH
       @  goto 0
   endif


  IF Dim_UP_Button=0 THEN
    WHILE DIM_UP_BUTTON=0 AND LOAD_VALUE<Ust_Limit
      LOAD_VALUE= LOAD_VALUE+1
'      if load_value=181 then load_value=180
      gosub DELAY 'pause 29
    WEND  
  ENDIF
  
    IF Dim_DOWN_Button=0 THEN
    WHILE DIM_DOWN_BUTTON=0 AND LOAD_VALUE>ALt_Limit
      LOAD_VALUE= LOAD_VALUE-1
'      if load_value=109 then load_value=110
      GOSUB DELAY 'pause 29
    WEND  
  ENDIF   
 
 
GoTo MAIN

delay:
      for I=0 to 500:next
      return
        
';bu degerler 50Hz gore ayarlidir
''*********************************************************************************************
DISABLE
Interrupt_Detect:
If INTF = 1 Then
  TMR0 = Load_Value
  T0IE = 1 ' Enable TMR0 overflow interrupt
  INTF = 0 ' Clear INT Flag (be ready for the next)  
EndIf

If T0IF = 1 Then
  High GPIO.0 
  pauseus 100 'triyak tetiklemesi 100 uSn
  Low GPIO.0
  T0IF = 0
EndIf

Resume
ENABLE

Derleme yapamıyorsan ben derleyip koyayım.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

harmanx

#35
ete hocam bende picbasic yok proton var protona çevrip derliyicem siz derlermisiniz hata olmasın
bende derleyip bakıcam.. 
proton bunlara hata veriyor SURE VAR WORD 60 sondaki 60 değerini kapatmam gerekiyor...

harmanx

#36
protonda derledim kesme yapıyor fakat maksimum ayarlanan değere çıktıktan sonra yapıyor  (port sıfırda iken gelen tetiklemeler düzelmiş  ...)

anında kesemiyor... böyle olduğunu kabul edelim sorun şuki ac den opto ile bu girişi
kontrol ediyorum optonun çıkışı ile anahtarlama yapıcam yerdeki sinyal Ac den okuduğu için zero cross sinyali gibi tetiklemeli oluyor velhasıl olması mümkün olmuyor bu işi soft olarak yapmamız gerek düşüncem optodan gelen 10ms niyelik tetikleme bilgileri ile bi sayaç saydırmak sayaç durduğu zaman işlem kesilsimesi... veya daha mantıklı bir yol...

ete

BU sistemin çalışması için AC şebeke girişinin tamamen kesilmesi gerekir.
Pic beslemesi çalışıyor ama AC beslemesi yani sıfır geçiş kısmı çalışmıyor ise sorun çıkıyor. Ama bu son hali simulasyonda kusursuz çalışıyor vede gerçek devrede de çalışması gerekir.
İşte derleme linki ;  https://1drv.ms/u/s!AvTLMS2z03FNgYMaxgV-J-5TFl92yQ

Bu işi soft olarak yapmamız gerek lafınınıda çözemedim bir türlü bu şekilde değilde soft olarak ne yapmak gerek onu anlat istersen.

Bu arada sıfır geçiş kesmelerini Timer-1 ile de zaman vererek denedim. Oda başka sorunlar getiryor. Şunu yaptım. Bizde her bir sıfır kesmesi 10 ms de bir oluyor. Ben maksimum süreyi 20 ms kabul ettim ve 21 ms içinde bir kesme gelmez ise sistemi resetle dedim. Çünki bu AC sinyalin kesilmesi anlamına geliyor. Sistem çalıştı ancak onda da kesmeler hemen sona ermiyor maalesef. Asıl sorun rest sonrası sistemin yeniden kurulup çalışır hale getirilmesi. Bu aşamda sistem kesmeleri aktif ediyor (program baştan başladığında) ve anında bir kesme oluşuyor. Buda yaşadığın sorunları oluşturuyor maalesef. Derleyip verdiğim en sorunsuz ve iyi çalışanı. Onun dışındakiler işe yaramazlar.
Unutma sistem resetlenince yeni baştan herşey aktif hale getiriliyor ve bu esnada yeniden bir iki kesme oluşuyor. Bunu önlemenin yolu şu sistem reset edecek hale geldiğinde hemen resetleme kesmeleri kapat sistem olduğu yerde beklesin ve şebeke yeniden gelidiğinde en baştan başlat. Bu son yolladığım bunu yapıyor onun dıındakilerin bunu yapması zor.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

ete

Kendi sıfır geçiş devrem ile çalıştırdığımda alt limitin 103 ve üst limitinde 243 olduğunu görüyorum. Sen ise alt limit için 80'in altına düşmem gerek diyorsun halbuki simulasyondan bakarsan kesmenin ötesine geçiyor bu değerlerde ve sistem ozaman sapıtıyor. Çalışma alanın iki kesme arasıdır. Bu alanın dığına çıkarsan problemlerin başlar. Kısa yoldan o sıfır geçiş devreni değiştir derim.
Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

harmanx

#39
Ete hocam devreyi denedim similasyonda ve gerçekte çalışıyor fakat similasyonda bakarsanız sürekli
tekrarlıyor... Yani elektriği verdiğimde  çıkış yükseliyor ve kendiliğinden kesiliyor..
herhalde ben yapmak istediğimi analatamadım ...
Gerçek devrede similasyon daki  ac takip butonu yok.... (GPIO.1  GPIO.2 beraber  zero corosa bağlı  optocoupler ile...)
ben butonu similasyona denemek için koydum gerçekte yok 
Devrenin çalışma şekli AC gerilimi hem pic ve triaca verdiğimde yani komle beslemeyi..
Çıkış rampalı olarak yükselecek ayarladığım değere kadar buton ile maksimuma orada kalacak taaaki beslemeyi kesene kadar... tekrar beslemeyi komle kesip verdiğimde aynısını yapacak...


hocam birde ayarlama butonları çalışmıyor   maksimum değeri butonla ayarlamam gerekiyor  açılıp kapandığında
ayarladığım değeri hafızasında tutabilirmi...







     



ete

Ne istediğini ben anlayamıyorum maalesef. Devrenin beslemesini kesersen sistem duruyor. Tekrar gelene kadar bekliyor fazla kesik kalırsa kondansatörde boşalacağı için zaten sistem yeniden başlar. Butonlarda çalışıyor. Kusura bakma fazlası elimden gelmiyor.
Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

harmanx

Ete hocam gönderdiğin dosyayı linkten indirip kontrol edermisin yanlış dosya olmasın...
emekler boşa gidcek yüzdük kuruğuna geldik...

harmanx

Devre enerji deyken up butona basılı tutunca yükselip tekrar sıfıra iniyor buton ile ayar yapılamıyor enson yazdığın kodu silince butonlar çalışıyor..

ete

Program doğru. Senin devrende bir şey var. İlişikte yeniden veriyorum. Yanında benim simulasyon devremle birlikte yolluyorum. Bu devre ile bir dene ve özellikle butonları dene.
Triac sinyalinin iki sıfır noktası arasında (skop da) nasıl ilerlediğine şahit ol.
AC girişi kes ve sinyalin nasıl kesildiğinide gör.
Benim başka yapacak bir şeyim yok maalesef.
Ete

https://1drv.ms/u/s!AvTLMS2z03FNgYMcGczxW1gWkaP5IQ

Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

harmanx

ete hocam denedim kendi simalasyonumda bir değişiklik yok sizin program 8.7 version bende çalışmıyor.. indirim ondad deniceğim..
up butanuna bastığın sürece yükseliyor sona gelince sıfırlıyor butona basmayı bırakınca da sıfırlıyor..
size bendeki simalasyonu ve gönderdiğiniz dosyayı gönderiyorum kontrol edersniz memnun olurum..

https://yadi.sk/d/6LlEqMNqciC4hw