Tải bản đầy đủ (.doc) (18 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (208.93 KB, 18 trang )

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





×