Đề tài Nghiên cứu và thiết kế hệ thống điều khiển số nhiệt độ

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.

pdf70 trang | Chia sẻ: baoanh98 | Lượt xem: 841 | Lượt tải: 0download
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:

  • pdf66.LeThanhTung_DC1001.pdf
Tài liệu liên quan