• Sonuç bulunamadı

Bulanık mantık her türlü kontrol sisteminde rahatlıkla kullanılabilir. Uygulanacak sistemin kolay ya da zor olmasına bakılmaksızın kullanılabilecek bir metottur. Özellikle sistem modeli çıkarılamayan, kontrol açısından belirsizliklerin çok olduğu, giriş değişkenlerinin fazla olduğu kontrol uygulamalarında klasik kontrol algoritmalarının yerine tercih edilmesi gerekir. Bu tercih tasarımcının daha dengeli, kararlı bir kontrol sistemini klasik metotlara kıyasla çok daha kısa zamanda gerçekleştirmesini sağlayacaktır.

Çoklu kompresör sisteminin bulanık mantık kontrolcüsüne ait giriş değişkenlerinin üyelik fonksiyonlarının tanım aralıkları daraldıkça sistemin cevap verme tepkimesi hızlanmaktadır. Tasarımı yapılan sisteme göre üyelik fonksiyonları iyi tanımlanmalıdır. Aksi takdirde verimsiz, düşük performanslı bir kontrol sistemi oluşabilir. Bu gibi ayar zorlukları, klasik PID algoritması ayar zorluğuyla kıyaslanınca dikkate alınmayacak kadar küçüktür.

Yukarıda anlatılan proje uygulaması CCS C versiyon 3.221’ de sorunsuz olarak çalıştırılmıştır. Versiyon 3.245 ‘ de derlemesi yapılan aynı program küçük hatalar vermiştir. Bu hatalar da klasik C programcılarının rahatlıkla üstesinden gelebileceği düzeydedir.

Bu proje kapsamında bir adet bulanık mantık kontrolcüsü kullanılmıştır. Aynı proje ve mikrokontroller içinde birden fazla bulanık kontrolcü oluşturmak mümkündür. Örneğin bir mikrokontroller için üç adet bulanık mantık kontrolcüsü olsun istersek; üç ayrı projeyi FuzzyTECH paket programında hazırlamamız gerekir. Bu hazırlanan projelerin üretilen C kodları da CCS C paket programı altında yukarıda belirtilen esaslar dikkate alınarak rahatlıkla birleştirilebilir.

KAYNAKLAR

Atacak, İ. (1998) Genel amaçlı bir bulanık mantık kontrolcüsünün tasarımı, Yüksek Lisans Tezi , Gazi Üniversitesi Fen Bilimleri Enstitüsü, Ankara, 58s.

Baba, F. (1995) Triga-II reaktörü için fuzzy kontrol tasarımı ve simülasyonu, Doktora Tezi, İTÜ Fen Bilimleri Enstitüsü, İstanbul, 125s.

Doğueri, A. K. (1996) Bulanık Mantık ve Bulanık Denetleyiciler. Otomasyon Dergisi, 44: 106-108.

Gerişkovan, A. (1996) PID, Fuzzy ve PID-Fuzzy Kontrol Algoritmalarına Genel Bir Bakış. Otomasyon Dergisi, 48: 122-126.

Günal, Ü. (1997a) Bulanık Mantık. Otomasyon Dergisi, 56: 170-173. Günal, Ü. (1997b) Bulanık Mantık. Otomasyon Dergisi, 55: 50-55.

Kaynak, M. (1992) Süreç Denetimde Bulanık Mantık. Otomasyon Dergisi, 2: 78-82. Kıray, V. (1997) Oda içi sıcaklık ve hava kalitesinin mikrodenetleyici ve bulanık

mantıkla kontrolü, Yüksek Lisans Tezi, Gazi Üniversitesi Fen Bilimleri Enstitüsü, Ankara, 80s.

Klir. G.J. and Yuan, B. (1995) Fuzzy Sets and Fuzzy Logic Theory and Applications,

Prentice Hall PTR, New York, 592s.

Lembesis, E. and Tanscheit, R. (1993) Rule-base size-reduction techniques in a learning fuzzy controller, Fift IFSA World Congress, Seoul, s. 761-764.

Takagi, T. And Sugeno, M.(1985) Fuzzy Identification of Systems and Its Applications to Modelling and Control, IEEE Transactions on Systems Man and Cybernetics, 15(1): 116-132

Turksen, I.B. and Jiang, S. (1993) Rule Base Reorganization and Search with a Fuzzy Cluster Analysis, International Journal of Approximate Reasoning, 9(3): 167- 196.

Yager, R. R. and Zadeh L. A. (1992), Fuzzy Logic Controllers, An Introduction to Fuzzy Logic Applications In Intelligent Systems, Kluwer Academic Publisher, Boston, s69-89.

Yüksel, İ. (1997) Gelişkin Denetim Algoritmaları, Otomatik Kontrol Sistem Dinamiği ve Denetim Sistemleri, Uludağ Üniversitesi Matbaası, Bursa, s314-316.

WEB_1, FuzzyTECH, http://www.fuzzytech.com/ , 20.04.2006

WEB_2, PIC 8/16-bit Microcontrollers, http://www.microchip.com/stellent/idcplg? IdcService=SS_ GET_PAGE&nodeId=1335&dDocName=en010241, 02.06.2006 WEB_3, http://ww1.microchip.com/downloads/en/DeviceDoc/30292c.pdf , 02.06.2006 WEB_4, CCS, Inc., http://www.ccsinfo.com/content.php?page=compilers, 25.03.2006

EKLER Ek-1

Hata giriş değişkeni dilsel tanım aralığı

İvme giriş değişkeni dilsel tanım aralığı

Ek-2

Kural tablosu

IF THEN

hata ivme DoS power

negative negative 0.20 negative

negative zero 0.50 negative

negative positive 0.80 very_negative

zero negative 0.20 positive

zero zero 1.00 zero

zero positive 0.20 negative

positive negative 0.80 very_positive

positive zero 0.50 positive

Ek-3

/* proje.c */

/*---*/

/*--- fuzzyTECH 5.54 MCU-MP Edition ---*/

/*--- License Number: FT TR 00002 01 HS ---*/

/*---*/

/*--- Code Generator: C Source Code ---*/

/*--- Code Generation Date: Tue Jun 13 14:05:00 2006 ---*/

/*--- Fuzzy Logic System: PROJE ---*/

/*---*/

/*--- (c) 1991-2003 INFORM GmbH, Pascalstr. 23, D-52076 Aachen ---*/

/*--- Inform Software Corp., 2001 Midwest Rd., Oak Brook, IL 60523 ---*/

/*---*/ #define FTLIBC16 #include "ftlibc.h" #define FUZZYDEFINED #define FLAGSDEFINED #include "PROJE.h" static FUZZY crispio[2+1];

extern FUZZY * const pcvproje= crispio; static FUZZY fuzvals[6+5+0];

//FUZZY * const pcvproje = crispio; static FUZZY tpts[24] = { 0x0000, 0x0000, 0x000F, 0x008D, 0x000F, 0x0082, 0x03FF, 0x0082, 0x0464, 0x0091, 0xFFFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x00A0, 0x0000, 0x0080, 0x03FF, 0x0080, 0x0486, 0x00A0, 0xFFFF, 0x0000}; static FUZZY xcom[5] = {

0x0000, 0x0055, 0x026A, 0x0390, 0x03FF}; static BYTE rt0[45] = { 0x01, 0x01, 0x03, 0x1A, 0x07, 0x01, 0x01, 0x04, 0x40, 0x07, 0x01, 0x01, 0x05, 0x66, 0x06, 0x01, 0x01, 0x03, 0x1A, 0x09, 0x01, 0x01, 0x04, 0x80, 0x08, 0x01, 0x01, 0x05, 0x1A, 0x07, 0x01, 0x01, 0x03, 0x66, 0x0A, 0x01, 0x01, 0x04, 0x40, 0x09, 0x01, 0x01, 0x05, 0x1A, 0x07}; static FRAT frat0[6] = {

0x000F, 0x0000, 0x000F, 0x0001, 0x000F, 0x0002}; FLAGS proje(void) {

fuzptr = (PFUZZY) fuzvals; tpptr = (PFUZZY) tpts; crisp = crispio[0]; bTNum = 3; flmss(); crisp = crispio[1]; bTNum = 3; flmss();

fuzptr = (PFUZZY) fuzvals; bTNum = 3;

fratptr = (PFRAT) frat0; rtptr = (PFTBYTE) rt0;

iMFMin(); /* Max-Min + FAM */ invalidflags = 0;

fuzptr = &fuzvals[6]; xcomptr = (PFUZZY) xcom; crispio[2] = 0x200; bTNum = 5; defuzz = &crispio[2]; com(); return invalidflags; } void initproje(void) { for (fuzptr = &fuzvals[6]; fuzptr <= &fuzvals[10]; *fuzptr++ = 0);

} /*

|---| | Memory | RAM | ROM | |---|

| Fuzzy Logic System | 28 (001CH) | 117 (0075H) | |---|

| Total | 28 (001CH) | 117 (0075H) | |---| */

/*---proje.h---*/

/*---*/

/*--- typedefs ---*/

/*---*/

#ifndef FUZZYDEFINED /*--- datatype for all computations in the fuzzy logic system ---*/

typedef unsigned short FUZZY; #define FUZZYDEFINED #endif #ifndef FLAGSDEFINED /*--- datatype of return value of fuzzy logic system ---*/

typedef unsigned short FLAGS; #define FLAGSDEFINED #endif /*--- data only used by fuzzyTECH ---*/

extern FUZZY * pcvproje; /*---*/

/*---- use the following #defines to set the inputs of the fuzzy system ---*/

/*---*/

#define hata_proje (*(pcvproje+ 0)) /* 0000H .. 07FEH */ #define ivme_proje (*(pcvproje+ 1)) /* 0000H .. 07FEH */ /*---*/

/*---- use the following #defines to get the outputs of the fuzzy system --*/

/*---*/

#define power_proje (*(pcvproje+ 2)) /* 0000H .. 03FFH */ /*---*/

/*--- function prototypes ---*/

/*---*/

/*--- for starting up the generated fuzzy logic system, call once ---*/

void initproje(void); /*--- for calling the generated fuzzy logic system ---*/

FLAGS proje(void); /* ANA_Program.h */ #include <16F877.h>

#device adc=10

#FUSES NOWDT, HS, NOPUT, NOPROTECT, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG #use delay(clock=20000000) #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8) /* ANA_Program.c */ #include "C:\X\proje_rapor\ANA_Program.h" #include "proje.c" #include "Hf2p.c" #include "Himfmin.c" #include "Hdcom.c" #include "Hdmom.c" #include <math.h> flags x; BYTE bTNum; FUZZY crisp; FLAGS invalidflags; PFRAT fratptr; PFUZZY tpptr; PFUZZY fuzptr; PFUZZY xcomptr; PFUZZY defuzz; PFTBYTE rtptr;

long Hava_ihtiyaci, kompresor_3_rpm,

kompresor_4_rpm,Motor3_4_istenen_RPM,error,acceleration, previ_value; short Motor_1_devrede, Motor_2_devrede;

float kompresor_3_rpm_real,kompresor_4_rpm_real,toplam_devir,istenen_Toplam_Devir,F ARK; void main() { setup_adc_ports(AN0_AN1_AN3); setup_adc(ADC_CLOCK_INTERNAL); setup_psp(PSP_DISABLED); setup_spi(FALSE); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); setup_timer_1(T1_DISABLED); setup_timer_2(T2_DIV_BY_1,255,1); setup_ccp1(CCP_PWM); initproje(); Motor_1_devrede=Motor_1_devrede=0; ///// MAIN BLOK /////// while(true) { ///// SYSTEM CONTROLLER/////// set_adc_channel(0); delay_us(100);

Hava_ihtiyaci=read_adc(); set_adc_channel(1); delay_us(100); kompresor_3_rpm=read_adc(); set_adc_channel(3); delay_us(100); kompresor_4_rpm=read_adc(); kompresor_4_rpm_real=(float)kompresor_4_rpm*(float)2760.0/(float)1023.0; kompresor_3_rpm_real=(float)kompresor_3_rpm*(float)2760.0/(float)1023.0; istenen_Toplam_Devir=(float)Hava_ihtiyaci*(float)11040.0/(float)1023.0; toplam_devir= kompresor_3_rpm_real+kompresor_4_rpm_real;

if ((istenen_Toplam_Devir>3312) && (Motor_1_devrede==0)) {

Motor_1_devrede=1; }

if ((istenen_Toplam_Devir<2500) && (Motor_1_devrede==1)) {

Motor_1_devrede=0; }

if ((istenen_Toplam_Devir>7350) && (Motor_2_devrede==0)) {

Motor_2_devrede=1; }

if ((istenen_Toplam_Devir<6650) && (Motor_2_devrede==1)) {

Motor_2_devrede=0; }

if ((Motor_1_devrede==1) && (Motor_2_devrede==1)) {

FARK=istenen_Toplam_Devir -2760.0-2760.0; }

if (((Motor_1_devrede==1) && (Motor_2_devrede==0)) || ((Motor_1_devrede==0) && (Motor_2_devrede==1)))

{

FARK=istenen_Toplam_Devir -2760.0; }

if ((Motor_1_devrede==0) && (Motor_2_devrede==1)) { FARK=istenen_Toplam_Devir; } Motor3_4_istenen_RPM=(LONG)ceil(FARK); error= Motor3_4_istenen_RPM-(LONG)ceil(toplam_devir)+1023; acceleration=1023+(LONG)ceil(toplam_devir)-previ_value; previ_value=(LONG)ceil(toplam_devir);

///// END of System Block ///// /// Fuzzy Controller ////

hata_proje =error; ivme_proje=acceleration; x=proje();

set_pwm1_duty(power_proje); set_pwm2_duty(power_proje); }

ÖZGEÇMİŞ

Serdar Karadeniz, 1975 yılında Denizli’ nin Tavas ilçesinde doğdu. İlk, orta ve lise eğitimini Tavas’ da tamamladı. 1992 yılında O.D.T.Ü. Elektrik-Elektronik Mühendisliği Bölümüne girdi. 1997 yılında bu bölümden mezun oldu. 1997 yılında Aselsan’ da AR- GE mühendisi olarak çalışmaya başladı. 1998 yılında O.D.T.Ü. Elektrik-Elektronik Mühendisliği Bölümünde yüksek lisans eğitimine başladı. 1999 yılında yüksek lisans eğitimini tamamlamadan askere gitti. 2000 yılında askerlik görevini bitirdi. Aynı yıl Erbakır A.Ş. ‘de çalışmaya başladı. 2003 yılında Pamukkale Üniversitesi Elektrik- Elektronik Mühendisliği Bölümünde yüksek lisans eğitimine başladı. Evli olan Serdar Karadeniz’ in, Şevval ve Şimal adında iki kızı vardır.

Benzer Belgeler