Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 105 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
105
Dung lượng
3,86 MB
Nội dung
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC QUY NHƠN NGUYỄN THANH BÌNH NGHIÊN CỨU THIẾT KẾ HỆ THỐNG QUẢN LÝ VÀ GIÁM SÁT ĐIỆN NĂNG THÔNG MINH LUẬN VĂN THẠC SĨ KỸ THUẬT ĐIỆN Bình Định - Năm 2019 e BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC QUY NHƠN NGUYỄN THANH BÌNH NGHIÊN CỨU THIẾT KẾ HỆ THỐNG QUẢN LÝ VÀ GIÁM SÁT ĐIỆN NĂNG THÔNG MINH Chuyên ngành: Kỹ thuật điện Mã số: 8520201 60520202 Người hướng dẫn: TS Ngô Minh Khoa e i LỜI CAM ĐOAN Luận văn cơng trình nghiên cứu cá nhân tôi, thực hướng dẫn khoa học TS Ngô Minh Khoa – Khoa Kỹ thuật & Công nghệ, Trường Đại học Quy Nhơn Các số liệu, kết luận nghiên cứu trình bày luận văn hồn tồn trung thực Tơi xin hoàn toàn chịu trách nhiệm lời cam đoan Học viên Nguyễn Thanh Bình e ii MỤC LỤC LỜI CAM ĐOAN i MỤC LỤC ii DANH MỤC CÁC TỪ VIẾT TẮT vi DANH MỤC CÁC HÌNH vii DANH MỤC CÁC BẢNG BIỂU ix MỞ ĐẦU 1 Tính cấp thiết đề tài Mục tiêu nghiên cứu 3 Đối tượng phạm vi nghiên cứu 3.1 Đối tượng nghiên cứu 3.2 Phạm vi nghiên cứu Phương pháp nghiên cứu 4.1 Nghiên cứu lý thuyết 4.2 Nghiên cứu thực nghiệm Ý nghĩa khoa học thực tiễn đề tài Tởng quan tình hình nghiên cứu đề tài CHƯƠNG TỔNG QUAN VỀ QUẢN LÝ VÀ GIÁM SÁT ĐIỆN NĂNG 1.1 Mở đầu 1.2 Chất lượng điện 1.2.1 Tiêu chuẩn CLĐN 10 1.2.2 Nguyên nhân làm giảm CLĐN 13 1.2.3 Ảnh hưởng CLĐN khách hàng sử dụng điện 13 1.3 Đo lường đại lượng điện 15 1.3.1 Yêu cầu chung 15 e iii 1.3.2 Sơ đồ đo 16 1.3.3 Đo trị hiệu dụng 17 1.3.4 Đo trình độ 17 1.3.5 Thuật toán tổ hợp đo lường 18 1.4 Quản lý giám sát điện 19 1.4.1 Quản lý nhu cầu phụ tải (DSM) 19 1.4.2 Giám sát điện 20 1.4.3 Lợi ích doanh nghiệp quản lý giám sát điện 22 1.5 Kết luận chương 22 CHƯƠNG 24 THIẾT KẾ PHẦN CỨNG CỦA HỆ THỐNG 24 2.1 Mở đầu 24 2.2 Các phần tử mạch lực 25 2.2.1 Sơ đồ mạch lực 25 2.2.2 Nguồn 26 2.2.3 Tải 27 2.3 Các phần tử mạch đo lường điều khiển 27 2.3.1 Cảm biến dòng điện 27 2.3.2 Cảm biến điện áp 30 2.3.3 Bo mạch Arduino Wemos D1 R32 32 2.3.4 Môđun rơle 34 2.3.5 Màn hình LCD 35 2.4 Cấu trúc phần cứng hệ thống 35 2.4.1 Sơ đồ lắp ráp chi tiết 35 2.4.2 Tổng thể phần cứng 36 2.5 Kết luận chương 36 CHƯƠNG 38 e iv THIẾT KẾ PHẦN MỀM CỦA HỆ THỐNG 38 3.1 Mở đầu 38 3.2 Giới thiệu phần mềm áp dụng 38 3.2.1 Phần mềm Arduino IDE 38 3.2.2 Phần mềm Blynk 39 3.3 Phương pháp xác định trị hiệu dụng 41 3.3.1 Phương pháp đỉnh – đỉnh 42 3.3.2 Phương pháp trị hiệu dụng RMS 43 3.3.3 Lựa chọn phương pháp 43 3.4 Đo lường đại lượng điện 46 3.4.1 Đo điện áp trị hiệu dụng (Urms ) 46 3.4.2 Đo dòng điện trị hiệu dụng (Irms) 47 3.4.3 Đo lường công suất tác dụng (P) 48 3.4.4 Đo lường đại lượng khác (S, Q, A, cos) 49 3.4.5 Giải thuật đo lường đại lượng điện 50 3.4.6 Giải thuật DSM bảo vệ quá/thấp áp 53 3.5 Thiết kế giao diện quản lý, giám sát điều khiển từ xa 54 3.5.1 Thiết lập biến ảo cho đối tượng 54 3.5.2 Thiết kế giao diện điều khiển giám sát 55 3.5.3 Lập trình đối tượng Blynk 59 3.6 Kết luận chương 60 CHƯƠNG 61 CÁC KẾT QUẢ THỰC NGHIỆM 61 4.1 Mở đầu 61 4.2 Kịch 1: Chế độ làm việc bình thường 62 4.3 Kịch 2: Chế độ quản lý nhu cầu phụ tải (DSM) 71 4.4 Kịch 3: Chế độ bảo vệ quá/thấp áp 72 e v 4.5 Kết luận chương 73 KẾT LUẬN VÀ KIẾN NGHỊ 74 DANH MỤC CƠNG TRÌNH CÔNG BỐ 76 TÀI LIỆU THAM KHẢO 77 PHỤ LỤC 79 e vi DANH MỤC CÁC TỪ VIẾT TẮT HTĐ Hệ thống điện LĐPP Lưới điện phân phối CLĐN Chất lượng điện DSM Quản lý nhu cầu phụ tải RMS Trị hiệu dụng LCD Màn hình hiển thị FFT Biến đổi Fourier nhanh DFT Biến đổi Fourier rời rạc ACS712 Cảm biến dòng điện ZMPT101B Cảm biến điện áp CLĐA Chất lượng điện áp IEEE Viện kỹ nghệ Điện Điện tử CSTD Công suất tác dụng CSPK Công suất phản kháng ĐNTT Điện tiêu thụ e vii DANH MỤC CÁC HÌNH Hình 1.1 Sóng điện áp dịng điện ba pha 10 Hình 1.2 Sơ đồ đo theo IEC 6100-3-40 [1] 16 Hình 1.3 Các kỹ thuật quản lý nhu cầu phụ tải (DSM) [11] 19 Hình 1.4 Dạng tởng qt hệ thống quản lý lượng 21 Hình 2.1 Sơ đồ khối hệ thống quản lý giám sát điện 25 Hình 2.2 Sơ đồ mạch lực 26 Hình 2.3 (a) Cảm biến dòng điện ACS712; (b) Sơ đồ kết nối với Arduino 28 Hình 2.4 (a) Sơ đồ mạch ACS712; (b) Đặc tuyến vào 29 Hình 2.5 Tín hiệu đầu cảm biến dịng điện xoay chiều ACS712 30 Hình 2.6 (a) Cảm biến điện áp ZMPT101B; (b) Mạch cảm biến điện áp 30 Hình 2.7 Đặc tuyến đầu ZMPT101B [9] 31 Hình 2.8 Bo mạch Arduino Wemos D1 R32 32 Hình 2.9 Adapter cấp nguồn cho Arduino Wemos D1 R32 34 Hình 2.10 Relay 5V 10A (a) Hình tởng thể; (b) Sơ đồ chân 34 Hình 2.11 Sơ đồ lắp ráp chi tiết hệ thống 35 Hình 2.12 Tổng thể phần cứng hệ thống 36 Hình 3.1 Giao diện chương trình Arduino IDE 39 Hình 3.2 Chức Blynk 40 Hình 3.3 Giao diện thiết kế project Blynk 41 Hình 3.4 (a) Tín hiệu tương tự; (b) Tín hiệu số hóa 42 Hình 3.5 Đo điện áp trị hiệu dụng tín hiệu điện áp hình sin lý tưởng 44 Hình 3.6 Đo điện áp trị hiệu dụng tín hiệu điện áp có thành phần hài 45 Hình 3.7 Đo điện áp trị hiệu dụng tín hiệu điện áp có mẫu lạ 46 Hình 3.8 Mối tương quan u(t), i(t), p(t) P 49 Hình 3.9 Giải thuật đo lường đại lượng điện 50 e viii Hình 3.10 Kỹ thuật giảm đỉnh, nâng đáy vấn đề DSM 53 Hình 3.11 Giao diện nhóm 56 Hình 3.12 (a) Giao diện lựa chọn phương thức báo cáo; (b) Dạng file *.csv Excel báo cáo phương thức One-time 57 Hình 3.13 Giao diện nhóm 58 Hình 3.14 Giao diện nhóm 59 Hình 4.1 Hệ thống thực nghiệm 61 Hình 4.2 Kết chế độ bình thường 63 Hình 4.3 (a) Giao diện lựa chọn phương thức báo cáo; (b) Dạng file *.csv Excel báo cáo phương thức One-time 64 Hình 4.4 Điện áp U ghi từ 15h17 đến 15h33 ngày 6/6/2019 65 Hình 4.5 Dịng điện I1 ghi từ 15h17 đến 15h33 ngày 6/6/2019 65 Hình 4.6 CSTD P1 ghi từ 15h17 đến 15h33 ngày 6/6/2019 66 Hình 4.7 Điện A1 ghi từ 15h17 đến 15h33 ngày 6/6/2019 66 Hình 4.8 Dòng điện I2 ghi từ 15h17 đến 15h33 ngày 6/6/2019 66 Hình 4.9 CSTD P2 ghi từ 15h17 đến 15h33 ngày 6/6/2019 67 Hình 4.10 Điện A2 ghi từ 15h17 đến 15h33 ngày 6/6/2019 67 Hình 4.11 Dịng điện I3 ghi từ 15h17 đến 15h33 ngày 6/6/2019 67 Hình 4.12 CSTD P3 ghi từ 15h17 đến 15h33 ngày 6/6/2019 68 Hình 4.13 Điện A3 ghi từ 15h17 đến 15h33 ngày 6/6/2019 68 Hình 4.14 Kết thực nghiệm chức DSM 72 e 80 Phụ lục 2: Đoạn code chương trình Arduino IDE #include #include #include #define BLYNK_PRINT Serial // Declare Sensors -char auth[] = "XXXXXXX"; char ssid[] = "XXXXXXX"; char pass[] = "XXXXXXX"; // -Declare LCD #include #include LiquidCrystal_I2C lcd(0x3F,20,4); const int sensor_voltage = 39; // Chân cảm biến điện áp const int sensor_current_1 = 36; // Chân cảm biến dòng mạch const int sensor_current_2 = 35; // Chân cảm biến dòng mạch const int sensor_current_3 = 34; // Chân cảm biến dòng mạch int DSM = 0; int Pmin = 0; // Gán biến điều khiển DSM // Gán công suất cực tiểu int Pmax = 2000; // Gán công suất cực đại int Protect = 0; // Gán biến bảo vệ điện áp int Umin = 0; // Gán điện áp cực tiểu int Umax = 250; // Gán điện áp cực đại byte relay1 = 16; // Chân đóng cắt rơle byte relay2 = 17; // Chân đóng cắt rơle byte relay3 = 25; // Chân đóng cắt rơle float voltage = 0; // Biến điện áp float current1 = 0; // Biến dịng điện nhánh (nhánh tởng) float current2 = 0; // Biến dòng điện nhánh (nhánh quan trọng) float current3 = 0; // Biến dòng điện nhánh (nhánh không quan trọng) float apparent1 = 0; // Biến công suất biểu kiến nhánh (nhánh tổng) float apparent2 = 0; // Biến công suất biểu kiến nhánh (nhánh quan trọng) float apparent3 = 0; // Biến công suất biểu kiến nhánh (nhánh không quan trọng) float power1 = 0; // Biến công suất tác dụng nhánh (nhánh tổng) float power2 = 0; // Biến công suất tác dụng nhánh (nhánh quan trọng) float power3 = 0; // Biến công suất tác dụng nhánh (nhánh không quan trọng) float repower1 = 0; // Biến công suất phản kháng nhánh (nhánh tổng) float repower2 = 0; // Biến công suất phản kháng nhánh (nhánh quan trọng) e 81 float repower3 = 0; // Biến công suất phản kháng nhánh (nhánh không quan trọng) float energy1 = 0; // Biến điện tiêu thụ nhánh (nhánh tổng) float energy2 = 0; // Biến điện tiêu thụ nhánh (nhánh quan trọng) float energy3 = 0; // Biến điện tiêu thụ nhánh (nhánh không quan trọng) float voltage_factor = 0.45; // Hệ số hiệu chỉnh điện áp float current_factor = 0.0047; // Hệ số hiệu chỉnh dòng điện float real_factor = 1.22; // Hệ số hiệu chỉnh công suất tác dụng float Accuracy = 0.24; // Biến độ xác const unsigned long sampleTime = 100000UL; // sample over 100ms const unsigned long numSamples = 250UL; // choose the number of samples to divide sampleTime exactly const unsigned long sampleInterval = sampleTime/numSamples; // the sampling interval const int voltage_adc_zero = 3050; const int current_adc_zero = 3050; BlynkTimer timer; void setup() { Serial.begin(115200); Blynk.begin(auth, ssid, pass); // setup pin pinMode(relay1, OUTPUT); pinMode(relay2, OUTPUT); pinMode(relay3, OUTPUT); pinMode(sensor_voltage, INPUT); pinMode(sensor_current_1, INPUT); pinMode(sensor_current_2, INPUT); pinMode(sensor_current_3, INPUT); // -setup lcd -lcd.begin(); lcd.backlight(); lcd.clear(); lcd.setCursor(0,0); lcd.print("U1:"); lcd.setCursor(11,0); lcd.print("A1:"); lcd.setCursor(0,1); lcd.print("I1:"); lcd.setCursor(11,1); lcd.print("P1:"); lcd.setCursor(0,2); lcd.print("I2:"); lcd.setCursor(11,2); lcd.print("P2:"); lcd.setCursor(0,3); lcd.print("I3:"); lcd.setCursor(11,3); lcd.print("P3:"); } e 82 void loop() { Measurement(); Blynk.run(); timer.run(); } BLYNK_WRITE(V10) { //int pinValue = param.asInt(); if(param.asInt() == 0) { digitalWrite(relay1, HIGH); } if(param.asInt() == 1) { digitalWrite(relay1, LOW); } } BLYNK_WRITE(V11) { int pinValue = param.asInt(); if(pinValue == 0) { digitalWrite(relay2, HIGH); } if(pinValue == 1) { digitalWrite(relay2, LOW); } } BLYNK_WRITE(V12) { int pinValue = param.asInt(); if(pinValue == 0) { digitalWrite(relay3, HIGH); } e 83 if(pinValue == 1) { digitalWrite(relay3, LOW); } } // Cập nhật Pmin từ Blynk void updatePmin(int param); BLYNK_WRITE(V14) { updatePmin(param.asInt()); } void updatePmin(int param) { Pmin = param; } // Cập nhật Pmax từ Blynk void updatePmax(int param); BLYNK_WRITE(V15) { updatePmax(param.asInt()); } void updatePmax(int param) { Pmax = param; } // Cập nhật DSM từ Blynk void updateDSM(int param); BLYNK_WRITE(V13) { updateDSM(param.asInt()); } void updateDSM(int param) { DSM = param; } // Cập nhật Umin Blynk void updateUmin(int param); BLYNK_WRITE(V17) e 84 { updateUmin(param.asInt()); } void updateUmin(int param) { Umin = param; } // Cập nhật Pmax từ Blynk void updateUmax(int param); BLYNK_WRITE(V18) { updateUmax(param.asInt()); } void updateUmax(int param) { Umax = param; } // Cập nhật biến bảo vệ điện áp từ Blynk void updateProtect(int param); BLYNK_WRITE(V16) { updateProtect(param.asInt()); } void updateProtect(int param) { Protect = param; } void Measurement() { unsigned long prevMicros = micros() - sampleInterval; while (count < numSamples) { if (micros() - prevMicros >= sampleInterval) { int voltage_adc_raw = (analogRead(sensor_voltage) - voltage_adc_zero); int current_adc_raw_1 = (analogRead(sensor_current_1) - current_adc_zero); int current_adc_raw_2 = (analogRead(sensor_current_2) - current_adc_zero); int current_adc_raw_3 = (analogRead(sensor_current_3) - current_adc_zero); e 85 voltageAcc += (unsigned long)(voltage_adc_raw * voltage_adc_raw); currentAcc1 += (unsigned long)(current_adc_raw_1 * current_adc_raw_1); currentAcc2 += (unsigned long)(current_adc_raw_2 * current_adc_raw_2); currentAcc3 += (unsigned long)(current_adc_raw_3 * current_adc_raw_3); powerAcc1 += (unsigned long)(voltage_adc_raw * current_adc_raw_1); powerAcc2 += (unsigned long)(voltage_adc_raw * current_adc_raw_2); powerAcc3 += (unsigned long)(voltage_adc_raw * current_adc_raw_3); ++count; prevMicros += sampleInterval; } } float Vrms = sqrt((float)voltageAcc/(float)numSamples) * (voltage_factor); float Irms1 = sqrt((float)currentAcc1/(float)numSamples) * (current_factor); float Irms2 = sqrt((float)currentAcc2/(float)numSamples) * (current_factor); float Irms3 = sqrt((float)currentAcc3/(float)numSamples) * (current_factor); float P1 = ((float)powerAcc1/(float)numSamples) * (voltage_factor * current_factor); float P2 = ((float)powerAcc2/(float)numSamples) * (voltage_factor * current_factor); float P3 = ((float)powerAcc3/(float)numSamples) * (voltage_factor * current_factor); voltage = Vrms; current1 = Irms1; power1 = P1*real_factor; apparent1 = Vrms*Irms1; repower1 = sqrt(sq(apparent1)-sq(power1)); energy1 += power1*1/3600; current2 = Irms2; power2 = P2*real_factor; apparent2 = Vrms*Irms2; repower2 = sqrt(sq(apparent2)-sq(power2)); energy2 += power2*1/3600; current3 = Irms3; power3 = P3*real_factor; apparent3 = Vrms*Irms3; repower3 = sqrt(sq(apparent3)-sq(power3)); energy3 += power3*1/3600; Serial.print("U: "); Serial.print(voltage); Serial.print(", I1: "); Serial.print(current1); Serial.print(", I2: "); Serial.print(current2); Serial.print(", I3: "); Serial.print(current3); e 86 Serial.print(", P1: "); Serial.print(power1); Serial.print(", P2: "); Serial.print(power2); Serial.print(", P3: "); Serial.print(power3); Serial.print(", A1: "); Serial.print(energy1); Serial.print(", A2: "); Serial.print(energy2); Serial.print(", A3: "); Serial.println(energy3); Blynk.virtualWrite(V0,voltage); Blynk.virtualWrite(V1,current1); Blynk.virtualWrite(V2,current2); Blynk.virtualWrite(V3,current3); Blynk.virtualWrite(V4,power1); Blynk.virtualWrite(V5,power2); Blynk.virtualWrite(V6,power3); Blynk.virtualWrite(V7,energy1); Blynk.virtualWrite(V8,energy2); Blynk.virtualWrite(V9,energy3); Blynk.virtualWrite(V21,repower1); Blynk.virtualWrite(V22,repower2); Blynk.virtualWrite(V23,repower3); lcd.setCursor(3,0); lcd.print(" "); lcd.setCursor(3,0); lcd.print(voltage, 1); lcd.setCursor(14,0); lcd.print(" "); lcd.setCursor(14,0); lcd.print(energy1, 1); lcd.setCursor(3,1); lcd.print(" "); lcd.setCursor(3,1); lcd.print(current1, 1); lcd.setCursor(14,1); lcd.print(" "); lcd.setCursor(14,1); lcd.print(power1, 1); lcd.setCursor(3,2); lcd.print(" "); lcd.setCursor(3,2); lcd.print(current2, 1); lcd.setCursor(14,2); lcd.print(" "); lcd.setCursor(14,2); lcd.print(power2, 1); lcd.setCursor(3,3); lcd.print(" "); lcd.setCursor(3,3); lcd.print(current3, 1); lcd.setCursor(14,3); lcd.print(" "); lcd.setCursor(14,3); lcd.print(power3, 1); if ((power1 > Pmax) && (DSM == 1)) { delay(3000); digitalWrite(relay3, HIGH); Blynk.virtualWrite(V12,0); } if ((power1 < Pmin) && (DSM == 1)) { delay(3000); digitalWrite(relay3, LOW); Blynk.virtualWrite(V12,1); e 87 } if ((voltage > Umax) && (Protect == 1)) { delay(3000); digitalWrite(relay1, HIGH); Blynk.virtualWrite(V10,0); Blynk.virtualWrite(V19,255); Blynk.notify("Overvoltage"); } if ((voltage < Umin) && (Protect == 1)) { delay(3000); digitalWrite(relay1, HIGH); Blynk.virtualWrite(V10,0); Blynk.virtualWrite(V20,255); Blynk.notify("Undervoltage"); } if ((voltage >= Umin) && (voltage