# VB0HW0100 — Firmware Dev. 버전 개발 사양서 ## 1. 시스템 개요 ### 1-1. 보드 기능 초음파 방광 모니터링을 위한 웨어러블 디바이스. 6채널 Piezo 트랜스듀서를 순차 구동하여 A-mode 초음파 측정을 수행하고, BLE를 통해 데이터를 전송한다. Dev. 버전은 모든 명령이 앱에서 내려지도록 개발. ### 1-2. 기능 블록 구분 | 블록 | 명칭 | 주요 IC | 역할 | |------|------|---------|------| | 제어부 | Control | nRF52840 (U26) | MCU, BLE, 전체 제어 | | | | W25Q32 (U16) | Flash Memory (데이터 저장) | | | | ICM-42670 (U10) | IMU 센서 (6축) | | TX | Transmit | MD1822 (U27) | MOSFET Driver | | | | TC7920 (U30) | MOSFET (고전압 스위칭) | | | | MAX14778 (U31) | 8채널 MUX (채널 선택) | | | | Misc | TMP235 (U22) | 온도 센서 | | RX | Receive | MD0100 (U34) | T/R 스위치 (수신 보호) | | | | OPA2836 (U2) | 2단 수신 증폭기 | | | | ADL5513 (U23) | 로그 디텍터 (AGC) | | | | ADC121S051 (U37) | 12비트 SPI ADC | | 전원 | Power | MIC5528 (U5) | LDO → +3.3V_M (제어부) | | | | MIC5528 (U42) | LDO → +3.3V_PZT_TX (TX) | | | | MIC5528 (U41) | LDO → +3.3V_PZT_RX (RX) | | | | LT3463 (U32) | DC-DC → ±25V (펄서 전원) | | | | MCP1804 (U33) | LDO → +10V | | | | LM27762 (U38) | Charge Pump → ±2.75V (Op-Amp 전원) | | | | MCP73838 (U3) | 배터리 충전 IC | ### 1-3. 신호 흐름 ``` [TX 경로] nRF52840 → MD1822 (Driver) → TC7920 (MOSFET) → MAX14778 (MUX) → Piezo (6ch 중 1개) [RX 경로] Piezo (6ch 중 1개) → MAX14778 (MUX) → MD0100 (T/R 보호) → OPA2836 (2단 증폭) → ADL5513 (로그 디텍터) → ADC121S051 → nRF52840 ``` --- ## 2. 전원 시퀀싱 ### 2-1. 전원 도메인 | 도메인 | 전원넷 | LDO | Enable 신호 | 공급 대상 | |--------|--------|-----|-------------|-----------| | 제어부 | +3.3V_M | U5 (MIC5528) | PWR_MCU_EN | nRF52840, W25Q32, ICM-42670 | | TX | +3.3V_PZT_TX | U42 (MIC5528) | PZT_PWR_EN | 펄서 관련 회로 (MD1822, TC7920 등) | | RX | +3.3V_PZT_RX | U41 (MIC5528) | PZT_PWR_EN | 수신 회로 (OPA2836, ADC121S051 등) | - TX와 RX는 **동일한 PZT_PWR_EN** 신호로 동시에 ON/OFF ### 2-2. 전원 켜기 (Power ON) 1. 사용자가 **SW2**를 누름 2. PWR_MCU_EN = **High** → U5 활성화 → +3.3V_M 출력 3. nRF52840 부팅 시작 4. MCU가 SW2 눌림 상태를 확인하며 **2초간** 유지 여부 판단 5. 조건 충족 시 MCU가 **PWR_HOLD = High** 출력 → 자기유지 (Self-Latch) 6. 이후 SW2를 놓아도 전원 유지됨 ### 2-3. 전원 끄기 (Power OFF) 1. MCU는 **BUTTON_CHECK** 핀으로 SW2 상태를 상시 감시 2. SW2가 **3초간** 눌림 유지 감지 3. MCU가 **PWR_HOLD = Low** 출력 4. U5 이네이블 해제 → +3.3V_M 차단 → 전체 전원 OFF ### 2-4. 동작 모드 | 모드 | 제어부 (+3.3V_M) | TX (+3.3V_PZT_TX) | RX (+3.3V_PZT_RX) | 설명 | |------|:-:|:-:|:-:|------| | **Sleep Mode** | ON | OFF | OFF | 모든 IC 저전력 모드 동작, MCU BLE 유지, 명령 대기 | | **Active Mode** | ON | ON | ON | 초음파 측정 가능 상태 | - Sleep → Active: MCU가 **PZT_PWR_EN = High** - Active → Sleep: MCU가 **PZT_PWR_EN = Low** - 기본 상태는 항상 **Sleep Mode** - W25Q32와 ICM-42670는 초기설정을 **Deep Power-Down** 모드로 세팅 - 모든 측정 후에는 항상 **Sleep Mode**로 복귀 --- ## 3. 측정 명령 ### 3-1. 측정 명령 종류 | 측정 명령 | 측정 대상 | 필요 모드 | 비고 | |-----------|-----------|:-:|------| | 배터리 전압 측정 | ADC_BAT | Sleep | +3.3V_M 도메인, Active 전환 불필요 | | IMU 측정 | ICM-42670 (I2C) | Sleep | +3.3V_M 도메인, Active 전환 불필요 | | 온도 측정 | TMP235 (ADC_TEMP) | **Active** | TX/RX 전원 필요 | | 초음파 측정 | Piezo 6ch | **Active** | TX/RX 전원 필요 | | 모두 측정 | 전체 | **Active** | TX/RX 전원 필요 | - ### 3-2. 명령별 동작 흐름 **Sleep Mode에서 처리 (Active 전환 불필요)** ``` 배터리 측정 명령 → 동작모드 전환 → ADC_BAT 읽기 → BLE 전송 → Deep Power-Down 모드 전환 IMU 측정 명령 → 동작모드 전환 → I2C로 ICM-42670 읽기 → BLE 전송 → Deep Power-Down 모드 또는 필요 모드 전환 ``` **Active Mode 필요** ``` 온도 측정 명령 → Active 진입 → ADC_TEMP 읽기 → BLE 전송 → Sleep 복귀 초음파 측정 명령 → Active 진입 → 6ch 스캔 → BLE 전송 → Sleep 복귀 모두 측정 명령 → Active 진입 → 배터리 + IMU + 온도 + 초음파 → BLE 전송 → Sleep 복귀 ``` --- ## 4. Piezo 초음파 측정 ### 4-1. 측정 파라미터 | 파라미터 | 범위 | 설명 | |----------|------|------| | Frequency | 1.8 / 1.9 / 2.0 / 2.1 / 2.2 MHz | 송신 펄스 주파수 | | Cycle | 3 ~ 7 | 송신 펄스 사이클 수 | | 평균화 수 (Avg) | 1 ~ 10 | 채널당 반복 측정 횟수 | | 측정 Channel 개수 (N) | 1 ~ 6 | 측정 대상 채널 수 | | 대기 시간 (Delay) | 0~30 (default: 10) | TX 펄수 출력 후 ADC 시작 시까지 대기 시간 (μs) | | 측정 샘플 수 (Num_samples) | 80 ~ 140 | 측정 ADC 샘플 개수 | ### 4-2. 채널 정의 - 총 **6채널**: CH0, CH1, CH2, CH3, CH4, CH5 - Channel 개수 = N이면 **CH0 ~ CH(N-1)** 을 순차 측정 - 예: N=4 → CH0, CH1, CH2, CH3만 측정 ### 4-3. 평균화 동작 각 채널별로 평균화 수(Avg)만큼 반복 측정한 후, 평균값을 해당 채널의 최종 측정값으로 사용한다. 예: Avg=5, N=3인 경우 ``` CH0: 측정①②③④⑤ → 평균 → CH0 최종값 CH1: 측정①②③④⑤ → 평균 → CH1 최종값 CH2: 측정①②③④⑤ → 평균 → CH2 최종값 ``` ### 4-4. TX 송신 절차 1. **MAX14778 (MUX)** 채널 선택 (해당 Piezo 연결) 2. **1.3ms 대기** (MAX14778 채널 스위칭 안정화 시간) 3. **PZT_PE = High** (펄서 활성화) 4. **MD1822**에 설정된 Frequency / Cycle로 펄스 신호 입력 5. **TC7920 (MOSFET)** 이 ±25V 펄스를 Piezo에 인가 | 관련 핀/넷 | 연결 | |------------|------| | PZT_CH_SEL0 | U26.A20 → U31 (MUX 채널 선택 비트 0) | | PZT_CH_SEL1 | U26.B11 → U31 (MUX 채널 선택 비트 1) | | PZT_EN_MUXA | U26.AC17 → U31 (MUX A 활성화) | | PZT_EN_MUXB | U26.AC19 → U31 (MUX B 활성화) | | PZT_PE | U26.AC21 → U27.15 (펄서 이네이블) | | PZT_P_PULSE | U26.P23 → R30 (48.7Ω) → U27 (양의 펄스) | | PZT_N_PULSE | U26.R24 → R40 (48.7Ω) → U27 (음의 펄스) | | PZT_DMP | U26.AD22 → R12 (48.7Ω) → U27 (댐핑 제어) | ### 4-5. RX 수신 절차 1. TX 펄스 출력 후 약 **10μs 대기** (근거리 잔향 회피) 2. 에코 신호 경로: Piezo → MAX14778 (MUX) → MD0100 (T/R 보호) → OPA2836 (2단 증폭, 총 ~40dB) → ADL5513 (로그 디텍터) 3. **ADC121S051**에서 약 **300μs 동안** ADC 값 연속 수집 4. MCU가 SPI를 통해 ADC 데이터 읽기 | 관련 핀/넷 | 연결 | |------------|------| | \PZT_SPI_CS | U26.AC15 → U37 (ADC 칩셀렉트) | | SPI_SCK | U26.AC9 (Flash와 공유) | | SPI_MISO | U26.AD10 (Flash와 공유) | ### 4-6. 단일 측정 타이밍 ``` |←── TX ──→|← 10μs →|←─────── 300μs RX 수집 ───────→| 펄스 출력 대기 ADC121S051 연속 샘플링 ``` ### 4-7. 전체 스캔 시퀀스 (예: Avg=5, N=3) ``` 측정 명령 수신 │ ▼ Active Mode 진입 (PZT_PWR_EN = High) │ ├─ CH0 선택 (MUX → A0) → 1.3ms 대기 │ ├─ 1회: TX → 10μs → 300μs RX │ ├─ 2회: TX → 10μs → 300μs RX │ ├─ 3회: TX → 10μs → 300μs RX │ ├─ 4회: TX → 10μs → 300μs RX │ └─ 5회: TX → 10μs → 300μs RX │ → CH0 평균값 산출 │ ├─ CH1 선택 (MUX → A1) → 1.3ms 대기 │ └─ 5회 반복 → CH1 평균값 산출 │ ├─ CH2 선택 (MUX → A2) → 1.3ms 대기 │ └─ 5회 반복 → CH2 평균값 산출 │ ▼ BLE 전송 │ ▼ Sleep Mode 복귀 (PZT_PWR_EN = Low) ``` --- ## 5. 참고 사항 ### 5-1. 배터리 전압 측정 - R28 (806kΩ) / R29 (2MΩ) 분압 → ADC_BAT - 분압비: 2M / (806k + 2M) ≈ 0.713 - nRF52840 내장 ADC로 읽기 ### 5-2. 충전 / 동작 상태 표시 LED | LED | 색상 | 연결 네트 | 상태 | 표시 | |-----|------|------|------|------| | LED1 | 오렌지 | U3.STAT1 | 충전중 | 상시 점등 | | LED2 | 블루 | U3.STAT2 | 충전 완료 | 상시 점등 | | LED3 | 초록 | LED_BLE | BLE Advertising | 1초 간격 점멸 | | LED3 | 초록 | LED_BLE | BLE 연결 후, Piezo 초음파 측정 후 복부 부착으로 감지된 경우 | 소등 | | LED3 | 초록 | LED_BLE | Piezo 초음파 측정 후 탈착으로 감지된 경우 | 점등 1초 소등 3초 반복 | | LED4 | 오렌지 | FUNCTION_LED | 기기 정렬모드에서 방광위치를 탐지하지 못하고 있을 경우 | 1초 간격 점멸 | | LED3 | 초록 | LED_BLE | 기기 정렬모드에서 방광위치를 탐지하고 있을 경우 | 점등 3초 소등 1초 반복 | - 기기 정렬 모드 : 빠른 주기로 초음파 측정 - 복부 부착, 탈착, 방광위치 탐지 유무는 앱에서 판단, LED 동작 모드 명령 송신 ### 5-3. 펄서 고전압 전원 | 전원 | 생성 IC | 전압 | 용도 | |------|---------|------|------| | PZT_+25V | LT3463 (U32) | +25V | 양의 펄스 전압 | | PZT_-25V | LT3463 (U32) | -25V | 음의 펄스 전압 | | PZT_+10V | MCP1804 (U33) | +10V | MD1822 공급 전원 | ### 5-4. 수신부 아날로그 전원 | 전원 | 생성 IC | 전압 | 용도 | |------|---------|------|------| | +2.75V_CP | LM27762 (U38) | +2.75V | OPA2836 양전원 | | -2.75V_CP | LM27762 (U38) | -2.75V | OPA2836 음전원 | ### 5-5. DFU 관련 주의사항 - nRF52840 DFU(Device Firmware Update) 부트로더에서 **P0.25를 사용하지 않도록** 수정 필요 - 기본 DFU 부트로더가 P0.25를 버튼 입력 등으로 사용할 수 있으므로, 커스텀 DFU 빌드 시 해당 핀 설정을 제거 또는 변경할 것 ### 5-6. MAX14778 채널 스위칭 지연 - MAX14778 채널 전환 후 신호 경로가 안정되기까지 **1.3ms delay** 필요 - MUX_SelectChannel() 호출 후 반드시 1.3ms 대기 후 TX 펄스를 출력할 것 - 동일 채널 내 반복 측정 시에는 추가 delay 불필요 (채널 전환 시에만 적용) --- ## 6. 전력 절감 방안 ### 6-1. Sleep Mode 소비 전류 줄이기 Sleep Mode에서 +3.3V_M에 상시 전원을 받는 IC는 3개이며, 각각에 대해 저전력 제어가 가능하다. **nRF52840 (MCU)** - BLE 연결 유지를 위해 System ON 슬립 상태를 사용 - 사용하지 않는 peripheral 클럭을 모두 비활성화 - RAM 리텐션 영역을 최소한으로 설정 - 위 조치를 통해 수 μA 수준까지 소비 전류 절감 가능 **W25Q32 (Flash Memory)** - 대기 상태에서도 수 μA 소모 - 측정/저장 시에만 깨우고, 평소에는 **Deep Power-Down** 모드 사용 - Deep Power-Down 진입: SPI로 0xB9 커맨드 전송 → 소비 전류 약 1μA 이하 - 복귀: 0xAB 커맨드 전송 후 수 μs 대기 - \SPI_CS_FLASH를 High로 유지하는 것만으로는 불충분하며, 명시적으로 커맨드를 전송해야 함 | 상태 | 소비 전류 (대략) | 진입 방법 | |------|:-:|------| | Normal Standby | ~수 μA | 기본 상태 | | Deep Power-Down | ~1μA 이하 | SPI 커맨드 0xB9 | **ICM-42670 (IMU Sensor)** - IMU를 상시 켜둘 필요 없음 - 측정 명령이 올 때만 Wake → 측정 → 다시 Sleep 시키는 방식 사용 - I2C로 슬립 모드 진입 또는 ODR(Output Data Rate)을 최소로 설정 | 상태 | 소비 전류 (대략) | 비고 | |------|:-:|------| | Full Rate 동작 | ~수백 μA | 가속도 + 자이로 활성 | | Low Power / Sleep | ~수 μA 이하 | 측정 시에만 Wake | ### 6-2. Active Mode 체류 시간 최소화 Active Mode에서는 TX/RX LDO(U42, U41)뿐 아니라 LT3463(±25V), MCP1804(+10V), LM27762(±2.75V) 등 고전압/아날로그 전원이 모두 켜지므로 소비 전류가 크게 증가한다. 따라서 Active Mode 체류 시간을 최소화하는 것이 전력 절감에 가장 효과적이다. **원칙: 측정 직전에 Active 진입, 측정 직후 즉시 Sleep 복귀** **전원 안정화 시간 관리** - PZT_PWR_EN = High 후 LDO/DC-DC 출력이 안정될 때까지 대기 필요 - 이 안정화 시간을 실측하여 필요 최소한으로 설정 - 불필요하게 긴 마진을 두지 않도록 주의 **스캔 시간 분석** | 항목 | 시간 | |------|------| | MUX 채널 스위칭 안정화 | 1.3ms (채널 전환 시 1회) | | 1회 측정 (TX + 10μs 대기 + 300μs RX) | ~310μs | | 1채널 (Avg=5) | 1.3ms + 5 × 310μs ≈ 2.85ms | | 6채널 전체 (Avg=5, N=6) | 6 × 2.85ms ≈ 17.1ms | - 6채널 전체 스캔 자체는 약 17ms 이내로 완료 가능 - 전원 안정화 대기 시간이 오히려 더 큰 비중을 차지할 수 있음 - 채널 전환 → TX → RX를 타이트하게 구성하여 불필요한 간격 제거 **측정 파라미터에 의한 시간 절감** | 파라미터 조절 | 효과 | |--------------|------| | Channel 개수 줄이기 | 측정 채널 수에 비례하여 Active 시간 단축 | | 평균화 수 줄이기 | 반복 횟수에 비례하여 Active 시간 단축 | | 간헐 측정 (측정 주기 늘리기) | Active 진입 빈도 자체를 줄임 |