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

Đề Tài Đo Và Khống Chế Nhiệt Độ, Sử Dụng Loại Cảm Biến Đo Nhiệt Độ Dùng IC DS18B20

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 (583.44 KB, 26 trang )

LỜI NÓI ĐẦU

Cảm biến ngày nay không thể thiếu trong nhiều lĩnh vực của đời sống và
công nghiệp. Cảm biến giúp ta nhận biết những biến đổi của môi trường xung
quanh từ đó đưa ra những giải pháp điều khiển thích hợp. Tuý từng loại ứng
dụng mà có nhiều loại cảm biến khác nhau, như cảm biến áp suất, cảm biến độ
ẩm, cảm biến nhiệt độ…Ở đây với đề tài là đo và khống chế nhiệt độ, chúng em
sử dụng loại cảm biến đo nhiệt độ dùng IC DS18B20.
Vì thời gian không cho phép nên đề tài còn nhiều thiếu sót,mong được sự
giúp đỡ và đóng góp ý kiến của các thày cô và các bạn.

Hà nội ngày 27 tháng 5 năm 2010

Giáo viên hưỡng dẫn:
Nhóm sinh viên thực hiện:
Diệp Hữu Hùng
Đỗ Đình Lập
Phùng Quốc Chiến


MỤC LỤC

CHƯƠNG 1: TÌM HIỂU CHUNG
1.1. Tổng quan về các loại đầu đo và các phương pháp đo nhiệt độ
Nhiệt độ là một trong những thông số quan trọng nhất ảnh hưởng đến đặc
tính của vật chất nên trong các quá trình kĩ thuật hay cuộc sống hằng ngày rất
hay gặp yêu cầu đo nhiệt độ. Ngày nay trong rất nhiều thiết bị gia dụng và trong
các dây chuyền sảm xuất công nghiệp việc xác định nhiệt độ hiện thời của thiết
bị là một trong những yêu cầu mang tính bắt buộc.
Tuỳ theo nhiệt độ đo và mức độ chính xác yêu cầu mà người ta sử dụng các
phương pháp và các loại thiết bị đo khác nhau. Thông thường nhiệt độ đo được


chia thành ba dải: nhiệt độ thấp, nhiệt độ trung bình và nhiệt độ cao.
- Ở nhiệt độ trung bình và thấp: phương pháp đo là phương pháp tiếp xúc
nghĩa là dụng cụ đo được đặt trực tiếp ngay tại môi trường cần đo.
- Ở nhiệt độ cao : phương pháp đo là phương pháp không tiếp xúc nghĩa
là dụng cụ đo đặt ngoài môi trường cần đo.


Với phương pháp đo tiếp xúc người ta sử dụng hai loại nhiệt kế tiếp xúc là
nhiệt kế nhiệt điện trở (Resistance Thermometer), nhiệt kế nhiệt ngẫu
(Thermocouples) hoặc sử dụng các phần tử bán dẫn (diot, transistor nhiệt).Các
loại đầu đo này hoạt động tốt với độ nhạy cao trong môi trường nhiệt độ thấp và
trung bình. Tuy nhiên với môi trường có nhiệt độ cao từ 1600 0C trở lên các đầu
đo trên không chịu được lâu dài nên người ta hay sử dụng cặp nhiệt điện hoặc sử
dụng phương pháp đo không trực tiếp.
Với các thiết bị có nhiệt độ cao mà các đầu đo trực tiếp không tiếp xúc
được hoặc vật cần đo nhiệt độ bị cách ly về không gian người ta sẽ sử dụng đến
phương pháp đo không tiếp xúc. Một trong những phương pháp đo không tiếp
xúc phổ biến nhất là phương pháp “hoả quang kế” dựa trên bức xạ nhiệt của
vật.
Ví dụ một số loại IC đo nhiệt độ khác

1.2. Sơ đồ khối hệ thống đo nhiệt độ
Hệ thống đo và hiển thị nhiệt độ đơn giản sử dụng đầu đo nhiệt độ là IC
DS18B20 sẽ được thiết kế theo sơ đồ khối sau:


Đầu đo nhiệt độ

IC DS18B20


Bộ xử lý tín hiệu

VĐK 89C51

Bộ hiển thị

Máy tính + Led 7 đoạn

CHƯƠN 2: THIẾT KẾ
2.1. Cấu tạo nguyên lý hoạt động của các IC DS18B20, VĐK89C51
2.1.1. Cảm biến nhiệt độ DS18B20


a. Đặc tính:
− Có duy nhất một đầu vào cho cổng truyền thông tin.
− Mỗi thiết bị có 64bit mã seri được lưu trên Rom.
− Cần cung cấp nguôn cho đường dữ liệu, nguồn chính có điện áp khoảng
3V-5.5V.
− Phù hợp với nhiệt độ từ -55:125ºC (-67:257ºF).
− Độ chính xác ±0.5ºC nếu đo ở dải đo khoảng từ -10ºC đến 85ºC.
− Độ phân giải của nhiệt kế mà người sử dụng có thể chọn là từ 9 ->12 bit.
− Chuyển đối nhiệt độ cho bộ 12bit trên 750ms (max).
− Có 2 loại IC là dip 3 chân va dip 8 chân.
− Được ứng dụng trong báo động quá nhiệt, cảm biến nhiệt độ trong nhiều
bộ phận.
b.Mô tả:
Nhiệt kế số DS18B20 cung cấp 9bit va 12bit đo nhiệt độ bách phân và có một
chức năng báo thức. DS18B20 chỉ truyền dữ liệu qua một đường Bus để giao
tiếp với bộ sử lý trung tâm. Nó có một phạm vi hoạt động của nhiệt độ -55 ° C
đến 125 ° C và là chính xác đến ± 0,5 ° C trên phạm vi -10 ° C đến 85 ° C.

Ngoài ra, DS18B20 có thể loại bỏ sự cần thiết cho một nguồn điện bên ngoài.


Mỗi DS18B20 có duy nhất 64-bit mã nối tiếp, cho phép DS18B20 nhiều đến
chức năng trên cùng một đường Bus. Vì vậy, nó đơn giản để sử dụng một bộ vi
xử lý để kiểm soát DS18B20 nhiều hơn một phân phối diện tích lớn. Ứng dụng
có thể được sử dụng từ tính năng này bao gồm HVAC kiểm soát môi trường, hệ
thống theo dõi nhiệt độ bên trong tòa nhà, thiết bị, hoặc máy móc, và giám sát
quá trình và hệ thống điều khiển.
Thông tin thứ tự của các loai:

Mô tả về các IC 3 chân và 8 chân:

c.Tổng Quát:
Hình 1 cho thấy một sơ đồ khối của DS18B20, và mô tả các loại Pin dùng.
Rom 64-bit duy nhất cho mã seri của thiết bị. Bộ nhớ tạm thời chứa 2-byte
thanh nhiệt độ mà đầu ra số từ các cảm biến nhiệt độ. Ngoài ra, bộ nhớ tạm thời
cung cấp truy cập vào 1-byte trên và đăng ký kích hoạt báo động thấp (TH và
TL) và 1-byte cấu hình đăng ký. Việc đăng ký cấu hình cho phép người dùng đặt
việc giải quyết các chuyển đổi số đến 9, 10, 11, hoặc 12 bit. Các TH, TL, và
đăng ký cấu hình không đổi (EEPROM), do đó nó sẽ giữ lại dữ liệu khi thiết bị
có nguồn mất đi.
DS18B20 này sử dụng một đường Bus mà thực hiện giao tiếp bằng cách sử
dụng Bus một tín hiệu điều khiển. Dòng điều khiển yêu cầu phải có điện trở đưa


lên yếu từ tất cả các thiết bị được liên kết với các Bus của bộ vi xử lý, xác định
cho địa chỉ các thiết bị trên Bus sử dụng một thiết bị đặc biệt thông qua một 3state hoặc mở các cổng (các pin DQ trong trường hợp của DS18B20). Trong hệ
thống Bus, DS18B20 64-bit. Bởi vì mỗi thiết bị có một mã duy nhất, số lượng
các thiết bị có thể được giải quyết trên một Bus là hầu như không giới hạn. Giao

thức của một đường Bus, trong đó có giải thích chi tiết về các lệnh và "Khe thời
gian," được bao gồm trong việc lựa chọn một đường Bus hệ thống.
Một tính năng của DS18B20 là khả năng hoạt động mà không có một
nguồn cung cấp năng lượng bên ngoài. Nguồn thay vì cung cấp thông qua
mộtđiện trở đưa qua chân DQ khi Bus ở mức cao. Bus tín hiệu ở mức cao cũng
cần một tụ điện nội (CPP), để nguồn cung cấp năng lượng cho thiết bị này khi
Bus ở mức thấp. DS18B20 cũng có thể được cung cấp bởi một nguồn cung cấp
từ bên ngoài vào VDD.

Hình 1. Sơ đồ khối
d. Hoạt động đo nhiệt:
Các chức năng cốt lõi của DS18B20 trực tiếp của nó là cảm biến nhiệt độ
kỹ thuật số. Việc giải quyết các nhiệt độ cảm biến là người sử dụng cấu hình đến
9, 10, 11, hoặc 12 bit, tương ứng với số gia là 0,5 ° C, 0,25 ° C, 0,125 ° C và
0,0625 ° C, tương ứng. Độ phân giải mặc định lúc mở điện là 12-bit. Để bắt đầu
đo nhiệt độ và chuyển đổi từ tương tự sang số. Sau chuyển đổi, các kết quả dữ
liệu nhiệt được lưu trữ trong 2-byte trong bộ nhớ scratchpad và trở về DS18B20.
Nếu DS18B20 được cung cấp bởi một nguồn cung cấp bên ngoài, Master có vấn
đề "đọc thời gian khe" sau khi lệnh T chuyển đổi và DS18B20 sẽ trả lời bằng
cách truyền tín hiệu 0 trong khi chuyển đổi nhiệt độ tích cực và 1 khi chuyển đổi
được thực hiện. Nếu DS18B20 là nguồn parasite, kỹ thuật này thông báo không
thể được sử dụng kể từ khi tích cực ở mức cao. Những yêu cầu của Bus cho
nguồn parasite tra cứu bảng hoặc thông thường chuyển đổi phải được sử dụng.
Các dữ liệu nhiệt độ được lưu giữ là 16-bit. Các bit dấu (S) cho biết nếu nhiệt độ
tích cực hay tiêu cực: tích cực cho số S = 0 và cho số âm S = 1. Nếu DS18B20
được cấu hình cho độ phân giải 12bit, tất cả các bit trong thanh nhiệt độ sẽ chứa


dữ liệu hợp lệ. Đối với độ phân giải 11-bit, bit 0 là undefined. Đối với độ phân
giải 10-bit, bit 1 và 0 là undefined, và cho 9-bit độ phân giải bit 2, 1, và 0 là

undefined. Bảng1 cho các ví dụ về dữ liệu đầu ra kỹ thuật số và các tương ứng
với nhiệt độ đọc cho 12-bit chuyển đổi độ phân giải.

Hình 2. Fomat thanh nhiệt độ
e. Mối quan hệ giữa nhiệt độ / địa chỉ tín hiệu:

f. Hoạt động chuông báo tín hiệu:
Sau khi DS18B20 thực hiện các chuyển đổi nhiệt độ, giá trị nhiệt độ bổ
sung kích hoạt báo động các giá trị được lưu trong 1-byte TH và TL (xem hình
3).Bit dấu (S) cho biết nếu giá trị là tích cực hay tiêu cực: tích cực cho số S = 0
và cho tiêu cực số S = 1. Các TH và TL đăng ký là nonvolatile (EEPROM) vì
thế họ sẽ giữ lại dữ liệu khi là được cung cấp thiết bị xuống. TH và TL có thể


được truy cập thông qua byte 2 và 3 của scratchpad như được giải thích trong
phần bộ nhớ.

Hình 3. Format thanh TH va TL
Chỉ có 11 bit thông qua 4 dải của thanh nhiệt độ được sử dụng trong TH và so
sánh TL kể từ TH và thanh TL 8-bit. Nếu nhiệt độ đo được thấp hơn hoặc bằng
với TL hoặc cao hơn hoặc bằng TH, một tình trạng báo động tồn tại và một cờ
báo động được đặt bên trong DS18B20 này. Flag này được cập nhật sau mỗi lần
tiếp theo nhiệt độ chuyển đổi. nhiệt độ đo lường, do vậy, nếu tình trạng báo
động đi xa, cờ sẽ bị tắt sau đó.
Thiết bị chủ có thể kiểm tra tình trạng cờ báo động của mọi DS18B20 trên
Bus bằng việc phát ra một sự lệnh báo động xác định chính xác mà DS18B20 có
một tình trạng báo động. Nếu một tình trạng báo động tồn tại và TH hay TL cài
đặt đã thay đổi, một chuyển đổi nhiệt độ nên được thực hiện để xác nhận các
tình trạng báo động.
g. Nguồn cung cấp cho DS18B20


h. Bộ nhớ:


i. CONFIGURATION REGISTER
Byte 4 của bộ nhớ scratchpad chứa các cấu hình đăng ký, được tổ chức như
minh họa trong hình 8. Người dùng có thể thiết lập độ phân giải của DS18B20
chuyển đổi bằng cách sử dụng bit R0 và R1 trong thanh này như trong bảng 2.
Nguồn power-up mặc định của các bit là R0 = 1 và độ phân giải bit R1 = 1. Lưu
ý rằng có một sự cân bằng trực tiếp giữa độ phân giải và thời gian chuyển đổi.
Bit 7 và bit 0 đến bit 4 trong thanh là cấu hình dành riêng cho sử dụng thiết bị
nội bộ và không thể được ghi đè.

j. HARDWARE CONFIGURATION


DS18B20 Function Command Set

2.1.2. Vi điều khiển AT89C51


INT\*1
INT\*0
TIMER2
TIMER1
PORT noái
tieàp
Ngắt điều
khiển


Các thanh
ghi khác

128 byte
Ram

Rom
4K-8051
OK-8031

Timer1
Timer2

T1*
T2*

CPU

Tạo dao
động

Điều khiển

bus

EA\ RST PSEN ALE

Các port nối tiếp

P0 P1


P2

Port nối
tiếp

P3
TXD* RXD*

Vi điều khiển (VĐK) 89C51 là một vi điều khiển thuộc họ 8051 có tích
hợp đầy đủ các chức năng gồm bộ xử lý (CPU), ROM, RAM, Timer trong một
IC với kích thước nhỏ gọn, lập trình đơn giản, có khả năng kết nối với máy tình
và nhiều ngoại vi khác, giá thành thấp.
Các thông số kỹ thuật:
- 40 chân, 4 cổng I/O với độ rộng mỗi cổng là 8 bit.
- Bộ xử lý (CPU) 8 bit
- 128 byte RAM, 4 kbyte ROM
- Hai bộ định thời Timer1 và Timer2

2.2. Sơ đồ nguyên lý mạch đo nhiệt độ.


Mạch ghép nối máy tính qua Max232


Mạch có tác dụng ghép nối giữa máy tính (PC) với VĐK 89C51 qua cổng COM.
IC Max232 có chức năng chuyển mức điện áp từ +12V và -12V(mức trên PC)
xuống 0V +5V (mức sử dụng ở VĐK)
2.3. Thiết kế mạch in
Mạch in thực tế



Mạch sau khi gia công

2.4. Chương trình điều khiển


2.4.1. Lập trình VĐK 89C51
Chương trình được chia ra các hàm nhỏ:
- Đọc DS18B20 (ds18b20.c)
- Chuyển đổi dữ liệu
- Hiển thị Led
- Nhận dữ liệu từ máy tính
- Chuyền dữ liêu lên máy tính
a. Chương trình chính

Bắt đầu

Khởi tạo
các giá trị

Đọc
DS18B20

Xử lý số
liệu

Hiển thị ra led 7 đoạn
và truyền lên máy
tính


b. Code chương trình


//Hàm main
void main()
{
P0 = 0xff;
P1 = 0xff;
P2 = 0xff;
P3 = 0xff;
IntSerial();
Config(0,0,31);
//cai che do 9 bit cho ds18b20
while(1)
{
nd_dat = tp*10 + dv ;
if(nd_dat == temp)
{
P3_5 =0;
P3_6 =1;
P3_7 =1;
}
if(nd_dat > temp)
{
P3_5 =1;
P3_6 =0;
P3_7 =1;
}
if(nd_dat < temp)

{
P3_5 =1;
P3_6 =1;
P3_7 =0;
}
GuiLenMayTinh();
HienThiNhietDo();
delay(500);
}
}

//Truyền lên máy tính


void IntSerial()
{
SCON = 0x50; // 0011 0010
TMOD = 0x20;
// 0010 0000
TH1 = TL1= -3; // baud rate = 9600
TR1 = 1;
EA = 1;
//Cho phep ngat toan cuc
ES = 1;
//Cho phep ngat noi tiep
TI = 0;
//San sang nhan du lieu
RI = 0;
//San sang truyen du lieu
TR1 = 1;

//Enable timre1
}
void GuiLenMayTinh()
{
ReadTemp(&tem[0]);
temp=(tem[0]>>3)|(tem[1]<<5);
temp=(temp>>1);
temp_ch = temp/10;
temp_dv = temp%10;
SBUF = 'A';
while(TI == 0)
{}
TI = 0;
delay(300);
SBUF =
temp_ch + 48;
while(TI == 0)
//Cho gui xong
{}
TI = 0;
SBUF =
temp_dv + 48;
while(TI == 0)
{}
TI = 0;
}


// Nhận từ máy tính
void NhanDuLieu() interrupt 4 using 0

{
if(RI == 1)
{
if(n >= 2)
{
ucCheck = SBUF;
if(ucCheck == '0')
{
n = 0;
RI = 0;

//End Receive Data

}
else
{
RI = 0;

//End Receive Data

}
}
else
{
ucReceive[n] = SBUF - 48;
tp = ucReceive[0];
dv = ucReceive[1];
RI = 0;
n = n+1;
}

}
else
{}
}

//End Receive Data


2.4.2. Lập trình trên máy tính
Trên máy tính lập truyền dữ liệu xuống VĐK,và nhận dữ liệu từ VĐK
truyền lên. Chương trình được viết trên Visual C#
a.Chương trình chính

Bắt đầu

Truyền
nhận dữ
liệu

Xử lý số
liệu

Hiển thị,
vẽ đồ thị

Chương trình chính
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;

using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;
using PCComm;
using ZedGraph;
namespace PCComm
{
public partial class frmMain : Form
{
int tickStart = 0;
public SerialPort cport= new SerialPort();
CommunicationManager comm = new CommunicationManager();
string transType = string.Empty;
public frmMain()


{
InitializeComponent();
}
private void frmMain_Load(object sender, EventArgs e)
{
GraphPane myPane = zedGraphControl1.GraphPane;
LoadValues();
SetDefaults();
SetControlState();
myPane.Title.Text = "GRAPH";
myPane.XAxis.Title.Text = "Time, Seconds";
myPane.YAxis.Title.Text = "Nhiet do(C)";
// keeps a rolling set of point data without

needing to shift any data values
RollingPointPairList list = new RollingPointPairList(1200);
// Initially, a curve is added with no data points
(list is empty)
// Color is blue, and there will be no symbols
LineItem curve = myPane.AddCurve("Temperature",
list, Color.Red, SymbolType.None);
timer1.Interval = 100;
//Tao khung toa do ve
myPane.XAxis.Scale.Min = 0;
myPane.XAxis.Scale.Max = 30;
myPane.XAxis.Scale.MinorStep = 1;
myPane.XAxis.Scale.MajorStep = 5;
myPane.YAxis.Scale.Min = -10;
myPane.YAxis.Scale.Max = 120;
myPane.YAxis.Scale.MinorStep = 1;
myPane.YAxis.Scale.MajorStep = 10;
// Scale the axes
zedGraphControl1.AxisChange();
// Save the beginning time for reference
tickStart = Environment.TickCount;
}
private void cmdOpen_Click(object sender, EventArgs e)
{
comm.Parity = cboParity.Text;
comm.StopBits = cboStop.Text;
comm.DataBits = cboData.Text;
comm.BaudRate = cboBaud.Text;



comm.DisplayWindow = txtTemp;
comm.OpenPort();
cmdOpen.Enabled = false;
cmdClose.Enabled = true;
cmdSend.Enabled = true;
//timer1.Interval = 100;
timer1.Enabled = true;
timer1.Start();
}
/// <summary>
/// </summary>
private void SetDefaults()
{
cboPort.SelectedIndex = 0;
cboBaud.SelectedText = "9600";
cboParity.SelectedIndex = 0;
cboStop.SelectedIndex = 1;
cboData.SelectedIndex = 1;
}
/// <summary>
/// </summary>
private void LoadValues()
{
comm.SetPortNameValues(cboPort);
comm.SetParityValues(cboParity);
comm.SetStopBitValues(cboStop);
}
/// <summary>
/// </summary>
private void SetControlState()

{
rdoText.Checked = true;
cmdSend.Enabled = false;
cmdClose.Enabled = false;
}
private void cmdSend_Click(object sender, EventArgs e)
{
comm.WriteData(txtSend.Text);
}
private void rdoHex_CheckedChanged(object sender, EventArgs e)
{
if (rdoHex.Checked == true)


{
comm.CurrentTransmissionType =
PCComm.CommunicationManager.TransmissionType.Hex;
}
else
{
comm.CurrentTransmissionType =
PCComm.CommunicationManager.TransmissionType.Text;
}
}
private void timer1_Tick(object sender, EventArgs e)
{
// Make sure that the curvelist has at least one
curve
if (zedGraphControl1.GraphPane.CurveList.Count <= 0)
return;

// Get the first CurveItem in the graph
LineItem curve =
zedGraphControl1.GraphPane.CurveList[0] as LineItem;
if (curve == null)
return;
// Get the PointPairList
IPointListEdit list = curve.Points as
IPointListEdit;
// If this is null, it means the reference at
curve.Points does not
// support IPointListEdit, so we won't be able to
modify it
if (list == null)
return;
// Time is measured in seconds
double time = (Environment.TickCount tickStart) / 1000.0;
// 3 seconds per cycle
//list.Add(time, Math.Sin(2.0 * Math.PI * time /
3.0));
//list.Add(time, 10);
#if DEBUG //neu co su kien truyen nhan tren cong COM
if (comm.CurrentTransmissionType ==
CommunicationManager.TransmissionType.Text)
{
if ((comm.Message != null) && !
(comm.Message.Equals("A")))
{
list.Add(time,
Convert.ToByte(comm.Message));//Ve do thi
}



}
#endif
//tu dong thay doi kich thuoc khung toa do(thoi
gian)
Scale xScale =
zedGraphControl1.GraphPane.XAxis.Scale;
if (time > xScale.Max - xScale.MajorStep)
{
xScale.Max = time + xScale.MajorStep;
xScale.Min = xScale.Max - 30.0;
}
// Make sure the Y axis is rescaled to accommodate
actual data
zedGraphControl1.AxisChange();
// Force a redraw
zedGraphControl1.Invalidate();
}
private void Form1_Resize(object sender, EventArgs e)
{
SetSize();
}
// thiet lap kich thuoc cua khung do thi
private void SetSize()
{
Rectangle formRect = this.ClientRectangle;
formRect.Inflate(-10, -10);
if (zedGraphControl1.Size != formRect.Size)
{

zedGraphControl1.Location = formRect.Location;
zedGraphControl1.Size = formRect.Size;
}
}
private void cmdClose_Click(object sender, EventArgs e)
{
cmdOpen.Enabled = true;//Nut Open mo di
cmdClose.Enabled = false;//Nut Close sang
cmdSend.Enabled = false;//Nut SET sang
timer1.Enabled = false;//time dung
timer1.Stop();
comm.ClosePort();//DOng cong COM
}
}
}


b.Giao diện trên máy tính.

c.Tiến hành đo thử nghiệm và đánh giá kết quả.
Việc thử nghiệm đầu đo và mạch gia công được thực hiện ở một số mốc
nhiệt độ mà người thực hiện có thể biết trước, qua đó thấy được độ chính xác
của mạch thi công cũng như của đầu đo. Các mốc nhiệt độ thử nghiệm là nhiệt
độ nước vừa sôi xong, nhiệt độ của cốc nước đá, nhiệt độ phòng, nhiệt độ cơ thể
người. Dưới đây là kết quả thử nghiệm:
Lần đo

Kết quả đo

Nhiệt độ

thuyết

1

0 0C

0 0C

theo

lý Sai số
0

Ghi chú
Th. Nước đá


×