생체 감지 모듈을 사용하여 건강 및 피트니스 웨어러블 개발
DigiKey 북미 편집자 제공
2020-10-21
코로나19로 인해 건강에 대한 인식이 높아지면서 생체 감지 웨어러블에 대한 관심이 많아지고 있습니다. 이에 따라 더 작아진 폼 팩터에 비용은 더 낮고 배터리 수명은 더 늘어나며, 기능과 정확도가 향상되기를 바라는 사용자의 요구를 충족하는 효과적인 솔루션에 대한 수요가 지속적으로 증가하고 있습니다. 설계자에게 이는 빠듯한 시장 출시 기간과 예산을 충족하면서 해결해야 하는 지속적인 과제입니다. 다행히도 우수한 기능 통합, 더 포괄적인 설계 솔루션을 비롯한 생체 감지 장치가 발전하고 있습니다.
이 기사에서는 생체 센서 및 웨어러블의 추세와 설계자의 과제에 대해 살펴봅니다. 그런 다음 Maxim Integrated의 심박수 및 말초 산소 포화도(SpO2) 생체 센서 모듈을 소개하고 개발자가 해당 모듈을 활용하여 배터리 구동 모바일 제품의 빠듯한 전력 예산에 영향을 주지 않으면서 정확한 심박수와 기타 측정치를 제공할 수 있는 웨어러블을 효과적으로 구현하는 방법을 보여줍니다.
생체 감지를 위한 설계 요구 사항
심박수 모니터링이 다양한 소비자 웨어러블의 핵심 요구 사항이 되면서 SpO2 측정에 대한 관심이 계속해서 증가하고 있습니다. 건강 식이 요법을 최적화하려는 운동선수가 널리 사용하는 SpO2 측정은 특히, 코로나19와 관련한 호흡 기능 저하 자가 검진과 같은 응용 분야에서 사용이 확산되고 있습니다. 웨어러블 전자 장치에 익숙하고 건강에 대한 인식이 높은 사람들에게 적합한 솔루션을 제공해야 하는 개발자의 경우 비용, 전력, 폼 팩터, 무게 등 중요한 난관을 마주합니다.
이제 많은 생체 센서에 아날로그 프런트 엔드 서브 시스템이 통합되어 있으므로 개발자는 건강 및 피트니스 측정에 필요한 신호 체인 및 사후 처리 서브 시스템을 구축할 필요가 없지만, 웨어러블 장치를 위한 기능이 적절히 혼합되어 있는 고급 장치는 일부에 불과합니다. 따라서 그 정도로는 스마트워치, 피트니스 밴드, 실제 무선 이어버드를 비롯한 다른 주요 웨어러블 유형처럼 방해되지 않는 소형 생체 감지 웨어러블에 대한 사용자 기대치에 따른 설계 과제를 해결하지 못합니다.
개발자가 주요 웨어러블 유형에 하나 이상의 생체 감지 기능을 추가해야 하는 경우 설계 통합과 관련한 추가적인 과제가 발생할 수 있습니다. 모든 다른 유형의 모바일 배터리 구동 개인 전자 제품과 마찬가지로 소비자는 일반적으로 비용 및 기능만큼 배터리 수명도 중요하게 고려하여 제품을 선택하며, 아무리 작은 제품이라도 배터리 수명이 긴 제품을 요구합니다.
이러한 결합된 요구 사항을 충족하려는 개발자는 맞춤형 장치 설계를 위한 Maxim Integrated MAXM86146 생체 감지 모듈과 빠른 시제품 제작을 위한 MAXM86146 기반 MAXM86146EVSYS 평가 시스템을 선택할 수 있습니다.
드롭인 솔루션을 제공하는 생체 감지 모듈
4.5mm x 4.1mm x 0.88mm 38핀 패키지로 제공되는 Maxim Integrated MAXM86146 생체 감지 모듈은 건강 및 피트니스용 콤팩트 배터리 구동 웨어러블을 빠르게 개발하기 위해 특별히 고안된 드롭인 솔루션입니다. 긴 배터리 수명과 생체 감지 기능에 대한 요구 사항을 모두 충족하기 위해 모듈은 심박수와 SpO2를 빠르고 정확히 측정하면서 전력 소비를 최소화해야 합니다.
통합된 두 광 다이오드와 함께 이 모듈에는 Maxim Integrated MAX86141 이중 채널 광학 아날로그 프런트 엔드(AFE)와 Arm Cortex-M4 기반 마이크로 컨트롤러(Maxim Integrated MAX32660 Darwin 마이크로 컨트롤러의 생체 감지에 최적화된 버전)가 포함되어 있습니다(그림 1).
그림 1: Maxim Integrated MAX86146 생체 감지 모듈은 광학 AFE, 마이크로 컨트롤러 및 광 다이오드를 콤팩트 패키지로 통합합니다. (이미지 출처: Maxim Integrated)
25sps 속도에서 단 10μA만 소비하는 통합 MAX86141은 심박수와 SpO2를 측정하는 데 사용되는 여러 발광 다이오드(LED)를 제어하도록 고안된 포괄적인 광학 AFE 서브 시스템을 제공합니다. 광학 심박계는 일반적으로 광혈류측정(PPG)을 사용하여 각 심장 박동과 관련한 말초 혈액량 변화를 모니터링합니다. 이 측정에서 이러한 장치는 일반적으로 파장이 540nm인 녹색 조명을 사용합니다. 녹색 조명은 많은 다른 파장보다 조직에 깊게 침투하지 않으므로 혈액에 흡수된 후 더 적은 아티팩트를 발생합니다. 광학 산소 포화도 측정기는 빨간색 LED(일반적으로 660nm)와 적외선(IR) LED(일반적으로 940nm)를 모두 사용하여 헤모글로빈과 데옥시헤모글로빈 사이의 흡수율 차이를 측정합니다. 이 기술은 광학 SpO2 측정 방법을 기반으로 합니다(기성 부품을 사용하여 저가형 산소 포화도 측정기 설계 참조).
이러한 광학 측정을 수행하려는 개발자는 광 다이오드 신호 취득이 적절한 LED의 조명 출력 펄스와 정밀하게 동기화되는지 확인해야 합니다. MAXM86146 모듈의 통합 MAX86141 AFE는 LED 제어와 광 다이오드 신호 취득을 위한 별도 신호 체인을 제공합니다. 출력 측에서 AFE는 심박수 측정을 위해 펄스를 녹색 LED로 전송하는 세 개의 고전류 저잡음 LED 구동기와 SpO2 측정을 위한 빨간색 LED와 IR LED를 포함합니다. 입력 측에서 AFE는 각각 전용 19비트 아날로그 디지털 컨버터(ADC)가 있는 두 개의 광 다이오드 신호 취득 채널을 제공합니다. 이 두 판독 채널은 별도로 작동되거나, 더 큰 방사 면적을 제공하기 위해 함께 사용될 수 있습니다.
AFE LED 및 광 다이오드 신호 체인을 제어하는, 기판 실장 마이크로 컨트롤러에서 실행 중인 펌웨어는 AFE 설정을 조정하여 신호 대 잡음비(SNR)를 최대화하고 전력 소비를 최소화합니다. 주변광이 변경되면 통합 MAX86141에 내장된 주변광 보정(ALC) 회로망이 조명 조건의 점진적인 변화에 대응합니다. 하지만 사용자가 음지와 밝은 태양광 영역 사이를 빠르게 통과하는 경우처럼 주변광이 빠르게 변경되어 ALC 오류가 발생할 수 있습니다. 이러한 일반적인 상황을 고려하여 MAX86141에는 피켓 펜스 감지 및 교체 기능이 포함되어 있습니다. 장치는 주변 측정이 이전 샘플과 큰 차이가 날 경우 범위를 벗어난 개별 주변광 데이터 샘플을 주변광 수준의 상대적으로 느린 변화에 적합한 외삽된 값으로 교체합니다.
모듈의 마이크로 컨트롤러는 펌웨어를 사용하여 AFE 작동을 관리하므로, 정확한 HR 및 SpO2 측정을 수행하는 데 필요한 세부적인 작동은 개발자에게 투명하게 드러납니다. 모듈에서는 펌웨어 설정을 사용하여 이러한 측정을 자동으로 수행하며, 시스템 호스트 프로세서에서 모듈의 I2C 직렬 인터페이스를 통해 액세스할 수 있도록 FIFO(First-in First-out) 버퍼에서 원시 데이터와 계산된 결과를 정렬합니다.
MAX86146에서 웨어러블 하드웨어 설계를 간소화하는 방법
포괄적인 통합 기능을 지원하는 MAX86146 생체 감지 모듈은 상대적으로 적은 수의 부품으로 정확한 심박수 및 SpO2 측정을 제공하는 설계를 완성할 수 있습니다. HR과 SpO2를 동시에 측정하기 위해 MAX86146을 외부 저잡음 아날로그 멀티플렉서(예: 개별 녹색, 빨간색 및 IR LED에 연결된 Maxim Integrated MAX14689)와 통합할 수 있습니다(그림 2).
그림 2: Maxim Integrated MAX86146 생체 감지 모듈에서 심박수와 SpO2를 동시에 측정하려면 적합한 LED, 아날로그 멀티플렉서(왼쪽 MAX14689), 가속도계 이외에 동작 감지를 위한 몇 가지 추가 부품이 필요합니다. (이미지 출처: Maxim Integrated)
또한 MAXM86146은 3축 가속도계의 동작 데이터를 사용하여 심박수 측정 중에 사용자 동작을 정정하고, SpO2 측정 중에 사용자가 잠시 동안 정지 상태로 유지하는지 감지하도록 설계되었습니다. 개발자는 펌웨어 지원 가속도계를 MAXM86146의 SPI 포트에 직접 연결하거나 범용 가속도계를 호스트 프로세서에 연결할 수 있습니다.
호스트 연결 옵션을 활용하면 장치를 더욱 유연하게 선택할 수 있습니다. 따라서 Memsic MC3630과 같은 범용 3축 가속도계만으로 25sps를 실현할 수 있습니다. 또한 개발자는 가속도계 데이터가 심박수 데이터 샘플링과 동기화되는지 확인해야 합니다. 이를 위해 기판 실장 마이크로 컨트롤러는 필요에 따라 가속도계 샘플을 내부적으로 데시메이션하거나 보간하여 HR 데이터와 가속도계 데이터 사이의 드리프트를 보정합니다.
빠른 MAXM86146 평가 시작 및 신속한 시제품 제작
MAXM86146은 시스템 하드웨어 설계를 간소화하지만, MAXM86146을 평가하거나 응용 제품의 시제품을 빠르게 제작하려는 개발자는 하드웨어 설계를 건너뛰고 MAXM86146EVSYS 평가 시스템을 사용하여 장치 작동을 즉시 시작할 수 있습니다. USB 또는 3.7V 리튬 폴리머(LiPo) 배터리로 구동되는 MAXM86146EVSYS는 연성 케이블을 통해 Bluetooth 저에너지(BLE) 지원 MAXSensorBLE 기본 데이터 취득 기판에 연결되는 MAXM86146-based MAXM86146_OSB 광학 센서 기판(OSB)으로 구성됩니다(그림 3).
그림 3: Maxim Integrated MAXM86146EVSYS 평가 기판에는 BLE 지원 기본 프로세서 기판과 연성 케이블 연결 MAXM86146 기반 센서 기판을 포함합니다. (이미지 출처: Maxim Integrated)
MAXSensorBLE 기판은 Maxim Integrated MAX32620 호스트 마이크로 컨트롤러와 Nordic Semiconductor의 NRF52832 Bluetooth 마이크로 컨트롤러를 통합합니다. 실제로 MAXSensorBLE 기판은 BLE 지원 웨어러블 설계를 위한 완벽한 참조 설계 역할을 합니다. 능동 소자 부품과 수동 소자 부품을 지원하는 외에도 MAXSensorBLE 기판 설계는 웨어러블의 배터리 수명을 연장하기 위해 특별히 고안된 Maxim Integrated MAX20303 전력 관리 집적 회로(PMIC)와 완벽하게 연동됩니다.
MAXM86146_OSB 광학 센서 기판은 HR 측정과 SpO2 측정을 동시에 수행하는 데 필요한 MAX14689 아날로그 스위치 및 전체 LED 세트와 MAXM86146 생체 감지 모듈을 결합합니다. 또한 이 기판은 MAXM86146 모듈에 직접 연결되는 펌웨어 지원 3축 가속도계를 통합합니다.
MAXM86146EVSYS 평가 시스템을 사용하여 MAXM86146 모듈을 평가하기 위해 개발자는 USB-C 또는 LiPo 배터리를 사용하여 시스템을 구동하고, 필요에 따라 BLE USB 동글을 Maxim Integrated MAXM86146 EV System Software 애플리케이션을 실행 중인 개인용 컴퓨터에 연결합니다. 개발자가 MAXM86146 설정을 쉽게 수정하고 데이터 도표로 제공되는 결과를 즉시 관찰할 수 있도록 이 Windows 애플리케이션은 그래픽 사용자 인터페이스(GUI)를 제공합니다. GUI는 MAXM86146 레지스터에 대한 액세스 권한뿐 아니라 다양한 작동 모드와 구성을 설정할 수 있는 직관적인 메뉴를 제공합니다. 예를 들어 개발자는 GUI 모드 탭을 사용하여 다양한 LED 시퀀스를 설정하고(그림 4, 상단), GUI 구성 탭을 사용하여 HR 및 SpO2 측정을 위한 LED 시퀀스를 적용할 수 있습니다(그림 4, 하단).
그림 4: Maxim Integrated의 MAXM86146 EV System Software GUI를 사용하면 개발자가 LED 시퀀스(상단)와 같은 다양한 작동 모드를 정의하여 MAXM86146 성능을 평가한 후 심박수 및 SpO2 측정에 해당 시퀀스(하단)를 사용할 수 있습니다. (이미지 출처: Maxim Integrated)
맞춤형 소프트웨어 개발을 위해 Maxim Integrated는 MAXM86146 소프트웨어 패키지용 웨어러블 HRM 및 SpO2 알고리즘을 제공합니다. MAXM86146은 통합된 마이크로 컨트롤러 펌웨어를 사용하여 심박수 및 SpO2 측정을 제공하므로 장치에서 데이터를 추출하는 절차가 간단합니다. Maxim Integrated 소프트웨어 패키지는 장치를 초기화하고 MAXM86146 FIFO에서 데이터를 판독하여 개별 데이터 항목을 구문 분석하는 절차를 시연합니다(목록 1).
복사
typedef struct{
uint32_t green_led_cnt;
uint32_t ir_led_cnt;
uint32_t red_led_cnt;
uint32_t hr;
uint32_t hr_conf;
uint32_t spo2;
uint32_t spo2_conf;
uint32_t scd_state;
} mes_repor_t;
typedef struct {
uint32_t led1;
uint32_t led2;
uint32_t led3;
uint32_t led4;
uint32_t led5;
uint32_t led6;
} max8614x_mode1_data;
typedef struct {
int16_t x;
int16_t y;
int16_t z;
} accel_mode1_data;
typedef struct __attribute__((packed)){
uint8_t current_operating_mode; // mode 1 & 2
// WHRM data
uint16_t hr; // mode 1 & 2
uint8_t hr_conf; // mode 1 & 2
uint16_t rr; // mode 1 & 2
uint8_t rr_conf; // mode 1 & 2
uint8_t activity_class; // mode 1 & 2
// WSPO2 data
uint16_t r; // mode 1 & 2
uint8_t spo2_conf; // mode 1 & 2
uint16_t spo2; // mode 1 & 2
uint8_t percentComplete; // mode 1 & 2
uint8_t lowSignalQualityFlag; // mode 1 & 2
uint8_t motionFlag; // mode 1 & 2
uint8_t lowPiFlag; // mode 1 & 2
uint8_t unreliableRFlag; // mode 1 & 2
uint8_t spo2State; // mode 1 & 2
uint8_t scd_contact_state;
} whrm_wspo2_suite_mode1_data;
void execute_data_poll( mes_repor_t* mesOutput ) {
[deleted lines of code]
status = read_fifo_data(num_samples, WHRMWSPO2_FRAME_SIZE, &databuf[0], sizeof(databuf));
if(status == SS_SUCCESS && num_samples > 0 && num_samples < MAX_WHRMWSPO2_SAMPLE_COUNT){
max8614x_mode1_data ppgDataSample;
accel_mode1_data accelDataSamp;
whrm_wspo2_suite_mode1_data algoDataSamp;
int sampleIdx = 0;
int ptr =0;
while( sampleIdx < num_samples ) {
ppgDataSample.led1 = (databuf[ptr+1] << 16) + (databuf[ptr+2] << 8) + (databuf[ptr+3] << 0);
ppgDataSample.led2 = (databuf[ptr+4] << 16) + (databuf[ptr+5] << 8) + (databuf[ptr+6] << 0);
ppgDataSample.led3 = (databuf[ptr+7] << 16) + (databuf[ptr+8] << 8) + (databuf[ptr+9] << 0);
ppgDataSample.led4 = (databuf[ptr+10] << 16)+ (databuf[ptr+11] << 8)+ (databuf[ptr+12] << 0);
ppgDataSample.led5 = (databuf[ptr+13] << 16)+ (databuf[ptr+14] << 8)+ (databuf[ptr+15] << 0);
ppgDataSample.led6 = (databuf[ptr+16] << 16)+ (databuf[ptr+17] << 8)+ (databuf[ptr+18] << 0);
accelDataSamp.x = (databuf[ptr+19] << 8) + (databuf[ptr+20] << 0);
accelDataSamp.y = (databuf[ptr+21] << 8) + (databuf[ptr+22] << 0);
accelDataSamp.z = (databuf[ptr+23] << 8) + (databuf[ptr+24] << 0);
algoDataSamp.current_operating_mode= (databuf[ptr+25]);
algoDataSamp.hr = (databuf[ptr+26] << 8) + (databuf[ptr+27] << 0);
algoDataSamp.hr_conf = (databuf[ptr+28]);
algoDataSamp.rr = (databuf[ptr+29] << 8) + (databuf[ptr+30] << 0);
algoDataSamp.rr_conf = (databuf[ptr+31]);
algoDataSamp.activity_class = (databuf[ptr+32]);
algoDataSamp.r = (databuf[ptr+33] << 8) + (databuf[ptr+34] << 0);
algoDataSamp.spo2_conf = (databuf[ptr+35]);
algoDataSamp.spo2 = (databuf[ptr+36] << 8) + (databuf[ptr+37] << 0);
algoDataSamp.percentComplete = (databuf[ptr+38]);
algoDataSamp.lowSignalQualityFlag = (databuf[ptr+39]);
algoDataSamp.motionFlag = (databuf[ptr+40]);
algoDataSamp.lowPiFlag = (databuf[ptr+41]);
algoDataSamp.unreliableRFlag = (databuf[ptr+42]);
algoDataSamp.spo2State = (databuf[ptr+43]);
algoDataSamp.scd_contact_state = (databuf[ptr+44]);
mesOutput->green_led_cnt = ppgDataSample.led1;
mesOutput->ir_led_cnt = ppgDataSample.led2;
mesOutput->red_led_cnt = ppgDataSample.led3;
mesOutput->hr = algoDataSamp.hr / 10;
mesOutput->hr_conf = algoDataSamp.hr_conf;
mesOutput->spo2 = algoDataSamp.spo2 / 10;
mesOutput->spo2_conf = algoDataSamp.spo2_conf;
mesOutput->scd_state = algoDataSamp.scd_contact_state;
/* printf(" greenCnt= %d , irCnt= %d , redCnt = %d ,"
" hr= %d , hr_conf= %d , spo2= %d , spo2_conf= %d , skin_contact = %d \r\n"
, mesOutput->green_led_cnt , mesOutput->ir_led_cnt , mesOutput->red_led_cnt
, mesOutput->hr , mesOutput->hr_conf , mesOutput->spo2 , mesOutput->spo2_conf , mesOutput->scd_state);
*/
[deleted lines of code]
목록 1: Maxim Integrated의 소프트웨어 패키지 코드 조각은 생체 감지 모듈에서 측정 데이터와 기타 데이터를 추출하는 기본 기술을 시연합니다. (코드 출처: Maxim Integrated)
목록 1은 C 언어 루틴 execute_data_poll()을 사용하여 MAXM86146에서 많은 심박수 및 SpO2 측정값을 반환하는 방법을 보여줍니다. 이 코드는 장치의 FIFO를 로컬 버퍼 databuf로 읽은 다음 databuf의 내용을 일부 다른 C 언어 소프트웨어 구조 인스턴스로 매핑합니다. 구성 데이터와 다른 메타데이터를 해당 구조 인스턴스에 저장하는 외에도 이 루틴은 mes_repor_t structure의 인스턴스인 mesOutput에 심박수 및 SpO2 측정을 제공합니다. 개발자는 최종 printf 문의 주석 처리를 간단히 제거하여 콘솔에 결과를 표시할 수 있습니다.
건강 및 피트니스 웨어러블을 구현하기 위해 MAXM86146 소프트웨어와 하드웨어는 개발을 획기적으로 간소화합니다. 하지만 장치에 대해 US 식품 의약국(FDA)의 승인을 받기 위해 개발자는 적절한 테스트를 수행하여 최종 제품의 FDA 레벨 성능을 확인해야 합니다. Maxim Integrated의 MAXM86146과 내장된 알고리즘은 FDA급 측정 성능을 제공하지만, 개발자는 센서뿐 아니라 전체 시스템이 FDA 성능 요구 사항을 충족하는지 확인해야 합니다.
결론
정확한 심박수 및 SpO2 측정을 제공할 수 있는 웨어러블에 대한 관심이 지속적으로 증가함에 따라 최근에 코로나19의 증상을 모니터링하는 데 있어서 SpO2 데이터의 역할이 커졌습니다. 특수 생체 센서를 통해 이러한 측정을 제공할 수 있지만, 다기능 콤팩트 웨어러블에서 배터리 수명을 연장할 수 있는 소형 장치에 대한 수요를 충족할 수 있는 기존 솔루션은 일부에 불과합니다. 앞서 살펴본 바와 같이 빠른 시제품 제작 키트에 의해 지원되는 Maxim Integrated의 소형 생체 감지 모듈은 최소한의 전력 소비로 FDA급 측정을 제공하여 효과적인 대안을 제시합니다.
면책 조항: 이 웹 사이트에서 여러 작성자 및/또는 포럼 참가자가 명시한 의견, 생각 및 견해는 DigiKey의 의견, 생각 및 견해 또는 DigiKey의 공식 정책과 관련이 없습니다.


