katı yakıt kontrol kartı projesi+16f877a

Başlatan aygun78, 30 Aralık 2016, 15:52:11

aygun78

Merhabalar.
Babamın kullandığı kömür kazanı kartı arıza yapınca kartı kendim yapmaya karar verdim.
Daha tam bitmedi ama naçizane fikirlerinizi almak ve yaşadığım sorunun çözümünde yol göstermek amacıyla ekledim.
Menüleri daha oluşturmadım. Değişkenler farazidir.
Yazılım kısmında biraz sıkıntılar var. Sıkıntı derken bana göre sıkıntı. Şimdi olayı kısaca anlatmak gerekirse
3 tane motor (kömür redüktör motoru ,devir daim pompası, fan motoru) bunları rölelerle kontrol ediyorum. İlerde olurda kömür
redüktör motoruna kömür sıkışırsa, bunu nasıl tespit edip röleyi kapatabiliriz?
fan motor dönüş hızını manuel dimmer ile çözmeyi düşünüyorum.
Bunu yazılımsal olarak yapabilir miyiz?
yazılım ve proteus  dosyaları ekte yazılım konusunda şunu şöyle yapsak daha iyi olur dediğiniz noktaları belirtirseniz çok sevinirim.

aygun78

#include <kalarifer1.h>
#fuses XT,WDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay(clock=4000000)
#define use_portb_lcd TRUE
#include <internal_eeprom.c>
#include <lcd.c>
#include "1wire.c"
#include "ds1820.c"
#define menu PIN_A0
#define YUKARI  PIN_A1
#define ASAGI  PIN_a2
#define uyku  PIN_a3
#define komur_role  PIN_d4
#define fan_role  PIN_d5
#define devir_role PIN_d6

int8 sn=0,dkk=0,bekleme2=1,bekleme=0,besleme=7,durum=0,saat=0,komur_ver=1,uyku_mod=1,uyku_say=0;
float set_isi,isi_has,restemp;
void main()
{
set_tris_a(0b11111111);
set_tris_b(0b00000000);
set_tris_d(0b00000000);
set_tris_e(0b00000000);
output_d(0b00000000);
output_e(0b00000000);
lcd_init();
setup_wdt(WDT_2304MS);      //~kilitlenmeye karşı 2,3 s reset
restemp = ds1820_read();
delay_ms(1000);
   while(TRUE)
   { sn++; // saniyeyi arttır.
   if (sn>9) {dkk++;   sn=0;} //dakikayı arttır
   if (dkk>9){saat++;dkk=0;} //dakika 59 ise saati arttır. 
      set_isi=29.00;
      isi_has=2.00;
   restemp = ds1820_read();
   LCD_gotoxy(1,1);
   printf(lcd_putc,"%02d:%02d:%02d %d %d",saat,dkk,sn,bekleme, uyku_say );//1 satıra yaz
  LCD_gotoxy(1,2);
  printf(lcd_putc,"%d/%d/%d %f",uyku_mod,komur_ver,durum,restemp);   
       
if(input(uyku)&&uyku_mod==1&& uyku_say==0)//uyku modundan çıkar
      { while(input(uyku)); uyku_mod=0;
      durum=1;
      LCD_gotoxy(1,1);
      printf(lcd_putc,"\f UYUYOR" );
     // restart_wdt(); //1 sa
           DELAY_MS(100);           
          }
if( restemp>=(set_isi-10 )) 
{
OUTPUT_HIGH(devir_role);
}
else
{
OUTPUT_low(devir_role);
  }
if(input(uyku)&& uyku_mod==0&&uyku_say==0)
      {
        while(input(uyku));
      uyku_mod=1;
     
      LCD_gotoxy(1,1);
   printf(lcd_putc,"\f UYANIYOR" ); 
  // restart_wdt(); //1 satıra yaz
      DELAY_MS(100);
      }//uyku moduna al             
     if (  restemp>= set_isi)
    {    komur_ver=0;//Kömür vermeyi kes
         OUTPUT_low(komur_role);
         OUTPUT_low(fan_role);
       // durum=0;
    }
    if ( restemp<(set_isi-isi_has))   
    {komur_ver=1;}       
    if(( uyku_mod==1)&&(komur_ver==1)&&(durum==0)&&(dkk==bekleme))// beklemeyse ve dkk beklemeye eşitse   
      {
       durum=1 ;//kömür alınıyor //durumu 1 çek         
      OUTPUT_HIGH(fan_role);
      OUTPUT_HIGH(komur_role);// kömür almayı aç
            }   

   if(( uyku_mod==1)&&(komur_ver==1)&&(durum==1)&&(sn>besleme))//kömür alma açık ve besleme zamanı saniyeye eşitse
     {OUTPUT_low(komur_role); //komur almayı kapat
     durum=0;}// durumu sıfıra çek
if (dkk==bekleme) { bekleme=bekleme+bekleme2;}//beklemeyi her şartta arttır.
if (bekleme>=10)  {bekleme=bekleme % 10;}// bekleme 60 geçerse mod al
 
  if ((uyku_mod==0 )&& (durum==1))
  {
    OUTPUT_HIGH(komur_role);//uyumadan röleyi aç
   uyku_say++;
  if( uyku_say>5 )//ayarlanan süre kadar kömür ver
    {uyku_say=0;//sayacı sıfırla
     OUTPUT_low(komur_role);// röleyi kapat
     OUTPUT_low(fan_role);
     durum=0;//kömür verme sayacını sıfırla
  }
  }
     
      restart_wdt();     
      delay_ms(1000);
   }

}

POWER

#2
fikir vermesi açısından,bu işle uğraşan bir firma için yaptığım dosyayı ekliyorum.proje ticari olduğu için açık kodunu veremiyorum.


aygun78

Teşekkürler Power arkadaşım. Sistem benim yapmaya çalıştığım ile aynı. Ticari olduğu için kodları paylaşmamanı anlıyorum. Menu benimkinde de olucak .Daha önceki kuluçka makinasında kullanmış olduğum menüyü kullanmayı düşünüyorum. Hafta sonu köyde Kazanı inceleme fırsatım oldu. Kazanda 2 tane NTC sensör kullanılmış. Biri kazanda kazanın ısısını ölçüyor. Biride kömür besleme borusunun üzerine konulmuş. Kömür bittiğini anlamak ve ya kömür besleme borusundaki ateşin varlığını anlamak için kullanılmış. Kömür Besleme redüktör motorunda akım koruma konulmuş. Aşırı akım çekince atıyor. Röle arınca picden gelen  kabloyu tamamlıyor sanırım. Ve pic kömür sıkıştığını anlayıp hataya düşüyor...röleler moc3022 ile sürülmüş. Ve fan 5 kademeli hız ayarlı. Devir daim sürekli çalışıyor.

Şimdi sorunlardan birini( redüktör motorunun sıkışması ) bu şekilde çözdüm.

2.sorun fan hız kontrolü bunu moc3022 ve bta16 ile yapılabilir mi ?


POWER

yapılabilir diye düşünüyorum.bir sonraki versiyonda fan devrini ayarlı yapacaktık o şekilde istemişlerdi.fakat başka bir problemden dolayı o iş kaldı ve ben o işe hiç kafa yormadım.

Elzemefe

#5
fan  hız kontrolü  için TCA785 ile devre yapılıp 0-10v kontrolü kullanılarak yapılabilinir
0-10 Volt LM358 kullanışlı oluyor
CCP1  HPWM  Çıkışı lm358 girişine  uygulanıyor
Benim sık kullandığım bir  metod

Powered by EzPortal