4.1.10. Sơ đồ nối dây của hệ thống
74 Trong đó:
B-, B+: Cực âm, cực dương của bộ pin C-, C+: Cực âm, cực dương của bộ sạc P-, P+: Cực âm, cực dương của tải 0..10: Các dây nối giữa BMS với cell pin UART_TX: Chân truyền tín hiệu của BMS UART_RX: Chân nhận tín hiệu của BMS TX1: Chân truyền tín hiệu của Arduino RX1: Chân nhận tín hiệu của Arduino 5V: Nguồn cấp cho BMS
GND: Mức điện áp chuẩn
4.2. Phần mềm
4.2.1. Phương thức giao tiếp với mạch BMS-DXB31
4.2.1.1. Giao tiếp UART
Để giao tiếp chung với BMS-DXB31 thì ta cần một thiết bị có hỗ trợ giao tiếp UART. Từ đây, ta chọn board Arduino làm thiết bị để giao tiếp với BMS.
Hình 4.19: Sơ đồ kết nối UART giữa BMS-DXB31 với board Arduino
Dựa vào nguyên tắc truyền nhận của giao tiếp UART, thì đối với BMS-DXB31 cũng vậy khi Arduino gửi một frame dữ liệu truyền tới chân Rx của BMS-DXB31 thì ngay sau đó BMS-DXB31 trả lại một frame dữ liệu chứa nội dung cần biểu đạt thông tin như ban đầu
75 Arduino muốn gửi đến. Cuối cùng, ta thu được các chuỗi dữ liệu đó rồi sau đó ta chỉ cần phân tích và tách lấy dữ liệu thơng tin cần muốn có.
4.2.1.2. Định dạng khung dữ liệu dùng để giao tiếp
Để giao tiếp với BMS-DXB31 thì các frame tín hiệu từ Arduino gửi đến phải có ngơn ngữ giao tiếp chung, khơng thể thay đổi được do bên nhà sản xuất thiết kế riêng. Vì vậy, dưới đây là cấu trúc một frame truyền nhận dữ liệu, và các frame truyền đi mà BMS-DXB31 có thể giao tiếp được:
Hình 4.20: Cấu trúc frame format của 1 chuỗi dữ liệu
- Instruction head: Có độ dài 1 byte. Cố định là 0x3A - Add: Có độ dài 1 byte. Cố định là 0x16
- Instruction: Có độ dài 1 byte - Length of data: Có độ dài 1 byte
- Data: Có độ dài bằng số dữ liệu của length of data. Nếu length of data bằng 0 thì data
bằng 0
- Checksum: Bit tổng kiểm tra dữ liệu
- End of frame: Có độ dài 2 byte. Cố định là 0x0D 0x0A
Lưu ý: Data có dạng 0x1234 thì định dạng của đoạn dữ liệu là 0x34 0x12
Bảng 4.5: Các chuỗi dữ liệu dùng để giao tiếp với mạch BMS-DXB31
Instruction Ý nghĩa Chuỗi gửi đến BMS
0x01
Trạng thái báo động
Bit 7 1: Undervoltage (UV) 0: Normal Bit 6 1: Overvoltage (OV) 0: Normal Bit 5 1: Overload (OL) 0: Normal Bit 4 1: High-tempetature (HT) 0: Normal Bit 3 1: Discharge short-circuit (DS-C) 0: Normal Bit 2 1: Charge short-circuit (CS-C) 0: Normal Bit 1 1: Discharge overcurrent (D-OC) 0: Normal Bit 0 1: Charge overcurrent (C-OC) 0: Normal
3a 16 01 00 17 00 0d 0a
76 0x06
Nhiệt độ của MOS trong BMS Giá trị nhiệt độ = (Giá trị của dữ liệu-2731)
*0.1℃
3a 16 06 00 1c 00 0d 0a
0x07
Nhiệt độ thấp nhất của bộ pin
Giá trị nhiệt độ = (Giá trị của dữ liệu-2731) *0.1℃
3a 16 07 00 1d 00 0d 0a
0x08
Nhiệt độ cao nhất của bộ pin
Giá trị nhiệt độ = (Giá trị của dữ liệu-2731) *0.1℃
3a 16 08 00 1e 00 0d 0a
0x09 Tổng điện áp của bộ pin
Giá trị điện áp = Giá trị của dữ liệu * 1 mV 3a 16 09 00 1f 00 0d 0a
0x0a Dòng điện
Giá trị của dòng điện = Giá trị của dữ liệu * 1 mA
3a 16 0a 00 20 00 0d 0a
0x0D Phần trăm dung lượng còn lại của bộ pin (SOC) SOC = Giá trị của dữ liệu * 1%
3a 16 0d 00 23 00 0d 0a
0x0F
Dung lượng thực tế còn lại của bộ pin Giá trị dung lượng còn lại của pin = Giá trị của dữ
liệu * 1mAh
3a 16 0d 00 23 00 0d 0a
0x10
Dung lượng thực tế lúc đầy
Giá trị dung lượng thực tế lúc đầy = Giá trị của dữ liệu * 1mAh
3a 16 10 00 26 00 0d 0a
0x24
Điện áp từ cell 1 đến cell 7
Giá trị điện áp mỗi cell = Giá trị của dữ liệu * 1 mV
3a 16 24 00 3a 00 0d 0a
0x25
Điện áp từ cell 8 đến cell 14
Giá trị điện áp mỗi cell = Giá trị của dữ liệu * 1 mV
3a 16 25 00 3b 00 0d 0a
4.2.2. Lập trình code cho hệ thống
4.2.2.1. Lập trình code cho Arduino
Các bước gửi và nhận chuỗi trên Arduino:
- Bước 1: Gửi chuỗi từ Arduino truyền dữ liệu tới BMS-DXB31 - Bước 2: Nhận chuỗi từ BMS-DXB31 tới Arduino nhận sữ liệu - Bước 3: Đọc và hiển thị chuỗi lên trên phần mềm Monitor.
77 Các bước trên đây được thực hiện như là một trình tự gửi và nhận chuỗi có logic và không thể làm ngược lại được. Do cách thức giao tiếp với BMS-DXB31 được nhà sản xuất mặc định sẵn với những frame tín hiệu truyền đi tới BMS-DXB31 là cố định. Chính vì vậy, ta lập trình code truyền và gửi đi trên Arduino theo như quy trình thực hiện trên.
a) Bước 1: Gửi chuỗi từ Arduino truyền dữ liệu tới BMS-DXB31 Lập trình code cho Arduino
void setup() { Serial.begin(9600); Serial1.begin(9600); } void loop() { //0x01 Alarm status Serial1.write(0x3a); Serial1.write(0x16); Serial1.write(0x01); Serial1.write(0x00); Serial1.write(0x17); Serial1.write(0x00); Serial1.write(0x0d); Serial1.write(0x0a); delay(50); //0x06 Temperature of MOS in BMS Serial1.write(0x3a); Serial1.write(0x16); Serial1.write(0x06); Serial1.write(0x00); Serial1.write(0x1c); Serial1.write(0x00); Serial1.write(0x0d); Serial1.write(0x0a); delay(50);
//0x07 Lowest temp of Battery
Serial1.write(0x3a); Serial1.write(0x16);
Serial1.write(0x07); Serial1.write(0x00);
Serial1.write(0x1d); Serial1.write(0x00);
Serial1.write(0x0d); Serial1.write(0x0a);
78
//0x08 Highest temp of Battery
Serial1.write(0x3a); Serial1.write(0x16); Serial1.write(0x08); Serial1.write(0x00); Serial1.write(0x1e); Serial1.write(0x00); Serial1.write(0x0d); Serial1.write(0x0a); delay(50); //0x09 Voltage Serial1.write(0x3a); Serial1.write(0x16); Serial1.write(0x09); Serial1.write(0x00); Serial1.write(0x1f); Serial1.write(0x00); Serial1.write(0x0d); Serial1.write(0x0a); delay(50); //0x0a Current Serial1.write(0x3a); Serial1.write(0x16); Serial1.write(0x0a); Serial1.write(0x00); Serial1.write(0x20); Serial1.write(0x00); Serial1.write(0x0d); Serial1.write(0x0a); delay(50);
//0x0D Remaining capacity percentage SOC
Serial1.write(0x3a); Serial1.write(0x16); Serial1.write(0x0d); Serial1.write(0x00);
Serial1.write(0x23); Serial1.write(0x00);
Serial1.write(0x0d); Serial1.write(0x0a);
delay(25);
//0x0F Actual remaining capacity
Serial1.write(0x3a); Serial1.write(0x16); Serial1.write(0x0f); Serial1.write(0x00);
Serial1.write(0x25); Serial1.write(0x00); Serial1.write(0x0d); Serial1.write(0x0a);
79 delay(25);
//0x10 Actual full capacity
Serial1.write(0x3a); Serial1.write(0x16); Serial1.write(0x10); Serial1.write(0x00); Serial1.write(0x26); Serial1.write(0x00); Serial1.write(0x0d); Serial1.write(0x0a); delay(25); //0x24 Cell 1~7 voltage Serial1.write(0x3a); Serial1.write(0x16); Serial1.write(0x24); Serial1.write(0x00); Serial1.write(0x3a); Serial1.write(0x00); Serial1.write(0x0d); Serial1.write(0x0a); delay(50); //0x25 Cell 8~14 voltage Serial1.write(0x3a); Serial1.write(0x16); Serial1.write(0x25); Serial1.write(0x00); Serial1.write(0x3b); Serial1.write(0x00); Serial1.write(0x0d); Serial1.write(0x0a); delay(50); }
b) Bước 2: Nhận chuỗi từ BMS-DXB31 tới Arduino nhận sữ liệu Lập trình code cho Arduino
void setup() { Serial.begin(9600); Serial1.begin(9600); } Int inByte; void loop() { if (Serial1.available())
80 { inByte = Serial1.read(); Serial.print (inByte,HEX); Serial.print (" "); } }
c) Bước 3: Hiển thị chuỗi nhận được trên Serial Monitor trong Arduino:
Hình 4.21: Kết quả hiển thị chuỗi nhận được trên Serial Monitor
4.2.2.2. Lập trình code trên phần mềm LabVIEW 2020
Trong phần mềm LabVIEW, có khối có thể giao tiếp giữa Arduino với LabVIEW. Để thực hiện, ta nhấn chuột phải chọn “Instrucment I/O” → “Serial” → “Configure Port”.
Hình 4.22: Khối giao tiếp với Arduino trên LabVIEW
Để tách chuỗi và thu thập dữ liệu từ BMS-DXB31, ta thực hiện các bước tách chuỗi, thu thập dữ liệu và cho ra các thông số để thể hiện trạng thái của pin.
- Bước 1: Nhận diện chuỗi tương ứng với từng thông số, trạng thái của pin - Bước 2: Tách chuỗi, thu thập dữ liệu và chuyển đổi về giá trị phù hợp - Bước 3: So sánh các giá trị thu thập đuộc với các giá trị thực tế
81 a) Bước 1: Nhận diện chuỗi tương ứng với từng thông số và trạng thái của pin
- Khi đã có các frame được gửi về lại Arduino, sau đó ta phải phân tích chuỗi đó để lấy thơng tin các trạng thái của cell pin được gửi đến. Sau đây là việc xây dựng các khối trên LabVIEW, có cơng dụng: nhận chuối, phân tích, tách chuỗi, và lấy dữ liệu của các trạng thái của pin.
- Xây dựng các khối đọc và hiển thị chuỗi của Arduino nhận về:
Hình 4.23: Các khối trên LabVIEW để đọc và hiển thị chuỗi
b) Bước 2: Tách chuỗi, thu thập dữ liệu và chuyển đổi về giá trị phù hợp
- Sau khi nhận diện được chuỗi, ta tiến hành xây dựng các khối tách chuỗi lấy data và sau đó ta làm tương tự với các chuỗi cịn lại của các trạng thái cell pin.
82 c) Bước 3: So sánh các giá trị thu thập đuộc với các giá trị thực tế
- Bước này giúp chúng ta so sánh các giá trị hiển thị trên giao diện LabVIEW với các giá trị đo được ngoài thực tế, và áp dụng tương tự với các tráng thái pin cịn lại.
Hình 4.25: So sánh giá trị điện áp của bộ pin với thực tế
Kết luận: ta sẽ dùng 3 bước này áp dụng vào các trường hợp tráng thái khác của cell pin
và sau đó ta thu thập được các giá trị dữ liệu của các thông tin tráng thái của bộ pin.
* Các tín hiệu gửi tới Arduino nhận hay có tình trạng mất tín hiệu nên giá trị ln nhảy
về giá trị bằng 0, dẫn đến giao diện hiển thị trên LabVIEW trơng khơng ổn định. Vì vậy, để khắc phục nhược điểm này ta sẽ lấy lại giá trị của vòng lặp trước khi giá trị nhảy về giá trị bằng 0, giúp cho giao diện trên phần mềm hiển thị ổn định hơn. Ngoài giá trị bằng 0, ta có thể thay đổi các giá trị khác để phù hợp với giá trị thực tế.
Vì thế, ta xây dựng các khối lưu giá trị tương tự như sau:
83
Chương 5. THỰC NGHIỆM VÀ KẾT QUẢ 5.1. Xây dựng hệ thống quản lý pin BMS cho bộ pin 36V-13Ah 5.1. Xây dựng hệ thống quản lý pin BMS cho bộ pin 36V-13Ah 5.1.1. Mơ hình thực tế
Hình 5.1: Mơ hình thực tế của hệ thống quản lý pin
5.1.2. Giao diện phần mềm
84
Hình 5.3: Giao diện của phần mềm cho hệ thống quản lý pin (2)
Trong đó:
1- Kết nối với phần mềm 2- Trạng thái của pin
3- Các thông số cơ bản của bộ pin 4- Các trạng thái cảnh báo
5- Lưu dữ liệu vào file excel
6- Biểu đồ thể hiện điện áp từng cell
7- Bảng giá trị điện áp từng cell theo thời gian (t = 1s)
8- Đồ thị thể hiện giá trị nhiệt độ của MOSFET trong mạch BMS, giá trị nhiệt
độ của bộ pin và dòng điện của bộ pin
9- Bảng giá trị và đồng hồ thể hiện giá trị của MOSFET trong mạch BMS, giá
trị nhiệt độ của bộ pin và dòng điện của bộ pin theo thời gian (t = 1s)
5.1.3. Đánh giá tính hiệu quả của phần mềm
a) Nhận kết quả hiển thị từ giao diện hiển thị trên phần mềm: Dùng giá trị hiển thị mức điện áp của bộ pin để so sánh với giá trị thực tế
85
Hình 5.4: Giá trị điện áp của bộ pin được hiển thị trên phần mềm
b) So sánh với giá trị ngoài thực tế: Dùng đồng hồ đo vạn năng để kiểm tra giá trị điện áp của bộ pin.
Hình 5.5: Kiểm tra giá trị điện áp thực tế của bộ pin bằng đồng hồ vạn năng
c) Kết luận: Kết quả hiển thị giá trị điện áp của bộ pin trên phần mềm gần giống với giá trị điện áp thực tế của pin.
5.2. Kết quả hiển thị trên phần mềm 5.2.1. Các trạng thái của pin: 5.2.1. Các trạng thái của pin:
Có 3 trạng thái khi sử dụng pin:
a) Normal: Pin đang ở trạng thái bình thương, khơng sạc cũng khơng xả (Dịng điện bằng 0)
86
Hình 5.6: Phần mềm hiển thị trạng thái pin đang bình thường
b) Charge: Pin được kết nối với bộ sạc và đang ở trạng thái sạc (Dòng điện lúc này là dòng của thiết bị sạc cung cấp cho pin)
Hình 5.7: Kết nối pin với bộ sạc
Hình 5.8: Phần mềm hiển thị trạng thái pin đang sạc
c) Discharge: Pin được kết nối với tải (Dùng điện trở có giá trị R = 66 Ω) và đang ở trạng thái xả (Dòng điện lúc này là dịng của pin đang cung cấp cho tải)
Hình 5.9: Kết nối pin với tải
Hình 5.10: Phần mềm hiển thị trạng thái pin đang xả
5.2.2. Hiển thị các trạng thái cảnh báo
Đèn tín hiệu sẽ chuyển sang màu đỏ khi pin gặp 1 trong các sự cố dưới đây: - C-OC (Charge overcurrent): Sạc pin quá dòng cho phép
87 - D-OC (Discharge overcurrent): Xả pin quá dòng
- C-SC (Charge short-circuit): Sạc bị ngắn mạch - D-SC (Disharge short-circuit): Xã bị ngắn mạch
- HT (High-temperature): Nhiệt độ cao quá mữc cho phép - OL (Overload): Quá tải
- OV (Overvoltage): Sạc pin quá điện áp cho phép - UV (Undervoltage): Xã pin quá điện áp cho phép
Hình 5.11: Tín hiệu báo khi pin xã quá điện áp cho phép trên phần mềm
5.2.3. Các tín hiệu trên biểu đồ hiển thị điện áp từng cell
Tín hiệu báo trên đồ thị hiển thị điện áp là tín hiệu mất cân bằng cell pin hoặc khi cell pin sạc quá điện áp cho phép (Vcell > 4200 mV) và xả quá điện áp cho phép (Vcell < 2500 – 2700 mV).
88
Hình 5.13: Tín hiệu cell pin bị mất cân bằng (Unbalanced) khi sạc nhiều hơn các cell cịn lại và sau đó được cân bằng lại
5.2.4. Các trạng thái trên đồ thị hiển thị nhiệt độ MOSFET trong mạch BMS, giá trị nhiệt độ của bộ pin và dòng điện của bộ pin:
a) Trạng thái sạc pin: Pin được sạc qua 2 giai đoạn
- Giai đoạn sạc ổn định dòng (SOC trong khoảng 0 đến 80%): Dịng điện sạc khơng đổi, nhiệt độ pin và nhiệt độ MOSFET tăng lên.
Hình 5.14: Đồ thị thể hiển thị giá trị nhiệt độ MOSFET trong mạch BMS, nhiệt độ và dòng điện của bộ pin theo thời gian trong giai đoạn sạc ổn định dịng
89
Hình 5.15: Bảng giá trị thể hiển thị giá trị nhiệt độ MOSFET trong mạch BMS, nhiệt độ và
dòng điện của bộ pin theo thời gian trong giai đoạn sạc ổn định dòng
- Giai đoạn sạc ổn định áp (SOC từ 80 đến 100%): Dòng điện sạc giảm dần, nhiệt độ pin và nhiệt độ MOSFET giảm thấp hơn so với giai đoạn trên.
Hình 5.16: Đồ thị thể hiển thị giá trị nhiệt độ MOSFET trong mạch BMS, nhiệt độ và dòng điện của bộ pin theo thời gian trong giai đoạn sạc ổn định áp
90
Hình 5.17: Bảng giá trị thể hiển thị giá trị nhiệt độ MOSFET trong mạch BMS, nhiệt độ và dòng điện của bộ pin theo thời gian trong giai đoạn sạc ổn định áp
b) Trạng thái xả pin: Pin được kết nối với tải (Điện trở có giá trị R = 66 Ω). Lúc này, dòng xả và nhiệt độ MOSFET trong mạch BMS, nhiệt độ của bộ pin khơng thay đổi nhiều.
Hình 5.18: Đồ thị thể hiển thị giá trị nhiệt độ MOSFET trong mạch BMS, nhiệt độ và dòng điện của bộ pin theo thời gian trong giai đoạn xả pin
91
Hình 5.19: Bảng giá trị thể hiển giá trị nhiệt độ MOSFET trong mạch BMS, nhiệt độ và dòng điện của bộ pin theo thời gian trong giai đoạn xả pin
5.2.5. Dữ liệu của pin được lưu về file excel
Các dữ liệu của pin được lưu về file excel nhằm mục đích theo dõi pin theo từng thời gian khi giao tiếp với hệ thống. Các giá trị được lưu gồm có:
- Thời gian: Ngày, giờ
- Phần trăm dung lượng pin còn lại (R-SOC) (%) - Dung lượng hiện tại (R – Capacity) (mAh) - Điện áp toàn bộ pin (Voltage) (V)
- Nhiệt độ của MOSFET trong mạch BMS (MOS – Temperature) (°C) - Nhiệt độ thấp nhất của pin (Lowest – Temperature) (°C)
- Nhiệt độ thấp nhất của pin (Highest – Temperature) (°C) - Điện áp từ cell 1 đến cell 10 (mV)
92
93
Chương 6. KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 6.1. Kết luận 6.1. Kết luận
- Nhìn chung cơ bản đã nắm rõ được lý thuyết về pin và hệ thống quản lý pin BMS - Đã tự xây dưng và thiết kế giao diện cho phần mềm hệ thống quản lý pin BMS
- Các tín hiệu gửi từ BMS-DXB31 đến Arduino nhận và hiển thị dữ liệu lên giao diện LabVIEW tương đối ổn định và và khớp với các giá trị thực tế. Tuy nhiên, trong q trình thực hiện vẫn cịn vài tín hiệu gây nhiễu.
6.2. Hạn chế của đề tài
- Các tín hiệu gửi lên LabVIEW hay gặp vấn đề nhiễu và mất tín hiệu.