Khóa luận đã xây dựng được thiết bị đo và lưu dữ liệu nhiệt độ trên cở sở dùng vi điều khiển PIC18F4550. Với ứng dụng cụ thể là thu thập dữ liệu nhiệt độ môi trường. Hệ thống được xây dựng dựa trên việc kết hợp nhiều khối thiết bị ngoại vi khác bao gồm khối thu thập nhiệt độ dùng cảm biến LM35,khối giao tiếp thẻ nhớ MMC lưu trữ tất cả dữ liệu và khối hiển thị dùng LCD 16 cột 2 dòng hiển thị cùng lúc 32 ký tự.
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC NÔNG LÂM THÀNH PHỐ HỒ CHÍ MINH KHĨA LUẬN TỐT NGHIỆP THIẾT KẾ CHẾ TẠO THIẾT BỊ ĐO VÀ LƯU DỮ LIỆU NHIỆT ĐỘ CỠ NHỎ Họ tên sinh viên: LÊ VĂN LUẬN Ngành: CƠ ĐIỆN TỬ Niên khoá: 2009-2013 Tp Hồ Chí Minh, tháng 06 năm 2013 THIẾT KẾ CHẾ TẠO THIẾT BỊ ĐO VÀ LƯU DỮ LIỆU NHIỆT ĐỘ CỠ NHỎ Tác giả LÊ VĂN LUẬN Giáo viên hướng dẫn: PGS.TS Nguyễn Văn Hùng KS Nguyễn Trung Trực Tháng 06 năm 2013 LỜI CẢM ƠN Em xin trân trọng cám ơn tất quý Thầy, Cô trường Đại Học Nơng Lâm Tp Hồ Chí Minh q Thầy, Cơ khoa Cơ khí – Cơng nghệ trang bị cho chúng em kiến thức quý báu trình học tập trường Em xin chân thành cám ơn Thầy, Cô môn Cơ điện tử hướng dẫn, giúp đỡ chúng em tận tình trình chúng em làm đề tài Em xin bày tỏ biết ơn chân thành tới thầy PGS.TS.Nguyễn Văn Hùng anh Nguyễn Trung Trực tận tình hướng dẫn chúng em trình làm Luận văn tốt nghiệp Đặc biệt, chúng em xin cám ơn quý Thầy, Cô Hội đồng dành thời gian nhận xét, góp ý để Luận văn chúng em hoàn thiện Cuối cùng, chúng em xin gửi lời cám ơn đến người thân bạn bè động viên, ủng hộ tạo cho chúng em điều kiện thuận lợi trình hồn thành Luận văn tốt nghiệp Thành phố Hồ Chí Minh, ngày 13 tháng 06 năm 2013 Sinh viên thực Lê Văn Luận TĨM TẮT Khóa luận xây dựng thiết bị đo lưu liệu nhiệt độ cở sở dùng vi điều khiển PIC18F4550 Với ứng dụng cụ thể thu thập liệu nhiệt độ môi trường Hệ thống xây dựng dựa việc kết hợp nhiều khối thiết bị ngoại vi khác bao gồm khối thu thập nhiệt độ dùng cảm biến LM35,khối giao tiếp thẻ nhớ MMC lưu trữ tất liệu khối hiển thị dùng LCD 16 cột dòng hiển thị lúc 32 ký tự MỤC LỤC DANH MỤC CÁC HÌNH DANH MỤC CÁC BẢNG Chương I MỞ ĐẦU 1.1 Đặt vấn đề Ngày phát triển ngành vi điện tử, kỹ thuật số hệ thống điều khiển tự động hóa Với kỹ thuật tiên tiến vi xử lý, vi mạch số ứ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 việc đo, lưu liệu khống chế nhiệt độ tự động cần thiết quan trọng Vì nắm bắt yêu cầu đo lưu liệu nhiệt độ tự động có nhiều phương pháp nghiên cứu khảo sát vi điều khiển 16f, 18f Vì em tiến hành nghiên cứu đề tài thiết kế chế tạo thiết bị đo lưu liệu nhiệt độ dựa vào vi điều khiển 18f4550 để lập trình điều khiển 1.2 Mục đích đề tài Thiết kế chế tạo thiết bị đo lưu liệu nhiệt độ cỡ nhỏ nhằm mục đích: • Sử dụng cầm tay để đo nhiệt độ môi trường khác nhau.( Với khoảng nhiệt độ đo từ (2÷ 1500C) • Lưu trữ nhiệt độ để phục vụ cho ứng dụng : sấy, bảo quản lương thực thực phẩm, kho vũ khí.( liệu lưu khoảng 512 MB nhiều tùy khả lập trình yêu cầu dung lượng sử dụng) Chương II TỔNG QUAN 2.1 Tổng quan hệ thống đo lường điều khiển Hệ thống đo lường điều khiển hệ thống tập hợp thiết bị kỹ thuật có nhiệm vụ, thuật tốn chức để thu nhập thơng tin, biến đổi nó, gia cơng chuyển thành dạng mà người thu nhập đưa đến điều khiển Đối tượn nghiên Hình 2.1 Sơ đồ hệ thống đo lường điều khiển Để có hệ thống đo đạt hiệu phù hợp với công việc thiết kế mơ hình ban đầu quan trọng ảnh hưởng đến tồn cơng việc sau 10 61 TÀI LIỆU THAM KHẢO Tài liệu tiếng Việt Nguyễn Bá Thuận 2010, Giáo trình vi xử lý vi điều khiển, Đại Học Lạc Hồng TPHCM, 135 trang Lưu Thế Vinh 2007, Giáo trình đo lường – cảm biến, Đại Học Quốc Gia TPHCM, 338 trang Nguồn internet Tài liệu tiếng Anh Datasheet linh kiện điện tử- Nguồn internet http//www.alldatasheet.com/ AN1045a, Implementing File I/O Functions Using Microchip’s Memory Disk Drive File System Library, Microchip Technology Inc, 2007 Dogan Ibrahim, 2008 Newnes Advanced PIC.Mcrocontroller Projets in c Mar Newnes, USA, 534 pages http://www.microchip.com 62 PHỤ LỤC Phụ lục 1: Các bảng mô tả Bảng 6.1: Bảng mô tả chức chân PIC18F4550 Chân Hướng Mô tả chức đặc tính AN0AN12 I 13 kênh Input, Analog, AN6 AN7 dùng cho lập trình liệu xung clock vào Avdd Nguồn dương cho môđun tương tự Avss Nguồn Ground cho modul tương tự CLKI I Lối vào xung Clock ngồi, ln kết hợp với chân OSC1 CLKO O Lối dao động tinh thể, nối với tinh thể cộng hưởng chế độ dao động thạch anh Giống CKLO chế độ RC EC Luôn kết hợp với chân chức OSC2 CN0-CN7, I Khai báo thay đổi lối vào COFS I/O Cổng giao tiếp chuyển đổi liệu đồng khung CSCK I/O Cổng giao tiếp chuyển đổi liệu Clock vào nối tiếp CSDI I Lối vào liệu nối tiếp CSDO O Lối liệu nối tiếp C1RX I Cổng nhận bus CAN1 C1TX O Cổng phát bus CAN1 EMUD I/O Cổng vào liệu kênh truyền thông sơ cấp ICD EMUC I/O Vào xung nhịp kênh sơ cấp EMUD1 I/O Vào liệu kênh thứ cấp CN17CN18 63 EMUC1 I/O … EMUD2 EMUC2 EMUD3 EMUC3 IC1, I IC2,IC 7, IC8 Các cổng vào môđun Capture INT0, INT1, INT2 I Các ngắt LVDIN I Cổng vào phát sụt /MCLR I Power, chân Reset, mức tích cực thấp OSC1 I Lối vào giao động tinh thể Bộ đệm Trigger Schmitt sử dụng cấu hình chế độ RC OSC2 O Lối dao động tinh thể PGD I/O Vào liệu ICSP PGC I Lối vào Clock ICSP RA11 I/O Port A RB0RB12 I/O PortB RC13RC15 I/O PortC RD0-RD3, RD8, RD9 I/O PortD RF0-RF5 I/O PortF SCK1 I/O Vào Clock đồng khối SPI1 64 SDI1 I Lối vào liệu khối SPI1 SDO1 O Lối liệu SPI1 SS1 I Slaver đồng SCL I/O Vào Clock nối tiếp I2C SDA I/O Vào Data nối tiếp đồng I2C SOSCO O Lối dao động tinh thể công suất thấp 32Khz SOSCI I Lối vào dao động 32Khz T1CK I Lối vào xung Clock Timer1 T2CK I ……………………………… Timer2 U1RX I Cổng nhận khối UART1 U1TX O Cổng phát khối UART1 U1ARX I Cổng nhận mở rộng khối UART1 U1ATX O Cổng phát mở rộng khối UART1 VDD Chân nguồn Vdd VSS Chân nguồn Vss Vref+ I Lối vào Vref+ (cao) analog chuẩn Vref- I Lối vào Vref- (thấp) chuẩn 65 Bảng 6.2: Nội dung chi tiết boot sector Bảng 6.3: Các lệnh cở MMC Chỉ số Đối số CMD0 Khơng Đáp ứng R1 Tên tóm tắt GO_IDLE_STATE Mô tả lệnh Lênh cho phép reset thẻ Nếu lệnh sử dụng chân CS dang mưc thấp cho phép 66 lựa chon mode hoạt động SPI Sau có lệnh lệnh CMD1 CMD58 sử dụng Sử dụng để khởi tạo thẻ Host CMD1 Không R1 SEND_OP_COND tham dò với CMD1 đáp ứng chuyển từ 01h (Busy) sang 00h (Ready) CMD9 Không R1 SEND_CSD CMD10 Không R1 SEND_CID Sử dụng để đọc thông tin ghi CSD Đọc thông tin từ CID Lệnh cho phép truyền theo thứ tự CMD13 Không R2 SEND_STATUS thông tin ghi trạng thái thẻ (status register) Lệnh dùng để thay đổi độ dài khối liệu sử dụng [31:0] CMD16 Độ dài lệnh CMD17 đọc khối (single R1 SET_BLOCKEN block read) CMD24 ghi khôi (single block write) Trong thẻ củ khối nhở thông thương giá trị mặc định 512 byte Lệnh đọc liệu từ thẻ, [31:0] CMD17 Địa R1 liệu READ_SINGLE_ địa đối số với độ dài BLOCK thiết lập lênh CMD16 (mặc đinh 512 byte) Sử dụng để đọc liệu từ thẻ bắt [31:0] CMD24 Địa R1 WRITE_BLOCK liệu CMD27 Không đầu từ địa đối số độ dài khối liệu đọc cài đặt lênh CMD16 R1b PROGRAM_CSD 67 Lênh sử dụng cho việc lập trình bit programmale (cho phép chương trình hóa) ghi CSD CMD58 CMD59 Không R3 Lệnh đọc nội dung ghi READ_OCR OCR [31:1] Lệnh bật tắt chức kiểm tra lỗi Stuff bit CRC Mặc định SPI mode [0:0] R1 CRC_ON_OFF CRC option = CRC on CRC CRC option = CRC off option Bảng 6.4: Mô tả thư mục gốc Bảng 6.5: Mô tả hàm định dạng thẻ Tên hàm tắt bit Ý nghĩa 68 FSInit Là hàm khởi tạo thẻ, nạp vào MBR (thông tin phân vùng), nạp vào sector khởi cập nhật thông sô hợp lệ cho Hàm cập nhật thơng tin file, ngừng lại việc ghi tới entry giải FSfclose phóng RAM Hàm cập nhật thông tin mốc thời gian cho file FSfoef Hàm phát việc kết thúc file hoàn thành Nếu file tồn tại, FSfopen mở để ghi thêm vào từ điểm kêt FSfopen thúc lần mở trước, xóa tạo file tên để ghi vào đơn giản để đọc file Nếu file khơng tồn tại, FSfopen tạo Hàm mở file SD card kết hợp với FSFILE structure (stream) FSfopenpgm Hàm sử dụng đối số định nghĩa ROM Hàm cần thiết cho kiến trúc PIC18 Hàm đọc thông tin từ file mở tới đệm Số byte ghi có FSfread thể định nghĩa tham số Nếu FSfread gọi liên tiếp file giống trình đọc tiếp tục từ điểm dừng lần đọc trước Hàm trả lại giá trị liệu đọc Hàm đọc thông tin từ đệm tới file mở Thuật toán sử dụng đọc FSfwrite sector từ vùng liệu thẻ tới SRAM Việc ghi block với khối liệu lớn, thời gian ta ghi block giống block nhỏ FSremove Hàm tìm kiếm file sở với tên hợp lệ cho Nếu tìm thấy đề mục thư mục gốc xóa mặt nạ đề mục FAT tẩy Xóa file xác định tên cho trước Nếu file mở với FSremovepgm FSfopen, phải xóa file trước gọi lai FSremovepgm Tên file phải định nghĩa ROM Chức cần thiết với PIC18 FSrewind Hàm thiết lập lại vị trí bắt đầu file SetClockVars Hàm sử dụng mode đồng hồ đước sử dụng có thiết lập thời gian Ngày áp dụng cho file mà tạo 69 sử chữa Thao tác với thư mục, hám tạo thư muc thư mục FSmkdir thời Thao tác với thư mục, hàm thay đổi thư mục làm việc thời FSchdir thành thư mục định danh người dùng Thao tác với thư mục, hàm xóa thư mục định người FSrmdir dùng Thao tac với thư mục, hàm trả lại giá trị tên thư mục làm FSgetcwd việc tới người dùng Hàm định vị trí file thư mục hiên thời mà phù hợp với tên thuộc tính đặt người dùng Với file định, FindFirst tên kích cỡ file, ngày tạo, thuộc tính cấu trúc SearchRec cập nhật với thơng tin file xác FindFirstpgm FindNext Giống với hàm FindFirst, hàm cần thiết PIC18 Hàm định vị trí thư mục sau gọi hàm FindFirst FindFirstpgm Hàm xóa tồn bảng thư mục gốc bảng phân bố liệu Khi FSformat người dùng gọi hàm tạo boot sector dựa thông tin lấy từ MBR FSfprintf Hàm ghi chuỗi lên file Phụ lục 2: Đoạn code sau mơ tả q trình khởi tạo thẻ /////////////////////////////////////////////////////// int1 MMC_Initialize(void) { int8 i, r1; output_high(PIN_C7); //tat lua chon MMC for(i=0; i < 20; i++) 70 spi_write(0xFF); output_low(PIN_C7); //delay_ms(20); if(MMC_Command(0x40,0,0,0x95, 1, 99) != 1) goto ErrorMMC; MMCLoop: r1 = MMC_Command(0x41, 0, 0, 0xFF, 0, 0x40); //LCD_SetCursor(0,6); //printf(LCD_putc, "41_R1: %X", r1); if(r1 != 0) { goto MMCLoop; } spi_write(0xFF); output_high(PIN_C7); spi_write(0xFF); return TRUE; ErrorMMC: output_high(PIN_C7); spi_write(0xFF); return FALSE; } //////////////////////////////////////////////////////// Phụ lục 3: Đoạn code thực trình định đạng thẻ theo FAT16 /////////////////////////////////////////////// #include #define bfrsize void main(void){ 71 FSFILE *pOldFile, pNewFile; char myData[20]; char bfr [6]; int bytesRead, bytesWritten; char newFile[] = “newfile.txt”; char writeArg = “w”; // khoi tao thu vien FAT16, chuan SPI va cac chan co lien quan if( !FSInit() ) //Loi qua trinh khoi tao FAT16 return 1; // the khong hien dien hoac dinh dang sai // tao file moi pNewFile = FSfopen (newFile, writeArg); // mo file da ton tai va doc pOldFile = FSfopenpgm (“myfile.txt”, “r”); if ( pOldFile == NULL ) return 1; // doc 10 byte du lieu tu file bytesRead = FSfread((void*)myData,10,1,pOldFile); bytesRead = FSfread((void *)bfr,1,bfrSize, pOldFile); // ghi 15 byte len file bytesWritten = FSfwrite((void *) myData, 10, 1,pNewFile); bytesWritten = FSfwrite((void *)bfr,1, bfrSize, pNewFile); // dong tat ca cac file FSfclose( pOldFile ); FSfclose (pNewFile); //xoa file cu FSremovepgm (“myfile.txt”); } //////////////////////////////////////////////////////// 72 Phụ lục 4: Code điều khiển thiết bị đo lưu liệu nhiệt độ #include #include #fuses H4,NOWDT,NOPROTECT,NOLVP,NODEBUG #use delay(clock=40000000) #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8) #include "2x16_4x20_LCD.c" #include "MMC_SPI_FAT32.h" #include "MMC_SPI_FAT32.c" void main(){ delay_ms(100); char f,gfilename[12],c; char msg[64]; int cart; int i=0; cart=0; lcd_init(); LCD_gotoxy(1,1); printf(lcd_putc," MMC CONTROL "); printf("\r\nMMC CONTROL\r\n"); while(true) { LCD_gotoxy(1,1); printf(lcd_putc," MMC CONTROL "); if(MMCInit() == MMC_OK) { 73 LCD_gotoxy(1,1); printf(lcd_putc,"MMC init OK "); printf("MMC init OK\r\n"); delay_ms(2000); InitFAT(); LCD_gotoxy(1,2); printf(lcd_putc,"FAT init OK"); printf("FAT init OK\r\n"); printf("Creating Files\r\n"); delay_ms(1000); printf(lcd_putc,"\f"); strcpy(gfilename,"SAMPLE.TXT"); f = fopen(gfilename,'a'); printf("Created SAMPLE.TXT\r\n"); delay_ms(1000); if (f & MMC_ERROR) { printf(lcd_putc,"Couldn't open file!"); if(f == MMC_NO_CARD_INSERTED) printf(lcd_putc,"Please, insert MMC!"); else if(f == MMC_MAX_FILES_REACHED) printf(lcd_putc,"ops =)"); } else { printf(lcd_putc,"\f"); LCD_gotoxy(1,1); printf(lcd_putc,"Writing Began"); printf("Writing Began\r\n"); strcpy(msg,"Hello World"); 74 fputstring(msg,f); printf("Written data=%s",msg); fclose(f); delay_ms(100); while (MMCInit() == MMC_OK) { int w; w==1; LCD_gotoxy(1,1); printf(lcd_putc,"Writing Done "); printf("\r\nWriting Done"); while (MMCInit() == MMC_OK) { } } } }//MMCInit } //while } //Main //!//+++++++++++++++++++++++++++++++++++++++++++++++++++ //! 75 ... cứu đề tài thiết kế chế tạo thiết bị đo lưu liệu nhiệt độ dựa vào vi điều khiển 18f4550 để lập trình điều khiển 1.2 Mục đích đề tài Thiết kế chế tạo thiết bị đo lưu liệu nhiệt độ cỡ nhỏ nhằm mục... chương trình thiết lập trước Trong trình sản xuất nhà máy, xí nghiệp việc đo, lưu liệu khống chế nhiệt độ tự động cần thiết quan trọng Vì nắm bắt yêu cầu đo lưu liệu nhiệt độ tự động có nhiều...THIẾT KẾ CHẾ TẠO THIẾT BỊ ĐO VÀ LƯU DỮ LIỆU NHIỆT ĐỘ CỠ NHỎ Tác giả LÊ VĂN LUẬN Giáo viên hướng dẫn: PGS.TS Nguyễn Văn Hùng