Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 26 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
26
Dung lượng
623,5 KB
Nội dung
LỜI NÓI ĐẦU Cảm biến ngày thiếu nhiều lĩnh vực đời sống công nghiệp Cảm biến giúp ta nhận biết biến đổi môi trường xung quanh từ đưa giải pháp điều khiển thích hợp Tuý loại ứng dụng mà có nhiều loại cảm biến khác nhau, cảm biến áp suất, cảm biến độ ẩm, cảm biến nhiệt độ…Ở với đề tài đo 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 nhiều thiếu sót,mong giúp đỡ đóng góp ý kiến thày cô bạn Hà nội ngày 27 tháng 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 loại đầu đo phương pháp đo nhiệt độ Nhiệt độ thông số quan trọng ảnh hưởng đến đặc tính vật chất nên trình kĩ thuật hay sống ngày hay gặp yêu cầu đo nhiệt độ Ngày nhiều thiết bị gia dụng dây chuyền sảm xuất công nghiệp việc xác định nhiệt độ thời thiết bị yêu cầu mang tính bắt buộc Tuỳ theo nhiệt độ đo mức độ xác yêu cầu mà người ta sử dụng phương pháp loại thiết bị đo khác Thông thường nhiệt độ đo chia thành ba dải: nhiệt độ thấp, nhiệt độ trung bình nhiệt độ cao - Ở nhiệt độ trung bình thấp: phương pháp đo phương pháp tiếp xúc nghĩa dụng cụ đo đặt trực tiếp môi trường cần đo - Ở nhiệt độ cao : phương pháp đo phương pháp không tiếp xúc nghĩa dụng cụ đo đặt 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 xúc nhiệt kế nhiệt điện trở (Resistance Thermometer), nhiệt kế nhiệt ngẫu (Thermocouples) sử dụng phần tử bán dẫn (diot, transistor nhiệt).Các loại đầu đo hoạt động tốt với độ nhạy cao môi trường nhiệt độ thấp trung bình Tuy nhiên với môi trường có nhiệt độ cao từ 1600 0C trở lên đầu đo không chịu lâu dài nên người ta hay sử dụng cặp nhiệt điện sử dụng phương pháp đo không trực tiếp Với thiết bị có nhiệt độ cao mà đầu đo trực tiếp không tiếp xúc vật cần đo nhiệt độ bị cách ly không gian người ta sử dụng đến phương pháp đo không tiếp xúc Một phương pháp đo không tiếp xúc phổ biến phương pháp “hoả quang kế” dựa xạ nhiệt vật Ví dụ số loại IC đo nhiệt độ khác 1.2 Sơ đồ khối hệ thống đo nhiệt độ Hệ thống đo hiển thị nhiệt độ đơn giản sử dụng đầu đo nhiệt độ IC DS18B20 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 đoạn CHƯƠN 2: THIẾT KẾ 2.1 Cấu tạo nguyên lý hoạt động IC DS18B20, VĐK89C51 2.1.1 Cảm biến nhiệt độ DS18B20 a Đặc tính: − Có đầu vào cho cổng truyền thông tin − Mỗi thiết bị có 64bit mã seri lưu Rom − Cần cung cấp nguôn cho đường liệu, nguồn có điện áp khoảng 3V-5.5V − Phù hợp với nhiệt độ từ -55:125ºC (-67:257ºF) − Độ xác ±0.5ºC đo dải đo khoảng từ -10ºC đến 85ºC − Độ phân giải nhiệt kế mà người sử dụng chọn từ ->12 bit − Chuyển đối nhiệt độ cho 12bit 750ms (max) − Có loại IC dip chân va dip chân − Được ứng dụng báo động nhiệt, cảm biến nhiệt độ nhiều phận b.Mô tả: Nhiệt kế số DS18B20 cung cấp 9bit va 12bit đo nhiệt độ bách phân có chức báo thức DS18B20 truyền liệu qua đường Bus để giao tiếp với sử lý trung tâm Nó có phạm vi hoạt động nhiệt độ -55 ° C đến 125 ° C xác đến ± 0,5 ° C phạm vi -10 ° C đến 85 ° C Ngoài ra, DS18B20 loại bỏ cần thiết cho nguồn điện bên Mỗi DS18B20 có 64-bit mã nối tiếp, cho phép DS18B20 nhiều đến chức đường Bus Vì vậy, đơn giản để sử dụng vi xử lý để kiểm soát DS18B20 nhiều phân phối diện tích lớn Ứng dụng sử dụng từ tính bao gồm HVAC kiểm soát môi trường, hệ thống theo dõi nhiệt độ bên tòa nhà, thiết bị, máy móc, giám sát trình hệ thống điều khiển Thông tin thứ tự loai: Mô tả IC chân chân: c.Tổng Quát: Hình cho thấy sơ đồ khối DS18B20, mô tả loại Pin dùng Rom 64-bit cho mã seri thiết bị Bộ nhớ tạm thời chứa 2-byte nhiệt độ mà đầu số từ cảm biến nhiệt độ Ngoài ra, nhớ tạm thời cung cấp truy cập vào 1-byte đăng ký kích hoạt báo động thấp (TH TL) 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 chuyển đổi số đến 9, 10, 11, 12 bit Các TH, TL, đăng ký cấu hình không đổi (EEPROM), giữ lại liệu thiết bị có nguồn DS18B20 sử dụng đường Bus mà thực giao tiếp cách sử dụng Bus 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 thiết bị liên kết với Bus vi xử lý, xác định cho địa thiết bị Bus sử dụng thiết bị đặc biệt thông qua 3state mở cổng (các pin DQ trường hợp DS18B20) Trong hệ thống Bus, DS18B20 64-bit Bởi thiết bị có mã nhất, số lượng thiết bị giải Bus không giới hạn Giao thức đường Bus, có giải thích chi tiết lệnh "Khe thời gian," bao gồm việc lựa chọn đường Bus hệ thống Một tính DS18B20 khả hoạt động mà nguồn cung cấp lượng bên Nguồn thay cung cấp thông qua mộtđiện trở đưa qua chân DQ Bus mức cao Bus tín hiệu mức cao cần tụ điện nội (CPP), để nguồn cung cấp lượng cho thiết bị Bus mức thấp DS18B20 cung cấp nguồn cung cấp từ bên vào VDD Hình Sơ đồ khối d Hoạt động đo nhiệt: Các chức cốt lõi DS18B20 trực tiếp cảm biến nhiệt độ kỹ thuật số Việc giải nhiệt độ cảm biến người sử dụng cấu hình đến 9, 10, 11, 12 bit, tương ứng với số gia 0,5 ° C, 0,25 ° C, 0,125 ° C 0,0625 ° C, tương ứng Độ phân giải mặc định lúc mở điện 12-bit Để bắt đầu đo nhiệt độ chuyển đổi từ tương tự sang số Sau chuyển đổi, kết liệu nhiệt lưu trữ 2-byte nhớ scratchpad trở DS18B20 Nếu DS18B20 cung cấp nguồn cung cấp bên ngoài, Master có vấn đề "đọc thời gian khe" sau lệnh T chuyển đổi DS18B20 trả lời cách truyền tín hiệu chuyển đổi nhiệt độ tích cực chuyển đổi thực Nếu DS18B20 nguồn parasite, kỹ thuật thông báo sử dụng kể từ tích cực mức cao Những yêu cầu Bus cho nguồn parasite tra cứu bảng thông thường chuyển đổi phải sử dụng Các liệu nhiệt độ lưu giữ 16-bit Các bit dấu (S) cho biết nhiệt độ tích cực hay tiêu cực: tích cực cho số S = cho số âm S = Nếu DS18B20 cấu hình cho độ phân giải 12bit, tất bit nhiệt độ chứa liệu hợp lệ Đối với độ phân giải 11-bit, bit undefined Đối với độ phân giải 10-bit, bit undefined, cho 9-bit độ phân giải bit 2, 1, undefined Bảng1 cho ví dụ liệu đầu kỹ thuật số tương ứng với nhiệt độ đọc cho 12-bit chuyển đổi độ phân giải Hình Fomat nhiệt độ e Mối quan hệ nhiệt độ / địa tín hiệu: f Hoạt động chuông báo tín hiệu: Sau DS18B20 thực chuyển đổi nhiệt độ, giá trị nhiệt độ bổ sung kích hoạt báo động giá trị lưu 1-byte TH TL (xem hình 3).Bit dấu (S) cho biết giá trị tích cực hay tiêu cực: tích cực cho số S = cho tiêu cực số S = Các TH TL đăng ký nonvolatile (EEPROM) họ giữ lại liệu cung cấp thiết bị xuống TH TL truy cập thông qua byte scratchpad giải thích phần nhớ Hình Format TH va TL Chỉ có 11 bit thông qua dải nhiệt độ sử dụng TH so sánh TL kể từ TH TL 8-bit Nếu nhiệt độ đo thấp với TL cao TH, tình trạng báo động tồn cờ báo động đặt bên DS18B20 Flag cập nhật sau lần nhiệt độ chuyển đổi nhiệt độ đo lường, vậy, tình trạng báo động xa, cờ bị tắt sau Thiết bị chủ kiểm tra tình trạng cờ báo động DS18B20 Bus việc phát lệnh báo động xác định xác mà DS18B20 có tình trạng báo động Nếu tình trạng báo động tồn TH hay TL cài đặt thay đổi, chuyển đổi nhiệt độ nên thực để xác nhận tình trạng báo động g Nguồn cung cấp cho DS18B20 h Bộ nhớ: i CONFIGURATION REGISTER Byte nhớ scratchpad chứa cấu hình đăng ký, tổ chức minh họa hình Người dùng thiết lập độ phân giải DS18B20 chuyển đổi cách sử dụng bit R0 R1 trong bảng Nguồn power-up mặc định bit R0 = độ phân giải bit R1 = Lưu ý có cân trực tiếp độ phân giải thời gian chuyển đổi Bit bit đến bit cấu hình dành riêng cho sử dụng thiết bị nội ghi đè j HARDWARE CONFIGURATION INT\*1 INT\*0 TIMER2 TIMER1 PORT noái tieàp Ngắt điều khiển Các 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 vi điều khiển thuộc họ 8051 có tích hợp đầy đủ chức gồm xử lý (CPU), ROM, RAM, Timer IC với kích thước nhỏ gọn, lập trình đơn giản, có khả kết nối với máy tình nhiều ngoại vi khác, giá thành thấp Các thông số kỹ thuật: - 40 chân, cổng I/O với độ rộng cổng bit - Bộ xử lý (CPU) bit - 128 byte RAM, kbyte ROM - Hai định thời Timer1 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 máy tính (PC) với VĐK 89C51 qua cổng COM IC Max232 có chức chuyển mức điện áp từ +12V -12V(mức 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 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 chia hàm nhỏ: - Đọc DS18B20 (ds18b20.c) - Chuyển đổi liệu - Hiển thị Led - Nhận liệu từ máy tính - Chuyền liêu lên máy tính a Chương trình Bắt đầu Khởi tạo giá trị Đọc DS18B20 Xử lý số liệu Hiển thị led đoạn 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 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]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 using { 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; = ucReceive[0]; dv = ucReceive[1]; RI = 0; n = n+1; } } else {} } //End Receive Data 2.4.2 Lập trình máy tính Trên máy tính lập truyền liệu xuống VĐK,và nhận liệu từ VĐK truyền lên Chương trình viết Visual C# a.Chương trình Bắt đầu Truyền nhận liệu Xử lý số liệu Hiển thị, vẽ đồ thị Chương trì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 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(); } /// /// private void SetDefaults() { cboPort.SelectedIndex = 0; cboBaud.SelectedText = "9600"; cboParity.SelectedIndex = 0; cboStop.SelectedIndex = 1; cboData.SelectedIndex = 1; } /// /// private void LoadValues() { comm.SetPortNameValues(cboPort); comm.SetParityValues(cboParity); comm.SetStopBitValues(cboStop); } /// /// 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 [...]... 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 độ. .. Th Nhiệt phòng 3 36 0C 37 0C 4 Th Nhiệt độ cơ thể 4 99 0C 100 0C 3 Th Nước sôi độ KẾT LUẬN Từ kết quả đo thực tế ở trên ta có thể rút ra một số nhận xét như sau: 1 Nhiệt độ đo được ở các điểm trên chưa khớp với nhiệt độ theo lý thuyết Nguyên nhân ở đây là do sai số của đầu đo, việc nhiệt độ của nước sôi, nước đá… trong mẫu đo cũng không hoàn toàn chuẩn như lý thuyết do ảnh hưởng của môi trường, và. .. trường, và số lần tiến hành đo không nhiều nên kết quả không mang tính tổng quát Để có đánh giá chuẩn độ chính xác của đầu đo thì cần một mẫu nhiệt độ mà ở đó ta biết chính xác giá trị của nó Và việc đo đặc phải được thực hiện lập lại nhiều lần Song với sai số không lớn lắm và trong những ứng dụng bình thường thì kết quả trên là chấp nhận được 2 Từ kết quả trên nếu ta có thể thấy đầu đo trong sai số của nó... 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... 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... 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ừ... 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... 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... 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")))... 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