au một thời gian thực hiện đồ án tốt nghiệp với nhiều cố gắng và nổ lực
cùng với sự tận tình hướng dẫn của thầy giáoTh.s Nguyễn Trọng Thắng, quyển
đồ án này đã hoàn thành đúng thời gian qui định theo yêu cầu đặt ra là thiết kế va
phân tích hệ thống điều khiển nhiệt độ cho lò đốt CN dùng họ vi điều khiển MSC-
51,cụ thể là 80C51.
Để thực hiện được yêu cầu trên em đã nghiên cứu, tìm hiểu những vấn đế về
vi điều khiển, vi xử lí, các phương pháp đo nhiệt độ, các phương pháp chuyển đổi
từ tương tự sang số ,các phương tổng hợp hệ thống điều khiển và các vấn đề khác
có liên quan đến đề tài.
Nội dung chính của đề tài này bao gồm những phần chính sau:
*Phần kiến thức.
-Khảo sát bộ vi điều khiển 8051/8031.
-Khảo sát IC giai tiếp ngoại vi 8255A.
70 trang |
Chia sẻ: baoanh98 | Lượt xem: 841 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Đề tài Nghiên cứu và thiết kế hệ thống điều khiển số nhiệt độ, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
trước khi đữ liệu được cất vào Stack.
DPTR (Data Pointer (DPH, DPL)): Con trỏ chứa địa chỉ 16-bit dùng trong
một số lệnh truy nhập bộ nhớ.
P0, P1, P2, P3 (Port Latches): Các bộ chốt cho 4 cổng vào ra tương ứng.
SBUF (Serial Data Buffer): Thanh ghi để đọc và viết cho cổng nối tiếp.
SCON (Serial Port Control): Thanh ghi điều khiển cổng nối tiếp.
TMOD (Timer Mode): Thanh ghi chế độ cho các Timer.
TCON (Timer Control): Thanh ghi điều khiển cho các Timer.
T2CON (8052 Timer 2 Control): Thanh ghi điều khiển cho Timer 2 của
8052.
PCON ( Power Control): Thanh ghi điều khiển nguồn (chỉ sử dụng cho
89C51).
IE (Interrupt Enable): Thanh ghi cho phép ngắt (1=cho phép; 0=không cho
phép).
IP (Interrupt Priority): Thanh ghi ưu tiên các ngắt.
Sv : Lê Thanh Tùng
24
(c). Tổ chức phần cứng Vi điều khiển 8051:
c.1. Tổ chức bộ nhớ (Memory Map):
Từ cấu trúc của vi điều khiển 8051 đã giới thiệu và yêu cầu thiết kế ta tiến
hành phân bổ các vùng nhớ như sau:
- Bộ nhớ chương trình 8K ROM chia làm hai vùng:
ROM trong (On-chip) có địa chỉ vật lý: 0000H 0FFFH.
ROM ngoài (2764) có địa chỉ vật lý: 1000H 2FFFH.
- Bộ nhớ dữ liệu được mở rộng thêm 8K RAM ngoài, với địa chỉ vật lý:
2000H 3FFFH.
- Mạch ghép nối vào/ ra sử dụng IC8255 với địa chỉ của từng cấu hình như
sau:
Địa chỉ cổng PA: 4000H
Địa chỉ cổng PB: 4001H
Địa chỉ cổng PC: 4002H
Địa chỉ của từ điều khiển PSW: 4003H
- Địa chỉ của ADC 0809 8 kênh vào tương tự: 6000H 6007H.
- Địa chỉ của DAC 0808 là :8000H
c.2. Thiết kế bộ nhớ:
Xem xét cấu trúc của 8051 và để tạo khả năng mở rộng phạm vi điều khiển
cho hệ điều khiển nếu có nhu cầu về sau này ta thiết kế thêm vùng bộ nhớ chương
trình dùng thêm 8 KB ROM đặt ở ngoài. VĐK 8051 đã có 128 Byte cho bộ nhớ dữ
liệu tuy nhiên đối với yêu cầu mở rộng cho nhớ dữ liệu đối với các ứng dụng sau
này ta sử dụng thêm 8 KB Ram dữ liệu.
Nguyên tắc phối ghép bộ nhớ với VĐK:
- Nhóm tín hiệu địa chỉ phối ghép với Bus địa chỉ của hệ thống để chọn ra
một ô nhớ cụ thể để đọc/ghi.
- Nhóm tín hiệu dữ liệu được phối ghép với Bus dữ liệu của hệ thống nhằm
thực hiện được việc trao đổi dữ liệu trong hệ thống với bộ nhớ.
- Nhóm tín hiệu chọn vi mạch (Chip Select): được phối ghép với đầu ra của
giải mã địa chỉ để có thể thực hiện được việc chọn ra một vùng nhớ làm việc.
- Nhóm tín hiệu điều khiển: Kết nối với các Bus điều khiển của hệ VXL. Đối
với ROM thì đầu vào điều khiển OE (Output Enable) để cho phép dữ liệu được
đưa ra Bus thì được kết nối với dây tín hiệu RD của VXL. Đối với RAM có hai tín
hiệu điều khiển thì tín hiệu điều khiển ghi WE (Write Enable) được nối với chân
Sv : Lê Thanh Tùng
25
tín hiệu WR của VXL, còn tín hiệu điều hiển đọc OE thì được nối với chân tín hiệu
RD của VXL.
* Bộ nhớ ROM ngoài:
Đối với ROM ngoài ta dùng vi mạch nhớ chỉ đọc loại EPROM 2764.
Đây là bộ nhớ lập trình xoá bằng tia cực tím, nó có tốc độ truy nhập rất nhanh. Với
dung lượng 8K Byte như vậy nó có 13 đường chọn địa chỉ và có 8 đường ra dữ
liệu. EPROM chỉ được hoạt động khi chân OE ở mức tích cực thấp, nó được vi
điều khiển chọn làm việc khi chân CE cũng được tích cực thấp. EPROM được nuôi
với mức điện áp 5V, điện áp này được đưa vào bộ nhớ thông qua chân Vpp. Địa
chỉ của EPROM trong hệ thống là 1000H 2FFFH nên nó được chọn bởi tín hiệu
chọn chip Y0 của giải mã địa chỉ.
Bộ nhớ chương trình ngoài là mộ IC ROM được phép bởi tín hiệu PSen.
Hình sau mô tả cách nối một EPROM vào 8051/8031:
Giao tiếp giữa 8051/8031 và EPROM
Một chu kỳ máy của 8051/8031 có 12 chu kỳ xung nhịp. Nếu bộ dao động
trên chip được lái bởi một thạch anh 12MHz thì chu kỳ máy kéo dài 1 s. Trong
một chu kỳ máy sẽ có 2 xung ALE và 2 byte được đọc từ bộ nhớ chương trình (nếu
lệnh hiện hành là một byte thì byte thứ hai sẽ được loại bỏ). Giản đồ thời gian của
một lần lấy lệnh được vẽ ở hình sau:
Port 0
EA
8051
ALE
Port 2
PSEN
D0-D7
A0-A7
EPROM
A8-A15
OE
D
Q
74HC37
3
G
Sv : Lê Thanh Tùng
26
Giản đồ thời gian đọc bộ nhớ chương trình ngoài.
Truy xuất bộ nhớ dữ liệu ngoài:
Giao tiếp giữa 8051/8031 và RAM
OSC
ALE
PSEN
Port 2
Port 1
PCL Opcode PCL
PCH PCH
P1 P2 P1 P2 P1 P2 P1 P2 P1
S1 S2 S3 S4
S5 S6
P1P2 P2
S1
Moät chu kyø maùy
P1 P2
Port 0
8051
EA
ALE
Port 2
RD
WR
D0-D7
RAM
A0-A7
A8-A15
OE
WE
74HC373
O D
G
Sv : Lê Thanh Tùng
27
Bộ nhớ dữ liệu ngoài là một bộ nhớ RAM được cho phép ghi/đọc bằng các
tín hệu WR và RD (các chân P3.6 và P3.7 thay đổi chức năng). chỉ có một cách
truy xuất bộ nhớ dữ liệu ngoài là với lệnh MOVX dùng con trỏ dữ liệu (DPTR) 16
bit hoặc R0 và R1 xem như thanh ghi địa chỉ.
Kết nối bus địa chỉ và bus dữ liệu giữa RAM và 8051/8031 cũng giống
EPROM và do đó cũng có thể lên đến 64 byte bộ nhớ RAM. Ngoài ra, chân RD
của 8051/8031 được nối tới chân cho phép xuất (OE) của RAM và chân WR được
nối tới chân ghi (WR) của RAM.
Giản đồ thời gian cho lệnh đọc bộ nhớ dữ liệu ngoài được vẽ trên hình sau
đối với lệnh MOVX A, @DPTR:
Giản đồ thời gian của lệnh MOVX
Giản đồ thời gian cho lệnh ghi (MOVX @DPTR, A) cũng tương tự chỉ khác đường
WR sẽ thay vào đường RD và dữ liệu được xuất ra trên port 0 (RD vẫn giữ mức
cao).
2.1.2.2. Vi mạch ADC 0809:
Bộ ADC 0809 là một thiết bị CMOS tích hợp với một bộ chuyển đổi tương
sang số 8 bit, bộ chọn kênh và một bộ logic điều khiển tương thích. Bộ chuyển đổi
tương tự số này sử dụng phương pháp chuyển đổi xấp xỉ. Bộ chọn kênh có thể
chọn ra kênh cần chuyển đổi bằng 3 chân chọn địa chỉ. Thiết bị này loại trừ khả
năng cần thiết điều chỉnh điểm zero bên ngoài và khả năng điều chỉnh tỉ số làm cho
ADC đễ dàng giao tiếp với các bộ vi xử lý.
* Các đặc điểm cơ bản của ADC 0809:
- Nguồn nuôi đơn ± 5 V, hiệu suất cao.
- Dải tín hiệu lối vào tương tự 5V khi nguồn nuôi là +5V. Có thể mở rộng
thang đo bằng các giải pháp kỹ thuật cho từng mạch cụ thể.
S5
DPL
Moät chu kyø maùy
Port 2 PCH
Opcode
S2
RD
S3
PCL
S1 S6
DPH
ALE
PSEN
S1 S2S4 S3 S4 S5 S6
Port 0
DATA
Moät chu kyø maùy
Sv : Lê Thanh Tùng
28
- Dễ dàng giao tiếp với vi xử lý vì đầu ra có bộ đệm 3 trạng thái nên có thể
ghép trực tiếp vào kênh dữ liệu của hệ VXL.
- Tổng sai số chưa chỉnh ±1/2 LSB.
- Thời gian chuyển đổi 100 s .
- Tần số xung clock 10 KHz - 1028 KHz.
- Đảm bảo sai số tuyến tính trong dải nhiệt độ từ 400C 85OC.
(a). Bảng chân lý và sơ đồ chân của vi mạch ADC 0809:
Bảng chân lý:
A B C X
0 0 0 0
0 0 1 1
0 1 0 2
0 1 1 3
1 0 0 4
1 0 1 5
1 1 0 6
1 1 1 7
X X X (?)
Sơ đồ chân của vi mạch ADC 0809
Sv : Lê Thanh Tùng
29
* ý nghĩa các chân:
- Các chân 11 đến 17 ( DB7 - DB1 ) : là các đầu ra số.
- /CS cho phép lựa chọn IC hoạt động.
- /RD chân tác động từ bên ngoài để IC thực hiện quá trình chuyển đổi.
- CLK IN: đầu vào xung Clock.
- Ref(+): điện áp vào chuẩn +5V.
- Ref(-): điện áp vào chuẩn 0.
- Vcc: nguồn cung cấp.
- AGND, DGND: chân nối đất.
- Vref/2: 1/2 điện áp chuẩn
(b). Cấu trúc bên trong của ADC 0809:
Cấu trúc bên trong của ADC 0809 được thể hiện ở hình vẽ dưới:
Hoạt động chuyển đổi:
Quá trình biến đổi được bắt đầu bằng một xung Low ngắn hạn ở lối vào
/WR. Muốn thế điều kiện cần có là một mức Low của tín hiệu /CS. Sau thời gian
biến đổi 100às, lối ra /INTR chuyển sang Low và báo hiệu việc kết thúc quá trình
biến đổi. Sau đó qua một mức Low ở lối vào /RD có thể đọc ra các bit số liệu. Sự
truy nhập để đọc sẽ dẫn đến hậu quả là tín hiệu /INTR sẽ chuyển trở lại mức cao.
Sv : Lê Thanh Tùng
30
Khi mà lối vào /RD được chuyển hẳn sang mức Low, thì lối ra /INTR chuyển sang
Low sau quá trình biến đổi kéo dài 8 chu kì giữ nhịp của bộ giữ nhịp bên trong. Ở
tần số giữ nhịp là 640 KHz, chu kì này là 12.5s.
(c). Ghép ADC 0809 với VĐK 8051:
- Các kênh vào Analog được nối vào các đầu vào tương ứng của ADC. Mỗi
kênh đó có địa chỉ riêng do tổ hợp 3 bit địa chỉ A, B, C quy định. Các đầu vào địa
chỉ này kết nối với đường địa chỉ A0, A1, A2 của Bus địa chỉ của hệ thống. Các
đường địa chỉ cao của hệ thống được dùng để tạo tín hiệu chọn chip (/CS) cho
ADC0809.
- Tín hiệu /CS được đưa tới đầu vào của mạch OR để khởi động ADC (Start)
khi có tín hiệu /WR đồng thời chốt địa chỉ (ALE) của kênh hiện hành có giá trị là
giá trị 3 bit A, B, C. Tín hiệu /CS cũng được đưa tới đầu vào của mạch OR thứ hai
để tạo tín hiệu OE cùng với /RD nhằm chốt dữ liệu đã biến đổi xong ở đầu ra.
- Vì khi biến đổi xong, ACD 0809 dùng tín hiệu ra chân EOC để báo cho
VĐK biết mã nhị phân tương ứng với mức cao của tín hiệu đầu vào đã được tạo ra.
Vì vậy ta kết nối EOC với đầu vào ngắt ngoài /INT1 của 8051.
- 8 bit dữ liệu thường được ghép trực tiếp với Bus dữ liệu hệ thống vì bản
thân bộ đệm ra là 3 trạng thái, cũng có thể ghép qua 8255.
+Tớn hieọu taùo nhũp cho ADC
Tớn hieọu naứy ủửụùc ủửa chaõn CLK cuỷa ADC vaứ ủửụùc taùo bụỷi maùch
sau:
Sv : Lê Thanh Tùng
31
Mạch tạo xung nhịp cho ADC
*Mạch tạo điện áp chuẩn:
Do ADCkhông cần điều chỉnh điểm 0 nên ta dùng mạch tạo điện áp chuẩn
như sau :
Mạch tạo điện áp chuẩn cho ADC
2.1.2.3. Vi mạch DAC 0808:
Đây là vi mạch thực hiện việc chuyển đổi dữ liệu từ số ra tương tự, điện áp
ra được lấy từ một điện áp so sánh xác định. Vi mạch này có độ phân giải là 1/256
giá trị với điện áp ra 10V thì có bước nhảy điện áp là 39,1 mV
Sv : Lê Thanh Tùng
32
U5
DAC0808
12
11
10
9
8
7
6
5
14
15
4
2
16
1
3
3
A8
A7
A6
A5
A4
A3
A2
A1
VR+
VR-
IOUT
IOUT
COMP
V
+
V
-
Sơ đồ chân của DAC 0808
Bộ biến đổi DAC0808
Sv : Lê Thanh Tùng
33
2.1.2.4. Mạch tạo tín hiệu mở thyristor:
Để đảm bảo tín hiệu mở thyristor đồng bộ với điện áp nguồn , ta dùng mạch
đồng pha theo nguyên lý tạo xung tam giác có cùng chu kì vói điện áp nguồn. Sơ
đồ mạch được cho dưới đây:
Mạch tạo xung răng cưa đồng pha với điện áp nguồn
Trong mạch này , điện áp nguồn dược chỉnh lưu về áp 6V,sau đó được cho
phóng nạp qua tụ để tạo xung răng cưa. Điện áp xung răng cưa này tiếp tục được
so sánh với điện áp điều khiển được đưa ra từ bộ điều khiển và tạo thành xung
vuông có bề rộng dùng để mở thyristor.
Để giảm tiêu hao công suất mà đảm bảo mở van tốt,ta dùng chùm xung tạo
ra do mạch timer 555. Toàn bộ phần mạch tạo tín hiệu mở thyristor được cho dưới
đây:
Sv : Lê Thanh Tùng
34
Mạch tạo xung điều khiển
Giản đồ thời gian trong mộtchu kì của điện áp dùng để mở thyristor được
cho trong hình vẽ sau:
Giản đồ thời gian của điện áp điều khiển
Sv : Lê Thanh Tùng
35
Điện áp sau cùng sẽ được đưa tới mạch khuyếch đại công suất gồm hai
tranzitor mắc lặp, đưa qua một biến áp xung rồi đưa đến chân gate của các
thyristor.
2.1.2.5. Các vi mạch phụ trợ khác:
(a). Vi mạch chốt 74LS373:
Đây là mạch có tác dụng chốt lại số liệu ở đầu
vào khi có tín hiệu tích cực, đầu ra sẽ không bị biến đổi
khi tín hiệu đầu vào đã mất. Nó chỉ thay đổi khi tín
hiệu chốt tích cực trở lại. Bên ngoài vỏ cũng có tín
hiệu /OE cho phép hoạt động. Khi có yêu cầu chốt
chân LE sẽ được tích cực.
Trong ghép nối với 8051:
- Chân /OE (số 1) của 74LS373 được nối đất.
- Chân LE(số 11) của 74LS373 được nối với
chân ALE (số 30) của 8051.
(b). Vi mạch MAX 232 ( của hãng Maxim):
Khi thực hiện giao tiếp giữa VĐK với máy tính thì ta cần có vi mạch MAX
232 chuyển đổi.
MAX cho phép đọc vào cũng như đưa ra 8 tín hiệu TTL qua giao diện nối
tiếp của máy tính PC.
Thích ứng với mức tín hiệu ( +12V, -12V ) trên giao diện RS 232.
Vi mạch này nhận mức RS 232 đã được gửi từ máy PC và biến đổi tín hiệu
này thành tín hiệu TTL, để rồi sau đó dẫn đến VĐK. Tín hiệu từ VĐK được biến
đổi thành tín hiệu mức +12V/ -12V và gửi tới máy tính PC.
Vi mạch có khả năng thiết lập tốc độ Baud.
Sơ đồ chân vi mạch MAX 232
Sv : Lê Thanh Tùng
36
MAX 232 được nối với cổng truyền thông nối tiếp của 8051 qua 2 chân:
RxD và TxD. Nhờ đó mà luồng dữ liệu có thể dịch chuyển 2 chiều từ máy tính
xuống vi điều khiển và ngược lại.
Cấu trúc bên trong của MAX 232
Qua cấu trúc bên trong của MAX 232 ta thấy vi mạch này có thể kết nối một
lúc với cả 2 đầu RS 232.
2.2. Phân tích hệ thống điều khiển số
Khi chưa có bộ điều khiển trong hệ thống , sơ đồ khối của hệ thống như sau :
Trong đó Wkđcs là hàm truyền của mạch công suất:
Sv : Lê Thanh Tùng
37
Wkđcs(p) =
1*1
1
pT
K
Trong bài tập này lấy K1=120
T1=0.02 sec
=> Wkđcs(p) =
1*02.0
120
p
Wlò là hàm truyền của lò:
Wlò(p) =
1*2 pT
K lo e
-pt
=
)1*)(1*( 2 ppT
K lo
Với =150 sec
T2= 500 sec
Klo = 4
Trong bài tập này lấy Klo = 4 ; T2= 500 sec
=> Hàm truyền của lò là:
1500
4
p
e
-p.150
Khai triển gần đúng ta được :
Wlo =
)1*500)(1*150(
4
pp
Kf là hàm truyền của mạch phản hồi .
Kf=0.5
Ta thấy rằng hằng số thời gian của mạch khuếch đại công suất rất nhỏ so với hằng
số thời gian của lò nên ta có thể bỏ qua. Như vậy đối tượng điều khiển ở đây gồm
lò và mạch công suất có hàm truyền như sau :
Wđt =
)1*500)(1*150(
4*120
pp
=
)1*500)(1*150(
480
pp
=
1*650**75000
480
ppp
Căn cứ vào khả năng của vi điều khiển và đặc điểm của đối tượng ta có thể chọn
chu kì trích mẫu của hệ thống là 10 giây.
Với chu kì trích mẫu này chuyển sang miền số ta có hàm truyền rời rạc của đối
tượng sử dụng Matlab :
>> Wdtz=c2d(Wdt,10,'ZOH')
Transfer function:
0.3109 z + 0.3021
---------------------
z^2 - 1.916 z + 0.917
Sampling time: 10
Chuyển sang phương trình trạng thái :
Sv : Lê Thanh Tùng
38
)(*3021.03109.0)(
)(*
0
1
)(*
01
917.0916.1
)1(
kxky
kukxkx
2.2.1.Kiểm tra tính điều khiển đƣợc và tính quan sát đƣợc của hệ
thống
Ta đã xác định được phương trình trạng thái của đối tượng điều khiển (công
thức trên ) .Để kiểm tra tính điều khiển được của đốu tượng cần ma trân điều khiển
được :
Pd=[Bd Ad*Bd]=
10
916.11
Có det(Pd)=1 0 suy ra rank(pd) = 2 do đó đối tượng là điều khiển được.
Để kiểm tra tính quan sát được của đối tượng ta cần tính ma trận quan sát của hệ
thống :
Nd= [Cd’ Ad’*Cd’]
2851.03021.0
8977.03109.0
Suy ra : det(Nd) = -0.3598 0
=> Hệ thống là quan sát được.
2.2.2.Xét ổn định của đối tƣợng :
Phần này sẽ xét ổn định của đối tượng , nghĩa là xét ổn định của một hệ
thống hở trong đó không có bộ điều khiển .Công thức (3.1) đã cho biết hàm truyền
đạt rời rạc của đối tượng . Phương trình đặc tính của đối tượng là :
z^2 - 1.916 z + 0.917 = 0
Giải phương trình của phương trình này ta có các điểm cực của dối tượng là :
Z1= 0.98564
Z2= 0.93035
các điểm cực này đều nằm bên trong đường tròn đơn vị nên đối tượng là ổn định ,
tức là hệ thồng ổn định . Ta có đặc tính quá độ của hệ thống như hình vẽ dưới:
Sv : Lê Thanh Tùng
39
2.2.3.Xét ổn định của hệ thống kín khi chƣa có bộ điều khiển
Xét đối tượng trong một hệ thống kín nhưng chưa có bộ điều khiển. Cần xét
ổn định của hệ thống này :
Mô hình của hệ thống:
Sv : Lê Thanh Tùng
40
Hàm truyền rời rạc của đối tượng được cho bởi công thức :
Transfer function:
0.3109 z + 0.3021
---------------------
z^2 - 1.916 z + 0.917
Sampling time: 10
Hàm truyền đạt của hệ thống có hồi tiếp âm là :
Transfer function:
0.3109 z + 0.3021
--------------------
z^2 - 1.76 z + 1.068
Sampling time: 10
Phương trình đặc tính của hệ thống là : z^2 - 1.76 z + 1.068
Giải phương trình trên ta có các điểm cực của hệ thống là :
z1= 0.88 + 0.5418i
z2= 0.88 - 0.5418i
Căn cứ vào Modul của 2 điểm cực ta thấy hệ thống kín không ổn định vì các điểm
cực có Modul lớn hơn 1 .
Đặc tính quá độ của hệ thống là:
Sv : Lê Thanh Tùng
41
2.3. Tổng hợp hệ thống
2.3.1. Tổng hợp hệ thống dùng bộ điều khiển PID:
2.3.1.1. Bộ điều khiển PID và tìm các thông số cho bộ điều khiển PID:
Bộ điều khiển PID (Proportional - Integral - Derivative) là bộ điều khiển
kinh điển, được sử dụng rất nhiều khi tổng hợp hệ thống. Mặc dù hiện nay đã có
các phương pháp tổng hợp hệ thống khác tốt hơn (như phương pháp dùng hồi tiếp
trạng thái sẽ được xét ở phần sau) nhưng bộ điều khiển PID vẫn tiếp tục được sử
dụng rộng rãi. Bộ điều khiển PID gồm ba thành phần: thành phần tỉ lệ (P), thành
phần tích phân (I) và thành phần vi phân (D). Mỗi thành phần có những ảnh hưởng
nhất định đến chất lượng của hệ thống, và việc lựa chọn một bộ tham số phù hợp
cho ba thành phần đó sẽ đem lại cho hệ thống chất lượng mong muốn.
Hàm truyền liên tục của bộ điều khiển PID có thể được viết dưới dạng sau:
WPID(p)= KP+
p
K I + Kdp
Để chuyển từ bộ PID liên tục sang bộ PID số có vài cách khác nhau. Một
phương pháp là chuyển gần đúng từng thành phần của bộ PID từ liên tục sang dạng
rời rạc như sau:
- Thành phần tỉ lệ được giữ nguyên.
- Thành phần tích phân được lấy gần đúng theo Tustin:
)1(2
)1(
z
zTK
p
K II
Sv : Lê Thanh Tùng
42
- Thành phần vi phân được lấy gần đúng: KDp =
zT
zK D
.
)1(2
Với T là chu kì trích mẫu.
Như vậy, hàm truyền rời rạc của bộ PID số là:
)1(
)25.0()5.0(
)1.(..2
)1(2)1.(..)1.(...2
.
)1(
)1(2
)1(
)(
2
22
zz
T
K
z
T
K
TKKz
T
K
TKK
zzT
zKzzTKzzKT
zT
zK
z
zTK
KzW
DD
IP
D
IP
DIP
DI
PPID
Có thể thấy, bộ điều khiển PID số có 2 điểm cực (0 và 1) và tối đa 2 điểm
Zero.
Có nhiều phương pháp khác nhau để tổng hợp hệ thống dùng bộ điều khiển
PID nói chung và bộ điều khiển PID số nói riêng. Tuy nhiên, hiện vẫn chưa có một
phương pháp tổng quát và chính xác nào để tìm được bộ điều khiển PID tốt nhất
cho một hệ thống. Các phương pháp cho đến nay vẫn chỉ cho phép xác định một
cách tương đối các thông số của bộ PID (đáp ứng được phần nào chất lượng mong
muốn). Sau đó, phải tiếp tục thay đổi các thông số (trong một lân cận xung quanh
giá trị tìm được) và “mò” cho đến khi tìm được bộ thông số đáp ứng yêu cầu chất
lượng đã đề ra. Việc dò tìm các thông số cho bộ điều khiển PID phải dựa trên các
nguyên tắc về ảnh hưởng của từng thành phần trong bộ điều khiển PID đến chất
lượng của hệ thống. Một cách chung nhất, có thể tóm tắt các nguyên tắc đó trong
bảng sau:
Rise Time Overshoot Settling Time Steady State
Error
KP Giảm Tăng Thay đổi ít Giảm
KI Giảm Tăng Tăng Triệt tiêu
KD Thay đổi ít Giảm Giảm Thay đổi ít
Lấy một ví dụ, với sai lệch tĩnh (Steady State Error), khi tăng KP sẽ làm giảm
sai lệch tĩnh, tăng KI sẽ có thể triệt tiêu được sai lệch tĩnh, còn KD ít có ảnh hưởng.
Tất nhiên, các nguyên tắc trên không đúng tuyệt đối bởi ba thông số trên có ảnh
hưởng lẫn nhau và sự thay đổi của bất kì một thông số nào cũng có thể gây ảnh
hưởng không nhỏ đến tác dụng của hai thông số còn lại.
Riêng đối với bộ PID số, có hai hướng chính để tổng hợp là:
- Hướng thứ nhất là tổng hợp bộ điều khiển PID liên tục trước, sau đó
chuyển bộ điều khiển tìm được sang miền rời rạc bằng công thức gần đúng đã trình
bày ở trên. Hướng này chỉ áp dụng được khi chu kì lấy mẫu của hệ số nhỏ hơn rất
nhiều lần so với hằng số thời gian nhỏ nhất trong đối tượng.
Sv : Lê Thanh Tùng
43
- Hướng thứ hai là tổng hợp trực tiếp trong miền rời rạc. Phương pháp này
không bị hạn chế về chu kì lấy mẫu như phương pháp trên.
Dễ nhận thấy rằng việc lựa chọn theo hướng thứ hai là phù hợp hơn cả bởi
không có sự phụ thuộc vào thời gian lấy mẫu, đồng thời có thể tính toán trực tiếp
ra bộ PID số mà không cần qua khâu biến đổi ở trên.
2.3.1.2. Chọn thông số cho bộ điều khiển PID:
Có rất nhiều cách để lựa chọn thông số cho bộ PID, giả dụ như ta có thể mò
bằng cách thay đổi các thông số để hệ ổn định, rồi sau đó chỉnh định lại các thông
số để đạt được hệ ổn định với các chỉ tiêu thoả mãn. Tuy nhiên theo cách đó thì
mất nhiều thời gian đồng thời không đem lại hiệu quả cao. Một trong những công
cụ mạnh mà MATLAB đưa ra để giải quyết vấn đề trên là khảo sát tính ổn định
của hệ thống bằng quĩ đạo nghiệm số. Ta có thể xác định ra ngay các thông số (KP,
TI, TD) đảm bảo cho hệ ổn định bằng rltool trong thư viện MATLAB hoặc ta có
thể làm bằng phương pháp sau cũng có hiệu quả không kém :
- Trước tiên ta tìm Kgh của hệ theo mô hình sau:
Việc xác định Kgh đựoc tiến hành trên MATLAB bằng hai hàm rlocus và
rlocfind:
>> Wdt=tf(num,den)
Transfer function:
480
---------------------
75000 s^2 + 650 s + 1
>> Wdtz=c2d(Wdt,10,'ZOH')
Sv : Lê Thanh Tùng
44
Transfer function:
0.3109 z + 0.3021
---------------------
z^2 - 1.916 z + 0.917
Sampling time: 10
>> rlocus(Wdtz)
>> hold on
>> k=rlocfind(Wdtz)
Select a point in the graphics window
selected_point =
0.7814 + 0.2422i
k =
0.1635
Quĩ đạo nghiệm số của đối tượng
Như vậy ta tìm được Kgh=0.1635
-Việc tiếp theo là đặt điểm zezo cho khâu PID để bù điểm cực của đối tượng .
Đã biết đối tượng có hai điểm cực là z1 = 0.98564 và z2 = 0.93035 , do đó ta
Sv : Lê Thanh Tùng
45
chọn luôn hai điểm này làm điểm zezo cho khâu PID . Ta được các thông số
cần tìm thoả mãn 3 phương trình sau:
Kp+0.5Ki+Kđ/T=Kgh=0.1635
Kp-0.5KiT+2Kđ/T=Kgh(z1+z2)= 0.31326
Kđ/T=Kgh . z1z2 = 0.14993
Giải ra ta thu được Kp=0.01355
Ki=0.0000309
Kđ=1,4993
Thay thông số của bộ PID vào mô hình sau:
Sv : Lê Thanh Tùng
46
Thu được kết quả :
Mặc dù hệ ổn định nhưng độ quá điều chỉnh là tương đối lớn , điều này đặc biệt
nguy hại bởi khi đối tượng làm việc gần giới hạn nhiệt độ cho phép sẽ gây ra mất
an toàn cho các thiết bị điều chỉnh cũng như bản thân đối tượng.
Căn cứ vào những tác động của các thông số Kp,Ki,Kđ tới đặc tính quá độ của đối
tượng tiến hành tinh chỉnh lại lại các thông số ta thu được đặc tính quá độ của đối
tượng sau khi chỉnh định lại như sau:
Sv : Lê Thanh Tùng
47
Các chỉ tiêu chất lượng : Độ quá điều chỉnh là 0.06% và thời gian xác lập là 730s .
Như vậy chất lượng của hệ thống là rất tốt!
Sv : Lê Thanh Tùng
48
2.3.2. Tổng hợp hệ thống dùng hồi tiếp trạng thái
Mặc dù bộ điều khiển PID số đã được sử dụng rất rộng rãi và phổ biến nhưng
nó thường có nhiều nhược điểm khó khắc phục như : Việc tổng hợp và thiết kế
phức tạp , mang nặng tính mò mẫm, kém chính xác , chất lượng khó có thể cao ,
chỉ có áp dụng với từng trường hợp cụ thể mà không thể tổng quát hoá , chưa có
một phương pháp tổng quát và chính xác để thiết kế .Hiện nay đã xuất hiện nhiều
phương pháp tổng hợp hệ thốnghiện đại hơn tôt hơn và khắc phục được nhược
điểmkể trên của bộ PID số. Một trong các phương pháp đó là phương pháp tổng
hợp hệ thống dùng hồi tiếp trạng thái . Sử dụng phương pháp nàycó thể áp đặt khá
chính xác các điểm cực cho hệ thống , mà ta đã biết các điểm cực quyết định đến
tính chất , chất lượng hệ thống. Sau đây là phương pháp tổng hợp hệ thống dùng
hồi tiếp trạng thái.
2.3.2.1.Nhắc lại về mô hình đối tượng
Như đã trình bày ở tr ên cho ta phương trình trạng thái của đối tượng :
X(k+1) =
01
917.0916.1
x(k) +
0
1
u(k)
y(k)= 0.3109 0.3021 x(k)
Trong ph ần trên ta cũng đã kiểm tra tính điều khiển được và tính quan sát được
của đối tượng và đã khẳng định : Đối tượng là quan sát được và điều khiển được!
Hai tính chất trên là điều kiện qua trọng để có thể tổng hợp hệ thống dùng hồi tiếp
trạng thái.
2.3.2.2.Các phương pháp tìm bộ hồi tiếp trạng thái
Cho một đối tượng mô tả bởi phương trình trạng thái sau:
X(k+1)=A.x(k)+B.u(k)
Y(k)=C.x(k)
Các điểm cực của đối tượng là nghiệm của phương trình đặc tính :
Det(z.I-A)=0
Giải phương trình đặc tính ta có được các điểm cực của đối tượng : pc1,pc2...pcn
Vị trí của các điểm cực sẽ ảnh hưởng đến chất lượng của hệ thống.Giả sử ta cần
tìm một bộ hồi tiếp trạng thái cho đối tượng trên sao cho hệ thỗng đã hồi tiếp có
các điểm cực mong muốn pc1,pc2...pcn .Mô hình của hệ thống có hồi tiếp trạng thái
được cho bởi hình sau :
Sv : Lê Thanh Tùng
49
Cho đầu vào w=0 ta có :
X(k+1)=A.x(k)+B.u(k)
u(k)=-K.x(k)
x(k+1)=A.x(k)-B.K.x(k)=(A-B.K).x(k)
Như vậy hệ mới sẽ có phương trình đặc tính là : det(z.I-A+B.K)=0 và theo yêu cầu
đã đề ra , phương trình đặc tính này phải có các nghiệm pm1,pm2...pmn .Có một số
cách để xác định K thoả mãn yêu cầu trên như sau:
a). Cách 1
Vì phương trình đặc tính mới det (ZI-A+BK)=0 phải có các nghiệm pmi nên nó
phải có dạng sau :
Det(ZI-A+BK)=(z-pm1)(z-pm2)...(z-pmn)=z
n
+c1z
n-1
+...cn
Trong đó K chỉ là một vector các hệ số : K= K1,K2,...Kn .Khai triển đẳng thức trên
và cân bằng hệ số hai vế ta tìm được K= K1,K2,...Kn .
b.) Cách 2
-Gọi p là ma trận điều khiển được của đối tượng: B, AB,...,An-1B
-Định nghĩa một ma trân w như sau :
w=
00...01
00...1
...............
01...
1...
1
32
121
a
aa
aaa
nn
nn
Trong đó det(ZI-A) =zn+a1z
n-1
+...an
Tính ma trận T=p.w
Tính K theo công thức sau :
K= cn-an,cn-1-an-1,...c1-a1 .T
-1
c.) Cách 3
- Tính (A)=An+c1A
n-1
...cn.I
- Tính K theo công thức :
Sv : Lê Thanh Tùng
50
K= 0,0,...1 B,AB,...,A
n-1
B . (A)
Ba cách trên tuy phương pháp khác nhau nhưng hoàn toàn tương đương và đều
cho các kết quả giống nhau.
d.) Cách 4
- Sử dụng hàm Acker trong thư viện của Matlab, cú pháp dạng
Acker(A,B,p)
Trong đó p là vector cột các điểm cực cần gán ,hàm này sẽ trả về ma trận hàng
hồi tiếp K...
2.3.2.3.Phương pháp chọn điểm cực của Bessel
Khi đã có phương pháp tìmh bộ hồi tiếp trạng thái thì vấn đề còn lại bây giờ
là tìm điểm cực mới của hệ thống thế nào để hệ thống đạt chất lượng như mong
muốn.Bessel đã xác định các điểm cực chuẩn cho các hệ thống (liên tục) bậc k sao
cho với các điểm cực đó hệ thống đạt chất lượng như sau : không có quá điều
chỉnh và thời gian quá độ là T=1s. Bessel đã tổng kết các điểm cực chuẩn đó trong
bảng sau :
Bậc Điểm cực chuẩn
1 -4.6200
2 -4.0530 2.3400i
3 -5.0093, -3.9668 3.7845i
Nếu muốn hệ có quá trình quá độ không có quá hiệu chỉnh và thời gian quá độ là
T bất kỳ thì hệ thống cần có các điểm cực được xác định bằng cách lấy các điểm
cực trong bảng trên chia cho T.
Với hệ thống xung số , để xác định các điểm cực cần thiết, trước hết ta xác địng
các điểm cực trong miền liên tục theo quy tắc trên sau đó chuyển các điểm cực này
sang miền Z theo công thức zk=e
T.pk
.
2.3.2.4. Xây dựng bộ ước lượng trạng thái (Bộ quan sát trạng thái )
Một vấn đề nảy sinh khi ta tổng hợp hệ thống dùng hồi tiếp trạng thái là
trong thực tế hiếm khi có thể đo được trực tiếp các biến trạng thái (x) của đối
tượng . Vậy ta phải làm cách nào để xác định được các biến trạng thái của đối
tượng chỉ dựa trên các đại lượng đo được hoặc biết được (như tín hiệu điều
khiển,đầu ra của đối tượng ...). Xây dựng được một hệ thống như thế chính là xây
dựng được bộ ước lượng trạng thái .Bộ ước lượng trạng thái dựa vào các đại lượng
có thể biết được là đầu vào của đối tượng (chính là tín hiệu điều khiển) và đầu ra
của đối tượng để xác định trạng thái của đối tượng .Chỉ làm được điều này khi đối
tượng là quan sát được ,và ta thấy rõ là đối tượng trong bài tập này thoả mãn điều
kiện đó, do đó có thể xây dựng được bộ ước lượng trạng thái cho đối tượng. Bộ
ước lượng trạng thái cho đối tượng được cho bởi mô hình sau :
Sv : Lê Thanh Tùng
51
Mục đích của bộ ước lượng trạng thái là phải làm sao cho e(k) tiến đến 0.Nhận
thấy hệ phương trình trên có dạng giống với ph ần ta đã trình bầy. Vì vậy ta có thể
áp dụng phương pháp đặt điểm cực để tìm Ke.
Với đối tượng cụ thể ta chọn điểm cực theo Bessel cho hệ bâc hai sao cho thời gian
quá độ là T=500s , suy ra điểm cực cần thiết là:
P1,2=(- 0.0081 0.0047i)
Và trong miền Z thì điểm cực là :
Zp1,2=exp(10p1,2) =0.9211 0.0431i
Suy ra phương trình đặc tính mới là:
Det(zI-A+KeC)=(z-zp1)(z-zp2)=(z-0.9211+0.0431i)(z-0.9211-0.0431i)
=z
2
-1.8422z + 0.8503
Ta lại có:
Det(zI-A+KeC)=det(z.
10
01
-
01
917.0916.1
+
2
1
Ke
Ke
3021.03109.0 )
=det(
23021.023109.01
13021.0917.01.3109.0916.1
KezKe
KeKez
)
=z
2
+(0.3109.Ke1+0.3021Ke2-1.916)z+0.3021Ke1+0.917-0.8639Ke2
Cân bằng hai vế của phương trình đặc tính ta có hệ phương trình sau :
Sv : Lê Thanh Tùng
52
8503.0917.02*8639.01*3021.0
8422.1916.12*3021.01*3109.0
KeKe
KeKe
Giải ra ta có nghiệm :
Ke1= 0.12117
Ke2= 0.11958
Đó chính là dạng tổng quát của Ke áp dụng cho bộ trạng thái.
Ke=
11958.0
12117.0
Để tiện lợi cho việc khảo sát và tổng hợp hệ thống sau này , ta sẽ xây dựng một
khối con trên simulink chứa bộ ước lượng trạng thái và đặt mặt nạ cho nó rồi đưa
vào thư viện. Sơ đồ cấu trúc của bộ ước lượng trạng thái trên simulink như hình vẽ
sau :
2.3.2.5.Tổng hợp hệ thống dùng hồi tiếp trạng thái
Sơ đồ khối của hệ thống có hồi tiếp trạng thái đã được trình bày trong phần 2 .
Một thành phần được thêm vào sơ đồ trên là bộ ước lượng trạng thái.Tuy nhiên nếu
thuần thuý chỉ hồi tiềp trạng thái qua bộ hồi tiếp K như vậy thì hệ thống sẽ có sai
lệch tĩnh rất lớn.
Điều này được giải thích do trong đối tượng và trong cả hệ kín đều có khâu tích
phân, ngoài ra đối tượng có hệ số khuyếch đại khá lớn.Không những thế khi có
nhiễu tác động vào hệ thống (chủ yếu là nhiễu đối tượng) thì hệ thống sẽ bị ảnh
hưởng rất lớn và sai lệch tĩnh sẽ có thể rất lớn.Để khắc phục được vấn đề này có
hai giải pháp có thể áp dụng :
Sv : Lê Thanh Tùng
53
Một là: Dùng các khâu bù đầu vào và bù song song để giảm sai lệch tĩnh của hệ
thống và hạn chế ảnh hưởng của nhiễu như hình dưới.Thực tế phương pháp này
không thể triệt tiêu hẳn được sai lệch tĩnh và vẫn chịu ảnh hưởng không nhỏ của
nhiễu.Sở dĩ như vậy là do khi thiết kế bộ bù ta không thể tính chính xác được các
thông số và luôn có sự làm tròn và bản thân các thông số của đối tượng cũng có thể
thay đổi trong quá trình hoạt động .
Hai là: Đưa thêm khâu tích phân vào vị trí thích hợp trong hệ thống.Khâu tích
phân có khả năng triệt tiêu hoàn tòan được sai lệch tĩnh và giảm ảnh hưởng của
nhiễu đến hệ thống.Với hệ thống xung –số khâu tích phân được lựa chọn có hàm
truyền đạt như sau :
W1(z)=
1z
Ki
Sơ đồ khối của hệ thống đã được bù dùng khâu tích phân như sau :
Sau khi điểm qua hai pương pháp trên, ta thấy phương pháp thêm khâu
tích phân có nhiều ưu điểm hơn, bởi vậy trong bài này ta sẽ dùng khâu tích phân .
Trước hết cần tìm phương trình trạng thái của khâu tích phân :
)(1
)(1
zu
zy
=
1z
Ki
)(1*)(1
)(1)(1)1(1
kxKiky
kukxkx
Ta thấy khâu tích phân này chỉ có một biến trạng thái duy nhất và đầu ra của khâu
tích phân tỉ lệ với biến trạng thái .
Đặt X(k)=
)(1
)(
kx
kx
ta có:
Sv : Lê Thanh Tùng
54
u(k)=K1.x1(k)-K.x(k)=- kik .x(k)
u1(k)=- C.x(k)
)(1)(.)(1)(1)1(1
)(.)(.)1(
kxkxCkukxkx
kuBkxAkx
x(k+1)=
1
0
C
A
x(k)+
0
B
u(k)
u(k)=- kik x(k)
x(k+1)= kik
B
C
A
01
0
x(k)
Đặt e(k)=x(k)-x( ) là sai lệch tĩnh ta có :
e(k+1)= kik
B
C
A
01
0
e(k)
Mục đích của ta là phải làm cho e(k) tiến đến 0 càng nhanh càng tốt để triệt tiêu
được sai tĩnh .Đến đây ta lại thấy dạng quen thuộc của (4.22) và do đó có thể áp
dụng phương pháp tìm bộ hồi tiếp trạng thái để tìm kik
Hệ mới bây giờ có bậc là 3, dùng bảng các điểm cực chuẩn của Bessel cho hệ bậc 3
và chọn thời gian quá độ T=500 (sec) ta có các điểm cực mới là:
p 1= i
i
p 0076.00079.0
500
7845.39668.3
3,2;0100.0
500
0093.5
zp1=e
10*1
= 0.9047;
zp2,3 =e
10*p2,3
= 0.9211 0.0699i
Phương trình đặc tính mới là :
det kik
B
C
A
Iz
01
0
.
=det kikk
z
z
z
21
0
0
1
13021.03109.0
001
0917.0916.1
00
00
00
=det
13021.03109.0
01
2917.01916.1
z
z
Kikkz
=z
3
+ z
2
(k1-2.916) +z(0.3021*ki - k1 + k2 +2.833) +(0.3021*ki -0.917-k2)
Sv : Lê Thanh Tùng
55
Mặt khác ta lại có :
det KiK
B
C
A
iz .
01
0
.
= (z-zp1).(z-zp2).(z-zp3)
= (z - 0.9047)*(z - 0.9211 + 0.0699i)*( z - 0.9211- 0.0699i)
=z
3
- 2.747*z
2
+2.52*z - 0.772
Cân bằng hai vế của phương trình trên ta được :
0.772- k2-0.917- ki*0.3021
2.52 2.833 k2 k1 - ki*0.3021
2.747- 2.916-k1
1
00165.0
1445.02
169.01
ki
k
k
vậy ta đã tìm được các hệ số cần thiết một cách tổng quát.Thực hiện trên sơ đồ
simulink ta có sơ đồ sau :
Ta thu được qúa trình của hệ thống như sau:
Sv : Lê Thanh Tùng
56
Ta nhận thấy rằng sử dụng phương pháp phản hồi trạng thái chất lượng của hệ
thống cũng rất tốt; thời gian quá độ là 700 (sec) độ quá điều chỉnh là 0,05% và
không có sai lệch tĩnh.
2.3.2.6.So sánh hai bộ điều khiển tìm được
Qua so sánh kết quả mô phỏng với hai bộ điều khiển : bộ điều khiển PID và bộ
phản hồi trạng thái ta có nhận xét sau :
-Cả hai phương pháp đều đem lại hệ thống có chất lượng rất tốt .
-Trong quá trình tổng hợp thì sử dụng bộ PID số đơn giản hơn .
-Do đối tượng điều khiển ở đây là lò sấy không có yêu cầu cao về
công nghệ cũng như đòi hỏi sự chính xác tuyệt đối nên em quyết định chọn bộ điều
khiển PID để xây dựng hệ thống điều khiển số cho hệ thống.
Sv : Lê Thanh Tùng
57
CHƢƠNG 3 :
THIẾT KẾ PHẦN MỀM
3.1. Thuật toán điều khiển của hệ thống
Phương trình sai phân của bộ điều khiển:
Như đã trình bày ở chương 4, bộ điều khiển PID có hàm truyền đạt như sau:
2
( )
( 1)
pid
Az Bz C
W z
z z
trong đó :
2
2
( 2 2 )
2
( 2 4 )
2
i d p
i p d
d
KT K K T
A
T
KT K T K
B
T
K
C
T
Từ hàm truyền đạt này, chuyển thành phương trình sai phân:
)2(.)1(.)(.)1()(
)1()()2(.)1(.)(.
)1)(()..).((
1
..
)(
)(
)(
121
1
21
2
2
keCkeBkeAkuku
kukukeCkeBkeA
zzUzCzBAzE
z
zCzBA
zz
CBzAz
zE
zU
zWpid
Từ phương trình sai phân trên có được thuật toán xây dựng bộ PID số như sau:
Khai báo 1 biến để lưu giá trị cũ của u và 1 mảng để lưu các giá trị cũ của
e :
float u_old;
float e_old[2];
Các giá trị này đều được khởi đầu bằng 0.
Tính A,B,C theo Kp, Ti, Td đã chọn.
Các bước tính cho bộ PID số:
o Đọc giá trị hồi tiếp về y và giá trị đặt w. Tính sai lệch e = w - y.
o Tính giá trị tín hiệu điều khiển hiện thời:
u = u_old + A*e + B*e[0] + C*e[1];
o Xuất tín hiệu điều khiển ra.
o Cập nhập lại các biến lưu:
u_old = u;
e[1]=e[0];
e[0]=e;
o Lặp lại từ đầu.
Sv : Lê Thanh Tùng
58
3.2.Phƣơng án xây dựng chƣơng trình điều khiển và giao diện:
Chương trình điều khiển và giao diện bao gồm hai phần độc lập: phần giao
diện người dùng và phần thực hiện thuật toán điều khiển.
Phần giao diện người dùng:
o Hiển thị kết quả quá trình điều khiển
o Nhận nhiệt độ đặt mong muốn từ người dùng.
o Nhận các thông số thiết lập cho hệ thống từ người dùng.
o Yêu cầu của phần này là giao diện phải dễ dùng, thuận tiện cho
người sử dụng. Giao diện phải hợp lý. Một phong cách chung
trong giao diện điều khiển là mô phỏng các bàn điều khiển thiết bị
(Instrument Panel).
Phần thực hiện thuật toán điều khiển:
o Thực hiện thuật toán điều khiển (như đã trình bày ở phần trên).
o Giao tiếp với phần cứng để điều khiển đối tượng cũng như nhận
các kết quả đo đạc từ các Sensor.
o Nhận thông số hệ thống và giá trị đặt từ người dùng thông qua
phần giao diện.
o Cung cấp các số liệu cho phần giao diện (nhieọt ủoọ)
o Yêu cầu của phần này laứ việc thực hiện thuật toán điều khiển
phải chính xác
Căn cứ vào các yêu cầu trên, để thuận tiện cho phần giao diện, chương trình
sẽ được viết trên môi trường Windows. Môi trường hệ điều hành Windows là một
môi trường đồ hoạ hoàn thiện, cung cấp rất nhiều các công cụ phát triển cũng như
các thành phần đồ hoạ cơ bản (menu, cửa sổ, hộp thoại, ...) giúp cho việc phát triển
các ứng dụng được dễ dàng và nhanh chóng. Mặc dù môi trường Windows luôn
hạn chế việc truy nhập cấp thấp với phần cứng, tuy nhiên trên Windows 9x thì việc
thực hiện các vào ra cơ bản với phần cứng là được phép. Điều này hoàn toàn đáp
ứng được yêu cầu trong bài tập này.
Chọn công cụ lập trình:
Với các bài toán điều khiển, ngôn ngữ C/C++ dường như là lựa chọn bắt
buộc, bởi ngôn ngữ này cho phép viết các chương trình mạnh, nhanh, nhỏ gọn, truy
nhập sâu vào phần cứng (về mặt này thì không bằng hợp ngữ). Tuy nhiên, để tối ưu
phần mã điều khiển, một số đoạn trình hợp ngữ sẽ được sử dụng thêm vào đoạn mã
C/C++.
Về công cụ và mội trường phát triển: hiện nay có hai công cụ phát triển rất
mạnh dùng ngôn ngữ C/C++, đó là Visual C++ của Microsoft và CBuilder của
Inprise (tên mới của Borland). Trong khi Visual C++ ưu tiên khả năng can thiệp
sâu vào hệ thống và chỉ đóng gói đơn giản các thành phần (đồ hoạ, file,...) của hệ
thống thì CBuilder lại tận dụng tối đa khả năng hướng đối tượng trong C++ để
đóng gói các thành phần hệ thống, giúp lập trình viên càng ít phải can thiệp chi tiết
vào hệ thống càng tốt. Tất nhiên CBuilder sẽ có chút hạn chế khi lập trình viên
muốn lập trình cấp thấp. Với mục đích nhanh chóng tạo ra chương trình với giao
Sv : Lê Thanh Tùng
59
diện phù hợp, dễ sử dụng mà vẫn đảm bảo yêu cầu về tốc độ, tính hiệu quả, công
cụ CBuilder được chọn để thực hiện phần mềm cho bài tập này.
3.3.Kết quả chạy chƣơng trình:
Chương trình được dịch thành công và chạy thử. Vì không có hệ thống điều
khiển thực tế (card ghép nối, biến tần, động cơ,...) nên chỉ thử được giao diện. Giao
diện của chương trình như hình dưới đây.
Sv : Lê Thanh Tùng
60
Sv : Lê Thanh Tùng
61
3.4.Mã nguồn chƣơng trình:
// BTDDlg.cpp : implementation file
//
#include "stdafx.h"
#include "BTD.h"
#include "BTDDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV
support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
Sv : Lê Thanh Tùng
62
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CBTDDlg dialog
CBTDDlg::CBTDDlg(CWnd* pParent /*=NULL*/)
: CDialog(CBTDDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CBTDDlg)
m_TT = _T("");
m_sTime = _T("");
m_Radio = -1;
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CBTDDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CBTDDlg)
DDX_Control(pDX, IDC_BTHONGSO, m_thongso);
DDX_Control(pDX, IDC_BTHOAT, m_thoat);
DDX_Control(pDX, IDC_BSTOP, m_dung);
DDX_Control(pDX, IDC_BDIEUKHIEN, m_dieukhien);
DDX_Control(pDX, IDC_BNHANDANG, m_nhandang);
DDX_Control(pDX, IDC_BSTART, m_batdau);
DDX_Text(pDX, IDC_TIME, m_TT);
DDX_Text(pDX, IDC_STATICTIME, m_sTime);
DDX_Radio(pDX, IDC_RALP, m_Radio);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CBTDDlg, CDialog)
//{{AFX_MSG_MAP(CBTDDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_TIMER()
ON_BN_CLICKED(IDC_BSTART, OnBstart)
ON_BN_CLICKED(IDC_BNHANDANG, OnBnhandang)
Sv : Lê Thanh Tùng
63
ON_BN_CLICKED(IDC_BTHONGSO, OnBthongso)
ON_BN_CLICKED(IDC_BDIEUKHIEN, OnBdieukhien)
ON_BN_CLICKED(IDC_BSTOP, OnBstop)
ON_BN_CLICKED(IDC_BTHOAT, OnBthoat)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CBTDDlg message handlers
BOOL CBTDDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX,
strAboutMenu);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
CRect rectWin;
GetClientRect(rectWin);
CClientDC dc(this);
m_pdcMemory.CreateCompatibleDC(&dc);
m_pBitmap.CreateCompatibleBitmap(&dc,rectWin.Width(),rectWin.Height
());
m_t=FALSE;
NhanDang[0]=m_DoiTuong.m_kdt;
NhanDang[1]=m_DoiTuong.m_Tdt;
NhanDang[2]=m_DoiTuong.m_Ttdt;
NhanDang[7]=0.1;
NhanDang[6]=50;
Sv : Lê Thanh Tùng
64
NhanDang[5]=0;
NhanDang[4]=0;
NhanDang[3]=23;
m_Radio=0;
UpdateData(FALSE);
for(int i=0;i<600;i++)
{
point[i].x=0;
point[i].y=0;
}
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
}
void CBTDDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CBTDDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM)
dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
Sv : Lê Thanh Tùng
65
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CBTDDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CBTDDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
CTime curTime=CTime::GetCurrentTime();//de lam gi
switch(nIDEvent)
{
case ID_CLOCK_TIME:
m_sTime.Format("%d:%d:%d",curTime.GetHour(),curTime.GetMinute(),cu
rTime.GetSecond());
UpdateData(FALSE);
break;
case ID_CLOCK_COUNT:
double adl=(double)(inp_b1(1));
ad=600*adl/225;
point[m_count].x=(long)(270+5*m_count);
point[m_count].y=(long)(400-ad*23/60);
e[m_count]=(NhanDang[6]*225/500)-adl;
unsigned short m_out;
if(e[m_count]<0)
e[m_count]=1;
m_out=(unsigned short)(e[m_count]);
_asm{
push ax
push dx
mov ax,m_out
mov dx,30Ah
out dx,al
pop dx
pop ax
}
Sv : Lê Thanh Tùng
66
for(int i=0;i<40000;i++);
InvalidateRect(CRect(245,120,605,440),FALSE);
m_count ++;
break;
}
CDialog::OnTimer(nIDEvent);
CDialog::OnTimer(nIDEvent);
}
unsigned short CBTDDlg::inp_b1(unsigned short port)
{
_asm{
push ax;
push dx;
mov ax,port;
mov dx,3F8h;
out dx,al;
pop dx;
pop ax;
}
for(int i=0;i<40000;i++);
unsigned short c;
_asm{
push ax;
push dx;
xor ax,ax;
mov dx,309h;
in al,dx;
mov c,ax;
pop dx;
pop ax;
}
return c;
}
void CBTDDlg::OnBstart()
{
// TODO: Add your control notification handler code here
GetDlgItem(IDC_RALP)->EnableWindow(TRUE);
GetDlgItem(IDC_RALPI)->EnableWindow(TRUE);
GetDlgItem(IDC_RALPD)->EnableWindow(TRUE);
GetDlgItem(IDC_RALPID)->EnableWindow(TRUE);
m_batdau.EnableWindow(FALSE);
m_dung.EnableWindow(FALSE);
Sv : Lê Thanh Tùng
67
m_nhandang.EnableWindow(TRUE);
m_thongso.EnableWindow(TRUE);
m_dieukhien.EnableWindow(TRUE);
m_thoat.EnableWindow(TRUE);
}
void CBTDDlg::OnBnhandang()
{
if(m_DoiTuong.DoModal()==IDOK)
{
NhanDang[0]=m_DoiTuong.m_kdt;
NhanDang[1]=m_DoiTuong.m_Tdt;
NhanDang[2]=m_DoiTuong.m_Ttdt;
}
//InvalidateRect(CRect(126,115,230,440),FALSE);
m_nhandang.EnableWindow(FALSE);
m_thongso.EnableWindow(TRUE);
m_dung.EnableWindow(TRUE);
m_dieukhien.EnableWindow(TRUE);
m_thoat.EnableWindow(TRUE);// TODO: Add your control notification
handler code here
}
void CBTDDlg::OnBthongso()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
m_thongSo.m_chot=m_Radio;
m_thongso.EnableWindow(FALSE);
m_nhandang.EnableWindow(FALSE);
m_dieukhien.EnableWindow(TRUE);
m_thoat.EnableWindow(TRUE);
m_dung.EnableWindow(TRUE);
if(m_thongSo.DoModal()==IDOK)
{
NhanDang[3]=m_thongSo.m_dt[0];
NhanDang[4]=m_thongSo.m_dt[1];
NhanDang[5]=m_thongSo.m_dt[2];
NhanDang[6]=m_thongSo.m_dt[3];
NhanDang[7]=m_thongSo.m_step;
}
InvalidateRect(CRect(126,115,230,440),FALSE);
}
void CBTDDlg::OnBdieukhien()
{
Sv : Lê Thanh Tùng
68
// TODO: Add your control notification handler code here
SetTimer(ID_CLOCK_TIME,1000,NULL);
SetTimer(ID_CLOCK_COUNT,3000,NULL);
m_t=TRUE;
e[0]=NhanDang[6];
e[1]=NhanDang[6];
m_count=2;
m_TT="Time :";
m_batdau.EnableWindow(FALSE);
m_dieukhien.EnableWindow(FALSE);
m_thongso.EnableWindow(FALSE);
m_nhandang.EnableWindow(FALSE);
m_dung.EnableWindow(TRUE);
m_thoat.EnableWindow(TRUE);
UpdateData(FALSE);
}
void CBTDDlg::OnBstop()
{
// TODO: Add your control notification handler code here
KillTimer(ID_CLOCK_TIME);
KillTimer(ID_CLOCK_COUNT);
m_t=FALSE;
m_dung.EnableWindow(FALSE);
m_thongso.EnableWindow(FALSE);
m_dieukhien.EnableWindow(FALSE);
m_nhandang.EnableWindow(FALSE);
m_batdau.EnableWindow(TRUE);
m_thoat.EnableWindow(TRUE);
GetDlgItem(IDC_RALP)->EnableWindow(FALSE);
GetDlgItem(IDC_RALPI)->EnableWindow(FALSE);
GetDlgItem(IDC_RALPID)->EnableWindow(FALSE);
InvalidateRect(CRect(240,120,605,440),FALSE);
m_TT="";
m_sTime="";
UpdateData(FALSE);
}
void CBTDDlg::OnBthoat()
{
// TODO: Add your control notification handler code here
OnOK();
}
KẾT LUẬN
Sv : Lê Thanh Tùng
69
Sau một thời gian thực hiện đồ án tốt nghiệp với nhiều cố gắng và nổ lực
cùng với sự tận tình hướng dẫn của thầy giáoTh.s Nguyễn Trọng Thắng, quyển
đồ án này đã hoàn thành đúng thời gian qui định theo yêu cầu đặt ra là thiết kế va
phân tích hệ thống điều khiển nhiệt độ cho lò đốt CN dùng họ vi điều khiển MSC-
51,cụ thể là 80C51.
Để thực hiện được yêu cầu trên em đã nghiên cứu, tìm hiểu những vấn đế về
vi điều khiển, vi xử lí, các phương pháp đo nhiệt độ, các phương pháp chuyển đổi
từ tương tự sang số ,các phương tổng hợp hệ thống điều khiển và các vấn đề khác
có liên quan đến đề tài.
Nội dung chính của đề tài này bao gồm những phần chính sau:
*Phần kiến thức.
-Khảo sát bộ vi điều khiển 8051/8031.
-Khảo sát IC giai tiếp ngoại vi 8255A.
-Khảo sát các bộ nhớ thông dụng .
-Các phương pháp chuyển đổi từ tương tự sang số.
-Các IC phụ trợ 74LS138,74LS373
-Hệ thống đo nhiệt độ và các phương pháp đo nhiệt độ.
*Phần thiết kế thi công .
-Xây dựng sơ đồ khối toàn mạch .
-Xây dưng lưu đồ giải thuật .
-Viết chương trình.
Trên đây là những nội dung mà em đã thực hiện được trong đồ án này.
Theo nhận định chủ quan của em thi quyển đồ án này đã trình bày tương đối
đầy đủ các nội dung, những kiến thức liên quan, giải quyết được những yêu cầu đặt
ra.
Tuy nhiên do thời gian cũng như trình độ chuyên môn có hạn vẫn còn nhiều
thiếu sót .
Để đề tài này thêm phong phú và tăng hiệu quả sử dụng thì cần đáp ứng được
những yêu cầu sau:
+Phải hoàn thiện và nghiên cứu sâu về lập trình cho 80C51
+Dùng các phần mềm chuyên dụng như Orcard,Protel để vẽ mạch in,tiến tới
lắp ráp thành card thật,tiến hành chạy thử.
Đó là những yêu cầu mà em chưa có điều kiện thực hiện do hạn chế về thời
gian, cũng như gặp những khó khăn về kĩ thuật.
Xin chân thành cảm ơn các bạn sinh viên đã đóng góp những ý kiến quý báu để
đề tài này hoàn thành tốt đẹp, đúng thời hạn.
Sv : Lê Thanh Tùng
70
TÀI LIỆU THAM KHẢO
1.Lý thuyết điều khiển tự động-Phạm Công Ngô- NXB khoa học kỹ thuật
2.Kỹ thuật vi điều khiển-Lê văn Doanh-Phạm Khắc Chương-NXB khoa học
kỹ thuật.
3. Đo lường và đièu khiển bằng máy tính –Ngô Diên Tập-NXB khoa học kỹ
thuật.
4.Họ vi điều khiển 8051-Tống Văn On-Hoàng Đức Hải-NXB Lao Động Xã
Hội.
5.The 8051 Microcontroller –University of Guelph-I.SCOTT MACKENZIE.
7
A4
10K
-12V
+12V
104
1K
VR+
15
VR-
6
5
14
A1
A2
A3
11
A8
10
9
8
A6
A5
A7
12
16
COMP
_
2
4
IOUT
IOUT
+
3
2
V_control
358
A8
ALE
START
6
22
23
24
25
A1
A2
A0
17
18
D4
D3
21
20
19
D6
D7
D5
15
8
14
D2
D1
D0
EOC
OE
7
9
REF-
CLK
REF+
16
10
12
1k
2 1
103
1k
103
2 1
26
2
IN4
IN3
IN6
IN7
IN5
4
5
3
IN2
IN1
IN0
28
1
27
1 +12V
Zenner 6V
1u
2
2k
LM358
3
DB9
5
P1.2
6
8
4
9
7
3
2
1
P1.7
P1.6
P1.5
P1.4
P1.3
P1.1
P1.0
T1
INT0
INT1
T0
RESET
X2
EA/VP
X1
10u
WR
10u
RxD
ALE
TxD
PSEN
P2.4
RD
P2.6
P2.7
P2.5
P2.0
P2.2
P2.3
P2.1
P0.0
P0.4
P0.7
P0.6
P0.5
P0.2
P0.3
P0.1
74AC373
2
Q0
12
Q4
Q7
Q6
Q5
16
19
15
Q3
Q2
Q1
6
9
5
CLK
11
Gate
1
3
D0
D7
D6
D5
D4
D3
D2
D1
13
17
18
14
7
8
4
12V
KHUEÁCH ÑAÏI
VAØO
LOØ
SENSOR
Rñoát
P1.1
P1.2
P1.0
8051
Các file đính kèm theo tài liệu này:
- 66.LeThanhTung_DC1001.pdf