3. Chương trình trên kit AT89C52
3.3 Phân bố tài nguyên
Trong quá trình thiết kế, ta phải qui định chức năng của mỗi vùng nhớ, timer, số byte cho biến và vị trí của nĩ, …
3.3.1. Timer cĩ tất cả 3 timer trên AT89C52 được qui định chức năng như sau Timer0 dùng cho tắt lị theo Duty Cycle và tạo chu kỳ xử lý. Chia khoảng thời
gian xử lý ra 1000 lần và lấy kết quả đĩ làm thời gian ngắt của timer.
Ví dụ : giả sử thời gian lấy mẫu và xử lý là 3 giây thì timer0 sẽ ngắt mỗi 3ms.
Qui định biến Thousand gồm 2 byte chứa giá trị đếm cho thời gian lấy mẫu và xử lý. Bắt đầu với Thousand = 1000, mỗi lần timer0 ngắt thì giảm Thousand đi 1, đến khi Thousand = 0 thì báo hiệu đã đến thời gian lấy mẫu bằng cách bật cờ ProcessFlag, và khởi tạo lại Thousand = 1000.
Ta cũng qui định biến DC_Current gồm 2 byte chứa giá trị cho Duty Cycle. Khi chương trình xử lý xong thì lưu kết quả giải mờ vào biến này, mỗi lần timer0 ngắt thì giảm DC_Current đi 1, đến khi DC_Current = 0 thì đã đủ thời gian tương ứng nên tắt lị.
Giải thuật cho chương trình phục vụ ngắt timer0 :
Timer1 dùng để tạo Baudrate cho truyền thơng nối tiếp, chi tiết về cách tạo đã nĩi
trong phần thiết kế kit AT89C52. Ở đây dùng Baudrate = 9600 nên :
MOV SCON,#11010000B ;UART 9-BIT, ENABLE REN
MOV TMOD,#21H ;TIMER1 8-BIT AUTORELOAD, TIMER0 16-BIT
Bắt đầu Tắt lị Kết thúc DC_Current = 0 ? Dec(DC_Current) Thousand = 0 ? ProcessFlag = 1 Thousand = 1000 Dec(Thousand) Đúng Đúng Sai Sai
MOV TH1,#(-3) ;9600 BAUD
MOV TL1,TH1
SETB TR1 ;START
Trong truyền thơng nối tiếp, ta sử dụng phương thức truyền 1 bit start, 8 bit dữ liệu, 1 bit parity chẳn, và 1 bit stop. Như vậy, ngồi bit start và stop thì ta phải truyền 9 bit nên thiết lập chế độ truyền trên AT89C52 ở mode 3 (SM1 = 1, SM0 = 0).
Timer2 dùng cho quét led theo khoảng thời gian cố định là 2,5ms.
Nếu đang hoạt động thì sẽ hiển thị giá trị nhiệt độ đo trên 4 led thấp và giá trị Duty Cycle trên 3 led cao. Ngược lại sẽ hiển thị một số từ như wait, …
Bắt đầu
Đọc nhiệt độ Chuyển thành số BCD Lưu vào vùng đệm 4 LED thấp
Đang hoạt động ?
Pointer = Led6 ? Pointer = Led5Hiển thị Led6
Đọc Duty Cycle Chuyển thành số BCD Lưu vào vùng đệm 3 LED cao
Đúng Đúng Sai Pointer = Led5 ? 1 Sai Sai Hiển thị Led5 Pointer = Led4 Đúng 2
3.3.2. RAM on-chip
Vùng RAM on-chip cĩ dung lượng là 256 byte chia làm hai vùng nhỏ : vùng thấp từ 00H – 7FH và vùng cao từ 80H – FFH.
Vùng thấp chứa biến và cờ dùng trong tính tốn hay thiết lập trạng thái. Nếu là
biến 2 byte thì byte cao sẽ ở địa chỉ nhỏ hơn byte thấp. 00H
07H
Bank 0
(R0 ÷ R7) Các thanh ghi tiện dụng cho tính tốn.
08H
0FH Led Buffer Vùng đệm chứa dữ liệu cần xuất ra led.
10H
2FH Flags Vùng các cờ trạng thái do người lập trình định nghĩa.
30H
7FH Variable Vùng các biến do người lập trình định nghĩa.
Vùng cao được gán cho stack, địa chỉ 80H bắt đầu vùng stack. 3.4. RAM ngoại
Chương trình xử lý mờ (dùng giải thuật ở phần 1.3) cần các dữ liệu như vị trí các tập mờ, luật, độ hỗ trợ, … nên ta dùng vùng RAM ngoại từ địa chỉ 0000H đến 1FFFH để lưu trữ dữ liệu cho xử lý mờ.
Đầu vào các tập mờ đầu vào được đặc trưng bởi các điểm đặc biệt : dạng chữ S và
Z cần 2 điểm, dạng tam giác cần 3 điểm, dạng hình thang cần 4 điểm.
Để cho tổng quát, ta lấy số điểm lớn nhất làm số điểm chung thì mỗi tập mờ (bất kể hình dạng) cần 8 byte (4 điểm, mỗi điểm là giá trị 2 byte). Ngồi ra ta cần thêm một
Kết thúc
Pointer = Led4 ? Đúng Pointer = Led3Hiển thị Led4
Pointer = Led1 ? 1 Sai Hiển thị Led1 Pointer = Led0 Đúng 2 Hiển thị Led0 Pointer = Led6 Sai
byte để chỉ hình dạng của tập mờ nên tổng số byte dành cho một tập mờ đầu vào là 9 byte. Chiều tăng địa chỉ vùng nhớ Hình dạng 1 byte (High) Điểm 1 (Low) 2 byte (High) Điểm 2 (Low) 2 byte (High) Điểm 3 (Low) 2 byte (High) Điểm 4 (Low) 2 byte Hình dạng tập mờ và vị trí các điểm :
Trong trường hợp số điểm ít, như dạng chữ S chỉ cĩ điểm 1 và điểm 2 thì điểm 3 và điểm 4 sẽ khơng được xét tới.
Đầu ra các tập mờ đầu ra dùng dạng singleton nên chỉ cần 1 điểm (mang giá trị 2
byte) định vị trí của nĩ. Chiều tăng địa chỉ vùng nhớ (High) Điểm (Low) 2 byte
Luật mờ luật cho ở dạng :
Ri : If ET = Ai And DET = Bj Then OUT = Cm With DoSn
⇒ cần 4 byte cho một luật : 1 byte chỉ tập mờ Ai của ET, một byte chỉ tập mờ Bj
của DET, một byte chỉ tập mờ Cm của OUT và một byte cho DoSn. Điểm 1 Điểm 3 Điểm 2 Hình dạng = 0 Điểm 1 Điểm 2 Hình dạng = 1 Điểm 1 Điểm 2 Điểm 3 Điểm 4 Điểm 1 Điểm 2 Hình dạng = 2 Hình dạng = 3
Chiều tăng địa A i 1 byte Bj 1 byte Cm 1 byte DoSn 1 byte
Tổng hợp do vùng nhớ cĩ giới hạn cũng như khơng cần thiết phải thiết kế nhiều
tập mờ trên một biến ngơn ngữ nên chương trình hạn chế số tập mờ cho mỗi biến là 9 ⇒ tổng số luật cĩ thể cĩ là 9x9x9 = 729 luật. 0000H 005AH A1 . . . A9 9 tập x 9 byte = 81 byte 005BH 00A1H B1 . . . B9 9 tập x 9 byte = 81 byte 00A2H 00AAH C1 . . . C9 9 tập x 2 byte = 18 byte 00ABH . . . R1 . . .
. . . n luật x 4 byte = 4n byte Do khuơn khổ luận văn cĩ giới hạn nên phần trên đây chỉ trình bày các giải thuật, định nghĩa kiểu dữ liệu và phân vùng bộ nhớ. Chương trình cĩ thể tìm thấy trên CD-ROM kèm theo.
4. CHƯƠNG TRÌNH TRÊN MÁY TÍNH
Được viết bằng Delphi5 cho mơi trường Windows 32-bit, NF Control cĩ dung lượng khoảng hơn 1MB cho phép ta làm việc tiện lợi hơn (dĩ nhiên là trong giai đoạn giám sát hay thử nghiệm chứ khi đã thành sản phẩm thì khơng lẽ phải kèm máy tính theo sản phẩm ?. Khi đĩ chỉ một mình kit AT89C52 làm việc độc lập). Cùng một giải thuật xử lý mờ ở phần 1.3 như kit AT89C52 nhưng phần xử lý nhẹ nhàng hơn do khơng phải quan tâm đến việc phân vùng dữ liệu (khơng cần phải sắp biến này nằm ở đâu, lấy mất mấy byte cho nĩ – chỉ đơn giản định nghĩa kiểu dữ liệu cĩ cấu trúc rồi dựa trên đĩ mà hành động), tốc độ xử lý cũng nhanh hơn.
Cĩ thể nhập dữ liệu hoạt động cho kit thơng qua chương trình :
• Nếu thu thập nhiệt độ hay điều khiển bằng kit thì chương trình sẽ chuyển dữ liệu (Duty Cycle nếu lấy đặc tính hàm hở và các tập mờ, luật, nhiệt độ đặt nếu điều khiển).
• Nếu lấy đặc tính hàm hở hay điều khiển bằng máy tính thì chương trình sẽ đọc nhiệt độ, xử lý rồi xuất xung kích tắt hay mở lị.
Ngồi ra chương trình cịn cĩ chức năng đọc hay tạo tập tin mờ theo chuẩn của chương trình FuzzyTech (dùng cho pha học), khả năng tạo ra tập tin dữ liệu học và hiển thị các thơng số hoạt động dưới dạng đồ thị. Nếu trong giai đoạn thử nghiệm, chương trình cho phép nạp tập tin dạng mã máy (*.bin) xuống kit.
4.1. Qui định kiểu dữ liệu
Các tập mờ được đặc trưng bởi các điểm và hình dạng, luật được đặc trưng bởi tâp mờ vào, tập mờ ra, độ hỗ trợ, … tức mỗi thành phần là một kiểu dữ liệu cĩ cấu trúc.
4.1.1. Cấu trúc dữ liệu của tập mờ vào (ET, DET).
Như ta đã biết, mỗi tập mờ bất kể hình dạng được qui định bởi 4 điểm đặc trưng (tuy nhiên tùy theo dạng tập mờ mà cĩ thể bỏ một số điểm phía sau) nên cấu trúc của một tập mờ sẽ là :
Term = record TermName: String; Shape: byte;
PointHeigh: array[1..4] of byte; PointBase: array[1..4] of SmallInt; end;
Trong đĩ, Termname là tên của tập mờ, chỉ cần thiết khi hiển thị và khi trao đổi tập tin với chương trình fuzzyTech. Shape chỉ hình dạng tập mờ theo qui định đã nĩi ở phần 3.4. PointHeigh và PointBase tương ứng với vị trí và độ phụ thuộc của điểm đặc trưng (0 hay 1 theo độ phụ thuộc ⇔ 0 hay 100 theo cách xử lý trong chương trình).
Xét trên tồn biến ngơn ngữ thì cho phép tối đa 9 tập mờ mỗi biến nên ta chỉ dùng một mảng 9 tập mờ cho một biến mà thơi :
LVAR = record
MinRange, MaxRange: SmallInt; TermNumber: byte;
TermSet: array[1..9] of Term; end;
[MinRange,MaxRange] là miền xác định của biến ngơn ngữ. Termnumber là số tập mờ cĩ trong biến ngơn ngữ và Termset là mảng các tập mờ đĩ.
4.1.2. Cấu trúc dữ liệu cho tập mờ ra (OUT)
Một tập mờ ra chỉ cần hai điểm đặc trưng bởi vì ta dùng kiểu singleton. Tuy nhiên, do cần phải giao tiếp với chương trình fuzzytech nên cần phải tương thích về các qui định. Trong chương trình fuzzyTech khơng qui định kiểu singleton nhưng tính như singleton khi dùng giải mờ kiểu CoM. Do vậy ta vẫn dùng kiệu cấu trúc dữ liệu cho các tập mờ vào đối với tập mờ ra nhưng phải dùng tập mờ dạng tam giác và lấy vị trí đỉnh của tam giác chính là vị trí của singleton.
Chỉ gồm các ký tự (chuỗi) chỉ tập mờ nào của ET, DET ở phần if, các ký tự (chuỗi) chỉ tập mờ nào của OUT ở phần Then, và thêm giá trị hỗ trợ (cũng dùng ở dạng các ký tự để dễ hiển thị trên màn hình, nhưng khi tính thì phải chuyển sang giá trị số dùng hàm StrToInt chẳng hạn).
Rule = record
ETRule, DETRule, OUTRule, DoS: string; end;
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 :
Tiêu đề Thanh menu
Thanh cơng cụ
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. 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).
Đặt giá trị :
Thiết lập cổng nối tiếp :
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.
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, …).
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).
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);