Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 44 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
44
Dung lượng
1,15 MB
Nội dung
Đo điều khiển nhiệt độ dùng msp430 LỜI CAM ĐOAN Đo điều khiển nhiệt độ đề tài ứng dụng rộng rãi có ý nghĩa thiết thực đời sống cụ thể dùng phòng thí nghiệm, vườn ươm,lò ấp trứng, nhà máy,xí nghiệp Vì nhóm em chọn đề tài để làm đề tài báo cáo cuối kì mơn vi xữ lý cho nhóm Trong q trình thực đề tài, nhiều thiếu sót kiến thức hạn chế nội dung trình bày báo cáo hiểu biết thành nhóm em đạt giúp đỡ giảng viên hướng dẫn thầy Trần Hữu Danh Nhóm em xin cam đoan rằng: nội dung trình bày báo cáo niêm luận chép từ cơng trình có trước Nếu khơng thật, nhóm em xin chịu trách nhiệm trước nhà trường Cần Thơ, ngày …1 tháng 12 năm 2011… Sinh viên thực Lâm Vũ Trường Nguyễn Gui Ta Lâm Vũ Trường 1081010 Nguyễn Gui Ta 1080997 Đo điều khiển nhiệt độ dùng msp430 LỜI CẢM ƠN Đầu tiên nhóm em xin gửi lời cảm ơn sâu sắc đến Thầy,Cô mơn tận tình truyền đạt kiến thức bổ ích suốt thời gian vừa qua Đặc biệt nhóm em chân thành cảm ơn thầy Trần Hữu Danh tận tình hướng dẫn nhóm em thực đề tài Do thời gian kinh nghiệm thực tế hạn chế nên thực nhiều thiếu sót,rất mong dánh giá q thầy góp ý bạn sinh viên dể đề tài hoàn chỉnh Lâm Vũ Trường 1081010 Nguyễn Gui Ta 1080997 Đo điều khiển nhiệt độ dùng msp430 Mục lục Tóm tắt đề tài……………………………………………………………………….trang Chương Tổng quan……………………………………………………………………… Chương 2……………………………………………………………………………………2.1 2.1 DS18B20 Và giao tiếp 1-wire………………………………………………………… 2.1.1 Giới thiệu ds18b20………………………………………………………………… 2.1.2 Tổng quan ds18b20…………………………………………………………………7 2.1.3 Giao tiếp wire…………………………………………………………………… 2.2 Sơ lược MSP430 …………………………………………………………………….13 2.3 Sơ lược LCD1602A………………………………………………………………… 27 Chương Nội dung kết nghiên cứu……………………………………………… 3.1 3.1 lưu đồ giải thuật…………………………………………………………………………29 3.2 mạch nguyên lý………………………………………………………………………….30 3.3 mạch mô phỏng……………………………………………… .30 3.4 code chương trình…………………………………………………………………… 31 3.5 kết quả……………………………………………………………………………………42 Kết luận đề nghị ………………………………………………………………………….43 Tài liệu tham khảo ………………………………………………………………………… 44 Lâm Vũ Trường 1081010 Nguyễn Gui Ta 1080997 Đo điều khiển nhiệt độ dùng msp430 Tóm Tắt Đề Tài Ngày với phát triển công nghệ vi điện tử hệ thống điều khiển tự động hoà Với kỹ thuật tiên tiến vi xử lý, vi điều khiển…được ứng dụng vào lĩnh vực điều khiển hệ thống điều khiển khí thơ sơ, với tốc độ xử lý chậm xác thay hệ thống điều khiển tự động với lệnh chương trình thiết lập trước Trong trình sản xuất nhà máy, xí nghiệp, phòng thí nghiệm ,việc đo khống chế nhiệt độ tự động yêu cầu cần thiết quan trọng Vì nắm bắt nhiệt độ làm việc hệ thống, dây chuyền sản xuất …,giúp ta biết tình trạng làm việc yêu cầu có xử lý kịp thời để tránh hư hỏng giải cố xảy Để giải vấn đề này,với kiến thức kỹ thuật vi xử lý, vi điều khiển cụ thể msp430, chúng em thiết kế mạch ứng dụng nhỏ dùng msp430 đo hiển thị nhiệt độ LCD ,xuất tín hiệu điều khiển LCD nhiệt độ đo lớn nhiệt độ đặt trước Lâm Vũ Trường 1081010 Nguyễn Gui Ta 1080997 Đo điều khiển nhiệt độ dùng msp430 Chương 1: Tổng quan 1/ Đặt vấn đề: Ngày với phát triển công nghệ vi điện tử hệ thống điều khiển tự động hoà Với kỹ thuật tiên tiến vi xử lý, vi điều khiển…được ứng dụng vào lĩnh vực điều khiển hệ thống điều khiển khí thơ sơ, với tốc độ xử lý chậm xác thay hệ thống điều khiển tự động với lệnh chương trình thiết lập trước Trong trình sản xuất nhà máy, xí nghiệp, phòng thí nghiệm ,việc đo khống chế nhiệt độ tự động yêu cầu cần thiết quan trọng Vì nắm bắt nhiệt độ làm việc hệ thống, dây chuyền sản xuất …,giúp ta biết tình trạng làm việc yêu cầu có xử lý kịp thời để tránh hư hỏng giải cố xảy 2/Phạm vi đề tài: Để đáp ứng yêu cầu đo cảnh báo nhiệt độ tự động, có nhiều phương pháp để thực Nhóm chúng em lựa chon đo nhiệt độ hiển thị LCD, xuất tín hiệu cảnh báo lên LCD nhiệt độ đo lớn nhiệt độ đặt 3/Hướng giải đề tài: Sử dụng cảm biến nhiệt độ DS18B20 đọc nhiệt độ bên vào Msp430f2013 , vi điều khiển xử lý nhiệt độ ,, so sánh với nhiệt độ đặt, xuất tín hiệu cảnh báo lên LCD Nhiệt độ đọc từ DS18B20 hiển hình LCD Lâm Vũ Trường 1081010 Nguyễn Gui Ta 1080997 Đo điều khiển nhiệt độ dùng msp430 Chương 2: Cơ sở lý thuyết 2.1 DS18B20 Và giao tiếp 1-wire 2.1.1 Giới thiệu ds18b20: DS18B20 sản phẩm công ty MAXIM, cơng ty đóng góp nhiều vào việc cho đời bus dây cảm biến dây Hình dạng bên ngồi cảm biến dây DS18B20 mơ tả hình dạng vỏ TO-92 với chân dạng thường gặp dùng nhiều ứng dụng, dạng vỏ SOIC với chân dùng để đo nhiệt độ bề mặt, kể da người Các đặc điểm kỹ thuật cảm biến DS18B20 kể cách tóm tắt sau: - Sử dụng giao diện dây nên cần có chân để truyền thông - Độ phân giải đo nhiệt độ từ bit tới 12bit Dải đo nhiệt độ -55°C đến 125°C, bậc 0.5°C, đạt độ xác đến 0.1°C việc hiệu chỉnh qua phần mềm - Rất thích hợp với ứng dụng đo lường đa điểm nhiều đầu đo nối bus, bus gọi bus dây (1-wire) - Khơng cần thêm linh kiện bên ngồi - Điện áp nguồn ni thay đổi khoảng rộng, từ 3.0 V đến 5.5 V DC cấp thông qua đường dẫn liệu Lâm Vũ Trường 1081010 Nguyễn Gui Ta 1080997 Đo điều khiển nhiệt độ dùng msp430 - Dòng tiêu thụ chế độ nghỉ cực nhỏ - Thời gian lấy mẫu biến đổi digital 12 bit không lớn 750ms - Mỗi cảm biến có mã định danh 64 bit chứa nhớ ROM chip (on chip), giá trị nhị phân khắc tia laze 2.1.2 Tổng quan ds18b20 : Đầu đo nhiệt độ số DS18B20 đưa số liệu để biểu thị nhiệt độ đo dạng mã nhị phân 12 bit Các thông tin gửi đến nhận từ DS18B20 giao diện 1-wire, cần hai đường dẫn gồm đường cho tín hiệu đường làm dây GND đủ để kết nối vi điều khiển đến điểm đo Nguồn nuôi cho thao tác ghi/đọc/chuyển đổi 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 độ DS18B20 có mã số định danh nhất, khắc laser trình chế tạo vi mạch nên nhiều vi mạch DS18B20 kết nối vào bus 1-wire mà khơng có nhầm lẫn Đặc điểm làm cho việc lắp đặt nhiều cảm biến nhiệt độ nhiều vị trí khác trở nên dễ dàng với chi phí thấp Số lượng cảm biến nối vào bus không hạn chế nhiệt độ/giá trị chuyển đổi: * Giá trị mặc định lần đọc Mỗi cảm biến nhiệt độ DS18B20 có dãy mã 64 bit lưu trữ nhớ ROM từ sản xuất kỹ thuật laze Ý nghĩa 64 bit mã giải thích Lâm Vũ Trường 1081010 Nguyễn Gui Ta 1080997 Đo điều khiển nhiệt độ dùng msp430 hình: Như dãy mã chia thành nhóm, đó: Tám bit mã định danh họ dây, mã DS18B20 28h 48 bit mã số xuất xưởng nhất, nghĩa cảm biến DS1820 có số mã Tám bit có ý nghĩa byte mã kiểm tra CRC (cyclic redundancy check), byte tính tốn từ 56 bit dãy mã ROM Để truy cập lên cảm biến dây DS18B20 ta phải sử dụng hai nhóm lệnh: lệnh ROM lệnh chức (function commands) nhớ, lệnh mơ tả ngắn gọn sau: Lệnh ROM - SEARCH ROM (F0h) Lệnh cho phép điều khiển bus dò tìm số lượng thành viên tớ đấu vào bus giá trị cụ thể 64 bit ROM chúng chu trình dò tìm - READ ROM (33h) Cho phép đọc byte mã khắc laser ROM, bao gồm: bit mã định tên linh kiện (28h), 48 bit số xuất xưởng, bit kiểm tra CRC Lệnh dùng bus có cảm biến DS18B20, không xảy xung đột bus tất thiết bị slave đáp ứng Mục đích lệnh đọc thơng tin mã xuất xưởng DS18B20 để xử lý bus có nhiều cảm biến - MATCH ROM (55h) Lệnh gửi với 64 bit ROM tiếp theo, cho phép điều khiển bus chọn cảm biến DS18B20 cụ thể bus có nhiều cảm biến DS18B20 nối vào Chỉ có DS18B20 có 64 bit ROM trung khớp với chuỗi 64 bit vừa gửi tới đáp ứng lại lệnh nhớ Còn cảm biến DS18B20 có 64 bit ROM khơng trùng khớp tiếp tục chờ xung reset Lệnh sử dụng trường hợp có cảm biến dây, trường hợp có nhiều cảm biến dây Lâm Vũ Trường 1081010 Nguyễn Gui Ta 1080997 Đo điều khiển nhiệt độ dùng msp430 - SKIP ROM (CCh) Lệnh cho phép thiết bị điều khiển truy nhập thẳng đến lệnh nhớ DS1820 mà không cần gửi chuỗi mã 64 bit ROM Như tiết kiệm thời gian chờ đợi mang hiệu bus có cảm biến - ALARM SEARCH (ECh) Tiến trình lệnh giống hệt lệnh Search ROM, cảm biến DS18B20 đáp ứng lệnh xuất điều kiện cảnh báo phép đo nhiệt độ cuối Điều kiện cảnh báo định nghĩa giá trị nhiệt độ đo lớn giá trị TH nhỏ giá trị TL hai giá trị nhiệt độ cao nhiệt độ thấp đặt ghi nhớ cảm biến Lệnh chức nhớ Sau thiết bị chủ (thường vi điều khiển) sử dụng lệnh ROM để định địa cho cảm biến dây đấu vào bus, thiết bị chủ đưa lệnh chức Bằng lệnh 2.1.3 Giao tiếp wire Việc đo nhiệt độ DS18B20 thục theo lần lấy mẫu Mỗi lần lấy mẫu ngăn cách tín hiệu reset presence pulse Reset xem trình ngăn cách khởi động lại trình đo nhiệt độ mới, Presence pulse giống tín hiệu báo hiệu cho VDK biết Ở ta thực đo nhiệt độ hiển thị đơn giản với DS18B20 Do bỏ qua phần: match ROM, search ROM, alarm search Các bước lần lấy mẫu: - Khởi tạo xung reset nhận tín hiệu diện từ DS18B20 - Gủi lệnh ROM - Gửi lệnh chức nhớ Kết nối phần cứng bản: Lâm Vũ Trường 1081010 Nguyễn Gui Ta 1080997 Đo điều khiển nhiệt độ dùng msp430 1) Khởi tạo xung reset nhận tín hiệu diện từ DS18B20: Dùng VDK đặt DQ xuống mức thấp khoảng thời gian tối thiểu 480 μS Giải phóng DQ khỏi mức thấp, điện trở kéo lên tự đưa DQ lên mức cao Khi DS18B20 phát xung mức cao, chờ từ 15-60 μS DS18B20 kéo DQ xuống mức thấp khoảng thời gian từ 60-240 μS Bắt tín hiệu tức DS18B20 sẳn sang Sau VDK bắt tín hiệu sẳn sang bắt đầu truyền lệnh ROM Ta skip ROM để khỏi thời gian match ROM có Bus, Lâm Vũ Trường 1081010 Nguyễn Gui Ta 1080997 10 Đo điều khiển nhiệt độ dùng msp430 3.2 Sơ đồ nguyên lý: 3.3 Mạch mô phỏng: Lâm Vũ Trường 1081010 Nguyễn Gui Ta 1080997 30 Đo điều khiển nhiệt độ dùng msp430 3.4.mạch thiết kế thực tế: 3.5 code chương trình #include #include "DS18B20.h" #include "LCD_DS18B20.h" typedef unsigned char uchar; typedef unsigned int uint; // khai bao ham dung cho ds unsigned char Init_18B20(void); void Write_18B20(unsigned char wdata); unsigned char Read_18B20(void); void Skip(void); void Convert(void); void Read_SP(void); unsigned int ReadTemp(void); unsigned int Convertnhietdo(void); #define DQ1 P1OUT |= BIT0 #define DQ0 P1OUT &= ~BIT0 //=============================== // Khoi tao cho DS //================================ uchar Init_18B20(void) { uchar Error; DQ0; delay_cycles(500); DQ1; delay_cycles(55); P1DIR &=~ BIT0; _NOP(); if(P1IN & BIT0) { Error = 1; P1DIR |= BIT0; } else { Lâm Vũ Trường 1081010 Nguyễn Gui Ta 1080997 31 Đo điều khiển nhiệt độ dùng msp430 Error = 0; P1DIR |= BIT0; DQ1; } delay_cycles(400); return Error; } //========== // ghi byte //========= void Write_18B20(uchar wdata) { uchar i; for(i = 0; i < 8;i++) { DQ0; delay_cycles(6); if(wdata & 0X01) DQ1; else DQ0; wdata >>= 1; delay_cycles(50); DQ1; delay_cycles(10); } } //================ // doc byte //================= uchar Read_18B20(void) { uchar i; uchar temp = 0; for(i = 0;i < 8;i++) { temp >>= 1; DQ0; delay_cycles(6); Lâm Vũ Trường 1081010 Nguyễn Gui Ta 1080997 32 Đo điều khiển nhiệt độ dùng msp430 DQ1; delay_cycles(8); P1DIR &= ~BIT0; _NOP(); if(P1IN & BIT0) temp |= 0x80; delay_cycles(45); P1DIR |= BIT0; DQ1; delay_cycles(10); } return temp; } //skip rom void Skip(void) { Write_18B20(0xcc); } // reag convert void Convert(void) { Write_18B20(0x44); } // read scratch pad void Read_SP(void) { Write_18B20(0xbe); } //============== // doc nhiet //================= uint ReadTemp(void) { uchar temp_low; uint temp; temp_low = Read_18B20(); temp = Read_18B20(); temp = (temp=34) {clr_lcm(); P1OUT=0x8F;//0x80 P1OUT=P1OUT & 0xFB; //dau chuoi strobe(); //LN P1OUT=0x0F; P1OUT=P1OUT & 0xFB; //dau chuoi strobe(); putstr("canh bao! "); delay_cycles(2000000); Lâm Vũ Trường 1081010 Nguyễn Gui Ta 1080997 34 Đo điều khiển nhiệt độ dùng msp430 } else delay_cycles(10); } char ch[]; int sole,solethu[4]; int i; //================================ // chuong trinh chinh //========================== void main(void) { WDTCTL=WDTPW+WDTHOLD; init_lcm(); clr_lcm(); P1DIR |=BIT0; P1OUT |=BIT0; Init_18B20(); while(1) { //dong P1OUT=0x8F;//0x80 P1OUT=P1OUT & 0xFB; //dau chuoi strobe(); P1OUT=0x0F; P1OUT=P1OUT & 0xFB; strobe(); //hien thi nhiet phan nguyen putstr("Nhiet Do Bay Gio"); lcm_line2(); putstr("La: "); tostr(Convertnhietdo()/16,ch); putstr(ch); putchar(','); // xu ly so le sole=(Convertnhietdo())*0x00f; for (i=0;i>1; } sole = (solethu[3]*500)+(solethu[2]*250)+(solethu[1]*125)+ (solethu[0]*62); tostr(sole,ch); putstr(ch); putchar(0xDF);// ki tu putchar('C'); sosanh(); //=================================== // thuvien LCD //===================================== // Note on I/face // Connections from uC to LCD_module // Please change the code to suit the H/W config // you are using /* MSP430uc LCD_Module P12 RS P13 E P14 D4 P15 D5 P16 D6 P17 D7 GND GND // Connections to LCD_module Your LCD_module in all probabilty powers it's onboard controller off a 5V supply So U'll have to provide a 5V regulated supply seperately to the LCD_module Remember MSP430 runs at 3.6 V (max) U'll spare urself the hassle if you have a LCD_nodule which can work at lower voltages Also this program only writes to the LCD, if you want to read from the LCD, U must use one more of the uC pins, in the current setup we have tied R/W signal of the LCD_module to GND, also Lâm Vũ Trường 1081010 Nguyễn Gui Ta 1080997 36 Đo điều khiển nhiệt độ dùng msp430 if your uC and LCD_module are running at different Vdd levels, it is advisable to use a level converter while reading from the LCD_module R/W signal of the LCD_module is tied to GND You must connect a pot to vary the voltage at the contrast pin of the LCD_module */ #ifndef msp430g2211_h // Change this header file to include the MSP430 uC you are using #include // Header must only be included if none of the files linking to #define msp430g2211_h // this file include it already #endif // Global Variable declarations char disp[32]; // Buffer to hold characters to be displayed on the LCD // Global Function Declarations void init_lcm(void); // Function to initialize the LCD_module (LCM) void putchar(char what); // Function to print a char at current cursor location void putstr(char *what); // Function to print string from current cursor location void clr_lcm(void); // Function to clear the LCM display void lcm_line2(void); // Function to move cursor to start of line void lcm_line1(void); // Function to move cursor to start of line void delay(char); // Function to provide delay necessary for certain LCM operations void strobe(void); // Function to toggle the enable signal after suitable delay void update_lcm(char *str);// Function to write disp[32] buffer onto the LCM display // str is a 32 character array void clr_disp_buffer(void);// Function to flush disp[32] to blank spaces void tostr(int i,char *str); //Converts Integers to String, useful routine Lâm Vũ Trường 1081010 Nguyễn Gui Ta 1080997 37 Đo điều khiển nhiệt độ dùng msp430 void tostr(int i,char *s) { char *p; p=s; // Convert Interger to String p[2] = i % 10; i -= p[2]; i /= 10; p[1] = i % 10; i -= p[1]; i /= 10; p[0] = i%10; // p[3] = 0; p[2]+=0x30; p[1]+=0x30; p[0]+=0x30; } void clr_disp_buffer(void) { // Clears the internal message Buffer to contain blank spaces for(char x = 0; x