Maxim Integrated 的 MAXM86146 生物傳感模塊采用 4.5 x 4.1 x 0.88 毫米 (mm) 38 引腳封裝,是一款直接替代式解決方案,旨在幫助加快開(kāi)發(fā)電池供電型緊湊型健康與保健可穿戴設(shè)備。為了同時(shí)滿足對(duì)延長(zhǎng)電池續(xù)航時(shí)間和生物傳感功能的需求,該模塊在將功耗降至最低的同時(shí),保持著對(duì)心率和 SpO2 的快速準(zhǔn)確測(cè)量。
除了兩個(gè)集成光電二極管,該模塊還包括 Maxim Integrated 的 MAX86141 雙通道光學(xué)模擬前端 (AFE) 和基于?Arm?Cortex-M4 的微控制器,后者是 Maxim Integrated 的 MAX32660 Darwin 微控制器的生物傳感優(yōu)化版(圖 1)。
圖 1:Maxim Integrated 的 MAX86146 生物傳感模塊在緊湊型封裝中集成了光學(xué) AFE、微控制器和光電二極管。(圖片來(lái)源:Maxim Integrated)
集成式 MAX86141 每秒采集 25 個(gè)樣本 (sps) 時(shí),功耗僅為 10 微安 (μA),它提供了一個(gè)綜合光學(xué) AFE 子系統(tǒng),旨在控制用于測(cè)量心率和 SpO2 的多個(gè)發(fā)光二極管。光學(xué)心率監(jiān)測(cè)器通常使用光電容積描記法 (PPG),可監(jiān)測(cè)與每次心臟搏動(dòng)相關(guān)的外周血容量變化。對(duì)于這種測(cè)量,這些設(shè)備通常使用波長(zhǎng)為 540 納米 (nm) 的綠光,這種光會(huì)被血液吸收,并且由于綠光穿透組織的深度比許多其他波長(zhǎng)要淺,所以產(chǎn)生的偽影比較少。光學(xué)脈搏血氧計(jì)使用紅色?LED(通常為 660 nm)和紅外?(IR) LED(通常為 940 nm)來(lái)測(cè)量血紅蛋白和脫氧血紅蛋白之間的吸收差異,這是光學(xué) SpO2 測(cè)量法的基礎(chǔ)技術(shù)(請(qǐng)參閱利用現(xiàn)成元器件設(shè)計(jì)低成本脈搏血氧儀)。
為了執(zhí)行這些光學(xué)測(cè)量,開(kāi)發(fā)人員必須確保光電二極管信號(hào)采集與來(lái)自相應(yīng) LED 的光輸出脈沖精確同步。MAXM86146 模塊集成的 MAX86141 AFE 提供了獨(dú)立的信號(hào)鏈,分別用于 LED 控制和光電二極管信號(hào)采集。在輸出端,AFE 包括三個(gè)大電流、低噪聲 LED 驅(qū)動(dòng)器,可將脈沖傳輸?shù)接糜谛穆蕼y(cè)量的綠色 LED 以及用于 SpO2 測(cè)量的紅色和紅外 LED。在輸入端,AFE 提供兩個(gè)光電二極管信號(hào)采集通道,每個(gè)通道都有一個(gè)專用的 19 位模數(shù)轉(zhuǎn)換器?(ADC)。這兩個(gè)讀出通道可以單獨(dú)操作,也可以組合使用,以提供更大的輻射面積。
為控制 AFE LED 和光電二極管信號(hào)鏈,板載微控制器上運(yùn)行的固件可調(diào)整 AFE 設(shè)置,以最大程度提高信噪比 (SNR) 并降低功耗。隨著環(huán)境光的變化,集成式 MAX86141 中內(nèi)置的環(huán)境光校正 (ALC)?電路會(huì)對(duì)光照條件的逐漸變化作出響應(yīng)。但是,在某些情況下,例如當(dāng)用戶在陰影區(qū)域和明亮的陽(yáng)光間快速穿過(guò)時(shí),環(huán)境光可能會(huì)快速變化,從而導(dǎo)致 ALC 故障??紤]到這種常見(jiàn)的情況,MAX86141 加入了柵欄檢測(cè)和替換功能。在這里,該器件會(huì)識(shí)別環(huán)境測(cè)量值與先前樣本的較大偏差,并將個(gè)別外圍環(huán)境光數(shù)據(jù)樣本替換為與環(huán)境水平相對(duì)緩慢變化相一致的外推值。
由于該模塊的微控制器使用其固件來(lái)管理 AFE 操作,因此執(zhí)行精確的心率和 SpO2 測(cè)量所需的詳細(xì)操作對(duì)于開(kāi)發(fā)人員來(lái)說(shuō)是透明的。該模塊使用固件設(shè)置自動(dòng)執(zhí)行這些測(cè)量,將原始數(shù)據(jù)和計(jì)算結(jié)果存儲(chǔ)在先進(jìn)先出 (FIFO) 緩沖區(qū)中,供系統(tǒng)主處理器通過(guò)模塊的?I2C?串行接口訪問(wèn)。
憑借廣泛的集成功能,MAX86146 生物傳感模塊只需要相對(duì)較少的額外元器件,就可以完成能夠提供精確心率和 SpO2 測(cè)量的設(shè)計(jì)。若要同步進(jìn)行心率和 SpO2 測(cè)量,MAX86146 可以與外部低噪聲模擬多路復(fù)用器集成,例如連接到分立式綠色、紅色和紅外 LED 的 Maxim Integrated MAX14689?開(kāi)關(guān)(圖 2)。
圖 2:要同步執(zhí)行心率和 SpO2 測(cè)量,除了合適的 LED、模擬多路復(fù)用器(MAX14689,左側(cè))和加速計(jì),Maxim Integrated 的 MAX86146 生物傳感模塊幾乎不需要其他元器件,就可以在測(cè)量的同時(shí)檢測(cè)運(yùn)動(dòng)。(圖片來(lái)源:Maxim Integrated)
此外,MAXM86146 還設(shè)計(jì)成使用來(lái)自三軸加速計(jì)的運(yùn)動(dòng)數(shù)據(jù),以在心率測(cè)量期間校正用戶的運(yùn)動(dòng),并在 SpO2 測(cè)量期間檢測(cè)運(yùn)動(dòng),后者需要用戶在測(cè)量的短時(shí)間內(nèi)保持靜止?fàn)顟B(tài)。在這里,開(kāi)發(fā)人員可以將固件支持的加速計(jì)直接連接到 MAXM86146 的 SPI?端口,或者將通用加速計(jì)連接到主機(jī)處理器。
主機(jī)連接選項(xiàng)為器件選擇提供了更大的靈活性,只需要一個(gè)通用三軸加速計(jì),例如 Memsic 的 MC3630,采樣速度可達(dá) 25 sps。盡管如此,開(kāi)發(fā)人員仍需要確保加速計(jì)數(shù)據(jù)與心率數(shù)據(jù)采樣同步。為此,板載微控制器根據(jù)需要對(duì)加速計(jì)樣本進(jìn)行內(nèi)部抽取或插補(bǔ),以補(bǔ)償心率數(shù)據(jù)和加速計(jì)數(shù)據(jù)之間的漂移。
雖然 MAXM86146 簡(jiǎn)化了系統(tǒng)硬件設(shè)計(jì),但對(duì)于希望評(píng)估 MAXM86146 或快速開(kāi)發(fā)其應(yīng)用原型的開(kāi)發(fā)人員來(lái)說(shuō),他們可以跳過(guò)硬件設(shè)計(jì),通過(guò) MAXM86146EVSYS 評(píng)估系統(tǒng)立即開(kāi)始使用該器件。MAXM86146EVSYS 通過(guò)?USB?或 3.7 V 鋰聚合物 (LiPo) 電池供電,包括一個(gè)基于 MAXM86146 的 MAXM86146_OSB?光學(xué)傳感器板 (OSB),并通過(guò)軟線連接到支持低功耗藍(lán)牙?(BLE) 的 MAXSensorBLE 主數(shù)據(jù)采集板(圖 3)。
圖 3:Maxim Integrated 的 MAXM86146EVSYS 評(píng)估系統(tǒng)包括支持 BLE 的主處理器板和基于 MAXM86146 的傳感器板(用軟線連接)。(圖片來(lái)源:Maxim Integrated)
MAXSensorBLE 板集成了 Maxim Integrated 的 MAX32620 主機(jī)微控制器,以及 Nordic Semiconductor 的 NRF52832 藍(lán)牙微控制器。實(shí)際上,MAXSensorBLE 板可作為支持 BLE 的可穿戴式設(shè)計(jì)的完整參考設(shè)計(jì)。除了支持有源和無(wú)源元器件外,MAXSensorBLE 板設(shè)計(jì)還配備 Maxim Integrated 的 MAX20303?電源管理集成電路?(PMIC),該電路專為延長(zhǎng)可穿戴設(shè)備的電池續(xù)航時(shí)間而設(shè)計(jì)。
MAXM86146_OSB 光學(xué)傳感器板將 MAXM86146 生物傳感模塊與 MAX14689 模擬開(kāi)關(guān)和同步執(zhí)行心率和 SpO2 測(cè)量所需的整套 LED 組合在一起。此外,該板集成了一個(gè)支持固件的三軸加速計(jì),直接連接到 MAXM86146 模塊。
要使用 MAXM86146EVSYS 評(píng)估系統(tǒng)評(píng)估 MAXM86146 模塊,開(kāi)發(fā)人員使用 USB-C 或 LiPo 電池為系統(tǒng)供電,并根據(jù)需要將 BLE USB 加密狗插入運(yùn)行 Maxim Integrated MAXM86146 EV 系統(tǒng)軟件應(yīng)用程序的個(gè)人計(jì)算機(jī)。該 Windows 應(yīng)用程序提供了一個(gè)圖形用戶界面 (GUI),讓開(kāi)發(fā)人員能夠輕松修改 MAXM86146 設(shè)置,并能立即觀察以數(shù)據(jù)曲線圖形式呈現(xiàn)的結(jié)果。除了提供對(duì) MAXM86146?寄存器的訪問(wèn),該 GUI 還提供了直觀菜單,以供設(shè)置不同的操作模式和配置。例如,開(kāi)發(fā)人員可以使用 GUI 模式選項(xiàng)卡設(shè)置不同的 LED 序列(圖 4,上圖),使用 GUI 配置選項(xiàng)卡將這些 LED 序列應(yīng)用于心率和 SpO2 測(cè)量(圖 4,下圖)。
圖 4:Maxim Integrated 的 MAXM86146 EV 系統(tǒng)軟件 GUI 允許開(kāi)發(fā)人員通過(guò)定義不同的操作模式來(lái)評(píng)估 MAXM86146 的性能,例如定義 LED 序列(上圖),然后將這些序列應(yīng)用于心率和 SpO2 測(cè)量(下圖)。(圖片來(lái)源:Maxim Integrated)。
對(duì)于自定義軟件開(kāi)發(fā),Maxim Integrated 提供了 MAXM86146 適用的可穿戴設(shè)備 HRM 和 SpO2 算法軟件包。由于 MAXM86146 使用其集成微控制器固件提供心率和 SpO2 測(cè)量,因此從設(shè)備提取數(shù)據(jù)的過(guò)程非常簡(jiǎn)單。Maxim Integrated 軟件包演示了初始化設(shè)備,最后從 MAXM86146 FIFO 讀取數(shù)據(jù)并解析出各個(gè)數(shù)據(jù)項(xiàng)的過(guò)程(清單 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 的軟件包一段代碼展示了從生物傳感模塊提取測(cè)量值和其他數(shù)據(jù)的基本技術(shù)。(代碼來(lái)源:Maxim Integrated)
清單 1 演示了如何使用 C 語(yǔ)言例程 execute_data_poll() 從 MAXM86146 返回一些心率和 SpO2 讀數(shù)。在這里,該代碼將設(shè)備的 FIFO 讀入本地緩存 databuf,然后將 databuf 的內(nèi)容映射到幾個(gè)不同 C 語(yǔ)言軟件結(jié)構(gòu)的實(shí)例。除了將配置數(shù)據(jù)和其他元數(shù)據(jù)存儲(chǔ)到這些結(jié)構(gòu)實(shí)例中,該例程最后還在 mesOutput(mes_repor_t 結(jié)構(gòu)的一個(gè)實(shí)例)中提供心率和 SpO2 測(cè)量值。開(kāi)發(fā)人員只需取消對(duì)最后 printf 語(yǔ)句的注釋,即可在控制臺(tái)上顯示結(jié)果。
為了實(shí)現(xiàn)健康與保健可穿戴設(shè)計(jì),MAXM86146 的軟硬件大幅簡(jiǎn)化了開(kāi)發(fā)。但是,對(duì)于旨在獲得美國(guó)食品藥品監(jiān)督管理局 (FDA) 批準(zhǔn)的設(shè)備,開(kāi)發(fā)人員必須進(jìn)行適當(dāng)?shù)?u>測(cè)試,以驗(yàn)證最終產(chǎn)品的 FDA 級(jí)性能。雖然 Maxim Integrated 的 MAXM86146 及其嵌入式算法提供了 FDA 級(jí)測(cè)量性能,但開(kāi)發(fā)人員需要確保整個(gè)系統(tǒng)滿足 FDA 的性能要求,而不僅僅是傳感器滿足該要求。