đò án thiết kế hệ thống điều khiển nhiệt độ cho lò điện trở

18 574 2
đò án thiết kế hệ thống điều khiển nhiệt độ cho lò điện trở

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Nhận Xét của giáo viên Hướng Dẫn Ngày…….Tháng…… Năm……… 1 Nhận xét của giáo viên phản biện Ngày…… Tháng…… Năm……… 2 Lời nói đầu Với khoa học và kĩ thuật phát triển như hiện nay thì việc đo nhiệt độ của môi trường có thể thực hiện được dẽ dàng bằng nhiệt kế thủy ngân, hoặc cũng có thể là mạch đo nhiệt độ được trình bày ở đồ án này, tuy nhiên chúng em muốn nói đến kĩ thuật lập trình 8051 giao tiếp với ADC0804 Với một con cảm biến LM35, ADC0804, 89C51, LCD và một số phụ kiện khác là ta có thể dễ dàng ráp 1 mạch đo nhiệt độ có thể hiển thị chính xác và rõ ràng trên màn hình tinh thể lỏng Một điều đáng nói đến nữa là mạch có thể dễ dàng nâng cấp để đo được nhiệt độ cao hơn bằng cách thay cảm biến nhiệt và điều chỉnh một ít mã của chương trình Do chưa có nhiều kinh nghiệm và điều kiện có hạn nên đề tài của chúng em còn nhiều sai sót Rất mong sự đóng góp ý kiến chân tình của thầy cô và các bạn để đề tài được hoàn chỉnh hơn 3 Mục lục o0o 1 Giới thiệu và mô tả chức năng ………………… … Trang 5 2 Hoạt động của ADC0804……………………………….Trang 5 3 Cảm biến LM35D……………………………………… Trang 6 4 Hoạt động của LCD………………………………… Trang 6 5 Lưu đồ giải thuật…………………………………………Trang 10 6 Chương trình…………………………………………… Trang 12 4 1 Giới thiệu và mô tả chức năng V R 2 6 19 V R 1 1K R 1 10K 9 4 20 A D C 0804 1 2 3 + IN C LK R V R E F /2 C L K IN D D D D D D D D B B B B B B B B 0 1 2 3 4 5 6 7 R D W R IN T R 1 1 1 1 1 1 1 1 8 7 6 5 4 3 2 1 1 1 1 1 1 1 1 1 2 3 5 0 1 2 3 4 5 6 7 1 2 3 P P P P P P P P 3 3 3 3 3 3 3 3 0 1 2 3 4 5 6 7 /R X D /T X D /IN T 0 /IN T 1 /T 0 /T 1 /W R /R D V C C V + out G nd V C C /V R E F T her C S G N D A G N D - IN C 5 100u 40 V C C + 5V P 0 0 /A D P 0 1 /A D P 0 2 /A D P 2 0 /A P 2 1 /A P 2 2 /A 1 P 2 3 /A 1 P 2 4 /A 1 P 2 5 /A 1 P 2 6 /A 1 P 2 7 /A 1 P 1 0 P 1 1 P 1 2 C 2 18 1 10 8 7 C 1 150p\ X 2 Y 1 19 P P P P P X 1 C 3 C 4 31 9 R S T 8951 0 0 0 0 0 P S A 3 /A 4 /A 5 /A 6 /A 7 /A P P P P P E N LE D 3 D 4 D 5 D 6 D 7 1 3 1 4 1 5 1 6 1 7 3 3 3 2 2 2 2 2 2 2 2 9 8 7 1 2 3 4 5 6 7 8 2 3 3 3 3 3 3 4 5 6 7 8 9 0 6 5 4 3 2 1 1 1 1 1 1 1 LC D 20 R 3 R E A G N D S W 1 0 1 2 8 9 0 1 2 3 4 5 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 Do đặc tính của LM35D nên mạch có đo đuợc khoảng nhiệt độ từ 0 ->100 oC, có thể ứng dụng mạch để đo nhiệt độ phòng Mạch hoạt động dựa trên nguyên tắc chung như sau: cảm biến đo nhiệt độ biến thiên theo tỉ lệ 10mV/1oC , sau đó được đưa vào bộ biến đổi ADC để biến đổi thành mã nhị phân 8 bit, sau đó dữ liệu được đưa vào 89C51 Vi xử lý kiểm tra xem nếu quá 100oC thì hiển thị thông báo “OVER TEMP”, nếu không thì sẽ hiển thị trị số nhiệt độ đo được 2 Hoạt động của ADC0804 RD (Read) – đọc Đây là chân tín hiệu vào, tích cực mức thấp, đây là tín hiệu điều khiển cho phép đọc Khi bộ ADC đã chuyển đổi xong tín hiệu tương tự sang số và giữ nó ở một thanh ghi trong Nếu có tính hiệu RD (xung cao xuống thấp) thì dữ liệu số dạng 8 bit được đưa tới các chân dữ liệu từ D0 – D7 WR (Write) – Ghi Đây là chân vào tích cực mức thấp được dùng để báo cho ADC0804 bắt đầu quá trình chuyển đổi tín hiệu tương tự sang số Lượng thời gian cần thiết cho quá trình chuển đổi phụ thuộc vào tần số đưa vào chân CLK IN và CLK R Khi việc chuyển đổi hoàn tất thì thì chân INTR được ADC0804 hạ xuống mức thấp INTR (Interrupt) – Ngắt Đây là chân xuất, tích cực mức thấp Bình thường chân này ở mức thấp khi việc chuyển đổi dữ liệu được hoàn tất thì nó hạ xuống thấp để báo cho VDK đã kết thúc quá trình chuyển đổi, và sẵn sàng để đọc dữ liệu (RD) 5 D0 – D7 Đây là các chân dữ liệu số ra (D7 là bit có trọng số cao nhất MSB) Giá trị số đầu ra được tính theo công thức: Vref/2 Đây là chân điện áp đầu vào dùng làm điện áp tham chiếu.Nếu chân này hở thì dãy điện áp đầu vào Vin nằm trong dãy 0 -> 5V (giá trị đo được tại Vref/2 là 2.5V) Nếu cấp áp cho Vref thì dãy điện áp đầu vào Vin nằm trong khoảng 0 -> 2Vref/2 Ở mạch này do cảm biến LM35 biến thiên 10mV/1 oC nên độ phân giải R (R=2Vref / 256) phải bằng 10mV Vì vậy dãy điện áp Vin nằm trong khoảng 0 -> 2,56V, đó là lý do ta cấp cho Vref/2 một điện áp là 1,28V Chiết áp VR1 dùng để thay đổi trị số R (10 ± α), Vì vậy ta có thể dùng VR1 chỉnh lại trị số nhiệt độ của mạch sao cho hiển thị chính xác nhiệt độ thực tế của môi trường Chương trình con đọc dữ liệu từ ADC0804 READ_ADC: CLR WRITE ;Xung Tạo xung từ cao xuống thấp tại chân P1.1 (WRITE) NOP SETB WRITE ;Cho phép ADC bắt đầu chuyển đổi JB CLR MOV MOV SETB RET 3 ;Chờ ADC chuyển đổi xong (Khoảng 110us) ;Cho phép đọc ADC ;Đọc giá trị đã chuyển đổi vào thanh ghi A ;Lưu chỉ số nhiệt độ vào ô nhớ TEMP INTR,$ READ A,ADC TEMP,A READ Cảm biến LM35 Đây là cảm biến nhiệt, mạch tích hợp, chính xác cao, có điện áp đầu ra tỉ lệ tuyến tính với nhiệt độ theo thang độ Celsius (độ C) Cảm biến nhiệt này không yêu cầu cân chỉnh bên ngoài vì nó đã được căn chỉnh rồi Cảm biến này cho ra điện áp 10mV/1oC, và dãi nhiệt độ của nó từ 0 -> 100oC 4 Hoạt động của LCD Chức năng của từng chân LCD PINS Chức năng 1 Ground 2 Vcc 3 Chỉnh độ sáng 4 “R/S” Chọn thanh ghi 5 “R/W” Đọc/Ghi 6 6 “EN” xung clock 7 - 14 “DATA” Các chân xuất nhập dữ liệu Chân 3: là chân điều khiển VEE dùng để thay đổi độ tương phản của màn hiển thị Lý tưởng thì chân này nên nối nguồn điện áp thay đổi được, người ta thực hiện bằng cách gắn mạch chia áp dùng biến trở có đầu ra thay đổi đưa vào chân này; tuy nhiên nên chú ý là một số module cần nguồn điện DC – 7V Đơn giản nhất là người ta nối chân này với 0V (xuống đất ) Chân 4: là đường RS (Register Select=chọn thanh ghi ) đây là 1 trong 3 ngõ vào điều khiển lệnh.Khi chân này để mức thấp thì các dữ liệu được truyền đến LCD được xử lí như các mệnh lệnh và các dữ liệu đọc ra chỉ trạng thái của nó Bằng cách đưa đường RS này lên mức cao thì dữ liệu ký tự có thể xuất /nhập trên module này Chân 5: là đường R/W (read / wile ) Chân này được kéo xuống mức thấp để ghi các lệnh hay dữ liệu ký tự vào module hoặc được léo lên mức cao để đọc dữ liệu ký tự hay thông tin trạnh thái từ các thanh ghi của nó Chân 6: là đường E (enable), ngõ vào này dùng để khởi động việc chuyển các lệnh hay dữ liệu ký tự giữa module và các đường dữ liệu Khi ghi ra màn hình hiển thị LCD, dữ liệu chỉ được chuyển khi có cạnh xuống ở tín hiệu E này Tuy nhiên khi đọc ra từ LCD thì dữ liệu khã dụng sau khi có chuyển tiếp từ thấp lên cao và duy trì dữ liệu khã dụng cho đến khi tín hiệu xuống thấp một lần nữa • Gửi lệnh đến LCD Dựa trên các chân điều khiển RS, RW, EN ta có thể viết đoạn lệnh thực hiện gởi lệnh đến LCD như sau: SEND_COM: CLR RS ; ; ; ; RS = 0 : Dữ liệu được truyền xử lý như mệnh lệnh RW = 0 : Ghi lệnh Mã lệnh chứa trong A ; Xung Enable CLR RW MOV DATABUS,A CLR EN NOP SETB EN LCALL WAIT_LCD ; Kiểm tra trạng thái bận của LCD RET Bảng mã lệnh của LCD 16xx, 20xx R/S R/ W D 7 D 6 D 5 D 4 D 3 D 2 D 1 D 0 7 Instruction/Description 4 5 1 4 1 3 1 2 1 1 10 9 8 7 Chân 0 0 0 0 0 0 0 0 0 1 Xóa màn hình 0 0 0 0 0 0 0 0 1 * Trả con trỏ về vị trí đầu tiên 0 0 0 0 0 0 0 1 ID S Chế độ nhập kí tự 0 0 0 0 0 0 1 D C B Hiển thị tắt/mở & cursor 0 0 0 0 0 1 S C R L * * Dịch hiển thị/cursor 0 0 0 0 1 D L N F * * Đặt chức năng 0 0 0 1 A A A A A A Đặt địa chỉ CGRAM 0 0 1 A A A A A A A Đặt địa chỉ DDRAM 0 1 B F * * * * * * * Cờ bận & bộ đếm địa chỉ 1 0 D D D D D D D D Ghi dữ liệu ra màn hình LCD 1 1 D D D D D D D D Đọc dữ liệu từ LCD • Sơ đồ Timing 8 • Kiểm tra trạng thái bận của LCD LCD thực thi mỗi lệnh mất một khoảng thời gian, nên ta phải luôn kiểm tra xem LCD có bận không trước khi gởi lệnh hay dữ liệu đến nó bằng đoạn lệnh sau: WAIT_LCD: CLR RS SETB RW MOV DATABUS,#0FFH CLR EN NOP SETB EN MOV A,DATABUS JB ACC.7,WAIT_LCD RET • ; Lệnh ; Chế độ đọc ; Xung Enable ; Kiểm tra cờ bận bằng cách liên đọc nó Khởi động LCD Trước khi sử dụng LCD thì ta phải khởi động và đặt cấu hình cho nó Việc này được thực hiện bằng cách gởi một số lệnh khởi động đến LCD INIT_LCD: MOV A,#30H LCALL SEND_COM MOV A,#0CH LCALL SEND_COM RET ;MODE 8 BIT,1 LINE ;Cho phép LCD hiển thị 9 • Hiển thị kí tự Giống đoạn mã gửi lệnh chỉ khác ở chổ thay RS = 1 WRITE_TEXT: SETB RS CLR RW MOV DATABUS,A CLR EN NOP SETB EN LCALL WAIT_LCD RET 5 ; Chế độ gửi dữ liệu ; Xung Enable Lưu đồ giải thuật 10 Start Khởi động LCD Đặt cờ cho phép hiển thị lên mức 1 Cho phép chuyển đổi dữ liệu (WR = 0) Read ADC 1 Chờ chuyển đổi dữ liệu xong Cho phép đọc dữ liệu số (RD = 0) Hex->ASCII Chuyển dữ liệu sang mã ASII Lưu mã ASCII đã chuyển được vào R3, R2 No t >= 100 Yes Xóa cờ cho phép hiển thị DISP_FLAG TEST_TEMP No t = 100 t > 100 Yes Hiển thị text: “TEMP 100OC” 11 “TEMP OVER” 6 Chương trình DISP_FLAG= 1 No Yes $MOD51 Hiện thị “TEMP” & nhiệt độ ;LCD DISPLAY DATABUS EQU P2 RS BIT P0.0 Hiển thị trạng thái thực thi RW BIT P0.1 EN BIT P0.2 ;ADC ADC_BUS EQU P3 Delay 0.5 giây READ BIT P1.0 WRITE BIT P1.1 INTR BIT P1.2 ;DATA TEMP COUNT DISP_FLAG ORG 000H LJMP Quay lại (1) EQU EQU BIT 21H 22H 00H ;Byte lưu giá trị nhiệt độ (Hex) ;Byte chứa mã ASCII (tăng từ 0->9) ;Cờ cho phép hiển thị MAIN ORG 030H ; ********************************************************** ; MAIN ; ********************************************************** MAIN: MOV SP,#2FH ;Vị trí của Stack từ 30H MOV COUNT,#30H ;Bit đếm hiển thị trạng thái làm việc SETB DISP_FLAG ;Cho phép hiển thị hoặc không ACALL INIT_LCD ;Khởi đông LCD LCALL CLEAR_LCD ;Xóa LCD SAMPLE: ACALL READ_ADC ;Lấy mẫu ACALL HEX_ASCII ;Chuyển từ mã Hex->ASCII ACALL TEST_TEMP ;Kiểm tra xem có quá 100oC hay không ACALL DISPLAY ;Hiển thị trên LCD SETB DISP_FLAG ;Đặt cờ cho phép hiển thị SJMP SAMPLE ; ********************************************************** ; Giao tiếp ADC0804 ; ********************************************************** READ_ADC: MOV ADC_BUS,#0FFH CLR NOP SETB WRITE ;Tạo xung từ cao xuống thấp tại chân WR (P1.1) WRITE ;Cho phép ADC bắt đầu chuyển đổi tương tự -> số JB CLR MOV SETB INTR,$ ;Chờ chuyển đổi dữ liệu xong READ ;Đưa xung mức thấp đến chân RD (cho phép đọc dữ liệu) TEMP,ADC_BUS ;Lưu mã Hex của nhiệt độ vào byte nhớ TEMP READ ;Đưa chân RD trở về mức cao (sẳn sàng tiếp tục đọc) 12 RET ; ********************************************************** ; Chuyển mã ; HEX -> BCD -> ASCII (R3,R2) ; ********************************************************** HEX_ASCII: MOV A,TEMP ;Đưa giá trị Hex vào thanh ghi A để xử lý MOV B,#10 DIV AB ;A chứa nữa byte cao của mã BCD, B chứa nữa byte thấp ADD A,#30H ;Mã ASCII của nhiệt độ (chỉ số hàng chục) MOV R3,A ;Lưu vào R3 MOV A,B ADD A,#30H ;Mã ASCII của nhiệt độ (chỉ số hàng đơn vị) MOV R2,A ;Lưu vào R2 RET ; ********************************************************** ; HIEN THI LCD ; ********************************************************** DISPLAY: ;HIEN THI "TEMP" & t JNB DISP_FLAG,EXIT ;Nếu cờ DISP_FLAG=0 thì không hiển thị LCALL CLEAR_LCD MOV A,#' ' LCALL WRITE_TEXT MOV A,#'T' LCALL WRITE_TEXT MOV A,#'E' LCALL WRITE_TEXT MOV A,#'M' LCALL WRITE_TEXT MOV A,#'P' LCALL WRITE_TEXT MOV A,#' ' LCALL WRITE_TEXT MOV A,#' ' LCALL WRITE_TEXT MOV A,R3 LCALL WRITE_TEXT MOV A,R2 LCALL WRITE_TEXT MOV A,#0DFH LCALL WRITE_TEXT MOV A,#'C' LCALL WRITE_TEXT ;Hiển thị chuổi text “TEMP” ;Khoảng trắng ;Hiển thị chỉ số nhiệt độ ;Kí tự oC ;Tạo khoảng trắng MOV A,#' ' LCALL WRITE_TEXT MOV A,#' ' LCALL WRITE_TEXT MOV A,#' ' LCALL WRITE_TEXT MOV A,#' ' LCALL WRITE_TEXT STATUS: ;Hiển thị trạng thái thực thi MOV A,COUNT ;Bắt đầu từ số 0 LCALL WRITE_TEXT INC COUNT ;Tăng từ 1->9 SPACE: 13 MOV CJNE MOV A,COUNT A,#3AH,NEXT ;Đến số 9 thì Reset COUNT,#30H ;RESET về số 0 NEXT: ; ********************************************************* ; DELAY 0.5s ; ********************************************************* DELAY_500M: MOV R4,#10 ;10 x 50000us = 0.5s LOOP: MOV TH0,#HIGH(-50000) MOV TL0,#LOW(-50000) ACALL DELAY DJNZ R4,LOOP EXIT: RET ; ********************************************************** ; Kiểm tra xem có quá nhiệt độ hay không ? ; ********************************************************** TEST_TEMP: MOV A,R3 SUBB A,#30H ;ASCII -> HEX MOV B,#10 DIV AB ;Nếu A khác 0 thì  T >= 100oC JNZ TEST2 ;Nhảy khi T >= 100 RET TEST2: CLR DISP_FLAG ;Không cho hiển thị khi gọi DISPLAY MOV A,R2 SUBB A,#30H ;ASCII -> HEX JNZ OVER_TEMP ;Nhảy khi T > 100 ACALL T100 RET ; ********************************************************** ; Thông báo "OVER TEMP" ; ********************************************************** OVER_TEMP: LCALL CLEAR_LCD MOV A,#' ' LCALL WRITE_TEXT MOV A,#'O' ;Chuổi text “OVER TEMP” LCALL WRITE_TEXT MOV A,#'V' LCALL WRITE_TEXT MOV A,#'E' LCALL WRITE_TEXT MOV A,#'R' LCALL WRITE_TEXT MOV A,#' ' LCALL WRITE_TEXT MOV A,#'T' LCALL WRITE_TEXT MOV A,#'E' LCALL WRITE_TEXT MOV A,#'M' LCALL WRITE_TEXT MOV A,#'P' LCALL WRITE_TEXT ACALL DELAY_500M RET 14 ; ********************************************************** ; Hiển thị 1000C ; ********************************************************** T100: LCALL CLEAR_LCD MOV A,#' ' LCALL WRITE_TEXT MOV A,#'T' ;Chuồi text “TEMP 100oC” LCALL WRITE_TEXT MOV A,#'E' LCALL WRITE_TEXT MOV A,#'M' LCALL WRITE_TEXT MOV A,#'P' LCALL WRITE_TEXT MOV A,#' ' LCALL WRITE_TEXT MOV A,#'1' LCALL WRITE_TEXT MOV A,#'0' LCALL WRITE_TEXT MOV A,#'0' LCALL WRITE_TEXT MOV A,#0DFH LCALL WRITE_TEXT MOV A,#'C' LCALL WRITE_TEXT ACALL SPACE RET ; ********************************************************** ; LCD DISPLAY ; ********************************************************** INIT_LCD: MOV A,#30H LCALL SEND_COM MOV A,#0CH LCALL SEND_COM RET CLEAR_LCD: MOV A,#01H LCALL SEND_COM RET SEND_COM: CLR RS CLR RW MOV DATABUS,A CLR EN NOP SETB EN LCALL WAIT_LCD RET WRITE_TEXT: SETB RS CLR RW MOV DATABUS,A CLR EN NOP ;Chế độ 8 BIT,1 dòng ;Cho phép LCD hiển thị ;Mã lệnh xóa màn hình LCD ;Đặt RS=0 cho xuất lệnh ;Đặt RW=0, Chọn chế độ ghi ;Mã lệnh chứa trong thanh A ;Xung Enable ;Đợi cho lệnh được thực thi hoàn toàn bời LCD ;Đặt RS=1 cho xuất dữ liệu ;Đặt RW=0, Chọn chế độ ghi ;Mã ASCII của text chứa trong thanh ghi A ;Xung Enable 15 SETB EN LCALL WAIT_LCD RET WAIT_LCD: ;Đợi cho lệnh được thực thi hoàn toàn bời LCD CLR RS ;Gửi lệnh SETB RW ;Chế độ đọc MOV DATABUS,#0FFH ;Cấu hình P2 làm port nhập CLR EN ;Xung Enable NOP SETB EN MOV A,DATABUS ;Đọc dữ liệu từ LCD JB ACC.7,WAIT_LCD ;Nếu bit 7 ở mức cao, LCD vẫn bận RET ;*************************************************** DELAY: ;Delay theo giá trị trong TH0 & TL0 MOV TMOD,#01H SETB TR0 JNB TF0,$ CLR TR0 CLR TF0 RET END 16 Tài liệu tham khảo 1) Vi xử lý của Hồ Trung Mỹ 2) Datasheet of ADC0804, LM35D 3) Cấu trúc và lập trình họ VDK 8051 của Nguyễn Tăng Cường 4) Tài liệu lý thuyết & TH Vi Điều khiển của thầy Phạm Quang Trí 17 ... tỉ lệ tuyến tính với nhiệt độ theo thang độ Celsius (độ C) Cảm biến nhiệt không yêu cầu cân chỉnh bên ngồi chỉnh Cảm biến cho điện áp 10mV/1oC, dãi nhiệt độ từ -> 100oC Hoạt động LCD Chức chân... khác ta dễ dàng ráp mạch đo nhiệt độ hiển thị xác rõ ràng hình tinh thể lỏng Một điều đáng nói đến mạch dễ dàng nâng cấp để đo nhiệt độ cao cách thay cảm biến nhiệt điều chỉnh mã chương trình... Ngày…… Tháng…… Năm……… Lời nói đầu Với khoa học kĩ thuật phát triển việc đo nhiệt độ mơi trường thực dẽ dàng nhiệt kế thủy ngân, mạch đo nhiệt độ trình bày đồ án này, nhiên chúng em

Ngày đăng: 03/01/2016, 16:46

Từ khóa liên quan

Mục lục

  • Ngày…….Tháng……..Năm……….

  • Ngày……. Tháng……. Năm……….

Tài liệu cùng người dùng

Tài liệu liên quan