Kỹ thuật vi điều khiển hiện nay rất phát triển, nó đƣợc ứng dụng vào rất
nhiều lĩnh vực sản xuất công nghiệp, tự động hóa, trong đời sống và còn nhiều
lĩnh vực khác nữa. So với kỹ thuật số thì kỹ thuật vi điểu khiển nhỏ gọn hơn rất
nhiều do nó đƣợc tích hợp lại và có khả năng lập trình đƣợc để điều khiển. Nên rất
tiện dụng và cơ động. Với tính ƣu việt của vi điều khiển thì trong phạm vi đồ án
nhỏ này, em chỉ dùng vdk để đo và khống chế nhiệt độ, đồng thời cho hiển thị lên
màn hình máy vi tính.
Mục đích của đề tài hƣớng đến: tạo ra bƣớc đầu cho sinh viên thử nghiệm
những ứng dụng của vdk trong thực tiễn để rồi từ đó tìm tòi, phát triển nhiều ứng
dụng khác trong đời sống hằng ngày cần đến.
Việc thực hiện xong đồ án môn học bằng các kiến thức đã học, một số sách
tham khảo và một số nguồn tài liệu khác nên không tránh khỏi những thiếu sót. Vì
vậy nhóm rất mong đƣợc sự góp ý của thầy cô và các bạn.
17 trang |
Chia sẻ: lvbuiluyen | Lượt xem: 2557 | Lượt tải: 3
Bạn đang xem nội dung tài liệu Đề tài Thiết kế bộ đo và khống chế nhiệt độ hiển thị lên màn hình máy vi tính, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Dt2-k9
Minh – Thế
1
BỘ CÔNG THƢƠNG
TRƢỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI
KHOA : ĐIỆN TỬ
ĐỒ ÁN MÔN HỌC
ĐỀ TÀI: THIẾT KẾ BỘ ĐO VÀ KHỐNG CHẾ
NHIỆT ĐỘ HIỂN THỊ LÊN MÀN HÌNH MÁY VI TÍNH
.
“Nhiệt độ khống chế được đặt bằng phím nhấn, thao tác khống chế được mô phỏng bằng
3led với 3 màu khác nhau, sai số cho phép là ± 10C”.
Giáo viên hướng dẫn:
Nguyễn Anh Dũng
Sinh viên thực hiện:
1.Mai Xuân Minh
2.Tạ Xuân Thế
Dt2-k9
Minh – Thế
2
LỜI NÓI ĐẦU
Kỹ thuật vi điều khiển hiện nay rất phát triển, nó đƣợc ứng dụng vào rất
nhiều lĩnh vực sản xuất công nghiệp, tự động hóa, trong đời sống và còn nhiều
lĩnh vực khác nữa. So với kỹ thuật số thì kỹ thuật vi điểu khiển nhỏ gọn hơn rất
nhiều do nó đƣợc tích hợp lại và có khả năng lập trình đƣợc để điều khiển. Nên rất
tiện dụng và cơ động. Với tính ƣu việt của vi điều khiển thì trong phạm vi đồ án
nhỏ này, em chỉ dùng vdk để đo và khống chế nhiệt độ, đồng thời cho hiển thị lên
màn hình máy vi tính.
Mục đích của đề tài hƣớng đến: tạo ra bƣớc đầu cho sinh viên thử nghiệm
những ứng dụng của vdk trong thực tiễn để rồi từ đó tìm tòi, phát triển nhiều ứng
dụng khác trong đời sống hằng ngày cần đến.
Việc thực hiện xong đồ án môn học bằng các kiến thức đã học, một số sách
tham khảo và một số nguồn tài liệu khác nên không tránh khỏi những thiếu sót. Vì
vậy nhóm rất mong đƣợc sự góp ý của thầy cô và các bạn.
Dt2-k9
Minh – Thế
3
Mục lục
trang
Lời nói đầu. ................................................................................................................2
Mục lục. ......................................................................................................................3
Chƣơng I>Tổng quan thiết kế phần cứng cho đồ án. ......................................4
I. sơ đồ khối tổng quát . ..........................................................................4
II. Các vi mạch chính sử dụng trong từng khối và nguyên lý hoạt
động từng khối. ......................................... ............................................5
Chƣơng II >Lập trình cho vi điều khiển. ..........................................................14
1. sơ đồ giải thuật................................................................................... ..14
2. code lập trình. .......................................................................................
Dt2-k9
Minh – Thế
4
CHƢƠNG 1:TỔNG QUAN THIẾT KẾ PHẦN CỨNG CHO ĐỒ ÁN
I. SƠ ĐỒ KHỐI TỔNG QUÁT
1.sơ đồ
KHỐI
CHUYỂN
ĐỒI
TƢƠNG TỰ
=> SỐ
KHỐI XỬ LÝ TRUNG
TÂM: 8051
KHỐI HIỂN
THỊ:MVT
KHỐI ĐIỀU
KHIỂN
(khống chế)
KHỐI CẢM
BIẾN
ĐẦU RA ỨNG
DỤNG
(điều khiển lò
nhiệt, cảnh
báo,…)
Dt2-k9
Minh – Thế
5
2> sơ đồ nguyên lý.
II. CÁC VI MẠCH CHÍNH SỬ DỤNG TRONG ĐỒ ÁN
1.trong khối cảm biến: có LM35;
2.Trong khối chuyển đổi: ADC 0804;
3.Trong khối xử lý trung tâm: AT89C52;
4.khối hiển thị : màn hình máy tính.
5.Khối điều khiển (khống chế): hệ thống các phím nhấn.
6.đầu ra ứng dụng: (đơn giản) là các led hiển thị.
III. CẤU TẠO VÀ NGUYÊN LÝ HOẠT ĐỘNG CƠ BẢN CỦA TỪNG VI MẠCH.
1> Cảm biến nhiệt LM35.
1.1 Nguyên lý hoạt động chung của IC đo nhiệt độ.
Dt2-k9
Minh – Thế
6
IC đo nhiệt độ là một mạch tích hợp nhận tín hiệu nhiệt độ chuyển thành tín hiệu
điện dƣới dạng dòng điện hay điện áp. Dựa vào đặc tính rất nhạy của các bán dẫn
với nhiệt độ, tạo ra điện áp hoặc dòng điện tỷ lệ thuận với nhiệt độ tuyệt đối. Đo tín
hiệu điện ta biết đƣợc giá trị của nhiệt độ cần đo. Sự tác động của nhiệt độ tạo ra
điện tích tự do và các lỗ trống trong chất bán dẫn. Bằng sự phá vỡ các phân
Dt2-k9
Minh – Thế
7
tử, bứt các electron thành dạng tự do di chuyển qua vùng cấu trúc mạng tinh thể
tạo sự xuất hiện các lỗ trống. Làm cho tỷ lệ điện tử tự do và lỗ trống tăng lên theo
quy luật hàm mũ với nhiệt độ.
+LM135, LM35
Ngõ ra là điện áp.
Độ nhạy 10mv/10C
Sai số cực đại 1,50C khi nhiệt độ lớn hơn 1000C.
Phạm vi sử dụng :00 C=>1000 C
3> bộ chuyển đổi tƣơng tự-số: ADC 0804;
a, cấu tạo
ADC 0804 là một bộ chuyển đổi tƣơng tự số. Gồm có 20 chân.
DB0-DB7: là 8 chân ra dữ liệu.
RD: lối vào đọc
WR :lối vào ghi.
INTR: lối ra ngắt.
CLKR/CLKIN: các lối vào điều khiển xung nhịp.
VIN: lối vào analog dƣơng
b, sơ đồ
c, tính toán và cân chỉnh.
Chọn điện trở R6 và tụ C1 cho bộ dao động của ADC0804.
R6=10k Ω và C1=15pf.
Có đầu ra số: N=
256
xVin.;
5
d, nguyên lý hoạt động
¾ DB0- DB7: các lối ra số, dữ liệu chuyển đổi xuất hiện trên 8bit này. Bộ biến đổi
có độ phân giải là 5/256
¾ RD :là chân điều khiển đọc dữ liệu. RD=0: có dữ liệu lối ra.
RD=1: không có dữ liệu lối ra.
¾ WR: bình thƣờng ở mức logic cao, và lối vào này sẽ đƣợc kéo xuống mức thấp,
sau đó lại trở về mức cao để bắt đầu quá trình chuyển đổi.
Dt2-k9
Minh – Thế
8
¾ INTR: là lối ra ngắt của bộ biến đổi A/D. 1 sƣờn xung âm đƣợc tạo lên chân này
khi quá trình chuyển đổi kết thúc. Lối ra này thƣờng đƣợc sử dụng để tạo ra một
ngắt trong vi điều khiển sao cho dữ liệu đã chuyển đổi có thể đƣợc đọc.
¾ ADC 0804 chứa một bộ dao động bên trong và cần có 1 tụ điện và 1điện trở bên
ngoài nối chân CLKR và CLKIN để khởi động bộ dao động.
¾ VIN là chân lối vào của điện áp tƣơng tự.
¾ Bít 0 và 1 của ADC phải có điện trở kéo lên, do lối ra bộ điều khiển tại những
chân này không có sẵn điện trở kéo lên.
Khối giao tiếp với máy tính qua max232.
Chức năng truyền dữ liệu biến đổi đƣợc lên máy tính thông qua max232
CÁC BƢỚC CỦA QUÁ TRÌNH CHUYỂN ĐỔI.
Đặt WR =RD=0;
Bắt đầu biến đổi. Đặt WR=1, trễ( )ms.
Phát hiện điểm kết thúc của quá trình biến đổi khi INTR xuống mức thấp.
Đọc dữ liệu từ DB0=>DB7.
4> vi điều khiển AT89C52;
a, cấu tạo và chức năng các khối của AT89S52.
• CPU( CPU centralprocessing unit) bao gồm:
9 Thanh ghi tích lũy A;
9 Thanh ghi tích lũy phụ B;
9 Đơn vị logic học (ALU);
9 Thanh ghi từ trạng thái chƣơng trình;
Dt2-k9
Minh – Thế
9
9 Bốn băng thanh ghi;
9 Con trỏ ngăn xếp
• Bộ nhớ chƣơng trình( ROM) gồm 8Kbyte Flash.
• Bộ nhớ dữ liệu( RAM) gồm 256 byte.
• Bộ UART, có chức năng truyền nhận nối tiếp.
• 3 bộ Timer/Counter 16 bit thực hiện chức năng định thời và đếm sự kiện.
• Khối điều khiển ngắt với 2 nguồn ngắt ngoài và 4 nguồn ngắt trong.
• Bộ lập trình( ghi chƣơng trình lên Flash ROM) cho phép ngƣời sử dụng có thể
nạp các chƣơng trình cho chíp mà không cần các bộ nạp chuyên dụng.
• Bộ chia tần số với hệ số chia là 12.
• 4 cổng xuất nhập với 32 chân.
b, chức năng các chân của AT89C52
Port 0( P0.0=>P0.7)
Port 0 gồm 8 chân, ngoài chức năng xuất nhập, port 0 còn là bus đa hợp dữ liệu và địa
chỉ( AD0-AD7), chức năng này sẽ đƣợc sử dụng khi 89c52 giao tiếp với các thiết bị
ngoài có kiến trúc Bus nhƣ các vi mạch nhớ, mạch PIO…
Port 1( P1.0=>P1.7)
Chức năng duy nhất của Port 1 là chức năng xuất nhập cũng nhƣ các Port khác. Port1
có thể xuất nhập theo bit và theo byte.
Port 2( P2.0=>P2.7)
Port 2 ngoài chức năng là cổng vào/ra nhƣ Port 0 và 1 còn là byte cao của bus địa chỉ
khi sử dụng bộ nhớ ngoài.
Dt2-k9
Minh – Thế
10
Port 3
Mỗi chân trên Port 3 ngoài chức năng xuất nhập còn có một chức năng riêng, cụ thể
nhƣ sau:
Bit Tên Chức năng
P3.0 RXD Dữ liệu nhận cho Port nối tiếp
P3.1 TXD Dữ liệu truyền cho Port nối tiếp
P3.2 INT0 Ngắt bên ngoài 0
P3.3 INT1 Ngắt ngoài 1
P3.4 TO Ngõ vào của Timer/counter0
P3.5 T1 Ngõ vào của Timer/counter1
P3.6 /WR Xung ghi bộ nhớ dữ liệu ngoài.
P3.7 /RD Xung đọc bộ nhớ dữ liệu ngoài.
Chân /PSEN : là chân điều khiển đọc chƣơng trình ở bộ nhớ ngoài.
Chân ALE.
ALE là tín hiệu điều khiển chốt địa chỉ có tần số bằng 1/6 tần số dao động của vi điều
khiển. Tín hiệu ALE đƣợc dùng để cho phép vi mạch chốt bên ngoài nhƣ 7473.
Chân /EA.
Tín hiệu /EA cho phép chọn bộ nhớ chƣơng trình là bộ nhớ trong hay ngoài. EA=1 thì
thực hiện chƣơng trình trong RAM nội. EA=0 thực hiện ở RAM ngoài.
RST( reset)
Ngõ vào reset trên chân số 9. khi RST=1 thì bộ vi điều khiển sẽ đƣợc khởi động lại
thiết lập ban đầu.
XTAL1, XTAL2
2 chân này đƣợc nối song song với thạch anh tần số max=33 Mhz. Để tạo dao động
cho bộ vi điều khiển.
Vcc, GND : cung cấp nguồn nuôi cho bộ vi điều khiển. cấp qua chân 20 và 40.
c, sơ đồ AT89C52 trong mạch
Dt2-k9
Minh – Thế
11
d, nguyên lý hoạt động
+Chân 9 đƣợc nối với mạch reset. Khi nhấn SW1 thì bộ vi điều khiển sẽ đƣợc khởi động
lại từ đầu.
+điện trở băng: có tác dụng làm điện trở kéo lên nguồn.
+ chân 18-19 đƣợc nối // với thạch anh 12Mhz. mạch có nhiệm vụ tạo dao động cho vi
điều khiển.
+chân P2.4=>P2.7 điều khiển led. Khi nhiệt độ đo đƣợc vƣợt qua khoảng nhiệt độ khống
chế thì 1 trong 4 đèn led này sẽ sáng.
+ chân P1.0=>P1.7. giao tiếp với ADC0804. Cổng P0 này có nhiệm vụ đọc nhiệt độ thu
đƣợc từ bộ chuyển đổi.
+P3.0=>P3.1. giao tiếp với max232 để truyền dữ liệu hiển thị lên máy tính.
+P3.5, P3.7 lần lƣợt nối với INTR /RD và /WR của ADC0804. Nhiệm vụ điều khiển
hoạt động của bộ chuyển đổi số - tƣơng tự.
+P3.2=> P3.3 dùng để nối với các phím nhấn. Có tác dụng để thực hiện các thao tác
khống chế nhiệt độ cần đo.
Dt2-k9
Minh – Thế
12
6> bộ phím nhấn điều khiển (khống chế)
a, sơ đồ mạch
b, chức năng: dùng để thiết lập nhiệt độ khống chế.
SW2 (đƣợc nối với INT0 ) là phím dùng để đặt nhiệt độ khống chế.
SW3 (đƣợc nối với INT1) là phím dùng để tăng giảm nhiệt độ khống
chế. SW1 (đƣợc nối với 9) là phím dùng để làm phím reset
7> ứng dụng điều khiển
a, sơ đồ mạch
b, chức năng: hiển thị khi nhiệt độ đo đƣợc so sánh với nhiệt độ khống chế.
Nếu t0 đo > t0khống chế max thì led 1 sáng.
Nếu t0 đo<t0 khống chế min thì led 2 sáng.
Nếu t0 kcmin< t0 đo< t0 kc max. thì led 3sáng.
Đây chỉ là mạch điều khiển đơn giản sử dụng led. Còn trong thực tế có thể ứng dụng
nhiều: nhƣ việc khống chế nhiệt độ của lò lung, máy lạnh,…
Dt2-k9
Minh – Thế
13
I>sơ đồ giải thuật
CHƢƠNG II>LẬP TRÌNH CHO VI ĐIỀU KHIỂN
Chƣơng trình chính.
START
NẠP GIÁ TRỊ ĐẦU
Tăng t0 đặt T
0 đo > t0 max
Đọc ADC
Giảm t0 đặt
T
0 đo <t0 min
Hiển thị
cảnh báo
Khối xử lý
Hiển thị t0 đo đƣợc Hiển thị t0 đặt
Dt2-k9
Minh – Thế
14
II> code chƣơng trình.
#include
#include
sbit led0=P2^0;
sbit led1=P2^1;
sbit led2=P2^2;
sbit led3=P2^3;
sbit led_do=P2^4; // nhiet do moi truong < nhiet do
khong che
sbit led_vang=P2^5; // nhiet do moi truong = nhiet do
khong che
sbit led_xanh=P2^6; // nhiet do moi truong > nhiet do
khong che
sbit led_trang=P2^7;
sbit adc_intr=P3^5;
sbit adc_wr=P3^6;
sbit adc_rd=P3^7;
int ngat0,ngat1,tong;
unsigned char chuc,donvi,nhiet_do,dien_ap,khong_che,i,k;
unsigned char M[10]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
void delay(unsigned int n) // ham tre
{
unsigned int j;
for(j=0;j<n;j++);
}
void bien_doi_adc(void) // bien doi adc
{
adc_rd=0;
adc_wr=0;
delay(2);
adc_wr=1;
while(!adc_intr);
dien_ap=P0;
nhiet_do=dien_ap/2;
}
void hien_thi(unsigned char nhiet_do) // hien thi nhiet do moi truong
{
if(nhiet_do>=0 && nhiet_do<10)
Dt2-k9
Minh – Thế
15
{
chuc = 0;
donvi = nhiet_do;
}
if(nhiet_do>=10 && nhiet_do<100)
{
chuc = nhiet_do/10;
donvi = nhiet_do%10;
}
while(!TI);
SBUF=M[chuc];
TI=0;
while(!TI);
SBUF=M[donvi];
TI=0;
while(!TI);
SBUF=0x0D;
TI=0;
if(nhiet_do=100)
{
printf("ngoai dai do");
}
}
void main(void) // ham
chính
{
IE=0x85;
IT0=IT1=1;
khong_che=20;
SCON=0x52; // REN =1 DE CHO PHEP TRUYEN DU LIEU
TMOD=0x20; // TIMER 1 LÀM VIEC O CHE DO 2
TH1=TL1=-3; // tao toc do baud la 9600
TR1=1;
Dt2-k9
Minh – Thế
16
while(1)
{
tong=0;
for (i=0;i<20;i++)
{
bien_doi_adc();
tong=tong+nhiet_do;
}
nhiet_do=tong/20;
if(ngat0==0)
{
led_xanh=led_do=led_vang=1;
printf("nhiet do moi truong la : ");
hien_thi(nhiet_do);
}
if(ngat0==1||ngat0==2)
{
bien_doi_adc();
printf("nhiet do khong che la : ");
hien_thi(khong_che);
if(khong_che < nhiet_do)
{
led_do=led_vang=1;
led_xanh=0;
}
if(khong_che > nhiet_do)
{
led_vang=led_xanh=1;
led_do=0;
}
if(khong_che == nhiet_do)
{
led_do=led_xanh=1;
led_vang=0;
}
}
}
Dt2-k9
Minh – Thế
17
}
void khongche(void) interrupt 0 // khong che nhiet do o 20
do C
{
led_trang=1;
if(ngat0<2)
{
ngat0++;
if(ngat0==1)
led_trang=0;
else
led_trang=1;
}
else
ngat0=0;
}
void tang_giam(void) interrupt 2 // tang, giam nhiet do khong che
{
if(ngat0==1)
{
ngat1=khong_che++;
}
if(ngat0==2)
{
ngat1=khong_che--;
}
}