Hình dạng bên ngoài của cảm biến một dây DS1820 được mô tả trên hình 2, trong đó dạng vỏ TO-92 với 3 chân là dạng thường gặp và được dùng trong nhiều ứng dụng, còn dạng vỏ SOIC với 8 châ
Trang 1LỜI NÓI ĐẦU
Kĩ thuật vi xử lý hiện nay rất phát triển, nó đuợc áp dụng rất nhiều vào các lĩnh vực như tự động hoá, sản suất công nghịêp 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 xử lý phát triển hơn rất nhìều do nó được tích hợp lại và lập trình để điều khiển
Với tính ưu việt của vi xử lý thì trong đồ án nhỏ này chúng em chỉ tiến hành dung vi xử lý để đo và khống chế nhiệt độ, đây chỉ là ứng dụng nhỏ của vi điều khiển
Với những kiến thức học được từ thầy cô giáo cộng thêm tài liệu tham khảo tuy có thể hoàn thành đồ án này nhưng không thể tránh khỏi nhiều thiếu sót, chúng em rất mong nhận đuợc sư dạy bảo của thầy cô và ý kiến đóng góp của các bạn
Chúng em chân thành cảm ơn cô giáo Nguyễn Thị Thu Hương đã dạy cho chúng em những kiến thức cơ bản để chúng em có thể hoàn thành đồ án
Trang 2Mục lục
Phần 1: Cơ sở lý thuyết
1, Yêu câu cần thực hiện 2
2, Tổng quan về AT89S52 2
3, Cảm biến đo nhiệt độ DS18B20 6
4, IC giải mã SN74LS247N 10
5,IC 6 cổng logic đảo 74HC14N 11
6, Led 7 thanh x4 12
Phần 2: Nội dung và trình tự thiết kế 1, Giải thuật chương trình 12
2, Mô phỏng với proteus 20
3, Vẽ mạch 20
4, Làm mạch thực tế 22
Phần 3: Kết luận
Trang 3ĐỀ TÀI : Thiết kế bộ đo và khống chế nhiệt độ hiển thị bằng led 7 đoạn
Phần 1: Cơ Sở Lý Thuyết
1, Yêu cầu cần thực hiện
Thiết kế bộ đo và khống chế nhiệt độ hiển thị bằng led 7 thanh
-Mạch điện tử được thiết kế trên máy tính bằng phần mềm chuyên dụng
-Nhiệt độ do được hiển thị trên 4 led 7 đoạn
-Sai số cho phép : +-1oC
-Thao tác khống chế được mô phỏng bằng 3 led: Led đỏ ssng khi nhiệt dộ đo được nhỏ hơn nhiệt độ khống chế Led xanh sang khi nhiệt độ môi trường bằng nhiệt độ khống chế, led vàng sang khi nhiệt độ môi trường bằng nhiêt độ khống chế
2, Tổng quan về AT89S52
a, Cấu tạo và chức năng các khối của AT89S52
1 • CPU( CPU centralprocessing unit) bao gồm:
0 + Thanh ghi tích lũy A;
1 + Thanh ghi tích lũy phụ B;
2 + Đơn vị logic học (ALU);
3 + Thanh ghi từ trạng thái chương trình;
4 + Bốn băng thanh ghi;
5 + Con trỏ ngăn xếp
2 • Bộ nhớ chương trình( ROM) gồm 8Kbyte Flash
3 • Bộ nhớ dữ liệu( RAM) gồm 256 byte
4 • Bộ UART, có chức năng truyền nhận nối tiếp
5 • 3 bộ Timer/Counter 16 bit thực hiện chức năng định thời và đếm sự kiện
6 • Khối điều khiển ngắt với 2 nguồn ngắt ngoài và 4 nguồn ngắt trong
7 • 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
8 • Bộ chia tần số với hệ số chia là 12
9 • 4 cổng xuất nhập với 32 chân
b, Chức năng các chân của AT89S52
Trang 4• 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 89S52 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)
1
Trang 5Chứ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)
1
2 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
Trang 6P3.3 INT1 Ngắt ngoài 1 P3.4 T0 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
Trang 7• 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
3, Cảm biến đo nhiệt độDS18B20.
DS1820 là một sản phẩm của công ty Dallas (Hoa Kỳ), đây cũng là công ty đóng góp nhiều vào việc cho ra đời bus một dây và các cảm biến một dây Hình dạng bên ngoài của cảm biến một dây DS1820 được mô tả trên hình 2, trong đó dạng vỏ TO-92 với 3 chân là dạng thường gặp và được dùng trong nhiều ứng dụng, còn dạng vỏ SOIC với 8 chân được dùng để đo nhiệt độ bề mặt, kể cả da người!
Hình 2: Dạng đóng vỏ và bề ngoài của cảm biến DS1820
Các đặc điểm kỹ thuật của cảm biến DS1820 có thể kể ra một cách tóm tắt như sau:
• Sử dụng giao diện một dây nên chỉ cần có một chân ra để truyền thông
• Độ phân giải khi đo nhiệt độ là 9 bit Dải đo nhiệt độ -55oC đến 125oC, từng bậc 0,5oC, có thể đạt độ chính xác đến 0,1oC bằng việc hiệu chỉnh qua phần mềm
• Rất thích hợp với các ứng dụng đo lường đa điểm vì nhiều đầu đo có thể được nối trên một bus, bus này được gọi là bus một dây (1-wire bus)
• Không cần thêm linh kiện bên ngoài
• Điện áp nguồn nuôi có thể thay đổi trong khoảng rộng, từ 3,0 V đến 5,5 V một chiều và có thể được cấp thông qua đường dẫn dữ liệu
• Dòng tiêu thụ tại chế độ nghỉ cực nhỏ
• Thời gian lấy mẫu và biến đổi thành số tương đối nhanh, không quá 200 ms
• Mỗi cảm biến có một mã định danh duy nhất 64 bit chứa trong bộ nhớ ROM trên chip (on chip), giá trị nhị phân được khắc bằng tia laze
Đầu đo nhiệt độ số DS1820 đưa ra số liệu để biểu thị nhiệt độ đo được dưới dạng mã nhị phân 9 bit Các thông tin được gửi đến và nhận về từ DS1820 trên giao diện 1-wire, do đó chỉ cần hai đường dẫn gồm một đường cho tín hiệu và một đường làm dây đất là đủ để
Trang 8kết nối vi điều khiển đến điểm đo Nguồn nuôi cho các thao tác ghi/đọc/chuyển đổi có thể được trích từ đường tín hiệu, không cần có thêm đường dây riêng để cấp điện áp nguồn Mỗi vi mạch đo nhiệt độ DS1820 có một mã số định danh duy nhất, được khắc bằng laser trong quá trình chế tạo vi mạch nên nhiều vi mạch DS1820 có thể cùng kết nối vào một bus 1-wire mà không có sự nhầm lẫn Đặc điểm này làm cho việc lắp đặt nhiều cảm biến nhiệt độ tại nhiều vị trí khác nhau trở nên dễ dàng và với chi phí thấp Theo chuẩn 1-wire độ dài tối đa cho phép của bus là 300 m Số lượng các cảm biến nối vào bus không hạn chế
Để nâng cao độ phân giả lên trên 9 bit ta phải tính toán thêm bằng phần mềm dựa trên các
số liệu lưu trữ trên các thanh ghi nhiệt độ, COUNT REMAIN và COUNT PER C trong nhóm các thanh ghi nháp (scratchpad) việc tính toán dựa theo phương trình sau:
Khi sử dụng phương trình này cảm biến một dây DS1820 được nâng cấp trở thành một cảm biến nhiệt độ có độ phân giải cao
Bộ nhớ ROM 64–BIT
Mỗi cảm biến nhiệt độ DS1820 có một dãy mã 64 bit duy nhất được lưu trữ trong bộ nhớ ROM từ khi sản xuất bằng kỹ thuật laze Ý nghĩa của 64 bit mã được giải thích trên hình 3:
Hình 3: Nội dung dãy mã 64-bit trên bộ nhớ ROM
Như vậy dãy mã được chia ra thành 3 nhóm, trong đó:
• Tám bit đầu tiên là mã định danh họ một dây, mã của DS1820 là 10h
• 48 bit tiếp theo là mã số xuất xưởng duy nhất, nghĩa là mỗi cảm biến DS1820 chỉ
có một số mã
• Tám bit có ý nghĩa nhất là byte mã kiểm tra CRC (cyclic redundancy check), byte này được tính toán từ 56 bit đầu tiên của dãy mã trên ROM (xem hình 3)
Để truy cập lên cảm biến một dây DS1820 ta phải sử dụng hai nhóm lệnh: các lệnh ROM
và các lệnh chức năng (function commands) bộ nhớ, các lệnh này có thể được mô tả ngắn gọn như sau:
Sau khi thiết bị chủ (thường là một vi điều khiển) phát hiện ra một xung presence pulse,
nó có thể xuất ra một lệnh ROM Có 5 loại lệnh ROM, mỗi lệnh dài 8 bit Thiết bị chủ phải đưa ra lệnh ROM thích hợp trước khi đưa ra một lệnh chức năng để giao tiếp với cảm biến DS18S20
Lệnh ROM
Trang 9- READ ROM (33h)
Cho phép đọc ra 8 byte mã đã khắc bằng laser trên ROM, bao gồm: 8 bit mã định tên linh kiện (10h), 48 bit số xuất xưởng, 8 bit kiểm tra CRC Lệnh này chỉ dùng khi trên bus có 1 cảm biến DS1820, nếu không sẽ xảy ra xung đột trên bus do tất cả các thiết bị tớ cùng đáp ứng
- MATCH ROM (55h)
Lệnh này được gửi đi cùng với 64 bit ROM tiếp theo, cho phép bộ điều khiển bus chọn ra chỉ một cảm biến DS1820 cụ thể khi trên bus có nhiều cảm biến DS1820 cùng nối vào Chỉ có DS1820 nào có 64 bit trên ROM trung khớp với chuỗi 64 bit vừa được gửi tới mới đáp ứng lại các lệnh về bộ nhớ tiếp theo Còn các cảm biến DS1820 có 64 bit ROM không trùng khớp sẽ tiếp tục chờ một xung reset Lệnh này được sử dụng cả trong trường hợp có một cảm biến một dây, cả trong trường hợp có nhiều cảm biến một dây
- SKIP ROM (CCh)
Lệnh này cho phép thiết bị điều khiển truy nhập thẳng đến các lệnh bộ nhớ của DS1820
mà không cần gửi chuỗi mã 64 bit ROM Như vậy sẽ tiết kiệm được thời gian chờ đợi nhưng chỉ mang hiệu quả khi trên bú chỉ có một cảm biến
- SEARCH ROM (F0h)
Lệnh này cho phép bộ điều khiển bus có thể dò tìm được số lượng thành viên tớ đang được đấu vào bus và các giá trị cụ thể trong 64 bit ROM của chúng bằng một chu trình dò tìm
- ALARM SEARCH (ECh)
Tiến trình của lệnh này giống hệt như lệnh Search ROM, nhưng cảm biến DS1820 chỉ đáp ứng lệnh này khi xuất hiện điều kiện cảnh báo trong phép đo nhiệt độ cuối cùng Điều kiện cảnh báo ở đây được định nghĩa là giá trị nhiệt độ đo được lớn hơn giá trị TH
và nhỏ hơn giá trị TL là hai giá trị nhiệt độ cao nhất và nhiệt độ thấp nhất đã được đặt trên thanh ghi trong bộ nhớ của cảm biến
Lệnh chức năng bộ nhớ
Sau khi thiết bị chủ (thường là một vi điều khiển) sử dụng các lệnh ROM để định địa chỉ cho các cảm biến một dây đang được đấu vào bus, thiết bị chủ sẽ đưa ra các lệnh chức năng DS1820 Bằng các lệnh chức năng thiết bị chủ có thể đọc ra và ghi vào bộ nhớ nháp (scratchpath) của cảm biến DS1820 khởi tạo quá trình chuyển đổi giá trị nhiệt độ đo được và xác định chế độ cung cấp điện áp nguồn Các lệnh chức năng có thể được mô tả ngắn gọn như sau:
- WRITE SCRATCHPAD (4Eh)
Lệnh này cho phép ghi 2 byte dữ liệu vào bộ nhớ nháp của DS1820 Byte đầu tiên được ghi vào thanh ghi TH (byte 2 của bộ nhớ nháp) còn byte thứ hai được ghi vào thanh ghi
Trang 10TL (byte 3 của bộ nhớ nháp) Dữ liệu truyền theo trình tự đầu tiên là bit có ý nghĩa nhất
và kế tiếp là những bit có ý nghĩa giảm dần Cả hai byte này phải được ghi trước khi thiết
bị chủ xuất ra một xung reset hoặc khi có dữ liệu khác xuất hiện
- READ SCRATCHPAD (BEh)
Lệnh này cho phép thiết bị chủ đọc nội dung bộ nhớ nháp Quá trình đọc bắt đầu từ bit có
ý nghĩa nhấy của byte 0 và tiếp tục cho đến byte rhứ 9 (byte 8 - CRC) Thiết bị chủ có thể xuất ra một xung reset để làm dừng quá trình đọc bất kỳ lúc nào nếu như chỉ có một phần của dữ liệu trên bộ nhớ nháp cần được đọc
- COPYSCRATCHPAD (48h)
Lệnh này copy nội dung của hai thanh ghi TH và TL (byte 2 và byte 3) vào bộ nhớ
EEPROM Nếu cảm biến được sử dụng trong chế dộ cấp nguồn l bắt đầu việc đo
- CONVERT T (44h)
Lệnh này khởi động một quá trình đo và chuyển đổi giá trị nhiệt độ thành số (nhị phân) Sau khi chuyển đổi giá trị kết quả đo nhiệt độ được lưu trữ trên thanh ghi nhiệt độ 2 byte trong bộ nhớ nháp Thời gian chuyển đổi không quá 200 ms, trong thời gian đang chuyển đổi nếu thực hiện lệnh đọc thì các giá trị đọc ra đều bằng 0
- READ POWER SUPPLY (B4h)
Một lệnh đọc tiếp sau lệnh này sẽ cho biết DS1820 đang sử dụng chế độ cấp nguồn như thế nào, giá trị đọc được bằng 0 nếu cấp nguồn bằng chính đường dẫn dữ liệu và bằng 1 nếu cấp nguồn qua một đường dẫn riêng
Đến đây ta có thể thấy là việc sử dụng các lệnh vừa trình bày là một công việc không đơn giản
Trang 114 IC giải mã 74ls247
Đây là ic hoạt động ở mức tích cực thấp ta có bảng sau:
Trang 12Trong đó: 1A,2A,3A,4A,5A,6A: dữ liệu vào
1Y,2Y,3Y,4Y,5Y,6Y: dữ liệu ra tương ứng
6 Led 7 thanh x4.Sơ đồ chân:
1
Trang 13Phần 2: Nội dung và trình tự thiết kế.
1 Giải thuật chương trình
Trang 14Code chương trình:Biên dịch bằng phần mềm Keil c.
Phí
m setu
-Phím +
t d =t d +1
t d =t d -1
Hiển thị
Trang 15#include<stdio.h>
#include<math.h>
unsigned char ou[4];
unsigned int i,j,p;
unsigned int dat;
unsigned char tem[9],loop=0,temp=0;
}
}
// -tao tre U
us -void DelayUs(int us)
{
int i;
for (i=0; i<us; i+ +);
Trang 16DQ = 0; //keo DQ xuong muc thap
DelayUs(29); // tre khoang 490us
DQ = 1; // cho phep DQ hoat dong
DelayUs(3); // tre 55 uS
presence = DQ; // lay tin hieu do duoc
DelayUs(25); // cho den khi ket thuc lay tin hieu 316 uS
return(presence); // lai tiep tuc lay tin hieu
unsigned char i=0;
DQ = 0; // keo DQ xuong muc thap
muc 1
for (i=0; i<3; i++); // tre khoang 17us de bat dau
return(DQ); // quay tro ve gia tri cua DQ
DQ = Dbit ? 1:0;//DQ=1 neu DQ=Dbit
DelayUs(5); // tre khoang 39 uS
Trang 17return(Din); }
Trang 18// -void Config(unsigned char A_th,A_tl,mode)
WriteByte(0xcc); // bo qua ROM cua DS18B20
WriteByte(0x44); // THUC HIEN CHUYEN DOI NHIET DO
while (ReadByte()==0xff); // doi cho chuyen doi nhiet do hoan chinh
ResetDS1820();
//reset DS18b20
WriteByte(0xcc); // bo qua ROm cua DS18B20
WriteByte(0xbe); //Doc ket qua
for (n=0; n<9; n++) // Doc 9 bit nhung chi doc tung bit mot
{
buff[n]=ReadByte(); // Doc DS1820
}
EA=1;
Trang 19//Cho phep ngat
for(x=0;x<loop;x++)
{ for(y=0;y<33;y+ +);
}
}
// -Ham hien thi len
led -void h_thi(unsigned char num)
{
unsigned char i=0,xoa=0;
xoa=(num<100)
? 3:4; //de xoa so 0 dau tien khi nhiet do <100
for(i=1;i<xoa;i+ +)
{ ou[i]= num%10; num/=10; }
for(i=0;i<xoa;i+ +)
{
Trang 20delay(5); P0=255;
delay(2); }
}
//============ham cai dat nhiet do=========
void ngat0(void) interrupt 0
EA=1 ;
Trang 21P1=0x00; Config(0,0,31); //cai che do 9 bit cho ds18b20
while(1) { unsigned int t;
for(loop=0;loop<255;loop++)
{
h_thi(temp);
Trang 22} t=(int) temp;
2 Mô phỏng với proteus
3 Vẽ mạch
Sơ đồ nguyên lý trên Altium
Trang 24Do còn thiếu nhiều kinh nghiệm nên mạch chay thực tế còn chưa ổn định.
Mạch đo nhiệt độ chính xác +-0,5oC Sử dụng cảm biến 1wire DS18b20 với ưu điểm đường dẫn tín hiệu ra và nguồn có thể dung chung trên một dây dẫn và không chỉ chung cho một cảm biến mà nhiều cảm biến có thể dung chung đường dẫn Do sử dụng chung đường dẫn số liệu và đường cấp điện áp nguồn nên rất thích hợp với các ứng dụng đo lường đa điểm Ví dụ cần đo nhiệt độ của 20 căn phòng gần nhau,nếu tính trung bình mỗi điểm đo cần 4 đường dây thì ta cần tới
60 dây.trong trường hợp này cảm biến 1wire DS18B20 quả là một biện pháp kĩ
Trang 25thuật Hướng phát triển của đề tài chính là giải pháp kĩ thuật đó:đo nhiệt độ đa điểm dùng cảm biến 1wire và vđk và với độ chính xác cao hơn.(0,1oC).
Tµi liÖu tham kh¶o:
TÀI LIỆU THAM KHẢO.
1 Vi điều khiển cấu trúc lập trình và ứng dụng, Kiều Xuân Thực, Vũ Thị Thu Hương, Vũ Trung Kiên.
2 Nguồn internet: http://www.dientuvietnam.net/