STM32 · Embedded · 05

ADC1·TIM1 250 Hz 동기 샘플링

ECG 코드 변형을 비교해 보니 핵심은 TIM1 update interrupt를 sample clock으로 쓰고 ADC1을 한 번 읽는 구조였다. 250 Hz 버전은 sample_index와 timestamp_us를 함께 보내며, 5-sample moving average 뒤에 filter를 적용한다.

NUCLEO-F411RE와 ECG PPG breadboard를 연결한 동기 샘플링 prototype

먼저 확인한 것

ECG 코드 변형을 비교해 보니 핵심은 TIM1 update interrupt를 sample clock으로 쓰고 ADC1을 한 번 읽는 구조였다. 250 Hz 버전은 sample_index와 timestamp_us를 함께 보내며, 5-sample moving average 뒤에 filter를 적용한다.

원본 구성

  • ADC는 12-bit 값으로 읽고 3.3/4095를 곱해 voltage로 바꾼다.
  • polling timeout과 UART 전송 시간이 sampling period를 넘지 않는지 따로 확인해야 한다.
  • 저장된 코드는 구조를 보여 주지만 timing jitter 측정 로그는 남아 있지 않다.

코드 흐름

#define ECG_FS_HZ 250U
sample_index++;
HAL_ADC_Start(&hadc1);
ADCValue = HAL_ADC_GetValue(&hadc1);
Smooth_ECG = total / numReadings;
timestamp_us = sample_index * 1000000ULL / ECG_FS_HZ;

핵심 용어

  1. TIM1 interrupt
  2. ADC1
  3. 250 Hz
  4. sample index

다시 볼 때의 순서

  1. TIM1 interrupt
  2. ADC1 → 250 Hz
  3. sample index

공식 문서

새로 확인한 원본은 실험 사진 22장, STM 사용법 40장, 3쪽 KiCad 회로도, ADC·UART 메모, HRV 모듈, PPG 코드 2종, ECG C 코드 변형 12개와 CubeIDE 프로젝트 압축본이다. 같은 SHA-256의 중복 코드와 ST·Arm vendor 파일은 별도 결과처럼 세지 않았다. 사진과 코드로 확인되는 구성까지만 적고 측정 성능은 새로 만들지 않았다.

논문 첫 페이지 미리보기