diff --git a/src/command/handlers/cmd_piezo.c b/src/command/handlers/cmd_piezo.c index 6fdc2fe..ac769ba 100644 --- a/src/command/handlers/cmd_piezo.c +++ b/src/command/handlers/cmd_piezo.c @@ -98,7 +98,7 @@ int cmd_mbb(const uint8_t *data, uint8_t data_len) cmd_send_response_u16("raa:", (uint16_t)status); // 최종 상태 raa: 전송 DBG_PRINTF("[CMD] mbb status=0x%04X\r\n", status); - piezo_power_off(); + //piezo_power_off(); processing = false; return 1; } @@ -187,7 +187,7 @@ int cmd_mtb(const uint8_t *data, uint8_t data_len) DBG_PRINTF("[CMD] mtb status=0x%04X rim=%u\r\n", status, rim_count); - piezo_power_off(); + //piezo_power_off(); processing = false; return 1; } @@ -278,7 +278,7 @@ int cmd_maa(const uint8_t *data, uint8_t data_len) } } - piezo_power_off(); + //piezo_power_off(); cmd_send_response_u16("raa:", (uint16_t)status); // 최종 상태 raa: 전송 DBG_PRINTF("[CMD] maa status=0x%04X\r\n", status); diff --git a/src/measurement/piezo_measure.c b/src/measurement/piezo_measure.c index 057d209..4edd5fa 100644 --- a/src/measurement/piezo_measure.c +++ b/src/measurement/piezo_measure.c @@ -39,10 +39,10 @@ #define PIEZO_AVG_INTER_BURST_GAP_US 500 /* real capture 전에 같은 채널에서 버스트+ADC capture를 버리는 횟수(dummy) */ -#define PIEZO_DUMMY_CAPTURE_COUNT 1 +#define PIEZO_DUMMY_CAPTURE_COUNT 3 /* 채널 0 시작 전 안정을 위한 추가 딜레이 */ -#define PIEZO_CH0_WARMUP_TO_REAL_SETTLE_US 2000 +#define PIEZO_CH0_WARMUP_TO_REAL_SETTLE_US 500 /* 6채널 sweep 결과 (각 채널의 평균 완료 후 최종만 저장) */ static uint16_t piezo_channels[PIEZO_NUM_CHANNELS][PIEZO_MEASURE_MAX_SAMPLES]; @@ -215,6 +215,7 @@ int piezo_measure_sweep(void) if (err) { DBG_ERR("[PIEZO] mux fail ch=%d err=%d\r\n", ch, err); + piezo_power_off(); return ECHO_STATUS_MUX; } @@ -225,6 +226,7 @@ int piezo_measure_sweep(void) if (err) { DBG_ERR("[ECHO] dummy read fail ch=%d err=%d\r\n", ch, err); + piezo_power_off(); return ECHO_STATUS_CAPTURE; } @@ -232,15 +234,19 @@ int piezo_measure_sweep(void) { piezo_power_on(); k_msleep(PIEZO_POWER_STABILIZE_MS); - k_busy_wait(PIEZO_AVG_INTER_BURST_GAP_US); - piezo_burst_sw_freq(freq, cycles); - k_busy_wait(capture_delay_us); - err = echo_adc_capture(echo_capture, samples); - if (err) + for (uint8_t dummy = 0; dummy < PIEZO_DUMMY_CAPTURE_COUNT; dummy++) { - DBG_ERR("[ECHO] dummy capture fail ch=%d err=%d\r\n", ch, err); - return ECHO_STATUS_CAPTURE; + k_busy_wait(PIEZO_AVG_INTER_BURST_GAP_US); + piezo_burst_sw_freq(freq, cycles); + k_busy_wait(capture_delay_us); + err = echo_adc_capture(echo_capture, samples); + if (err) + { + DBG_ERR("[ECHO] dummy capture fail ch=%d err=%d\r\n", ch, err); + piezo_power_off(); + return ECHO_STATUS_CAPTURE; + } } // 마지막 dummy capture와 첫 real capture 사이에도 같은 회복 시간 + 추가 안정화 @@ -268,6 +274,7 @@ int piezo_measure_sweep(void) if (err) { DBG_ERR("[ECHO] capture fail ch=%d avg=%d err=%d\r\n", ch, a, err); + piezo_power_off(); return ECHO_STATUS_CAPTURE; } @@ -287,6 +294,9 @@ int piezo_measure_sweep(void) //DBG_PRINTF("[SWEEP] ch=%d done\r\n", ch); } + // 6채널 ADC capture가 모두 끝난 직후 전원 off (BLE 전송 전에 끊기) + piezo_power_off(); + //DBG_PRINTF("[SWEEP] done\r\n"); return ECHO_STATUS_OK; }