Giới thiệu chương trình NF Control

Một phần của tài liệu Ứng dụng NEUROFUZZY trong điều khiển nhiệt độ thông qua KIT AT89C52LVTN.doc (Trang 152)

4. Chương trình trên máy tính

4.2.Giới thiệu chương trình NF Control

Khi mới bắt đầu, chương trình sẽ hiển thị như sau : Sau khi mở một tập tin và hình dạng các menu :

Trên thanh cơng cụ, ta cĩ thể nhấn các nút như SP cho nhiệt độ đặt, ET cho thiết lập các tập mờ của biến ET, … hay trực tiếp double click lên các biểu tượng tương ứng trên hình, hoặc chọn qua menu. Ví như mở tập mờ ET :

Thay đổi tên của tập mờ bằng cách nhấn Đổi tên.Tiêu đề Thanh menu Thanh cơng cụ

Cĩ thể thay đổi vị trí các tập mở bằng cách nhập trực tiếp vào các khung tương ứng . Hay cĩ thể chọn theo double click vào khung đồ thị để chọn mặc định (sẽ rải đểu trên miền xác định).

Bảng luật :

Đặt giá trị :

Thiết lập cổng nối tiếp :

Hiển thị các thơng số khi điều khiển hay khi mở một đồ thị đã điều khiển từ trước :

Cho phép lưu các thơng số của quá trình hoạt động dùng để hiển thị trên đồ thị hay sau này tối ưu quá trình. Phần mở rộng của tập tin này là gph. Đây là một tập tin cĩ cấu trúc, gồm hai phần :

Phần đầu là văn bản cho thấy tên người tạo và loại (cĩ hai loại). Phần kết tiếp là dữ liệu dạng mã nhị phân.

Tập tin được chia làm hai loại (cùng phần mở rộng) :

4.2.1. Đo nhiệt độ

Phần mở đầu là :

NF Control GraphFile - Copyright (C) by Le Phuoc Thanh. Style : Measure Mode.

Tiếp theo là nhiệt độ đo và duty cycle (mỗi loại 2 byte). MeasureGraph = record

Measure, Duty: SmallInt; end;

4.2.2. Điều khiển nhiệt độ

Phần mở đầu là :

NF Control GraphFile - Copyright (C) by Le Phuoc Thanh. Style : Control Mode.

Tiếp theo là nhiệt độ đặt, nhiệt độ đo, sai lệch nhiệt độ, tốc độ biến thiên nhiệt độ và duty cycle (mỗi loại 2 byte).

ControlGraph = record

SetPoint, Measure, Error, ErrRate, Duty: SmallInt; end;

4.2.3. Tạo tập tin học

Giả sử ta thấy tại một điểm nào đĩ, duty cycle cần cĩ giá trị là 25% trong khi điều khiển là 21,5% chẳng hạn. Ta nhấp nút phải chuột vào điểm đĩ :

Nhập giá trị 25 vào khung DC, NF Control sẽ ghi nhận điều này. sau khi đã thiết lập đầy đủ thì lưu tập tin để sau này chương trình fuzzyTech dùng đến. Tập tin được lưu sẽ cĩ phần mở rộng là exp. Khuơn dạng tập tin này sẽ nĩi trong phần 4.4.2

Cĩ thể cài đặt hay xem mã nguồn của NF Control từ đĩa CD kèm thêm, khơng cĩ mã nguồn trong tài liệu này do rất dài.

4.3. Giới thiệu phần mềm fuzzyTech

Phiên bản hiện cĩ là bản Demo 5.31, khơng cho phép lưu tập tin và tạo ra mã dùng cho vi điều khiển, PLC, C, … do đĩ việc NF Control cho phép lưu tập tin cụng là điều hay : tạo tập tin trên NF Control, vào fuzzyTech mở tập tin đĩ rồi cho học theo mạng Neuron.

Chương trình fuzzyTech cho phép mơ phỏng mờ, học theo NeuroFuzzy, phân cụm theo Cluster. Ngồi ra cịn cĩ thể điều khiển trực tiếp thơng kit theo chuẩn qui định và cĩ thể tạo ra chương trình cho các vi điều khiển, PLC hay chương trình mã C, … . Hơn nữa nếu viết chương trình theo hướng của fuzzyTECH thì cĩ thể tận dụng hai thư viện động là fuzzy Runtime Control (ActiveX) và fuzzy Runtime DLL (NF Control viết chương trình điều khiển riêng cho phù hợp kit AT89C52 đã thiết kế, khơng dùng những thành phần này). Tuy nhiên bản Demo download từ internet khơng cho phép lưu tập tin, tạo mã nên khơng thể dùng bản fuzzyTech này trong điều khiển mà chỉ dùng để học nhằm tối ưu hĩa quá trình tạo bê NF Control.

Dĩ nhiên fuzzyTech là một chương trình mạnh và đa năng hơn NF Control (bởi vì do một cả cơng ty làm ra - Inform Corporation), tuy nhiên nĩ chỉ thực sự mạnh khi mua bản chính thức hay khi crack được chương trình.

Khung làm việc hiển thị theo hai dạng : dạng hình cây và dạng hình khối. Cĩ thể double click trực tiếp trên khối hay trênnhánh của cấy để hiển thị đối tượng tương ứng. (adsbygoogle = window.adsbygoogle || []).push({});

Menu file cho các thao tác về tập tin.

Menu Edit và view cho làm việc trên mội trường fuzzyTech. Menu Debug dùng để mơ phỏng hay điều khiển.

Menu Tool cho phép tạo mã, học bằng NeuroFuzzy hay phân cụm với Cluster. Ngồi ra cĩ thể chọn bản hoạt động (MCU Edition, Professional edition, …). Menu Window cho hiển thị hay tắt cửa sổ hiển thị trên màn hình.

Khi mơ phỏng (nhấn nút hình con rệp trên thanh cơng cụ hay thơng qua menu) thì chương trình cho phép thay đổi giá trị và hiển thị kết quả qua nhiều phương diện như giá trị số, tập mở tác động, luật đang điều khiển, …

Phân tích luật tác động :

Nhấn vào Tool-Neuro-Learning cho thao tác học bằng cách chọn một tập tín dữ liệu học (*.EXP đối với phiên bản 5.31 – NF Control cho phép tạo ra tập tin này).

Đĩ là một số chi tiết về fuzzyTech, cĩ thể cài đặt bản Demo 5.31g từ CD kèm theo.

4.4. Giao tiếp giữa NF Control và fuzzyTech

Việc giao tiếp thể hiện qua hai phương diện : thứ nhất là fuzzyTech cĩ thể đọc tập tin mờ do NF Control tạo ra và ngược lại, NF Control cĩ thể đọc tập tin mờ do fuzzyTech tạo ra nhưng phải đúng tiêu chuẩn :

• Cĩ hai biến ngơn vào bắt buộc phải đặt tên là ET và DET, miền xác định giới hạn từ –400 đến +400.

• Cĩ một biến ngơn ngữ ra bắt buộc phải đặt tên là OUT, miền xàc định từ 0 đến 100 (tương ứng cho duty cycle).

• Mỗi biến ngơn ngữ cĩ tối đa khơng quá 9 tập mờ.

• Tập mờ ra phải cĩ dạng tam giác.

Thứ hai là NF Control tạo ra tập tin học cho fuzzyTech cĩ thể hiểu. Dị nhiên sau khi đã học xong thì lấy các số liệu đã sửa đổi đưa vào NF Control và cho NF Control giao tiếp với kit AT89C52 để hoạt động.

4.4.1. Khuơn dạng tập tin mờ

Tập tin mờ dùng để trao đổi giữa NF Control và fuzzyTech là theo chuẩn do fuzzyTech qui định : cĩ phần mở rộng là ftl (viết tắc của Fuzzy Technology Language). Thực chất của tập tin mờ là một text file mà ta cũng cĩ thể hiểu : PROJECT {

NAME = Oven Control;

AUTHOR = NF Control Software; MODEL {

VARIABLE_SECTION { LVAR {

NAME = ET;

BASEVAR = C_degree;

LVRANGE = MIN(-5.000000), MAX(5.000000), MINDEF(0), MAXDEF(65535),

DEFAULT_OUTPUT(0.000000);

RESOLUTION = XGRID(0.100000), YGRID(0.100000), SHOWGRID (ON), SNAPTOGRID(OFF);

COLOR = RED (255), GREEN (0), BLUE (0); TERM { TERMNAME = ET1; POINTS = (-5.000000, 1.00000), (-4.500000, 1.00000), (-3.000000, 0.00000), (5.000000, 0.00000); SHAPE = LINEAR;

COLOR = RED (255), GREEN (0), BLUE (0); }

TERM { TERMNAME = ET2; POINTS = (-5.000000, 0.00000), (-4.500000, 0.00000), (-3.000000, 1.00000), (-1.500000, 0.00000), (5.000000, 0.00000); SHAPE = LINEAR;

COLOR = RED (0), GREEN (128), BLUE (0); } TERM { TERMNAME = ET3; POINTS = (-5.000000, 0.00000), (-3.000000, 0.00000), (-1.500000, 1.00000), (0.000000, 0.00000), (5.000000, 0.00000); SHAPE = LINEAR;

COLOR = RED (0), GREEN (0), BLUE (255); } TERM { TERMNAME = ET4; POINTS = (-5.000000, 0.00000), (-1.500000, 0.00000), (0.000000, 1.00000), (1.500000, 0.00000), (5.000000, 0.00000); SHAPE = LINEAR;

COLOR = RED (128), GREEN (0), BLUE (0); } TERM { TERMNAME = ET5; POINTS = (-5.000000, 0.00000), (0.000000, 0.00000), (1.500000, 1.00000), (3.000000, 0.00000), (5.000000, 0.00000); SHAPE = LINEAR; (adsbygoogle = window.adsbygoogle || []).push({});

COLOR = RED (0), GREEN (128), BLUE (128); } TERM { TERMNAME = ET6; POINTS = (-5.000000, 0.00000), (1.500000, 0.00000), (3.000000, 1.00000),

(5.000000, 0.00000); SHAPE = LINEAR;

COLOR = RED (0), GREEN (0), BLUE (128); } TERM { TERMNAME = ET7; POINTS = (-5.000000, 0.00000), (3.000000, 0.00000), (4.500000, 1.00000), (5.000000, 1.00000); SHAPE = LINEAR;

COLOR = RED (255), GREEN (0), BLUE (128); }

} /* LVAR */ LVAR {

NAME = DET;

BASEVAR = C_per_T;

LVRANGE = MIN(-1.200000), MAX(1.200000), MINDEF(0), MAXDEF(65535),

DEFAULT_OUTPUT(0.000000);

RESOLUTION = XGRID(0.100000), YGRID(0.100000), SHOWGRID (ON), SNAPTOGRID(OFF);

COLOR = RED (0), GREEN (255), BLUE (0); TERM { TERMNAME = NB; POINTS = (-1.200000, 1.00000), (-0.900000, 1.00000), (-0.600000, 0.00000), (1.200000, 0.00000); SHAPE = LINEAR;

COLOR = RED (255), GREEN (0), BLUE (0); } TERM { TERMNAME = NM; POINTS = (-1.200000, 0.00000), (-0.900000, 0.00000), (-0.600000, 1.00000), (-0.300000, 0.00000), (1.200000, 0.00000); SHAPE = LINEAR;

COLOR = RED (0), GREEN (128), BLUE (0); }

TERM {

TERMNAME = NS;

POINTS = (-1.200000, 0.00000), (-0.600000, 0.00000),

(-0.300000, 1.00000), (0.000000, 0.00000), (1.200000, 0.00000); SHAPE = LINEAR;

COLOR = RED (0), GREEN (0), BLUE (255); } TERM { TERMNAME = ZE; POINTS = (-1.200000, 0.00000), (-0.300000, 0.00000), (0.000000, 1.00000), (0.300000, 0.00000), (1.200000, 0.00000); SHAPE = LINEAR;

COLOR = RED (128), GREEN (0), BLUE (0); } TERM { TERMNAME = PS; POINTS = (-1.200000, 0.00000), (0.000000, 0.00000), (0.300000, 1.00000), (0.600000, 0.00000), (1.200000, 0.00000); SHAPE = LINEAR;

COLOR = RED (0), GREEN (128), BLUE (128); } TERM { TERMNAME = PM; POINTS = (-1.200000, 0.00000), (0.300000, 0.00000), (0.600000, 1.00000), (0.900000, 0.00000), (1.200000, 0.00000); SHAPE = LINEAR;

COLOR = RED (0), GREEN (0), BLUE (128); } TERM { TERMNAME = PB; POINTS = (-1.200000, 0.00000), (0.600000, 0.00000), (0.900000, 1.00000), (1.200000, 1.00000); SHAPE = LINEAR;

COLOR = RED (255), GREEN (0), BLUE (128); }

LVAR {

NAME = OUT;

BASEVAR = Percent;

LVRANGE = MIN(0.000000), MAX(100.000000), MINDEF(0), MAXDEF(65535),

DEFAULT_OUTPUT(0.000000);

RESOLUTION = XGRID(0.100000), YGRID(0.100000), SHOWGRID (ON), SNAPTOGRID(OFF);

COLOR = RED (0), GREEN (0), BLUE (255); TERM { TERMNAME = OUT1; POINTS = (0.000000, 1.00000), (12.500000, 0.00000), (100.000000, 0.00000); SHAPE = LINEAR;

COLOR = RED (255), GREEN (0), BLUE (0); } TERM { TERMNAME = OUT2; POINTS = (0.000000, 0.00000), (12.500000, 1.00000), (25.000000, 0.00000), (100.000000, 0.00000); SHAPE = LINEAR; (adsbygoogle = window.adsbygoogle || []).push({});

COLOR = RED (0), GREEN (128), BLUE (0); } TERM { TERMNAME = OUT3; POINTS = (0.000000, 0.00000), (12.500000, 0.00000), (25.000000, 1.00000), (37.500000, 0.00000), (100.000000, 0.00000); SHAPE = LINEAR;

COLOR = RED (0), GREEN (0), BLUE (255); } TERM { TERMNAME = OUT4; POINTS = (0.000000, 0.00000), (25.000000, 0.00000), (37.500000, 1.00000), (50.000000, 0.00000), (100.000000, 0.00000); SHAPE = LINEAR;

COLOR = RED (128), GREEN (0), BLUE (0); }

TERM { TERMNAME = OUT5; POINTS = (0.000000, 0.00000), (37.500000, 0.00000), (50.000000, 1.00000), (62.500000, 0.00000), (100.000000, 0.00000); SHAPE = LINEAR;

COLOR = RED (0), GREEN (128), BLUE (128); } TERM { TERMNAME = OUT6; POINTS = (0.000000, 0.00000), (50.000000, 0.00000), (62.500000, 1.00000), (75.000000, 0.00000), (100.000000, 0.00000); SHAPE = LINEAR;

COLOR = RED (0), GREEN (0), BLUE (128); } TERM { TERMNAME = OUT7; POINTS = (0.000000, 0.00000), (62.500000, 0.00000), (75.000000, 1.00000), (87.500000, 0.00000), (100.000000, 0.00000); SHAPE = LINEAR;

COLOR = RED (255), GREEN (0), BLUE (128); } TERM { TERMNAME = OUT8; POINTS = (0.000000, 0.00000), (75.000000, 0.00000), (87.500000, 1.00000), (100.000000, 0.00000); SHAPE = LINEAR;

COLOR = RED (255), GREEN (0), BLUE (255); } TERM { TERMNAME = OUT9; POINTS = (0.000000, 0.00000), (87.500000, 0.00000), (100.000000, 1.00000); SHAPE = LINEAR;

} } /* LVAR */ } /* VARIABLE_SECTION */ OBJECT_SECTION { INTERFACE { INPUT = (ET, CMBF); POS = -217, -5; RANGECHECK = ON; } INTERFACE { INPUT = (DET, CMBF); POS = -217, -155; RANGECHECK = ON; } INTERFACE {

OUTPUT = (OUT, COM); POS = 80, -83;

RANGECHECK = ON; }

RULEBLOCK { NAME = Rule; INPUT = ET, DET; OUTPUT = OUT;

AGGREGATION = (MIN_MAX, PAR (0.000000)); COMPOSITION = (GAMMA, PAR (0.000000)); RESULT_AGGR = MAX;

POS = -77, -111; RULES {

IF ET = ET1 AND DET = NB

THEN OUT = OUT1 WITH 1.000000 : OPEN (0.00, 1.00); IF ET = ET1

AND DET = NM

THEN OUT = OUT1 WITH 1.000000 : OPEN (0.00, 1.00); IF ET = ET1

AND DET = NS

THEN OUT = OUT1 WITH 1.000000 : OPEN (0.00, 1.00); IF ET = ET1

AND DET = ZE

THEN OUT = OUT1 WITH 1.000000 : OPEN (0.00, 1.00); IF ET = ET1

AND DET = PS

THEN OUT = OUT1 WITH 1.000000 : OPEN (0.00, 1.00); IF ET = ET1

THEN OUT = OUT1 WITH 1.000000 : OPEN (0.00, 1.00); IF ET = ET1

AND DET = PB

THEN OUT = OUT1 WITH 1.000000 : OPEN (0.00, 1.00); IF ET = ET2

AND DET = NB

THEN OUT = OUT2 WITH 1.000000 : OPEN (0.00, 1.00); IF ET = ET2

AND DET = NM (adsbygoogle = window.adsbygoogle || []).push({});

THEN OUT = OUT2 WITH 1.000000 : OPEN (0.00, 1.00); IF ET = ET2

AND DET = NS

THEN OUT = OUT2 WITH 1.000000 : OPEN (0.00, 1.00); IF ET = ET2

AND DET = ZE

THEN OUT = OUT2 WITH 1.000000 : OPEN (0.00, 1.00); IF ET = ET2

AND DET = PS

THEN OUT = OUT2 WITH 1.000000 : OPEN (0.00, 1.00); IF ET = ET2

AND DET = PM

THEN OUT = OUT2 WITH 1.000000 : OPEN (0.00, 1.00); IF ET = ET2

AND DET = PB

THEN OUT = OUT2 WITH 1.000000 : OPEN (0.00, 1.00); IF ET = ET3

AND DET = NB

THEN OUT = OUT1 WITH 1.000000 : OPEN (0.00, 1.00); IF ET = ET3

AND DET = NM

THEN OUT = OUT2 WITH 1.000000 : OPEN (0.00, 1.00); IF ET = ET3

AND DET = NS

THEN OUT = OUT3 WITH 1.000000 : OPEN (0.00, 1.00); IF ET = ET3

AND DET = ZE

THEN OUT = OUT4 WITH 1.000000 : OPEN (0.00, 1.00); IF ET = ET3

AND DET = PS

THEN OUT = OUT5 WITH 1.000000 : OPEN (0.00, 1.00); IF ET = ET3

AND DET = PM

THEN OUT = OUT6 WITH 1.000000 : OPEN (0.00, 1.00); IF ET = ET3

IF ET = ET4 AND DET = NB

THEN OUT = OUT2 WITH 1.000000 : OPEN (0.00, 1.00); IF ET = ET4

AND DET = NM

THEN OUT = OUT3 WITH 1.000000 : OPEN (0.00, 1.00); IF ET = ET4

AND DET = NS

THEN OUT = OUT4 WITH 1.000000 : OPEN (0.00, 1.00); IF ET = ET4

AND DET = ZE (adsbygoogle = window.adsbygoogle || []).push({});

THEN OUT = OUT5 WITH 1.000000 : OPEN (0.00, 1.00); IF ET = ET4

AND DET = PS

THEN OUT = OUT6 WITH 1.000000 : OPEN (0.00, 1.00); IF ET = ET4

AND DET = PM

THEN OUT = OUT7 WITH 1.000000 : OPEN (0.00, 1.00); IF ET = ET4

AND DET = PB

THEN OUT = OUT8 WITH 1.000000 : OPEN (0.00, 1.00); IF ET = ET5

AND DET = NB

THEN OUT = OUT3 WITH 1.000000 : OPEN (0.00, 1.00); IF ET = ET5

AND DET = NM

THEN OUT = OUT4 WITH 1.000000 : OPEN (0.00, 1.00); IF ET = ET5

AND DET = NS

THEN OUT = OUT5 WITH 1.000000 : OPEN (0.00, 1.00); IF ET = ET5

AND DET = ZE

THEN OUT = OUT6 WITH 1.000000 : OPEN (0.00, 1.00); IF ET = ET5

AND DET = PS

THEN OUT = OUT7 WITH 1.000000 : OPEN (0.00, 1.00); IF ET = ET5

AND DET = PM

THEN OUT = OUT8 WITH 1.000000 : OPEN (0.00, 1.00); IF ET = ET5

AND DET = PM

THEN OUT = OUT9 WITH 1.000000 : OPEN (0.00, 1.00); IF ET = ET6

AND DET = NB

THEN OUT = OUT8 WITH 1.000000 : OPEN (0.00, 1.00); IF ET = ET6

AND DET = NM

THEN OUT = OUT8 WITH 1.000000 : OPEN (0.00, 1.00); IF ET = ET6

AND DET = NS

THEN OUT = OUT8 WITH 1.000000 : OPEN (0.00, 1.00); IF ET = ET6

AND DET = ZE

THEN OUT = OUT8 WITH 1.000000 : OPEN (0.00, 1.00); IF ET = ET6

AND DET = PS (adsbygoogle = window.adsbygoogle || []).push({});

THEN OUT = OUT8 WITH 1.000000 : OPEN (0.00, 1.00); IF ET = ET6

AND DET = PM

THEN OUT = OUT8 WITH 1.000000 : OPEN (0.00, 1.00); IF ET = ET6

AND DET = PB

THEN OUT = OUT8 WITH 1.000000 : OPEN (0.00, 1.00); IF ET = ET7

AND DET = NB

THEN OUT = OUT9 WITH 1.000000 : OPEN (0.00, 1.00); IF ET = ET7

AND DET = NM

THEN OUT = OUT9 WITH 1.000000 : OPEN (0.00, 1.00); IF ET = ET7

AND DET = NS

THEN OUT = OUT9 WITH 1.000000 : OPEN (0.00, 1.00); IF ET = ET7

AND DET = ZE

THEN OUT = OUT9 WITH 1.000000 : OPEN (0.00, 1.00); IF ET = ET7

AND DET = PS

THEN OUT = OUT9 WITH 1.000000 : OPEN (0.00, 1.00); IF ET = ET7

AND DET = PM

THEN OUT = OUT9 WITH 1.000000 : OPEN (0.00, 1.00); IF ET = ET7

AND DET = PB

THEN OUT = OUT9 WITH 1.000000 : OPEN (0.00, 1.00); } /* RULES */

}

} /* OBJECT_SECTION */ } /* MODEL */

} /* PROJECT */

Tập tin được mở đầu bằng PROJECT{ và kết thúc bởi }. Tất cả nội dung nằm trong khối này (giống như begin và end bên Pascal hay Delphi).

Đầu tiên là sơ lược về tập tin như tên, tác giả, … . Kế đến là phần khai báo biến sử dụng và loại của nĩ (vào hay ra) cùng với luật trong khối MODEL{}.

Bên trong khối MODEL, mỗi biến khai báo trong khối VARIABLE_SECTION \ LVAR bao gồm tên, đơn vị, miền xác định. Mỗi tập mờ được khai báo trong khối TERM (là con của khối LVAR) bao gồm tên tập mờ, vị trí, hình dạng. Khối OBJECT_SECTION dùng để hiển thị đồ hoạ trên màn hình.

Khối RULEBLOCK cho thấy các luật dùng trong project. Chú thích được ghi trong cặp /* và */.

4.4.2. Khuơn dạng tập tin học

Cĩ phần mở rộng là EXP, cũng là một text file theo chuẩn do fuzzyTech qui định :

;Training Data Set - Created by NF Control Software.

ET DET OUT (adsbygoogle = window.adsbygoogle || []).push({});

;--- Sample1 1.0 0.2 71.0

Sample2 -0.1 0.6 69.0 Sample3 -0.3 0.4 65.0 Phần chú thích ghi sau dấu ;

(Lưu ý phiên bản mới là fuzzyTech 5.4 dùng theo chuẩn tách bằng dấu phẩy của Microsoft Excel dưới dạng tập tin *.csv chứ khơng phải bằng khoảng trống như hiện tại).

1 1 Đ

ĐIỀU KHIỂN THỰC TẾIỀU KHIỂN THỰC TẾ

Sau khi đã thiết kế và tối ưu, ta cho điều khiển theo hàm nấc ở các nhiệt độ khác nhau và sau đĩ điều khiển tổng hợp nhiều loại nhiệt độ .

Lị cho phép nhiệt độ tối đa là 250°C nên ở đây chia làm nhiều cấp điều khiển từ 100°C đến 250°C.

Kết quả đạt được khá tốt khi điều khiển theo hàm nấc. Do chỉ dùng hai tập mờ nên kết quả cho thấy sự phụ thuộc khá rõ vào giá trị nhiệt độ đặt. Tuy nhiên, đa số đều vọt lố nhỏ 10% hoặc khơng vọt lố, sai số xác lập nhỏ hơn 1°C.

Một phần của tài liệu Ứng dụng NEUROFUZZY trong điều khiển nhiệt độ thông qua KIT AT89C52LVTN.doc (Trang 152)