【오픈소스】XT60 전력계: 90V/75A, 24bit, 터치 컬러 스크린, WiFi

XT60 회로에 바로 꽂아 쓸 수 있는 DC 파워 미터를 오픈소스로 공개합니다: ESP32-S3 메인 컨트롤러, TI ADS131M02 24bit 2채널 동기 샘플링(4kSPS), 1mΩ 4단자 켈빈 션트 + 101:1 정밀 분압, 0~90V 측정, 정격 ±30A(피크 ±75A). 1.83인치 IPS 터치 컬러 스크린에서 LVGL 9을 구동하며 오실로스코프 스타일 파형 페이지를 제공합니다. WiFi로 라우터에 연결하면 브라우저에서 웹 콘솔을 열어 데이터와 파형을 보고, 설정을 바꾸고, CSV를 내보낼 수 있습니다. 하드웨어, 펌웨어, 케이스, 생산 파일 모두 오픈소스입니다.

RC 모형, 드론, 배터리 충·방전 테스트를 하다 보면 회로에 바로 직렬로 넣을 수 있는 파워 미터가 자주 필요합니다. 큰 전류에서의 전압 강하를 또렷하게 보고 싶고, 연결·분리 순간의 서지도 잡아내야 하며, 가능하면 데이터를 PC로 동기화하고 싶었습니다. 시중 제품은 화면이 작거나, 파형이 없거나, 데이터를 현장에서만 볼 수 있는 경우가 많았습니다. 그래서 이 프로젝트를 시작했습니다.

먼저 분명히 해두겠습니다: 이 프로젝트의 소프트웨어 부분은 AI가 개발했습니다. 하드웨어는 제가 직접 그렸고, 펌웨어는 아키텍처 설계부터 구체적인 구현까지 기본적으로 AI에 맡긴 뒤 제가 요구사항 정의, 설계 검토, 실기 검증을 했습니다. 이 점이 걸리신다면 여기서 그만 보셔도 됩니다. “쓸 수 있는지, 어떻게 복제하는지”가 더 궁금하시다면 계속 읽어 주세요. 코드, 문서, 테스트 도구는 모두 공개되어 있습니다.

:play_button: 전자/마이크로컨트롤러 기술 교류 QQ 그룹: 307449735

:play_button: eeClub-전자 엔지니어 커뮤니티: https://bbs.eeclub.top/

자료 다운로드 주소는 글 마지막에 있습니다.

설계 사양

항목 사양
메인 컨트롤러 ESP32-S3-WROOM-1-N16R8(16MB Flash + 8MB 8선 PSRAM, 듀얼 코어 240MHz)
계측 ADC TI ADS131M02, 24bit Σ-Δ, 2채널 동기 샘플링, 4 kSPS
전압 측정 범위 설계 측정 범위 0~90V(101:1 분압 회로의 이론상 풀스케일은 ±121V이나 보조 전원의 100V 입력 상한에 제한됨)
전압 분해능 약 14.5 µV/LSB
전류 측정 범위 피크 ±75A(ADC 풀스케일); 정격 ±30A(XT60 커넥터 제한)
전류 분해능 약 8.94 µA/LSB
전류 샘플링 1mΩ / 5W 4단자 켈빈 션트, PGA 16x
디스플레이 1.83인치 IPS, 240×284(가로 모드 284×240), NV3030B, QSPI 4bit
터치 CST816D 정전식 터치, I2C
센서 AHT20 온·습도, SC7A20HTR 3축 가속도계(자동 화면 회전)
통신 WiFi 2.4GHz, STA/AP, HTTP + WebSocket
전원 XT60 입력 / USB-C / 단일 셀 리튬 배터리 3중 전원, TPS2116이 USB 우선, TP4057로 400mA 충전
자체 소비전력 약 0.7W
케이스 상단 커버 / 중간 프레임 / 하단 커버 3피스 3D 프린팅, SolidWorks 원본 파일 + 3MF
펌웨어 v0.6.9, ESP-IDF v6.1 + LVGL 9.6

몇 가지 오해하기 쉬운 점을 먼저 짚겠습니다:

  • ±75A는 ADC 풀스케일이며 연속 전류가 아닙니다. 1mΩ 션트의 정격은 70A(70A에서 전압 강하 70mV, 소비전력 4.9W)이지만 XT60 커넥터는 30A까지만 감당합니다(30A에서 전압 강하 30mV, 소비전력 0.9W). 그래서 기기 전체 정격은 ±30A로 표기했으며, 더 큰 전류를 장시간 흘리려면 직접 하단 기판을 개조해 XT90으로 바꿔야 합니다.
  • 90V 역시 분압 회로의 한계가 아닙니다. 분압 자체는 ±121V까지 가능하지만, 보조 전원(XT60에서 전원을 끌어오는 Buck 회로)의 최대 입력이 100V라서 기기 전체가 90V로 제한된 것입니다.
  • 전류가 2mA 미만일 때 0으로 표시되는 것은 정상입니다. 1mΩ 션트는 소신호 노이즈가 적지 않아(단일 프레임 σ≈2mA) 펌웨어가 200ms 블록 평균과 2mA 데드밴드로 무부하 시의 흔들림을 억제합니다. 파형 페이지는 원시 샘플을 사용하므로 mA 수준의 변화도 그대로 볼 수 있습니다.
  • 이것은 계량 기기가 아닙니다. 취미 수준의 측정과 디버깅에는 충분하지만, 표준 계측기처럼 사용해서는 안 됩니다.

실물 사진

XT60 파워 미터 완성품. 네 가지 케이스 색상으로 측정, 파형, 설정, 부팅 화면을 각각 표시

외관 정면과 후면

화면이 켜진 측정 상태

본체와 배선

본체는 상단 커버, 중간 프레임, 하단 커버의 3피스 3D 프린팅 케이스이며 M2.5 나사로 고정합니다. 전면에는 1.83인치 IPS 화면이 있고, 화면 왼쪽에는 상태 표시등과 리셋 버튼이 있습니다. 본체 옆면에는 K1/K2 두 개의 물리 버튼이 있으며(K2를 길게 누르면 빠른 메뉴 호출), Type-C 포트 옆 스위치는 전원을 전환하는 데 사용합니다. 한쪽은 배터리 / USB, 다른 쪽은 XT60 전원입니다.

화면 인터페이스

화면은 측정, 파형, 설정의 3페이지 슬라이드 구조이며 첫 페이지와 마지막 페이지에서 더 이상 넘어가지 않습니다. 터치와 버튼만으로도 조작할 수 있습니다.

측정 메인 화면 오실로스코프 스타일 파형 페이지
측정 페이지 파형 페이지
전압 / 전류 / 전력 대형 숫자, 하단에는 전력량, 온·습도, 피크·최저값 V/I/P 다중 모드, 1s~10min 6단계 시간창, 자동 레인지
설정 페이지 위로 당기는 빠른 메뉴
설정 페이지 빠른 메뉴
측정, 디스플레이, 부저, WiFi, 전력량 통계, 경고, 정보, 공장 초기화 데이터 갱신율, 전력량 통계 초기화(2차 확인)

몇 가지 편리한 세부 기능:

  • 첫 화면 하단의 전력량 데이터를 누르면 Wh와 Ah 사이를 전환할 수 있습니다.
  • 파형 페이지의 세로축 눈금은 1-2-5 표준 격자값에 맞춰져 있어 머리로 바로 계산해 읽을 수 있습니다. 또한 눈금에서 뒤쪽 0을 제거해 3.00V / 0.200A가 아니라 3V / 0.2A로 표시합니다.
  • 팝업 너비는 화면 방향을 따라갑니다(가로 모드 260px, 세로 모드 216px). 세로 모드에서도 좌우가 잘리지 않습니다.
  • 조작이 없으면 15 / 30 / 60초(설정 가능) 후 백라이트가 10%로 낮아지며, 터치하거나 아무 버튼이나 누르면 즉시 복구됩니다.
  • 위 화면 이미지들은 프로젝트에 포함된 PC용 LVGL 시뮬레이터(tools/ui_sim)로 생성한 것이며, 실제 기기와 동일한 UI 소스 코드를 공유합니다. 포토샵으로 만든 것이 아닙니다.

하드웨어 설계

시스템 구성

XT60 파워 미터 하드웨어 시스템 구성도

본체는 상하 두 장의 PCB를 겹친 구조입니다:

  • 상단 기판: 메인 컨트롤러, 화면, 터치, 센서, 버튼, 부저, 전압 분압, 전원 관리.
  • 하단 기판: XT60 입력/출력, 1mΩ 션트, 대전류 구리 버스바.

배터리는 두 기판 사이에 끼워 넣고 상단 기판 뒷면(즉 ESP32-S3 모듈이 있는 면)에 부착합니다.

모듈 주요 부품 역할
메인 컨트롤러 ESP32-S3-WROOM-1-N16R8 샘플링 스케줄링, UI 렌더링, WiFi 통신, 데이터 저장
계측 프런트엔드 ADS131M02 + LRA8551A 전압 / 전류 동기 샘플링, 24bit, 4kSPS
디스플레이/입력 NV3030B LCD + CST816D + K1/K2 + 부저 로컬 표시 및 조작
센서 SC7A20HTR + AHT20 화면 방향, 기기 내부 온·습도
전원 SY8511BADC / TLV62084 / TPS2116 / TP4057 3중 입력 전환, 3.3V 레귤레이션, 배터리 충전
저장/업그레이드 16MB Flash + 듀얼 OTA 파티션 펌웨어, 폰트 리소스, OTA 및 롤백

전압 샘플링

전압 샘플링 회로도

전압 채널은 101:1 정밀 분압(100kΩ / 1kΩ, ±0.1% 박막 저항)을 사용하며, 분압된 신호는 제로 드리프트 연산증폭기 LRA8551A로 버퍼링한 뒤 ADS131M02의 CH1(PGA 1x)로 들어갑니다.

분압 회로 자체의 이론상 풀스케일은 ±121V이지만, 기기 보조 전원의 최대 입력이 100V이므로 설계 측정 범위는 0~90V로 잡았습니다. 이 범위로 환산하면 1 LSB는 약 14.5µV입니다.

전류 샘플링

션트와 전류 샘플링

전류 샘플링 회로도

전류 채널은 1mΩ / 5W 4단자 켈빈 션트를 사용합니다. 전압 검출점이 대전류 배선과 독립되어 있어 구리 포일 저항이 측정 회로에 직렬로 들어가는 것을 방지합니다. 신호는 RC 필터를 거친 뒤 ADS131M02의 CH0(PGA 16x)로 바로 들어갑니다.

PGA 16x에서 ADC 풀스케일은 피크 ±75A에 해당하며, 1 LSB≈8.94µA입니다.

왜 1mΩ을 선택했을까요? ±75A 피크와 30A 정격을 커버하면서 션트 자체 발열을 5W 이내로 억제해야 했고, 1mΩ은 이러한 제약들이 교차하는 지점에서 나온 결과입니다. 대신 소신호 노이즈가 다소 커서 펌웨어의 블록 평균과 데드밴드로 보완합니다.

전원 및 배터리 관리

전원 관리 회로도

  • XT60 전원: SY8511BADC로 3.3V / 1A로 강압.
  • USB / 배터리: TLV62084로 3.3V / 2A로 강압. V2 기판은 TPS2116으로 USB와 배터리 사이를 자동 전환하며 USB를 우선합니다.
  • 충전: TP4057, 400mA, 단일 셀 리튬 배터리. 배터리 전압은 1:1 분압을 거쳐 ESP32-S3의 ADC로 들어가 전량 표시에 사용됩니다.
  • V1 기판에는 개별 MOS로 전원 전환을 구현한 버전도 있었으며, 두 버전의 회로도 모두 공개했습니다.

PCB 설계

상단 기판 PCB

상단 기판 PCB 하단면

상단 기판 PCB 상단면

하단 기판 PCB

PCB를 설계할 때 주로 다음 몇 가지를 신경 썼습니다:

  1. 상하 기판을 적층하고 기판 간은 핀 헤더와 소켓으로 연결합니다. 화면과 각종 칩은 상단 기판에 배치하고, 대전류 경로는 모두 하단 기판으로 보냈습니다.
  2. ISENSE는 차동 소신호이므로 배선을 최대한 짧게 하고 DC-DC 인덕터와 스위칭 노드에서 멀리 떨어뜨렸습니다.
  3. ADC의 SPI 및 DRDY 배선을 짧게 하고, 클록선이나 스위칭 노이즈와 장거리로 평행하지 않게 했습니다.
  4. 대전류 경로의 구리 포일을 두껍게 하고 구리 버스바를 함께 사용해 30A 정격, 75A 피크에서의 전압 강하와 온도 상승을 억제했습니다.
  5. 아날로그 프런트엔드와 디지털 부분의 접지 / 전원 분리는 회로도와 PCB 프로젝트 파일을 참고하시고, 여기서는 자세히 다루지 않겠습니다.

케이스와 조립

케이스는 SolidWorks로 그렸으며, 원본 파일은 상단 커버 / 중간 프레임 / 하단 커버 세 부품과 하나의 어셈블리로 구성되어 있고 3MF 프린팅 파일은 별도로 두었습니다.

어셈블리 분해도

케이스 부품

나사, 열융착 너트, 배터리, 화면 등 부품

조립 순서:

  1. 중간 프레임의 나사 구멍 8개에 열융착 너트를 인두로 가열해 눌러 넣습니다.
  2. 하단 기판을 하단 커버에 넣고 중간 프레임 방향에 주의한 뒤 중간 프레임을 올리고 하단 커버 나사 4개를 조입니다.
  3. 배터리를 절연지로 한 겹 감싸 절연하고 배터리 홀더를 연결한 뒤 양면 테이프로 상단 기판 아랫면(ESP32 모듈이 있는 면)에 붙입니다.
  4. 기판 간 핀 헤더를 맞춘 뒤 상단 기판을 배터리와 함께 중간 프레임에 끼웁니다.
  5. 상단 커버를 덮습니다.
  6. 마지막으로 화면을 연결하고 화면 뒷면에 양면 테이프를 붙여 고정합니다.

내부 구조: 하단 파워 기판과 상단 메인 컨트롤 기판

내부 적층과 배터리 배치

소프트웨어 설계

펌웨어는 ESP-IDF v6.1 + LVGL 9.6 기반이며, 계층 의존성은 위에서 아래로만 향할 수 있고 비즈니스 코드는 베어메탈 외부 장치 API를 직접 호출할 수 없습니다.

main/                  부팅 흐름, 태스크 생성, 파라미터 전달
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/            PC용 LVGL UI 시뮬레이터(점검 + 회귀 스크린샷)
└── fonts/             폰트 생성 스크립트

측정 경로

  1. ADS131M02는 250µs마다 DRDY를 발생시키고, SPI3 + GDMA로 STATUS / CH0 / CH1 / CRC의 4워드 프레임 전체를 읽습니다. DRDY 하강 에지 인터럽트에서 전송을 바로 시작해 읽기 윈도와 샘플링 위상을 고정합니다.
  2. CRC-16/CCITT 검증을 통과하면 캘리브레이션 파라미터에 따라 전압, 전류, 순시 전력으로 환산합니다.
  3. 원시 샘플은 PSRAM의 3단 링 버퍼에 기록하며, 파형 페이지의 되돌아보기와 다운샘플링은 모두 여기서 가져옵니다.
  4. 200ms마다 블록 평균, 평균 전력, 피크·최저값, 경고를 계산하고 동시에 전력량과 용량을 적분합니다.
  5. 25ms마다 40Hz 스냅샷 한 프레임을 생성하며, UI와 웹 페이지는 스냅샷만 읽고 측정 데이터에 직접 접근하지 않습니다.

듀얼 코어 분담: Core 1은 샘플링과 측정을, Core 0은 LVGL 렌더링, 버튼, WiFi/HTTP 서비스를 실행합니다. 왜 측정을 Core 0에 두지 않았을까요? WiFi 프로토콜 스택이 주기적으로 적지 않은 CPU를 사용하므로 4kHz 샘플링과 코어를 다투면 샘플링 지터가 생기고, 이는 곧 읽기 값에 반영됩니다. 계측기류 펌웨어에서 하드웨어 자원을 써서 타이밍 결정성을 확보하는 것은 일반적인 방식입니다.

웹 콘솔

웹 콘솔 실시간 데이터 페이지

웹 콘솔 파형 페이지

웹 페이지는 펌웨어에 직접 포함되어 외부 CDN에 의존하지 않으며, 인터넷이 끊겨도 열 수 있습니다. 다섯 개 탭: 실시간 데이터 / 파형 그래프 / 설정 / API / 로그.

  • WebSocket /ws가 15Hz로 스냅샷을 푸시하며, 연결이 끊기면 자동으로 폴링으로 전환하고 5초마다 재연결합니다.
  • 읽기 값 갱신율은 15 / 10 / 5 / 2 / 1 Hz로 설정할 수 있습니다. 낮은 단계에서는 수신한 여러 프레임을 평균 내어 읽기 값이 더 안정적이며, 기기 전송 속도와 파형 버퍼에는 영향을 주지 않습니다.
  • 파형 페이지는 Canvas로 직접 그리며, V/I/P 3채널 중첩, 10개 시간창, 일시정지, 드래그 되돌아보기, 십자 커서, 레인지 고정, CSV 내보내기를 모두 지원합니다.
  • 설정 페이지는 열 때 기기에서 현재 값을 다시 읽어 오며, 프런트엔드 기본값을 표시하지 않습니다. 캘리브레이션 파라미터(전압 / 전류의 게인과 오프셋)는 웹에서 직접 읽고 쓸 수 있습니다.
  • API 페이지는 번호가 붙은 카드형 문서이며, 각 카드에 “:play_button: Test”가 있어 클릭하면 그 자리에서 실제 요청을 보내고 상태 코드, 소요 시간, 응답 본문을 표시합니다.

주요 인터페이스: /api/state, /api/config(GET/POST), /api/info, /api/wifi/scan, /api/export.csv, /ws.

엔지니어링

  • 듀얼 OTA 파티션 + 부팅 롤백: ota_update_start(url) 풀 방식 업그레이드가 예비 파티션에 기록되며, 부팅에 실패하면 자동으로 이전 버전으로 되돌아갑니다. 웹 콘솔에는 아직 펌웨어 업로드 입구가 없어, 벽돌 복구는 USB / 시리얼 플래싱을 기준으로 합니다.
  • coredump: 크래시 현장을 독립 파티션에 기록해 나중에 내보내 분석할 수 있습니다.
  • PC용 UI 시뮬레이터: tools/ui_sim은 동일한 UI 소스 코드를 Windows에서 렌더링하고 일괄 스크린샷을 생성해, 플래싱 전에 레이아웃 회귀 테스트를 한 번 돌립니다.
  • 호스트 측 단위 테스트: 순수 로직 부분(2의 보수 확장, 캘리브레이션 환산, 전력량 적분, 버튼 상태 머신, AHT20 CRC)은 하드웨어 없이 테스트할 수 있습니다.
  • 폰트 서브셋화: 메인 화면은 GB2312 1급+2급 6763자를 사용하며 두 가지 굵기로 약 4.2MB이고 별도 storage 파티션에 넣습니다. 부팅 화면은 약 197자의 극소 서브셋을 별도로 app에 직접 포함해 첫 프레임부터 완전한 중국어가 표시됩니다.

덧붙여 삽질 기록 하나: 예전에는 부팅 화면이 파일 시스템 마운트와 전체 폰트 로딩이 끝난 뒤에야 표시되어 화면 점등까지 1.42초가 걸렸습니다. 디스플레이 경로(LCD / 터치 / LVGL / IMU / 방향)를 9~13단계로 앞당기고 fs_storage를 뒤로 옮긴 뒤에는 약 1.09초 만에 화면이 켜집니다.

사용 설명

파워 미터를 테스트 회로에 연결한 모습

  1. 배선: XT60 입력단은 전원 또는 배터리에, 출력단은 부하에 연결하며 극성에 주의하세요. 입출력 방향은 바꿔도 되며, 역방향 전류는 음수로 표시됩니다.
  2. 전원 켜기: 스위치를 USB / 배터리 위치로 두면 켜집니다. XT60 전원 위치로 두었다면 입력이 5V 이상이어야 시작됩니다.
  3. 측정: 메인 화면에서 전압, 전류, 전력, 전력량을 봅니다. 하단 전력량 행을 누르면 Wh와 Ah 사이를 전환할 수 있습니다.
  4. 파형: 파형 페이지로 넘긴 뒤 위로 밀어 빠른 메뉴를 호출하고 시간창과 V/I/P 모드를 전환합니다.
  5. 빠른 메뉴: 측정 페이지에서 위로 밀거나 K2를 길게 누르면 갱신율 조정과 전력량 통계 초기화(초기화 전 2차 확인)를 할 수 있습니다.
  6. 네트워크 설정: 설정 → WiFi 및 핫스팟 → WiFi 검색 → 비밀번호 입력. 기기가 핫스팟을 열게 한 뒤 휴대폰을 기기 핫스팟에 연결하고 웹 페이지에서 네트워크를 설정할 수도 있습니다.
  7. 웹 페이지: 네트워크 설정이 완료되면 같은 LAN에 있는 휴대폰이나 PC에서 기기 IP로 접속하면 됩니다.
  8. 충전: USB-C에 5V를 연결하면 TP4057이 400mA로 충전하며, 상태 표시줄에서 배터리 잔량을 볼 수 있습니다.

사용 장면 1

사용 장면 2

사용 장면 3

사용 장면 4

소비전력과 테스트

본체 자체 소비전력은 실측 약 0.7W입니다. 이는 기기가 스스로 소비하는 전력으로, 측정 시 피측정 회로에 더해집니다. 저소비전력 기기를 테스트할 때는 이 바탕값을 유의하세요.

소비전력 테스트

샘플링 경로 검증은 두 가지에 집중했습니다. 하나는 연속 샘플링의 프레임 무결성, 다른 하나는 DRDY에서 SPI 시작까지의 타이밍 안정성입니다. 4kHz 모드의 250µs 주기 창은 매우 빡빡해서, 프레임 읽기가 변환 완료 시점을 넘어가면 DRDY가 하드웨어에 의해 억제되고 주파수가 곧바로 떨어집니다. 최종적으로는 20MHz SPI로 읽기 창을 줄이고, DRDY 인터럽트에서 GDMA를 직접 시작해 위상을 고정했으며, 실측 연속 구동에서 프레임 레이트가 안정적으로 유지되었습니다.

정밀도 측면에서 현재 보정 수단은 무부하 시 전류 영점 자동 제로화, 그리고 알려진 전압과 표준 계측기로 게인 / 오프셋을 보정하는 것입니다. 다점 캘리브레이션과 장기 드리프트 테스트는 하지 않았습니다. 따라서 이 기기의 위치는 “디버깅 도구”이지 “계량 기기”가 아닙니다. 더 높은 정밀도를 원한다면 직접 캘리브레이션 포인트를 추가할 수 있으며, 기기 설정 페이지와 웹 페이지 모두에서 게인과 오프셋을 변경할 수 있습니다.

복제 안내

  1. 자료는 전체 세트이므로 펌웨어 디렉터리만 받지 마세요. 회로도, LCEDA(立创 EDA) 프로젝트, Gerber, BOM, 스텐실, SolidWorks 케이스, 3MF가 모두 같은 저장소에 있습니다.

  2. 기판 제작은 두께 1.2mm를 권장하며, 임피던스와 적층은 기본 공정을 따르면 됩니다. Gerber는 05-生产文件/01-PCB/에 있고, 스텐실 파일은 상단면과 하단면이 한 장에 합쳐져 있으므로 타오바오에서 레이저 스텐실을 주문하면 됩니다.

  3. 납땜은 “스텐실 + 가열대” 방식으로 진행하세요: 스텐실을 정렬해 고정 → 솔더 페이스트 도포 → 인터랙티브 BOM을 보며 부품 배치 → 가열대 또는 열풍기로 리플로 → 마지막으로 스루홀 부품 납땜. 인터랙티브 BOM은 브라우저에서 열면 해당 위치 번호가 강조되어 부품 찾기가 매우 편합니다.

  4. 플래싱 방법은 두 가지입니다. ESP-IDF v6.1이 설치되어 있으면 스크립트를 사용하세요:

    cd 02-Software/XT60-Power-Meter-Firmware
    .\build_fw.bat
    .\flash_fw.bat COM3
    

    환경 설치를 원하지 않으면 Chrome / Edge에서 ESPConnect를 열고 Web Serial로 전체 펌웨어를 플래싱하면 됩니다.

  5. 펌웨어는 5개 이미지이므로 app만 플래싱하지 마세요. idf.py flash는 flash_args에 따라 자동 처리합니다. 수동으로 플래싱할 경우 storage.bin이 0x830000에 있으며 전체 중국어 폰트가 들어 있다는 점에 유의하세요. 폰트를 변경하면 반드시 전체 플래싱을 해야 하며, OTA만 사용하면 “업그레이드는 성공했지만 중국어가 네모 상자로 보이는” 문제가 발생합니다.

  6. 캘리브레이션 순서를 바꾸지 마세요: 먼저 무부하에서 전류 영점 캘리브레이션(기기에서 3초 블록 평균 샘플링)을 하고, 다음으로 전압 게인과 오프셋을 보정한 뒤, 마지막으로 표준 계측기를 직렬로 연결해 전류를 캘리브레이션합니다. 파라미터는 NVS에 기록되어 전원이 꺼지거나 업그레이드해도 유지됩니다.

  7. 케이스는 반투명 소재로 출력하는 것을 권장합니다. 화면과 상태 표시등의 빛이 비쳐 불투명 색상보다 훨씬 보기 좋습니다.

구현 예정 기능

  1. 완전한 OTA 업그레이드 흐름. 기반은 이미 갖춰져 있습니다. 듀얼 OTA 파티션, 풀 방식 업그레이드 미들웨어, 부팅 롤백 검증이 모두 동작합니다. 빠진 것은 웹 측 펌웨어 업로드 입구와 업그레이드 후 자체 검사 게이팅입니다.
  2. USB 시리얼 호스트 기능 + 전용 호스트 소프트웨어. 현재는 WiFi 웹 페이지라는 경로만 있으며, 케이블을 연결해 데이터를 보는 요구사항은 아직 구현하지 않았습니다.

이 두 기능은 시간이 될 때 제가 보완할 예정이며, 직접 구현해 PR을 보내셔도 됩니다.

현재 알려진 문제

USB / 배터리 전원 사용 시 3.3V가 XT60 커넥터로 역류합니다.

구체적인 경로는 3.3V가 XT60 전원을 끌어오는 Buck 칩 내부 MOS의 바디 다이오드를 거치고, 다시 전원 제어 MOS(Q4)의 바디 다이오드를 거쳐 XT60 단자로 역류하는 것입니다. 따라서 XT60에 아무 입력도 연결하지 않아도 측정 화면에 약 2.45V(3.3V에서 두 단계 바디 다이오드 전압 강하를 뺀 값)가 표시됩니다.

역류 경로 설명

변경량이 작은 순서대로 세 가지 해결책:

  1. 회로를 바꾸지 않고 XT60 전원도 사용하지 않기: XT60 전원용 Buck 부분을 아예 납땜하지 않고 배터리 전원만 사용합니다.
  2. 부품 하나만 변경: Q4 뒤에 백투백 MOS를 하나 더 직렬로 넣어 바디 다이오드 경로를 끊습니다. 이 부분이 다음 버전에서 바꿀 예정입니다.
  3. 배터리 / USB를 아예 사용하지 않기: 스위치를 XT60 전원 위치로 두면 역류 경로가 없어지지만, XT60을 연결해야만 전원이 켜집니다.

그 외의 알려진 제한 사항:

  • XT60 전원으로 전환하면 입력이 최소 5V 이상이어야 시작됩니다.
  • 전류 |I| < 2mA는 0으로 처리되며, 이는 설계된 동작이지 고장이 아닙니다.
  • 웹 콘솔에는 OTA 업로드 입구가 없어 업그레이드하려면 케이블을 연결해야 합니다.
  • 측정 결과는 DC 기준의 블록 평균이며 실효값(RMS)이 아닙니다. 교류나 리플을 측정하려면 별도로 만들어야 합니다.

회로도

전원 관리 부분

전압 샘플링 부분

전류 샘플링 부분

메인 컨트롤러와 디스플레이 부분

전체 회로도 PDF(상단 기판 V1 / V2, 하단 기판)와 LCEDA(立创 EDA) 프로젝트는 저장소의 01-Hardware/ 아래에 있습니다.

자료 다운로드 주소

제공 자료에는 **LCEDA(立创 EDA) 프로젝트 파일, 상단/하단 기판 회로도 PDF, Gerber 제작 파일, 스텐실 파일, BOM, 부품 위치도, 인터랙티브 납땜 보조 HTML, SolidWorks 케이스 원본 파일, 3MF 프린팅 파일, 모든 부품 데이터시트, ESP-IDF 펌웨어 전체 프로젝트(아키텍처 문서, 플래싱 가이드, 핀 배치표, PC용 UI 시뮬레이터 포함)**이 있습니다.

저장소 디렉터리 구조:

XT60-Power-Meter/
├── 01-Hardware/                     하드웨어 설계
│   ├── 01-XT60功率计-立创EDA工程.epro2
│   ├── 02-上板原理图_V1.pdf / V2.pdf
│   └── 02-下板原理图.pdf
├── 02-Software/
│   └── XT60-Power-Meter-Firmware/   ESP-IDF 펌웨어 프로젝트
│       ├── main/                    부팅 및 태스크 오케스트레이션
│       ├── components/              드라이버 / 미들웨어 / 서비스
│       ├── docs/                    아키텍처, 플래싱, 핀 문서
│       └── tools/                   폰트 도구, UI 시뮬레이터
├── 03-Datasheet/                    부품 데이터시트와 화면 자료
├── 04-外壳设计/                     SolidWorks 원본 파일과 PCB 모델
├── 05-生产文件/
│   ├── 01-PCB/                      Gerber와 수동 납땜용 스텐실
│   ├── 02-贴片/                     BOM, 부품 위치도, 인터랙티브 납땜 보조
│   └── 03-外壳3D打印文件/           3MF 프린팅 파일
├── LICENSE                          하드웨어 CERN OHL-S v2
├── README.md
└── README.en.md

라이선스는 하드웨어(회로도, PCB, 케이스, 생산 파일)에 CERN OHL-S v2를 적용합니다. 강한 상호호혜 오픈소스 하드웨어 라이선스로, 파생 하드웨어도 같은 라이선스로 공개해야 합니다. 펌웨어는 MIT입니다. LVGL, esp_lvgl_port, Noto Sans SC 등 서드파티 컴포넌트는 각자의 원래 라이선스를 유지하며, 자세한 내용은 THIRD_PARTY.md에 있습니다.

면책 조항

  • 이 기기의 측정 결과는 계량 인증 근거로 사용할 수 없습니다.
  • 90V / ±75A 피크는 위험한 전압·전류이므로 배선, 납땜, 테스트 시 단락, 감전, 역접속을 방지하고, 대전류 테스트에는 적절한 굵기의 전선과 커넥터를 사용하세요.
  • 이 프로젝트의 하드웨어나 펌웨어 사용으로 발생한 직간접적 손실에 대해 작성자는 책임지지 않습니다.
  • 댓글 또는 Gitee Issue로 문제와 개선 제안을 남겨 주시면 환영합니다.

오픈소스 프로젝트 추천

추천 읽을거리