Mã nguồn mở một đồng hồ đo công suất DC cắm trực tiếp vào mạch XT60: vi điều khiển ESP32-S3, TI ADS131M02 lấy mẫu đồng bộ 2 kênh 24bit (4kSPS), shunt 1mΩ 4 đầu kiểu Kelvin + phân áp chính xác 101:1, đo 0~90V, định mức ±30A (đỉnh ±75A). Màn hình cảm ứng màu IPS 1,83 inch chạy LVGL 9, có trang dạng sóng kiểu oscilloscope; sau khi WiFi kết nối router có thể mở bảng điều khiển web bằng trình duyệt để xem dữ liệu, xem dạng sóng, sửa cài đặt, xuất CSV. Toàn bộ phần cứng, firmware, vỏ, file sản xuất đều mã nguồn mở.
Khi làm mô hình hàng không, drone, thử nghiệm sạc/xả pin, thường cần một đồng hồ đo công suất có thể mắc nối tiếp trực tiếp vào mạch. Phải nhìn rõ độ sụt áp dưới dòng lớn, phải bắt được xung đột biến khi cắm/rút, tốt nhất còn đồng bộ dữ liệu lên máy tính. Các sản phẩm bán trên thị trường hoặc màn hình nhỏ, hoặc không có dạng sóng, hoặc dữ liệu chỉ xem được tại chỗ. Thế là có dự án này.
Nói rõ trước một chuyện: phần mềm của dự án này do AI phát triển. Phần cứng do mình tự vẽ, firmware từ thiết kế kiến trúc đến triển khai cụ thể cơ bản đều giao cho AI, mình chỉ làm định nghĩa yêu cầu, đánh giá phương án và kiểm chứng trên máy thật. Nếu bạn bận tâm điều này, đọc đến đây có thể đóng lại; nếu bạn quan tâm hơn đến “có dùng được không, nhân bản thế nào”, thì đọc tiếp, mã nguồn, tài liệu, công cụ kiểm thử đều công khai.
Nhóm QQ giao lưu kỹ thuật điện tử/vi điều khiển: 307449735
eeClub - Cộng đồng kỹ sư điện tử: https://bbs.eeclub.top/
Địa chỉ tải tài liệu ở cuối bài.
Thông số thiết kế
| Hạng mục | Thông số |
|---|---|
| MCU chính | ESP32-S3-WROOM-1-N16R8 (16MB Flash + 8MB PSRAM 8 dây, lõi kép 240MHz) |
| ADC đo lường | TI ADS131M02, 24bit Σ-Δ, lấy mẫu đồng bộ hai kênh, 4 kSPS |
| Dải đo điện áp | Thiết kế đo 0~90V (chuỗi phân áp 101:1 có đầy thang lý thuyết ±121V, bị giới hạn bởi mức đầu vào tối đa 100V của nguồn phụ) |
| Độ phân giải điện áp | khoảng 14,5 µV/LSB |
| Dải đo dòng điện | Đỉnh ±75A (đầy thang ADC); định mức ±30A (giới hạn đầu nối XT60) |
| Độ phân giải dòng điện | khoảng 8,94 µA/LSB |
| Lấy mẫu dòng điện | Shunt Kelvin 4 đầu 1mΩ / 5W, PGA 16x |
| Hiển thị | IPS 1,83 inch, 240×284 (ngang 284×240), NV3030B, QSPI 4bit |
| Cảm ứng | Cảm ứng điện dung CST816D, I2C |
| Cảm biến | AHT20 đo nhiệt độ/độ ẩm, SC7A20HTR gia tốc kế 3 trục (tự xoay màn hình) |
| Truyền thông | WiFi 2.4GHz, STA/AP, HTTP + WebSocket |
| Cấp nguồn | Ba đường nguồn XT60 / USB-C / pin lithium 1 cell, TPS2116 ưu tiên USB, TP4057 sạc ở 400mA |
| Công suất tiêu thụ bản thân | khoảng 0,7W |
| Vỏ | 3 chi tiết in 3D: nắp trên / khung giữa / nắp dưới, file nguồn SolidWorks + 3MF |
| Firmware | v0.6.9, ESP-IDF v6.1 + LVGL 9.6 |
Trước hết nói vài điểm dễ bị hiểu nhầm:
- ±75A là đầy thang của ADC, không phải dòng điện duy trì liên tục. Shunt 1mΩ định mức đến 70A (ở 70A sụt áp 70mV, tiêu tán 4,9W), nhưng đầu nối XT60 chỉ đến 30A (ở 30A sụt áp 30mV, tiêu tán 0,9W). Vì vậy định mức của cả máy ghi ±30A, muốn chạy dòng lớn hơn lâu dài phải tự sửa bo đáy và thay sang XT90.
- 90V cũng không phải giới hạn của chuỗi phân áp. Bản thân phân áp có thể đến ±121V, chính nguồn phụ (nhánh Buck lấy nguồn từ XT60) có đầu vào tối đa 100V đã giới hạn cả máy ở 90V.
- Dòng điện nhỏ hơn 2mA hiển thị 0 là bình thường. Nhiễu tín hiệu nhỏ của shunt 1mΩ không nhỏ (σ mỗi frame ≈2mA), firmware dùng trung bình khối 200ms cộng vùng chết 2mA để chặn dao động khi không tải; trang dạng sóng dùng mẫu thô, thay đổi cỡ mA vẫn xem được.
- Đây không phải dụng cụ đo lường chuẩn. Đủ dùng cho người yêu thích đo đạc và gỡ lỗi, đừng lấy làm đồng hồ chuẩn.
Ảnh thực tế




Thân máy là vỏ in 3D ba phần: nắp trên, khung giữa, nắp dưới, cố định bằng vít M2.5. Mặt trước là màn hình IPS 1,83 inch, bên trái màn hình có đèn báo trạng thái và nút reset, bên hông máy có hai nút vật lý K1/K2 (nhấn giữ K2 để gọi menu nhanh). Công tắc cạnh cổng Type-C dùng để chuyển nguồn: một bên là pin / USB, một bên là lấy nguồn từ XT60.
Giao diện màn hình
Trên màn hình là cấu trúc vuốt ba trang: Đo, Dạng sóng, Cài đặt, vuốt đến trang đầu/cuối thì dừng. Có thể thao tác bằng cảm ứng hoặc chỉ bằng nút.
| Trang đo chính | Trang dạng sóng kiểu oscilloscope |
|---|---|
![]() |
![]() |
| Số lớn điện áp / dòng điện / công suất, phía dưới là điện năng, nhiệt độ/độ ẩm, giá trị đỉnh/đáy | Đa chế độ V/I/P, sáu mức cửa sổ thời gian 1s~10min, tự động dải đo |
| Trang cài đặt | Menu nhanh kéo lên |
|---|---|
![]() |
![]() |
| Đo, hiển thị, buzzer, WiFi, thống kê điện năng, cảnh báo, giới thiệu, khôi phục cài đặt gốc | Tốc độ làm mới dữ liệu, xóa thống kê điện năng (xác nhận hai lần) |
Vài chi tiết dùng khá thuận tay:
- Dòng dữ liệu điện năng ở cuối trang chính có thể nhấn để chuyển giữa Wh và Ah.
- Thang trục dọc của trang dạng sóng được neo theo bước chuẩn 1-2-5, có thể đọc trực tiếp bằng tính nhẩm; thang còn được xử lý bỏ số 0 thừa, hiển thị 3V / 0.2A thay vì 3.00V / 0.200A.
- Chiều rộng popup thay đổi theo hướng màn hình (ngang 260px, dọc 216px), màn hình dọc không bị cắt hai bên.
- Không thao tác 15 / 30 / 60 giây (có thể đặt) thì đèn nền giảm còn 10%, chạm hoặc nhấn phím bất kỳ sẽ phục hồi ngay.
- Các ảnh giao diện trên được tạo bằng trình giả lập LVGL trên PC đi kèm dự án (
tools/ui_sim), dùng chung cùng một bộ mã nguồn giao diện với máy thật, không phải ảnh chỉnh sửa.
Thiết kế phần cứng
Kiến trúc hệ thống

Cả máy là hai PCB trên và dưới xếp chồng:
- Bo trên: MCU chính, màn hình, cảm ứng, cảm biến, nút, buzzer, phân áp điện áp, quản lý nguồn.
- Bo dưới: đầu vào/ra XT60, shunt 1mΩ, thanh đồng dẫn dòng lớn.
Pin được kẹp giữa hai lớp bo, dán vào mặt sau bo trên (tức mặt có module ESP32-S3).
| Module | Linh kiện chính | Chức năng |
|---|---|---|
| MCU chính | ESP32-S3-WROOM-1-N16R8 | Điều phối lấy mẫu, render UI, truyền thông WiFi, lưu trữ dữ liệu |
| Front-end đo lường | ADS131M02 + LRA8551A | Lấy mẫu đồng bộ điện áp / dòng điện, 24bit, 4kSPS |
| Hiển thị và tương tác | LCD NV3030B + CST816D + K1/K2 + buzzer | Hiển thị và thao tác cục bộ |
| Cảm biến | SC7A20HTR + AHT20 | Hướng màn hình, nhiệt độ/độ ẩm trong máy |
| Nguồn | SY8511BADC / TLV62084 / TPS2116 / TP4057 | Chuyển ba nguồn vào, ổn áp 3,3V, sạc pin |
| Lưu trữ và nâng cấp | 16MB Flash + hai phân vùng OTA | Firmware, tài nguyên font, OTA và rollback |
Lấy mẫu điện áp

Kênh điện áp dùng phân áp chính xác 101:1 (100kΩ / 1kΩ, điện trở màng mỏng ±0,1%), sau phân áp qua op-amp zero-drift LRA8551A đệm rồi vào CH1 của ADS131M02 (PGA 1x).
Bản thân chuỗi phân áp có đầy thang lý thuyết ±121V, nhưng nguồn phụ của cả máy có đầu vào tối đa 100V, nên dải đo thiết kế lấy 0~90V. Quy đổi theo dải này, mỗi LSB khoảng 14,5µV.
Lấy mẫu dòng điện


Kênh dòng điện là shunt Kelvin 4 đầu 1mΩ / 5W, điểm lấy điện áp tách riêng khỏi đường dẫn dòng lớn, tránh điện trở lá đồng nối tiếp vào mạch đo; tín hiệu sau lọc RC đi thẳng vào CH0 của ADS131M02 (PGA 16x).
Với PGA 16x, đầy thang ADC tương ứng đỉnh ±75A, 1 LSB≈8,94µA.
Vì sao chọn 1mΩ? Cần bao phủ đỉnh ±75A và định mức 30A, đồng thời giữ nhiệt tỏa của shunt trong 5W, 1mΩ là kết quả giao nhau của các ràng buộc này. Cái giá là nhiễu tín hiệu nhỏ khá lớn, phải bù bằng trung bình khối và vùng chết của firmware.
Quản lý nguồn và pin

- Lấy nguồn từ XT60: SY8511BADC hạ xuống 3,3V / 1A.
- USB / pin: TLV62084 hạ xuống 3,3V / 2A. Bo V2 dùng TPS2116 tự động chuyển giữa USB và pin, ưu tiên USB.
- Sạc: TP4057, 400mA, pin lithium 1 cell. Điện áp pin qua phân áp 1:1 vào ADC của ESP32-S3 để hiển thị mức pin.
- Bo V1 còn có một phiên bản dùng MOS rời để chuyển nguồn, sơ đồ nguyên lý cả hai phiên bản đều đã mã nguồn mở.
Thiết kế PCB




Khi vẽ bo, mình chủ yếu tập trung vào mấy việc sau:
- Bo trên và bo dưới xếp lớp, kết nối giữa hai bo bằng header và socket. Màn hình và các chip đặt trên bo trên, toàn bộ đường dòng lớn đưa xuống bo dưới.
- ISENSE là tín hiệu vi sai nhỏ, đi dây càng ngắn càng tốt, tránh xa cuộn cảm DC-DC và nút chuyển mạch.
- Rút ngắn đường SPI và DRDY của ADC, không để chạy song song quãng dài với đường clock, nhiễu chuyển mạch.
- Làm dày lá đồng trên đường dòng lớn, kết hợp thanh đồng để giảm sụt áp và tăng nhiệt ở định mức 30A, đỉnh 75A.
- Cách tách đất / nguồn giữa front-end analog và phần số, xem sơ đồ nguyên lý và file dự án PCB, ở đây không đi sâu.
Vỏ và lắp ráp
Vỏ được vẽ bằng SolidWorks, file nguồn gồm ba chi tiết nắp trên / khung giữa / nắp dưới cộng một bản lắp ráp, file in 3MF để riêng.



Thứ tự lắp ráp:
- Ép đai ốc nhiệt vào 8 lỗ vít trên khung giữa, chỉ cần hàn nhiệt bằng mỏ hàn.
- Lắp bo dưới vào nắp dưới, chú ý hướng khung giữa, đặt khung giữa lên rồi vặn bốn vít của nắp dưới.
- Bọc pin một lớp giấy cách điện, đấu kết nối pin, dán bằng băng keo hai mặt vào mặt dưới bo trên (mặt có module ESP32).
- Căn thẳng header giữa hai bo, gắn bo trên cùng pin vào khung giữa.
- Đậy nắp trên.
- Cuối cùng đấu màn hình, dán băng keo hai mặt mặt sau màn hình để cố định.


Thiết kế phần mềm
Firmware dựa trên ESP-IDF v6.1 + LVGL 9.6, phụ thuộc phân lớp chỉ được đi từ trên xuống, mã nghiệp vụ không được gọi trực tiếp API ngoại vi thô.
main/ quy trình khởi động, tạo task, gửi tham số
components/
├── drivers/ ads131m02 / lcd_nv3030b / touch_cst816d / key_button
│ buzzer / imu_sc7a20h / aht20 / battery_adc / status_led
├── middleware/ data_store (seqlock) / web_console / wifi_manager
│ lvgl_port / fs_storage / event_bus / ota_update
└── services/ power_measure / ui / settings / orientation / device_ctrl
tools/
├── ui_sim/ trình giả lập LVGL UI trên PC (duyệt giao diện + ảnh chụp hồi quy)
└── fonts/ script tạo bộ font
Chuỗi đo lường
- ADS131M02 kéo DRDY mỗi 250µs, SPI3 + GDMA đọc toàn bộ frame 4 từ: STATUS / CH0 / CH1 / CRC. Trong ngắt cạnh xuống DRDY khởi động truyền ngay, khóa cứng cửa sổ đọc với pha lấy mẫu.
- Sau khi kiểm tra CRC-16/CCITT hợp lệ, quy đổi theo tham số hiệu chuẩn thành điện áp, dòng điện và công suất tức thời.
- Mẫu thô được ghi vào bộ đệm vòng ba cấp trong PSRAM, trang dạng sóng xem lại và giảm mẫu đều lấy từ đây.
- Cứ 200ms tính một lần trung bình khối, công suất trung bình, giá trị đỉnh/đáy và cảnh báo, đồng thời tích phân điện năng và dung lượng.
- Cứ 25ms tạo một snapshot 40Hz, UI và web chỉ đọc snapshot, không đụng trực tiếp vào dữ liệu đo.
Phân công hai lõi: Core 1 chạy lấy mẫu và đo lường, Core 0 chạy render LVGL, nút bấm và dịch vụ WiFi/HTTP. Vì sao không đặt đo lường ở Core 0? Stack giao thức WiFi sẽ định kỳ chiếm khá nhiều CPU, tranh lõi với lấy mẫu 4kHz sẽ gây jitter lấy mẫu, phản ánh trực tiếp lên số đọc. Firmware loại thiết bị đo dùng tài nguyên phần cứng đổi lấy tính xác định thời gian là cách làm thông thường.
Bảng điều khiển web


Trang web được biên dịch thẳng vào firmware, không phụ thuộc CDN bên ngoài, mất mạng vẫn mở được. Năm tab: Dữ liệu thời gian thực / Đồ thị dạng sóng / Cài đặt / API / Log.
- WebSocket
/wsđẩy snapshot ở 15Hz, mất kết nối tự động chuyển sang polling và thử kết nối lại mỗi 5s. - Tốc độ làm mới số đọc có thể đặt 15 / 10 / 5 / 2 / 1 Hz, mức thấp sẽ lấy trung bình nhiều frame nhận được, số đọc ổn định hơn; tốc độ gửi của thiết bị và bộ đệm dạng sóng không bị ảnh hưởng.
- Trang dạng sóng vẽ tay bằng Canvas, có ba kênh V/I/P chồng lên nhau, mười cửa sổ thời gian, tạm dừng, kéo xem lại, con trỏ chữ thập, khóa dải đo, xuất CSV.
- Trang cài đặt khi mở sẽ đọc lại giá trị hiện tại từ thiết bị, không hiển thị giá trị mặc định của front-end; tham số hiệu chuẩn (gain và offset của điện áp / dòng điện) đọc/ghi trực tiếp được trên web.
- Trang API là tài liệu dạng thẻ có số thứ tự, mỗi thẻ có một nút “
Test”, nhấn vào sẽ gửi request thật tại chỗ, hiển thị mã trạng thái, thời gian và nội dung phản hồi.
Các giao diện chính: /api/state, /api/config (GET/POST), /api/info, /api/wifi/scan, /api/export.csv, /ws.
Kỹ nghệ hóa
- Hai phân vùng OTA + rollback khi khởi động:
ota_update_start(url)nâng cấp kiểu kéo về ghi vào phân vùng dự phòng, khởi động lỗi tự động quay về bản cũ. Bảng điều khiển web hiện chưa có chỗ tải firmware lên, cứu brick vẫn ưu tiên nạp qua USB / cổng serial. - coredump: hiện trường crash được ghi vào phân vùng riêng, thuận tiện xuất ra phân tích sau.
- Trình giả lập UI trên PC:
tools/ui_simdùng cùng bộ mã nguồn giao diện render trên Windows và chụp ảnh hàng loạt, chạy hồi quy bố cục trước khi nạp firmware. - Unit test trên host: phần logic thuần (mở rộng bù hai, quy đổi hiệu chuẩn, tích phân điện năng, state machine nút bấm, CRC AHT20) có thể test mà không phụ thuộc phần cứng.
- Tạo subset font: giao diện chính dùng 6763 chữ GB2312 cấp 1 + cấp 2, hai độ đậm khoảng 4,2MB, đặt trong phân vùng storage riêng; trang khởi động dùng một bộ subset cực nhỏ khoảng 197 chữ biên dịch thẳng vào app, frame đầu đã là tiếng Trung đầy đủ.
Nhân tiện kể một ghi chú vấp lỗi: trước đây trang khởi động phải đợi hệ thống file mount, font đầy đủ load xong mới hiển thị, màn hình sáng mất 1,42s. Sau khi đưa chuỗi hiển thị (LCD / cảm ứng / LVGL / IMU / hướng) lên bước 9~13, dời fs_storage ra sau, hiện tại khoảng 1,09s là màn hình đã sáng.
Hướng dẫn sử dụng

- Đấu dây: đầu vào XT60 nối nguồn hoặc pin, đầu ra nối tải, chú ý cực dương/âm. Có thể đảo chiều đầu vào/đầu ra, dòng điện ngược sẽ hiển thị số âm.
- Bật máy: gạt công tắc sang mức USB / pin là có thể bật. Nếu gạt sang mức lấy nguồn XT60, đầu vào phải cấp trên 5V mới khởi động được.
- Đo: xem điện áp, dòng điện, công suất, điện năng ở giao diện chính. Nhấn vào dòng điện năng ở dưới để chuyển giữa Wh và Ah.
- Dạng sóng: vuốt đến trang dạng sóng, vuốt lên để gọi menu nhanh, chuyển cửa sổ thời gian và chế độ V/I/P.
- Menu nhanh: vuốt lên ở trang đo hoặc nhấn giữ K2, có thể chỉnh tốc độ làm mới, xóa thống kê điện năng (sẽ xác nhận hai lần trước khi xóa).
- Cấu hình mạng: Cài đặt → WiFi và hotspot → Tìm WiFi → Nhập mật khẩu. Cũng có thể để thiết bị phát hotspot, điện thoại kết nối hotspot của thiết bị rồi vào web cấu hình mạng.
- Web: sau khi cấu hình mạng thành công, điện thoại hoặc máy tính cùng mạng LAN truy cập IP của thiết bị là được.
- Sạc: cắm USB-C 5V, TP4057 sạc ở 400mA, thanh trạng thái có thể thấy mức pin.




Công suất tiêu thụ và kiểm thử
Công suất tiêu thụ của cả máy đo thực tế khoảng 0,7W. Đây là công suất thiết bị tự tiêu thụ, khi đo sẽ cộng vào mạch đang đo, thử nghiệm thiết bị cần đo có công suất thấp phải lưu ý mức nền này.

Việc kiểm chứng chuỗi lấy mẫu tập trung vào hai việc: một là tính toàn vẹn frame khi lấy mẫu liên tục, hai là độ ổn định thời gian từ DRDY đến khi khởi động SPI. Ở mức 4kHz, cửa sổ chu kỳ 250µs rất chặt, một khi đọc frame vắt qua thời điểm chuyển đổi xong, DRDY sẽ bị phần cứng chặn, tần số tụt ngay. Cuối cùng cách làm là SPI 20MHz rút ngắn cửa sổ đọc, thêm khởi động GDMA trực tiếp trong ngắt DRDY để khóa pha, chạy liên tục thực tế tốc độ frame ổn định.
Về độ chính xác, cách hiệu chuẩn hiện tại là: khi không tải tự động đưa điểm không dòng điện về 0, sau đó dùng điện áp đã biết và đồng hồ chuẩn hiệu chỉnh gain / offset. Chưa làm hiệu chuẩn nhiều điểm và test trôi dài hạn. Vì vậy định vị của máy là “công cụ gỡ lỗi”, không phải “dụng cụ đo lường”. Ai muốn độ chính xác cao hơn có thể tự bổ sung điểm hiệu chuẩn, trang cài đặt trên thiết bị và web đều sửa được gain và offset.
Hướng dẫn làm lại
-
Tài liệu là một bộ đầy đủ, đừng chỉ tải thư mục firmware. Sơ đồ nguyên lý, dự án LCEDA, Gerber, BOM, stencil, vỏ SolidWorks, 3MF đều nằm trong cùng một repo.
-
Khi đặt làm bo nên chọn độ dày 1,2mm, trở kháng và ép lớp dùng quy trình mặc định là được. Gerber ở
05-生产文件/01-PCB/, file stencil là lớp trên và lớp dưới ghép trên một tấm, đặt stencil laser trên Taobao là được. -
Hàn theo hướng “stencil + bàn gia nhiệt”: căn chỉnh cố định stencil → quét kem hàn → đặt linh kiện theo BOM tương tác → reflow bằng bàn gia nhiệt hoặc súng khò → cuối cùng hàn linh kiện xuyên lỗ. BOM tương tác mở trong trình duyệt, khi trỏ sẽ làm nổi vị trí, tìm linh kiện rất nhàn.
-
Có hai cách nạp firmware. Nếu đã cài ESP-IDF v6.1 thì dùng script:
cd 02-Software/XT60-Power-Meter-Firmware .\build_fw.bat .\flash_fw.bat COM3Không muốn cài môi trường thì dùng Chrome / Edge mở ESPConnect, nạp toàn bộ firmware qua Web Serial.
-
Firmware gồm 5 image, đừng chỉ nạp app.
idf.py flashsẽ tự xử lý theoflash_args; nếu nạp thủ công chú ýstorage.binở0x830000, bên trong là toàn bộ font tiếng Trung. Sửa font bắt buộc phải nạp toàn bộ, chỉ đi OTA sẽ gặp “nâng cấp thành công nhưng tiếng Trung biến thành ô vuông”. -
Đừng làm ngược thứ tự hiệu chuẩn: trước tiên hiệu chuẩn điểm không dòng điện khi không tải (thiết bị lấy mẫu trung bình khối 3 giây), sau đó hiệu chuẩn gain và offset điện áp, cuối cùng mắc nối tiếp đồng hồ chuẩn để hiệu chuẩn dòng điện. Tham số ghi vào NVS, mất điện và nâng cấp đều giữ lại.
-
Vỏ nên in bằng vật liệu bán trong suốt, màn hình và đèn trạng thái có thể xuyên sáng, đẹp hơn màu đặc khá nhiều.
Tính năng chưa triển khai
- Quy trình nâng cấp OTA hoàn chỉnh. Nền tảng đã có: hai phân vùng OTA, middleware nâng cấp kiểu kéo về, kiểm tra rollback khi khởi động đều chạy được; còn thiếu chỗ tải firmware lên trên web và cổng tự kiểm tra sau nâng cấp.
- Chức năng kết nối USB serial với PC + phần mềm PC đi kèm. Hiện chỉ có đường web WiFi, nhu cầu cắm dây xem dữ liệu vẫn chưa làm.
Hai tính năng này khi có thời gian mình sẽ bổ sung, các bạn cũng có thể tự làm rồi gửi PR.
Vấn đề hiện tại
Khi cấp nguồn bằng USB / pin, 3,3V sẽ chảy ngược vào đầu nối XT60.
Đường cụ thể là: 3,3V đi qua diode thân của MOS bên trong chip Buck nhánh lấy nguồn XT60, rồi qua diode thân của MOS điều khiển nguồn (Q4), chảy ngược ra đầu cực XT60. Vì vậy dù XT60 không nối đầu vào nào, giao diện đo vẫn hiển thị khoảng 2,45V (3,3V trừ đi sụt áp hai diode thân).

Ba cách xử lý, theo mức thay đổi từ nhỏ đến lớn:
- Không sửa mạch, cũng không dùng nguồn từ XT60: không hàn phần Buck lấy nguồn XT60, chỉ dùng pin cấp nguồn.
- Chỉ đổi một linh kiện: nối tiếp thêm một MOS back-to-back sau Q4 để cắt đường diode thân. Đây là chỗ sẽ sửa ở phiên bản sau.
- Đơn giản là không dùng pin / USB: gạt công tắc sang mức nguồn XT60 thì không có đường chảy ngược, nhưng phải nối XT60 mới bật được máy.
Vài giới hạn đã biết khác:
- Khi chuyển sang nguồn XT60, đầu vào tối thiểu 5V mới khởi động được.
- Dòng điện |I| < 2mA được xử lý như 0, đây là hành vi thiết kế không phải lỗi.
- Bảng điều khiển web không có chỗ tải OTA lên, nâng cấp vẫn phải cắm dây.
- Kết quả đo là trung bình khối theo chuẩn DC, không phải giá trị hiệu dụng thật (RMS). Muốn đo xoay chiều hoặc ripple phải làm riêng.
Sơ đồ nguyên lý




File PDF sơ đồ nguyên lý đầy đủ (bo trên V1 / V2, bo dưới) và dự án LCEDA nằm trong repo ở 01-Hardware/.
Địa chỉ tải tài liệu
Tài liệu cung cấp gồm file dự án LCEDA, PDF sơ đồ nguyên lý bo trên/bo dưới, file Gerber làm bo, file stencil, bảng BOM, bản vẽ vị trí linh kiện, HTML hỗ trợ hàn tương tác, file nguồn vỏ SolidWorks, file in 3MF, toàn bộ datasheet linh kiện, dự án firmware ESP-IDF đầy đủ (gồm tài liệu kiến trúc, hướng dẫn nạp, bảng chân, trình giả lập UI trên PC).
Cấu trúc thư mục repo:
XT60-Power-Meter/
├── 01-Hardware/ thiết kế phần cứng
│ ├── 01-XT60功率计-立创EDA工程.epro2
│ ├── 02-上板原理图_V1.pdf / V2.pdf
│ └── 02-下板原理图.pdf
├── 02-Software/
│ └── XT60-Power-Meter-Firmware/ dự án firmware ESP-IDF
│ ├── main/ khởi động và điều phối task
│ ├── components/ driver / middleware / service
│ ├── docs/ tài liệu kiến trúc, nạp, chân
│ └── tools/ công cụ font, trình giả lập UI
├── 03-Datasheet/ datasheet linh kiện và tài liệu màn hình
├── 04-外壳设计/ file nguồn SolidWorks và model PCB
├── 05-生产文件/
│ ├── 01-PCB/ Gerber và stencil hàn tay
│ ├── 02-贴片/ BOM, bản vẽ vị trí, hỗ trợ hàn tương tác
│ └── 03-外壳3D打印文件/ file in 3MF
├── LICENSE phần cứng CERN OHL-S v2
├── README.md
└── README.en.md
- Địa chỉ mã nguồn mở Gitee: https://gitee.com/zeruns/xt60-power-meter (nhánh
developdùng để phát triển) - Địa chỉ repo GitHub: https://github.com/zeruns/xt60-power-meter
- Địa chỉ nền tảng mã nguồn mở LCEDA: https://oshwhub.com/zeruns/xt60-power-meter-esp32
- Video demo: https://www.bilibili.com/video/BV1pNWU6qE3P/
Về giấy phép, phần cứng (sơ đồ nguyên lý, PCB, vỏ, file sản xuất) dùng CERN OHL-S v2, giấy phép phần cứng mã nguồn mở tương hỗ mạnh, phần cứng phái sinh phải mở mã nguồn theo cùng giấy phép; firmware dùng MIT. Các thành phần bên thứ ba như LVGL, esp_lvgl_port, Noto Sans SC giữ nguyên giấy phép riêng, chi tiết ở THIRD_PARTY.md.
Tuyên bố miễn trừ trách nhiệm
- Kết quả đo của thiết bị này không dùng làm căn cứ chứng nhận đo lường.
- 90V / ±75A đỉnh thuộc mức điện áp và dòng điện nguy hiểm, khi đấu dây, hàn, kiểm tra hãy chống ngắn mạch, chống điện giật, chống đấu ngược cực, thử dòng lớn dùng dây và đầu nối có tiết diện phù hợp.
- Tác giả không chịu trách nhiệm cho bất kỳ tổn thất trực tiếp hoặc gián tiếp nào do sử dụng phần cứng hoặc firmware của dự án này.
- Hoan nghênh phản hồi vấn đề và góp ý cải tiến ở phần bình luận hoặc Gitee Issue.
Dự án mã nguồn mở gợi ý
- Đã làm một bộ thu thập điện năng ba pha mã nguồn mở, tiện theo dõi tình hình dùng điện trong nhà: https://blog.zeruns.com/archives/771.html
- Nguồn số Buck-Boost chỉnh lưu đồng bộ dựa trên STM32, mã nguồn mở: https://blog.zeruns.com/archives/791.html
- Tải điện tử thông minh dựa trên CH32V307 mã nguồn mở, tác phẩm cuộc thi nhúng mã nguồn mở: https://blog.zeruns.com/archives/785.html
- 【Mã nguồn mở】Nguồn DCDC điều chỉnh tăng/giảm áp (Buck-Boost) dựa trên SC8703, điện áp và dòng điện điều chỉnh được, hỗ trợ đầu vào sạc nhanh PD: https://blog.zeruns.com/archives/929.html
- Mã nguồn mở module sạc nhanh PD3.1 tăng/giảm áp 140W+65W (2 cổng C + 1 cổng A), IP6557+IP6538, sạc để bàn 205W: https://blog.zeruns.com/archives/801.html
- 【Mã nguồn mở】Nguồn xung flyback 24V3A (dựa trên UC3842, gồm mạch điện và quá trình tính toán tham số biến áp): https://blog.zeruns.com/archives/910.html
- Mã nguồn mở dock Type-C, 4 cổng USB-A 10Gbps + card mạng 2.5G + đầu đọc thẻ: https://blog.zeruns.com/archives/868.html
Đọc thêm
- Gợi ý VPS/máy chủ đám mây hiệu năng giá tốt và rẻ: https://blog.zeruns.com/archives/383.html
- Hướng dẫn mở server Minecraft: https://blog.zeruns.com/tag/mc/
- Hướng dẫn dựng website độc lập bán hàng xuyên biên giới, hướng dẫn làm site ngoại thương bằng WordPress: https://blog.zeruns.com/archives/889.html
- Hướng dẫn đầy đủ triển khai Hermes Agent, cầm tay chỉ việc dựng trợ lý AI đầu tiên của bạn: https://blog.zeruns.com/archives/939.html
- Đánh giá mở hộp và tháo rã NAS Ugreen DXP4800Pro: https://blog.zeruns.com/archives/949.html
- Hướng dẫn dựng diễn đàn Discourse, triển khai website diễn đàn cộng đồng mã nguồn mở Discourse từ con số 0: https://blog.zeruns.com/archives/919.html



