Chương 4 THIẾT LẬP, XÂY DỰNG PHẦN CỨNG VÀ PHẦN MỀM
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