Piezo power off 타이밍 조정

- 기존: 커맨드 핸들러에서 응답 전송 후 off
- 변경: piezo sweep 직후 off
This commit is contained in:
2026-09-04 15:59:25 +09:00
parent a74cf5110f
commit 060171430e
2 changed files with 22 additions and 12 deletions
+3 -3
View File
@@ -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);
+19 -9
View File
@@ -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;
}