- 91 - Vcc = 5V tối thiểu 10 chu kỳ dao động trước khi chân RST đạt mức thấp lần nữa. Chế độ nghỉ: Lệnh thiết lập bit IDL bằng 1 là lệnh sau cùng được thực thi trước khi đi vào chế độ nghỉ. Ở chế độ nghỉ, tín hiệu Clock nội được khoá không cho đến CPU nhưng không khoá đối với chức năng ngắt, định thời và Port nối tiếp. Trạng thái của CPU được duy trì và nội dung củ a tất cả các thanh ghi cũng không đổi. Các chân Port cũng được duy trì các mức logic của chúng. ALE và PSEN được giữ ở mức cao. 5.1.2. Khối giao tiếp bằng bàn phím Sử dụng bốn phím trong đó 1 phím dùng để Reset còn 3 phím sử dụng cho việc đặt giá trị tốc độ ban đầu. Nút ấn SW1 dùng để Reset lại mạch. Nút ấn SW2, SW3 và SW4 dùng để đặt tốc độ hỗn hợp dòng khí theo ý muốn, chúng được nối đến các chân P2.5, P2.6. P2.7 của vi xử lí, tốc độ có thể tăng hoặc giảm tuỳ theo ý muốn của người làm thí nghiệm. Các tụ từ C 1 đến C 4 có tác dụng chống nhiễu. 5V SW1 1 2 SW2 1 2 SW3 1 2 SW4 1 2 R1 8.2K R2 8.2K R3 8.2K R4 8.2K C1 104 C2 104 C3 104 C4 104 RESET P2.7 P2.5 P2.6 Hình 5.5. Sơ đồ nối ghép bàn phím - 92 - 5.1.3. Khối cảm biến * Sơ đồ khối Hình 5.6. Sơ đồ khối cảm biến Khối cảm biến có nhiệm vụ đưa tín hiệu phản ánh giá trị vận tốc dòng khí ở đầu ra hệ thống, để đưa vào vi xử lí để so sánh với tín hiệu đặt. Lúc này vi xử lí có nhiệm vụ xử lí tính toán và đưa ra tín hiệu điều khiển thích hợp đáp ứng được yêu cầu mong muốn. 5.1.4. Khối hiển thị Khối hiện thị có tác dụng hiển thị giá trị tốc độ hỗn hợp dòng khí đặt và giá trị đo được thực tế từ hệ thống. Giúp người khi làm thí nghiệm quan sát cùng một lúc hai giá trị vận tốc từ đó đánh giá được sự làm việc của hệ thống. - 93 - Ở đây ta sử dụng LED 7 đoạn để hiển thị, ta dùng hai cặp LED một cặp dùng hiển thị giá trị đặt, cặp còn lại dùng hiển thị giá trị đo. Mỗi giá trị đo chỉ hiển thị tối đa hai số và ngầm hiểu đơn vị là (cm/s). Để hiển thị bằng đèn led, người thường dùng ba phương pháp là: phương pháp quét, phương pháp chốt và kết hợp cả hai ph ương pháp này. Trong thiết kế này chúng tôi sử dụng phương pháp quét. Để hiển thị chữ số hoặc ký tự nào ta cung cấp tín hiệu đến các chân của đầu nối. Các led trong thiết kế này được chọn loại chung Anode. Muốn cho led nào sáng ta đưa chân tương ứng với nó tại cổng J2 lên cao đồng thời đưa chân tương ứng với nó tại cổng J1 xuống thấp. Muốn hiển thị đúng chữ số hoặc ký t ự ta phải giải mã led. Hình 5.7. Sơ đồ mạch hiển thị tốc độ Thật vậy giả sử ta cần hiển thị số 0 thì byte tín hiệu chuyển đến cổng J1 sẽ là: 11000000 (C0h) nếu cần hiển thị số 1 thì byte tín hiệu cần chuyển đến cổng J1 sẽ là 11111001 (F9h)… Tương ứng với các số tiếp theo ta xác định byte tín hiệu tương tự cụ thể số 2, 3, 4, 5, 6, 7, 8, 9 sẽ là: 10100100 (A4h); 10110000 (B0h); 10011001 (99h); 10010010 (92h); 10000010 (82h); 11111000 (F8h); 10000000 (80h); 10010000 (90h). - 94 - 5.2. NGUYÊN LÝ HOẠT ĐỘNG Sơ đồ khối của mạch Hình 5.8. Sơ đồ nguyên lý mạch điều khiển Khối nguồn có nhiệm vụ cung cấp điện áp nuôi cho toàn mạch. Ba phím ấn sử dụng để đặt giá trị tốc độ cần làm thí nghiệm, trong đó có 1 phím tăng, 1 phím giảm và một phím OK. Tuỳ theo mục đích sử dụng của người làm thí nghiệm mà có thể đặt bất kì một giá trị tốc độ nào nằm trong khoảng 0 ÷ 1m/s. Để thực hiện được điều này người làm thí nghiệm sử dụng hai phím tăng giảm để đặt giá trị. Giá trị đặt được thông qua chương trình viết bên trong vi xử lí sẽ hiển thị trên LED, khi nào giá trị đặt đúng với yêu cầu ta chọn phím OK. - 95 - Sau khi ấn phím OK chương trình trong vi xử lý sẽ tự động tính toán và phát ra một tần số xung tác động đến đầu vào là tín hiệu đặt cho bộ biến tần điều khiển động cơ quạt hoạt động. Cùng lúc này tín hiệu ra của cảm biến tốc độ đặt ở đầu ra của hệ thống sẽ được phản hồi trở về đầu vào của vi xử lí. Tín hiệu này được vi xử lí tính toán và hi ển thị trên LED đây là giá trị tốc độ thực tế đo được. Đồng thời tín hiệu này được so sánh với tín hiệu đặt ban đầu. Sau thời gian quá độ thì giá trị vận tốc đo được có giá trị bằng với giá trị đặt ban đầu. Và trạng thái làm việc này của hệ thống sẽ được giữ ổn định trong quá trình làm thí nghiệm. Nếu như có nhiễu tác động vào hệ thống làm cho vị trí trạ ng thái ổn định của hệ mất đi có thể tăng hoặc giảm. Dẫn đến giá trị sai lệch giữa giá trị đặt và giá trị đo được khác không. Sai số này được qua bộ điều chỉnh PID số viết trên vi điều khiển 8051 với các thông số tìm được ở chương 4. Lúc này nhờ luật điều khiển đó mà vi điều khiển sẽ xử lí, tính toán và phát tín hiệu đi ều khiển tác động vào hệ biến tần sao cho triệt tiêu được sai lệch giữa giá trị đặt và đo. Và hệ thống sẽ được giữ ổn định và trở lại trang thái ban đầu. 5.3. THUẬT TOÁN VÀ CHƯƠNG TRÌNH ĐIỀU KHIỂN * Lưu đồ thuật toán Chương trình chính Khởi tạo các giá trị. Bộ định thời 0 được dùng để đo tần số xung vào. Bộ định thời 1 dùng để tính thời gian trích mẫu. Bộ định thời 2 dùng để tính tần số xung ra. Ngắt ngoài 0 dùng để phục vụ khi có phím ấn. Ngắt ngoài 1 dùng để xác định sườn xuống của xung vào. Hiển thị vận tốc hiện tại trong buồng sấy - 96 - timer1. Chương trình này thực hiện khi đã đến thời gian trích mẫu Lưu vận tốc hiện tại đo được Tính sai số Thực hiện bộ điều khiển PID,đầu ra lưu vào biến output. Rồi nạp cho thanh ghi TH2 Kết thúc ext0. Hàm này thực hiện khi có phím ấn Lưu phím ấn vào biến key. Nếu là phím tăng thì tăng biến dữ liệu lên 1 Nếu là phím giảm thì giảm biến dữ liệu xuống 1 Nếu là phím OK thì thoát khỏi vòng lặp Kết thúc timer2. Hàm này được dùng để kích xung ra Tăng biến đếm lên, nếu biến đếm = output thì lấy đảo trên chân P3.0 đồng thời gán biến đếm bằng 0 Kết thúc - 97 - * Chương trình điều khiển #include <reg52.h> unsigned int time=1; unsigned int input=0; unsigned int count,dem,u2,u1,y,y1,output,saiso,input_1,cout; char dulieu=5,key; char temp; unsigned int trich_mau; void timer0(void) interrupt 1// cu sau 100us lai thuc hien ham nay, no chi viec tang thoi gian len mot gia tri. { time++; } char quet(void)//Ham nay se cho phim duoc an, va tra ve gia tri phim duoc an { ext1. Ngắt ngoài 1 ngắt này được dùng để phát hiện sườn xuống ở đầu vào Lưu giá trị thời gian(biến timer) và tính để chuyển từ f sang v. Sau đó cho biến timer = 0 để cho chu kỳ tiếp theo Kết thúc timer0. Hàm này thực hiện để tính thời gian cho xung vào Cứ sau 100us thì tăng biến time lên 1 giá trị Kết thúc - 98 - while(P2&0x0E==0x0E); return P2&0x0E; } void timer1(void) interrupt 3//Cu sau 100us lai thuc hien ham nay. { if(trich_mau++ >=5000)//tang bien trich mau len, neu no bang 5000 co nghia la 0.5s {//thi thuc hien doan chuong trinh sau. input_1=input;//luu gia tri van toc hien tai lai saiso=dulieu-input_1;//Tinh sai so. output=75*u2-10*u1-5*saiso+y;//tinh bo dieu khien PID voi cac thong so: K=40. Ki=30, Kd=10 u1=u2;//Sau khi da roi rac hoa, voi thoi gian trich mau la 0.5s. u2=saiso; y=y1; y1=output; output=output/0.005; } } void timer2(void) interrupt 5//Ham nay duoc thuc hien khi da den thoi diem kich xung dau ra. { if(dem++>=output) { P3_0=~P3_0; dem=0; } } void ext0(void) interrupt 0//Ham nay duoc thuc hien khi co bat ky phim nao duoc an. { key=quet();//Luu gia tri phim duoc an. while(key!=0x80)//Kiem tra xem co phai phim OK hay khong? {//Neu khong thi kiem tra if(key==0x40)//Neu la phim tang thi dulieu++;//Tang if (key==0x20)//Neu la phim giam thi giam dulieu ; for(cout=1;cout<=100;cout++)//Tre 100us de cho phim an tiep theo. wait(); key=quet();//Cho phim an tiep theo. - 99 - } } void ext1(void) interrupt 2//Khi co suon xuong cua xung vao no se thuc hien { input=10000/(50*time);//chuyen tu tan so sang van toc theo ham v=0.02*f, vi bien time la chu ky, don vi la 100us cho nen cong thuc phai duoc tinh nhu tren. time=0;//gan bien time =0 } void wait(void){ ; } void main(void) { char shift; unsigned int temp1; TH0=-92; TL0=-92; TH2=-92; TMOD=0x22; TCON|=0x04; TR1=1; TR2=1; IE=0xAF; while (1) { temp1=input_1; //Hien thi gia tri dau vao. for(shift=1;shift<=8;shift<<=1) { temp=temp1%10; temp1=temp1/10; switch(temp) { case 0: P1=0x40; break; case 1: P1=0x79; break; case 2: P1=0x24; break; case 3: P1=0x30; - 100 - break; case 4: P1=0x19; break; case 5: P1=0x12; break; case 6: P1=0x02; break; case 7: P1=0x78; break; case 8: P1=0x00; break; case 9: P1=0x10; break; } P2=shift; for(count=1;count<100;count++) wait(); } } } 5.4. KẾT LUẬN CHƯƠNG V Bằng cơ sở lý thuyết cũng như yêu cầu điều khiển của bài toán trong chương 5 này ta đã xây dựng được mạch điều khiển tốc độ gió. Tìm hiểu cấu tạo và nguyên lý hoạt động của thiết bị điều khiển sử dụng là vi điều khiển AT89C51. Xây dựng thuật toán và lập trình điều khiển từ đó khảo sát hoạt động c ủa mạch. Xong do kỹ năng lập trình cũng như điều kiện ban đầu không tìm được tham số của bộ điều chỉnh. Vì vậy với chương trình điều khiển trên chỉ đáp ứng được một phần nhất định nào đó của yêu cầu bài toán. . Bằng cơ sở lý thuyết cũng như yêu cầu điều khiển của bài toán trong chương 5 này ta đã xây dựng được mạch điều khiển tốc độ gió. Tìm hiểu cấu tạo và nguyên lý hoạt động của thiết bị điều khiển. vi điều khiển AT89C51. Xây dựng thuật toán và lập trình điều khiển từ đó khảo sát hoạt động c ủa mạch. Xong do kỹ năng lập trình cũng như điều kiện ban đầu không tìm được tham số của bộ điều. điều chỉnh PID số viết trên vi điều khiển 8051 với các thông số tìm được ở chương 4. Lúc này nhờ luật điều khiển đó mà vi điều khiển sẽ xử lí, tính toán và phát tín hiệu đi ều khiển tác động