1. Trang chủ
  2. » Luận Văn - Báo Cáo

Điều khiển nhiệt độ nhiều kênh dùng dsPIC (Full Code)

77 926 4

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 77
Dung lượng 4,94 MB

Nội dung

Đất nước chúng ta đang trên đường phát triển và đang hòa nhập vào sự phát triển của WTO tạo sự thay đổi về mặt kinh tế xã hội của nước ta. Tạo cơ hội cho sinh viên chúng em tiếp cận và nắm bắt được những thành tựu của thế giới về các lĩnh vực khoa học kỹ thuật nói chung và ngành điện tử nói riêng. Hiện nay trong các nhà máy sản xuất hệ thống nhiệt độ được ứng dụng rất nhiều ( ví dụ nhà máy sản xuất răng sứ giả cao cấp…vv). Chính vì thế là một sinh viên nghành tự động hóa là một nghành rất quan trọng trong công nghiệp hóa hiện đại hóa đất nước nên em quyết định làm đề tài Điều Khiển Nhiệt Độ Nhiều Kênh Dùng dsPIC 30F4013 Có Giao Tiếp Với Máy Tính Và Thuật Toán Điều Khiển ONOFF Và Thuật Toán PID Số.

BỘ CÔNG THƯƠNG TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP TP HCM KHOA CÔNG NGHỆ ĐIỆN TỬ ĐỒ ÁN CHUYÊN NGHÀNH Đề Tài: ĐIỀU KHIỂN NHIỆT ĐỘ NHIỀU KÊNH DÙNG dsPIC 30F4013 CĨ GIAO TIẾP MÁY TÍNH Giáo viên hướng dẫn : Th.S HUỲNH MINH NGỌC Sinh viên thực : ĐẶNG MINH TÂM Mã số sinh viên : 12157241 Lớp: DHDTTD8BLT Tp Hồ Chí Minh, tháng 12 năm 2014 LỜI CẢM ƠN Đề tài hoàn thành theo thời gian yêu cầu nhà trường khoa Và để đạt kết này, khơng nỗ lực thân em mà có giúp đỡ bảo thầy bạn lớp Trước tiên em muốn dành gởi tình cảm chân thành đến thầy HUỲNH MINH NGỌC tận tình hướng dẫn giúp đỡ bảo cho em suốt trình thực đồ án Sự hướng dẫn nhiệt tình kịp thời Thầy Ngọc giúp em hoàn thành đề tài Xin chân thành cám ơn Thầy Xin cảm ơn bạn sinh viên lớp giúp đỡ em nhiều mặt phương tiện, sách vở, ý kiến Mặc dù đề tài xong kiến thức cịn hạn hẹp khơng tránh khỏi thiếu sót hạn chế Rất mong nhận góp ý, phê bình, dẫn q thầy cơ, bạn sinh viên SVTH: ĐẶNG MINH TÂM Trang NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………… SVTH: ĐẶNG MINH TÂM Trang NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ……………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… … ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… SVTH: ĐẶNG MINH TÂM Trang ………………………………………………………………………………… …………………………………………………… SVTH: ĐẶNG MINH TÂM Trang Mục lục CHƯƠNG TỔNG QUAN VỀ ĐỀ TÀI 1.1 GIỚI THIỆU : 2.2 LÍ DO CHỌN ĐỀ TÀI: .7 CHƯƠNG CƠ SỞ LÝ THUYẾT .8 2.1 GIỚI THIỆU VỀ VI ĐIỀU KHIỂN dsPIC 30F4013 2.1.1 Sơ đồ chân dsPIC30F4013 2.1.2 CPU dsPIC30F4013 13 2.1.3 Các định thời 15 2.1.4 Sơ đồ khối vi điều khiển dsPIC30F4013 23 2.1.5 Tổ chức nhớ: 23 2.1.6 Các cổng xuất nhập 26 2.1.7 Ngắt chế ngắt 27 2.1.8 Bộ chuyển đổi tương tự số ADC .29 2.2 THUẬT TOÁN PID 30 2.2.1 PID liên tục 30 2.2.2 PID số 34 2.3 THUẬT TOÁN ON/OFF 36 2.4 HÀM TRUYỀN LÒ NHIỆT .37 2.4.1 Mơ hình hệ thống nhiệt độ: 37 2.4.2 Hàm truyền lị nhiệt mơ hình Ziegler - Nichols 38 2.5 TÌM HÀM TRUYỀN LỊ NHIỆT CỦA ĐỀ TÀI 39 2.5.1 Khảo sát hệ hở lò nhiệt .39 2.5.2 Hàm truyền lò .40 2.5.3 Hàm truyền lò 41 2.5.4 Kết luận: .41 2.6 SƠ LƯỢC VISUAL BASIC 2005 42 2.6.1 Các thuộc tính serialport: 42 2.6.2 Teechart 8: 42 CHƯƠNG THIẾT KẾ VÀ THI CÔNG MƠ HÌNH 43 3.1 THIẾT KẾ PHẦN CỨNG 43 SVTH: ĐẶNG MINH TÂM Trang 3.1.1 Giới thiệu sơ đồ khối mơ hình: 43 3.1.2 Các khối chức mơ hình 43 3.1.3 Mạch vi điều khiển trung tâm 43 3.1.4 Mạch công suất 44 3.1.5 Mạch giao tiếp máy vi tính 47 3.1.6 Cảm biến nhiệt LM35, bóng đèn dây tóc, quạt .48 3.2 GIẢI THUẬT CHƯƠNG TRÌNH 49 3.2.1 Đối tượng điều khiển 49 3.2.2 Cách tính nhiệt độ đề tài 50 3.2.3Cách tính tốn PWM duty đề tài 50 3.2.4 Chương trình 52 3.2.5 Chương trình PID 53 3.2.6 Chương trình ON/OFF .54 3.2.7 Chương trình kết nối với máy tính 55 3.2.8 Chương trình ngắt liệu máy tính 56 CHƯƠNG KẾT QUẢ THI CÔNG 57 4.1 Giao diện điều khiển visual basic 2005: 57 4.2 Mô hình .57 4.3 Kết thực nghiệm mô hình 58 4.3.1 Thực nghiệm 58 4.3.2 Thực nghiệm 59 4.3.3 Thực nghiệm 59 4.3.4 Thực nghiệm 60 CHƯƠNG KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN ĐỀ TÀI 61 5.1 Kết luận 61 5.2 Một số điểm hạn chế 61 5.3 Hướng phát triển đề tài: 61 CHƯƠNG TÀI LIỆU THAM KHẢO 62 CHƯƠNG PHỤ LỤC 63 SVTH: ĐẶNG MINH TÂM Trang CHƯƠNG TỔNG QUAN VỀ ĐỀ TÀI 1.1 GIỚI THIỆU : Trong trình học tập trường với giáo án, giáo trình môn học nghành điện tử tự động học em kết hợp em học để em làm đề tài Điều Khiển Nhiệt Độ Nhiều Kênh Dùng dsPIC 30F4013 Có Giao Tiếp Với Máy Tính Và Thuật Toán Điều Khiển ON/OFF Và Thuật Toán PID Số Thuật toán ON/OFF PID số viết chương trình CCS nạp vào vi điều khiển PIC điều khiển hệ lò nhiệt Phần giao diện thiết kế chương trình Visual Basic 2005 để đặt nhiệt độ gửi xuống vi điều khiển nhận nhận nhiệt độ đo từ vi điều khiển vẽ đồ thị Teechart để đánh giá chất lượng điều khiển 2.2 LÍ DO CHỌN ĐỀ TÀI: Đất nước đường phát triển hòa nhập vào phát triển WTO tạo thay đổi mặt kinh tế xã hội nước ta Tạo hội cho sinh viên chúng em tiếp cận nắm bắt thành tựu giới lĩnh vực khoa học kỹ thuật nói chung ngành điện tử nói riêng Hiện nhà máy sản xuất hệ thống nhiệt độ ứng dụng nhiều ( ví dụ nhà máy sản xuất sứ giả cao cấp…vv) Chính sinh viên nghành tự động hóa nghành quan trọng cơng nghiệp hóa đại hóa đất nước nên em định làm đề tài Điều Khiển Nhiệt Độ Nhiều Kênh Dùng dsPIC 30F4013 Có Giao Tiếp Với Máy Tính Và Thuật Toán Điều Khiển ON/OFF Và Thuật Toán PID Số SVTH: ĐẶNG MINH TÂM Trang CHƯƠNG THUYẾT CƠ SỞ LÝ 2.1 GIỚI THIỆU VỀ VI ĐIỀU KHIỂN dsPIC 30F4013 - 16 bit CPU, xây dựng theo kiến trúc Harvard - Kiến trúc thay đổi Harvard - Ngôn ngữ C tối ưu hóa kiến trúc tập lệnh - Tập lệnh gồm 84 lệnh - Chế độ định địa linh hoạt - Độ dài lệnh 24-bit, độ dài liệu 16-bit - Bộ nhớ chương trình Flash 48 Kbytes - Bộ nhớ RAM độ lớn 2Kbytes - Bộ nhớ EEPROM Kbytes - Mảng 16 ghi làm việc 16-bit - Tốc độ làm việc lên tới 30 MIPS - Dòng ra, vào chân I/O lớn: 25 mA - Timer 16-bit, ghép Timer 16-bit thành Timer 32-bit - Chức Capture 16-bit - Các so sánh/PWM 16-bit - Module SPI dây (hỗ trợ chế độ Frame) - Module I2C, hỗ trợ chế độ đa chủ tớ, địa từ 7-bit đến 10-bit - UART có khả địa hoá, hỗ trợ đệm FIFO - Nạp liệu song song - Hai chứa 40-bit có hỗ trợ bão hoà logic - Thực phép nhân số17-bit chu kì máy - Tất lệnh DSP thực chu kì máy - Dịch trái phải 16 bit chu kì máy - Bộ nhớ Flash: ghi/xố lên tới 10.000 lần (điều kiện công nghiệp) 100.000 lần (thơng thường) - Khả tự nạp chương trình điều khiển software - Watch Dog Timer mềm dẻo với dao động RC nguồn thấp chip - Chế độ bảo vệ firmware khả lập trình SVTH: ĐẶNG MINH TÂM Trang - Khả tự lập trình nối tiếp mạch điện (In Circuit Serial Programming – ICSP) - Có thể lựa chọn chế độ quản lí nguồn: Sleep Idle 2.1.1 Sơ đồ chân dsPIC30F4013 Hình 2.1 Sơ đồ chân DSPIC30F4013 Ý nghĩa chân dsPIC30F4013: SVTH: ĐẶNG MINH TÂM Trang CHƯƠNG 6.TÀI LIỆU THAM KHẢO Tiếng việt [1] Huỳnh Minh Ngọc “tailieudspic30f4013”, Đại Học Công Nghiệp TPHCM [2]Huỳnh Thái Hoàng lý thuyết điều khiển tự động Đại học bách khoa Thành Phố Hồ Chí Minh [3] Huỳnh Minh Ngọc đo lường điều khiển máy tính Đại học cơng nghiệp Thành Phố Hồ Chí Minh [4] Nguyễn Bính (2000) Điện tử cơng suất Nhà xuất Khoa học kỹ thuật [5] Bùi Đình Tiếu (2004) Giáo trình Truyền động điện Nhà xuất giáo dục [6] Các tài liệu dạng file PDF gồm: Giáo trình, Data Sheet linh kiện,… [7] Các wedside tham khảo: www.dientuvietnam.net www.diendandientu.vn www.picvietnam.com www.alldatasheet.com Tiếng anh [1] Microchip, dsPIC30F3014/4013Data Sheet High-Performance, 16-Bit Digital Signal Controllers, Getting Started with dsPIC30F [2] Zoran Milivojević, Djordje Šaponjić, Programming dsPIC Microcontrollers in C, MikroElektronika Publication SVTH: ĐẶNG MINH TÂM Trang 62 CHƯƠNG PHỤ LỤC Chương trình viết vi điều khiển dsPIC30F4013 #include #device ADC = 12 #use delay(clock=22118400) #include "lcd16x2.c" #use rs232(UART1A,baud=9600,parity=N,xmit=PIN_C13,rcv=PIN_C14,bits=8) #FUSES HS,NOWDT,BROWNOUT,MCLR,PROTECT,NODEBUG void tinh_nhiet_do(); void pid_1(); void pid_2(); void ket_noi_pc(); void dieu_khien_onoff(); unsigned int8 du_lieu_nhan[10]; unsigned int8 du_lieu_gui[30]; unsigned int8 i = 0; unsigned int8 value = 0; int1 status_rda = 0; #define read_data #define save_lo_1 #define save_pid_1 #define save_lo_2 #define save_pid_2 #define start_stop #define test //Dinh nghia chan diei khien #define dk_1 PIN_D0 #define dk_2 PIN_D1 #define fan_1 PIN_D2 #define fan_2 PIN_D3 unsigned int16 tdo_1 = 0, tdo_2 = 0; unsigned int16 tda_1 = 0, tda_2 = 0; unsigned int8 st_pid_1 = 0; unsigned int8 st_pid_2 = 0; unsigned int8 st_start_stop = 0; unsigned int8 st_test = 0; unsigned int8 st_dk_1 = 0; unsigned int8 st_fan_1 = 0; unsigned int8 st_dk_2 = 0; unsigned int8 st_fan_2 = 0; unsigned int16 temp; //Bien tam //Cac thong so PID #define period 5000 unsigned int16 kp_1 = 0; //Thong so PID SVTH: ĐẶNG MINH TÂM Trang 63 unsigned int16 ki_1 = 0; unsigned int16 kd_1 = 0; signed int32 err_1 = 0; //Sai so hien tai signed int32 pre_err_1 = 0; //Sai so truoc signed int32 p_part_1 = 0; signed int32 i_part_1 = 0; signed int32 d_part_1 = 0; signed int32 output_1 = 0; unsigned int16 kp_2 = 0; //Thong so PID unsigned int16 ki_2 = 0; unsigned int16 kd_2 = 0; signed int32 err_2 = 0; //Sai so hien tai signed int32 pre_err_2 = 0; //Sai so truoc signed int32 p_part_2 = 0; signed int32 i_part_2 = 0; signed int32 d_part_2 = 0; signed int32 output_2 = 0; void main(){ //Khoi tao LCD lcd_init(); lcd_gotoxy(1,1); printf(lcd_putc,"Do Nhiet Do LM35"); lcd_gotoxy(1,2); printf(lcd_putc,"DK ON/OFF & PID"); delay_ms(1000); printf(lcd_putc,"\f"); //Doc du lieu EEPROM //Du lieu lo tda_1 = read_eeprom(0); if(tda_1 > 200) tda_1 = 0; st_pid_1 = read_eeprom(2); if(st_pid_1 > 1) st_pid_1 = 0; kp_1 = read_eeprom(4); if(kp_1 > 5000) kp_1 = 0; ki_1 = read_eeprom(6); if(ki_1 > 5000) ki_1 = 0; kd_1 = read_eeprom(8); if(kd_1 > 5000) kd_1 = 0; //Du lieu lo tda_2 = read_eeprom(10); if(tda_2 > 200) tda_2 = 0; st_pid_2 = read_eeprom(12); if(st_pid_2 > 1) st_pid_2 = 0; kp_2 = read_eeprom(14); if(kp_2 > 5000) kp_2 = 0; ki_2 = read_eeprom(16); SVTH: ĐẶNG MINH TÂM Trang 64 if(ki_2 > 5000) ki_2 = 0; kd_2 = read_eeprom(18); if(kd_2 > 5000) kd_2 = 0; //Hien thi len LCD lcd_gotoxy(1,2); printf(lcd_putc,"%3u",tda_1); lcd_gotoxy(9,2); printf(lcd_putc,"%3u",tda_2); //Khoi tao ADC SETUP_ADC_PORTS(sAN1|sAN2,VSS_VREF); //Range 0-VrefH SETUP_ADC(ADC_CLOCK_DIV_64|ADC_TAD_MUL_2); //Clock External, Auto-sample time = //Khoi tao PWM set_pwm_duty(1,0); set_pwm_duty(2,0); setup_timer2(TMR_INTERNAL | TMR_DIV_BY_64, 0xFFC0); if(st_pid_1){ setup_compare(1, COMPARE_PWM | COMPARE_TIMER2); } else{ setup_compare(1, COMPARE_OFF); }; if(st_pid_2){ setup_compare(2, COMPARE_PWM | COMPARE_TIMER2); } else{ setup_compare(2, COMPARE_OFF); }; //Khoi tao Timer thoi gian tinh PID SETUP_TIMER1(TMR_INTERNAL|TMR_DIV_BY_256,21600); //Dung cho thoi gian lay mau //Tat quat output_bit(fan_1,0); output_bit(fan_2,0); //Cho phep ngat ENABLE_INTERRUPTS(INT_TIMER1); ENABLE_INTERRUPTS(INT_RDA); ENABLE_INTERRUPTS(INTR_GLOBAL); while(TRUE){ tinh_nhiet_do(); dieu_khien_onoff(); ket_noi_pc(); } } void dieu_khien_onoff(){ if(st_start_stop){ SVTH: ĐẶNG MINH TÂM Trang 65 if(st_pid_1 == 0){ if(tdo_1 < tda_1) output_bit(dk_1,1); else output_bit(dk_1,0); if(tdo_1 >= tda_1) output_bit(fan_1,1); else output_bit(fan_1,0); }; if(st_pid_2 == 0){ if(tdo_2 < tda_2) output_bit(dk_2,1); else output_bit(dk_2,0); if(tdo_2 >= tda_2) output_bit(fan_2,1); else output_bit(fan_2,0); }; }; } void ket_noi_pc(){ unsigned int8 j = 0; if(status_rda == 1){ status_rda = 0; if(du_lieu_nhan[0] == read_data){ //Gui nhiet lo du_lieu_gui[0] = tdo_1/128; du_lieu_gui[1] = tdo_1%128; //Gui nhiet dat lo du_lieu_gui[2] = tda_1/128; du_lieu_gui[3] = tda_1%128; //Gui trang thai lo du_lieu_gui[4] = st_pid_1; //Gui PID dat lo du_lieu_gui[5] = kp_1/128; du_lieu_gui[6] = kp_1%128; du_lieu_gui[7] = ki_1/128; du_lieu_gui[8] = ki_1%128; du_lieu_gui[9] = kd_1/128; du_lieu_gui[10] = kd_1%128; //Gui nhiet lo du_lieu_gui[11] = tdo_2/128; du_lieu_gui[12] = tdo_2%128; //Gui nhiet dat lo du_lieu_gui[13] = tda_2/128; du_lieu_gui[14] = tda_2%128; //Gui trang thai lo du_lieu_gui[15] = st_pid_2; //Gui PID dat lo du_lieu_gui[16] = kp_2/128; du_lieu_gui[17] = kp_2%128; du_lieu_gui[18] = ki_2/128; SVTH: ĐẶNG MINH TÂM Trang 66 du_lieu_gui[19] = ki_2%128; du_lieu_gui[20] = kd_2/128; du_lieu_gui[21] = kd_2%128; //Gui Trang thai Start Stop du_lieu_gui[22] = st_start_stop; //Gui trang thai DK he ho du_lieu_gui[23] = st_test; du_lieu_gui[24] = st_dk_1; du_lieu_gui[25] = st_fan_1; du_lieu_gui[26] = st_dk_2; du_lieu_gui[27] = st_fan_2; printf("%c",0xfe); //Start code for(j = 0;j < 28;j ++){ printf("%c",du_lieu_gui[j]); }; } if(du_lieu_nhan[0] == save_lo_1){ tda_1 = (unsigned int16)du_lieu_nhan[1]*128 + du_lieu_nhan[2]; st_pid_1 = du_lieu_nhan[3]; write_eeprom(0,tda_1); write_eeprom(2,st_pid_1); if(st_start_stop){ if(st_pid_1){ setup_compare(1, COMPARE_PWM | COMPARE_TIMER2); } else{ setup_compare(1, COMPARE_OFF); }; }; lcd_gotoxy(1,2); printf(lcd_putc,"%3u",tda_1); }; if(du_lieu_nhan[0] == save_pid_1){ kp_1 = (unsigned int16)du_lieu_nhan[1]*128 + du_lieu_nhan[2]; ki_1 = (unsigned int16)du_lieu_nhan[3]*128 + du_lieu_nhan[4]; kd_1 = (unsigned int16)du_lieu_nhan[5]*128 + du_lieu_nhan[6]; write_eeprom(4,kp_1); write_eeprom(6,ki_1); write_eeprom(8,kd_1); }; if(du_lieu_nhan[0] == save_lo_2){ tda_2 = du_lieu_nhan[1]*128 + du_lieu_nhan[2]; st_pid_2 = du_lieu_nhan[3]; write_eeprom(10,tda_2); write_eeprom(12,st_pid_2); if(st_start_stop){ SVTH: ĐẶNG MINH TÂM Trang 67 if(st_pid_2){ setup_compare(2, COMPARE_PWM | COMPARE_TIMER2); } else{ setup_compare(2, COMPARE_OFF); }; }; lcd_gotoxy(9,2); printf(lcd_putc,"%3u",tda_2); }; if(du_lieu_nhan[0] == save_pid_2){ kp_2 = (unsigned int16)du_lieu_nhan[1]*128 + du_lieu_nhan[2]; ki_2 = (unsigned int16)du_lieu_nhan[3]*128 + du_lieu_nhan[4]; kd_2 = (unsigned int16)du_lieu_nhan[5]*128 + du_lieu_nhan[6]; write_eeprom(14,kp_2); write_eeprom(16,ki_2); write_eeprom(18,kd_2); }; if(du_lieu_nhan[0] == start_stop){ st_start_stop = du_lieu_nhan[1]; if(st_start_stop){ if(st_pid_1)setup_compare(1, COMPARE_PWM | COMPARE_TIMER2); if(st_pid_2)setup_compare(2, COMPARE_PWM | COMPARE_TIMER2); } else{ if(st_pid_1)setup_compare(1, COMPARE_OFF); else output_bit(dk_1,0); if(st_pid_2)setup_compare(2, COMPARE_OFF); else output_bit(dk_2,0); output_bit(fan_1,0); output_bit(fan_2,0); }; }; if(du_lieu_nhan[0] == test){ st_test = du_lieu_nhan[1]; if(st_test){ st_dk_1 = du_lieu_nhan[2]; if(st_dk_1){ output_bit(dk_1,1); } else{ output_bit(dk_1,0); }; SVTH: ĐẶNG MINH TÂM Trang 68 st_fan_1 = du_lieu_nhan[3]; if(st_fan_1){ output_bit(fan_1,1); } else{ output_bit(fan_1,0); }; st_dk_2 = du_lieu_nhan[4]; if(st_dk_2){ output_bit(dk_2,1); } else{ output_bit(dk_2,0); }; st_fan_2 = du_lieu_nhan[5]; if(st_fan_2){ output_bit(fan_2,1); } else{ output_bit(fan_2,0); }; } else{ output_bit(dk_1,0); st_dk_1 = 0; output_bit(fan_1,0); st_fan_1 = 0; output_bit(dk_2,0); st_dk_2 = 0; output_bit(fan_2,0); st_fan_2 = 0; }; }; } } void tinh_nhiet_do(){ unsigned int16 coun_adc = 0; unsigned int16 adc; unsigned int32 sum_adc = 0; //Do nhiet kenh SET_ADC_CHANNEL(1); delay_ms(1); coun_adc = 0; SVTH: ĐẶNG MINH TÂM Trang 69 sum_adc = 0; while(coun_adc < 3000){ //Chuyen doi ADC LM35 adc = read_adc(); sum_adc += adc; coun_adc++; }; tdo_1 = sum_adc/30000; //Do nhiet kenh SET_ADC_CHANNEL(2); delay_ms(1); coun_adc = 0; sum_adc = 0; while(coun_adc < 3000){ //Chuyen doi ADC LM35 adc = read_adc(); sum_adc += adc; coun_adc++; }; tdo_2 = sum_adc/30000; //Hien thi LCD lcd_gotoxy(1,1); printf(lcd_putc,"L1%3u%cC",tdo_1,0xdf); lcd_gotoxy(9,1); printf(lcd_putc,"L2%3u%cC",tdo_2,0xdf); } #INT_TIMER1 //Thoi gian tinh PID S void timer1_isr(){ if(st_pid_1 && st_start_stop) pid_1(); else i_part_1 = 0; if(st_pid_2 && st_start_stop) pid_2(); else i_part_2 = 0; } void pid_1(){ err_1 = tda_1 - tdo_1; p_part_1 = (signed int32)kp_1*err_1; if(p_part_1 > period){p_part_1 = period;}; if(p_part_1 < -period){p_part_1 =- period;}; if(ki_1 != 0){ i_part_1 += ((signed int32)ki_1*err_1); } else{ i_part_1 = 0; }; if(i_part_1 > period){i_part_1 = period;}; if(i_part_1 < -period){i_part_1 =- period;}; if(tdo_1 >= tda_1){i_part_1 = 0;}; d_part_1=((signed int32)kd_1*(err_1 - pre_err_1)); SVTH: ĐẶNG MINH TÂM Trang 70 if(d_part_1 > period){d_part_1 = period;}; if(d_part_1 < -period){d_part_1 =- period;}; pre_err_1 = err_1; output_1 = p_part_1 + i_part_1 + d_part_1; if(output_1 > period){output_1 = period;}; if(output_1 < 0){output_1 = 0;}; if(tdo_1 > tda_1){output_1 = 0;}; temp = output_1*65472/period; set_pwm_duty(1,temp); } void pid_2(){ err_2 = tda_2 - tdo_2; p_part_2 = (signed int32)kp_2*err_2; if(p_part_2 > period){p_part_2 = period;}; if(p_part_2 < -period){p_part_2 =- period;}; if(ki_2 != 0){ i_part_2 += ((signed int32)ki_2*err_2); } else{ i_part_2 = 0; }; if(i_part_2 > period){i_part_2 = period;}; if(i_part_2 < -period){i_part_2 =- period;}; if(tdo_2 >= tda_2){i_part_2 = 0;}; d_part_2=((signed int32)kd_2*(err_2 - pre_err_2)); if(d_part_2 > period){d_part_2 = period;}; if(d_part_2 < -period){d_part_2 =- period;}; pre_err_2 = err_2; output_2 = p_part_2 + i_part_2 + d_part_2; if(output_2 > period){output_2 = period;}; if(output_2 < 0){output_2 = 0;}; if(tdo_2 > tda_2){output_2 = 0;}; temp = output_2*65472/period; set_pwm_duty(2,temp); } #INT_RDA void receive_isr(){ value = getchar(); if(value == 0xfe){i = 0;goto exit;}; if(i < 7){ du_lieu_nhan[i] = value; i++; if(i == 7){ status_rda = 1; }; }; exit:; } SVTH: ĐẶNG MINH TÂM Trang 71 Chương trình viết visual basic 2005 Public Class Form1 Dim Du_Lieu(30) As Integer Dim Coun As Integer Dim Temp As Integer Dim Status As Integer Dim St_Test As Byte Dim St_Lo_1 As Byte Dim St_Fan_1 As Byte Dim St_Lo_2 As Byte Dim St_Fan_2 As Byte Const Read_Data = Const Save_Lo_1 = Const Save_Pid_1 = Const Save_Lo_2 = Const Save_Pid_2 = Const Start_Stop = Const Test = Dim X_TeeChart1 As Double Dim Y_TeeChart1 As Double Dim X_TeeChart2 As Double Dim Y_TeeChart2 As Double Dim TDo_1 As Integer Dim TDo_2 As Integer Dim TDa_1 As Integer Dim TDa_2 As Integer Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Status = Read_Data End Sub Private Sub Cmd_Open_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cmd_Open.Click If Cmd_Open.Text = "KET NOI" Then SerialPort1.PortName = CboPort.Text SerialPort1.Encoding = System.Text.Encoding.GetEncoding(28591) SerialPort1.Open() Cmd_Open.Text = "NGAT KET NOI" Timer_Read.Enabled = True Else SerialPort1.Close() Cmd_Open.Text = "KET NOI" Timer_Read.Enabled = False End If SVTH: ĐẶNG MINH TÂM Trang 72 End Sub Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived Dim n As Integer Dim i As Integer n = SerialPort1.BytesToRead For i = To n Temp = SerialPort1.ReadChar If Temp = 254 Then Coun = Else Du_Lieu(Coun) = Temp If Coun < 29 Then Coun = Coun + If Coun = 27 Then 'Lay du lieu Lo Temp = Du_Lieu(0) * 128 + Du_Lieu(1) Lbl_Tdo1.Text = Temp TDo_1 = Temp Temp = Du_Lieu(2) * 128 + Du_Lieu(3) TDa_1 = Temp Lbl_Tda1.Text = Temp 'Trang thai ON/OFF - PID Temp = Du_Lieu(4) If Temp = Then Lbl_OnOff1.Text = "ON-OFF" Else Lbl_OnOff1.Text = "PID" End If 'Kd Temp = Du_Lieu(5) * 128 + Du_Lieu(6) Lbl_Kp1.Text = Temp 'Ki Temp = Du_Lieu(7) * 128 + Du_Lieu(8) Lbl_Ki1.Text = Temp 'Kd Temp = Du_Lieu(9) * 128 + Du_Lieu(10) Lbl_Kd1.Text = Temp 'Lay du lieu Lo Temp = Du_Lieu(11) * 128 + Du_Lieu(12) Lbl_Tdo2.Text = Temp TDo_2 = Temp Temp = Du_Lieu(13) * 128 + Du_Lieu(14) TDa_2 = Temp SVTH: ĐẶNG MINH TÂM Trang 73 Lbl_Tda2.Text = Temp 'Trang thai ON/OFF - PID Temp = Du_Lieu(15) If Temp = Then Lbl_OnOff2.Text = "ON-OFF" Else Lbl_OnOff2.Text = "PID" End If 'Kd Temp = Du_Lieu(16) * 128 + Du_Lieu(17) Lbl_Kp2.Text = Temp 'Ki Temp = Du_Lieu(18) * 128 + Du_Lieu(19) Lbl_Ki2.Text = Temp 'Kd Temp = Du_Lieu(20) * 128 + Du_Lieu(21) Lbl_Kd2.Text = Temp 'Trang Thai Start Stop Temp = Du_Lieu(22) If Temp = Then Cmd_Start.Text = "STOP" Else Cmd_Start.Text = "START" End If 'Trang Thai Test If Du_Lieu(23) = Then Cmd_KhaoSat.Text = "KHAO SAT OFF" Else Cmd_KhaoSat.Text = "KHAO SAT ON" End If If Du_Lieu(24) = Then Cmd_Lo1.Text = "LO OFF" Else Cmd_Lo1.Text = "LO ON" End If If Du_Lieu(25) = Then Cmd_Quat1.Text = "QUAT OFF" Else Cmd_Quat1.Text = "QUAT ON" End If If Du_Lieu(26) = Then Cmd_Lo2.Text = "LO OFF" Else Cmd_Lo2.Text = "LO ON" SVTH: ĐẶNG MINH TÂM Trang 74 End If If Du_Lieu(27) = Then Cmd_Quat2.Text = "QUAT OFF" Else Cmd_Quat2.Text = "QUAT ON" End If End If End If End If Next End Sub Private Sub Cmd_Send1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cmd_Send1.Click Status = Save_Lo_1 End Sub Private Sub Cmd_Pid1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cmd_Pid1.Click Status = Save_Pid_1 End Sub Private Sub Timer_Read_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer_Read.Tick If SerialPort1.IsOpen Then Dim Data(10) As Byte If Status = Read_Data Then Data(0) = 254 Data(1) = SerialPort1.Write(Data, 0, 8) End If If Status = Save_Lo_1 Then Data(0) = 254 Data(1) = Save_Lo_1 Temp = Txt_Tda1.Text Data(2) = Fix(Temp / 128) Data(3) = Temp Mod 128 If Select_OnOff1.Checked Then Data(4) = End If If Select_Pid1.Checked Then Data(4) = End If SVTH: ĐẶNG MINH TÂM Trang 75 SerialPort1.Write(Data, 0, 8) End If If Status = Save_Pid_1 Then Data(0) = 254 Data(1) = Save_Pid_1 Temp = Txt_Kp1.Text Data(2) = Fix(Temp / 128) Data(3) = Temp Mod 128 Temp = Txt_Ki1.Text Data(4) = Fix(Temp / 128) Data(5) = Temp Mod 128 Temp = Txt_Kd1.Text Data(6) = Fix(Temp / 128) Data(7) = Temp Mod 128 SerialPort1.Write(Data, 0, 8) End If If Status = Save_Lo_2 Then Data(0) = 254 Data(1) = Save_Lo_2 Temp = Txt_Tda2.Text Data(2) = Fix(Temp / 128) Data(3) = Temp Mod 128 If Select_OnOff2.Checked Then Data(4) = End If If Select_Pid2.Checked Then Data(4) = End If SerialPort1.Write(Data, 0, 8) End If If Status = Save_Pid_2 Then Data(0) = 254 Data(1) = Save_Pid_2 Temp = Txt_Kp2.Text Data(2) = Fix(Temp / 128) Data(3) = Temp Mod 128 Temp = Txt_Ki2.Text Data(4) = Fix(Temp / 128) Data(5) = Temp Mod 128 Temp = Txt_Kd2.Text Data(6) = Fix(Temp / 128) Data(7) = Temp Mod 128 SerialPort1.Write(Data, 0, 8) End If If Status = Start_Stop Then Data(0) = 254 SVTH: ĐẶNG MINH TÂM Trang 76 ... THIỆU VỀ VI ĐIỀU KHIỂN dsPIC 30F4013 2.1.1 Sơ đồ chân dsPIC3 0F4013 2.1.2 CPU dsPIC3 0F4013 13 2.1.3 Các định thời 15 2.1.4 Sơ đồ khối vi điều khiển dsPIC3 0F4013 23 2.1.5... đồ chân dsPIC3 0F4013 Hình 2.1 Sơ đồ chân DSPIC3 0F4013 Ý nghĩa chân dsPIC3 0F4013: SVTH: ĐẶNG MINH TÂM Trang SVTH: ĐẶNG MINH TÂM Trang 10 SVTH: ĐẶNG MINH TÂM Trang 11 Hình 2.2 ý nghĩa chân dsPIC3 0F4013... Nhiều Kênh Dùng dsPIC 30F4013 Có Giao Tiếp Với Máy Tính Và Thuật Tốn Điều Khiển ON/OFF Và Thuật Toán PID Số SVTH: ĐẶNG MINH TÂM Trang CHƯƠNG THUYẾT CƠ SỞ LÝ 2.1 GIỚI THIỆU VỀ VI ĐIỀU KHIỂN dsPIC

Ngày đăng: 05/08/2015, 09:38

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w