顯示具有 ECG 標籤的文章。 顯示所有文章
顯示具有 ECG 標籤的文章。 顯示所有文章

兩電極 ECG 為什麼總是雜訊滿天飛?MAX30001 三電極與 RLD 實戰筆記

ECG 工程師桌面

第一次拿 MAX30001 EV kit 接到自己身上量 ECG,我以為會看到漂亮的 QRS 複合波。結果示波器上是一條粗到不行的弦波,60 Hz 整整齊齊塞滿整個畫面。

那個瞬間我才真的懂為什麼所有教科書都在講「共模拒斥比」(CMRR)。datasheet 給你一條很漂亮的「CMRR vs 頻率」曲線、低頻段輕鬆破百 dB,但這個數字跟你把兩根電極貼上肉之後實際量到的東西,根本是兩個世界。

這篇是我把 MAX30001 從 EV kit 改成自己 layout 的 ECG patch 一路撞到牆的整理。重點放在 三電極 + RLD(Right-Leg Drive) 這個 datasheet 寫得很簡短、但決定產品能不能用的關鍵環節。

為什麼兩電極不夠用?

ECG 訊號量級大概 0.5–4 mV,而你身上隨便揹著的 60 Hz 共模電壓動輒幾百 mV 到幾伏特。差距是 1000 倍以上。

差動放大器確實會抑制共模——但前提是兩個輸入端「看到的共模電壓真的一樣」。實際上電極與皮膚的接觸阻抗不對稱,就會把一部分共模轉成差模混進訊號裡。

這是 TI 那篇經典 app note SBAA188 Improving Common-Mode Rejection Using the Right-Leg Drive Amplifier 講得很清楚的事(雖然是寫給自家 ADS1298,但原理對 MAX30001 完全通用):整個系統的 CMRR 不是 AFE 的 CMRR,而是 AFE × 電極匹配度的乘積。AFE 給你 100 dB,電極不平衡只有 40 dB,整體就只有 40 dB。

於是兩電極設計的 ECG,最常見的結果就是底下這張圖:

60Hz 干擾淹沒 ECG

QRS 波被 60 Hz(在台灣也常常是 50 Hz 加諧波)整個吃掉。你可以靠 notch filter 把它砍掉,但代價是 R 波會變形、HRV 計算的準度直接報廢。

第三電極的三種接法(從廢到神)

當你被 60 Hz 蹂躪到第三次,自然會想到「再多接一根線到身體上」。第三電極有三種主流接法,效果差很多。

做法 1:第三電極直接接 GND(最直覺、也最廢)

把第三電極(通常接右腿,所以叫 right leg)直接拉到電路 ground。聽起來很簡單,但有兩個大問題:

  1. 安全:如果系統沒有 isolated,萬一漏電直接從這條線灌進病人身體。醫療裝置不能這樣搞。
  2. 沒效:電極與皮膚的接觸阻抗可能高達 100 kΩ,這條「ground 線」其實是一條 100 kΩ 的阻抗,根本拉不住人體電位。

Electrical Engineering Stack Exchange 上有人問過同樣的問題 ,下面的回答直接引用了 Winter & Webster 1983 年那篇被引爆的經典 IEEE TBME 論文:用一個 op-amp 主動 feedback,就能把這個 100 kΩ 的等效阻抗砍掉好幾個數量級。

做法 2:MAX30001 內建 VCM 拉電極(datasheet 官方做法)

這是 MAX30001 datasheet 裡其實寫得清清楚楚、但很多人沒注意到的招式。

晶片內部有一顆 common-mode buffer,產出 650 mV 的 VCM 電壓,原本是給內部電路用的。datasheet 的 General Description 段有一句很關鍵的話:

The common-mode voltage, VCM, can optionally be used as a body bias to drive the body to the common-mode voltage by connecting VCM to a separate electrode on the body through a 200kΩ or higher resistor to limit current into the body according to IEC 60601-1:2005, 8.7.3.

翻成人話:把 VCM 經過一顆 ≥200 kΩ 電阻接到第三電極,貼到病人身上。這顆 200 kΩ 不是隨便寫的,是 IEC 60601-1 第 8.7.3 條對「病人輔助電流」的安全限制——任何單一故障都不能讓流進病人身體的電流超過規定值。

接法大概長這樣(mermaid 流程):

graph LR
  subgraph MAX30001
    VCM[VCM pin, 650 mV]
    ECGP[ECGP]
    ECGN[ECGN]
  end
  VCM -->|R = 200kΩ| BIAS[第三電極]
  ECGP --> ELP[ECG+ 電極]
  ECGN --> ELN[ECG- 電極]
  BIAS -.-> BODY((人體))
  ELP -.-> BODY
  ELN -.-> BODY

EV kit 上有一個叫 BB_SEL 的 jumper(Body Bias Select):

  • BB_SEL 1-2:直接用 VCM 當 body bias(datasheet 預設做法)
  • BB_SEL 2-3:用一個可調電壓(R7 trimpot 0–OVDD),方便你實驗其他偏壓

我量過:光是把第三電極從「不接」改成「VCM via 200kΩ」,60 Hz 干擾大概砍掉 30–40 dB,原本被淹沒的 QRS 直接清楚跳出來。這就是為什麼 MAX30001 大多數量產設計都是這個三電極配置。

注意:如果啟用了 VCM body bias,datasheet 建議可以把內部 lead bias resistor(CNFG_GEN 0x10 暫存器裡的 50/100/200 MΩ)關掉,避免兩種 biasing 機制打架。

做法 3:外掛 op-amp 做主動 RLD(最強,但要多一顆 IC)

VCM 的缺點是它是被動的——只是把人體拉到 650 mV 附近,不會主動抵銷共模雜訊。要真的把 CMRR 推到極限,就要加一顆外部 op-amp 做主動 feedback,這就是經典的 Driven Right Leg(DRL) 或 Right-Leg Drive(RLD) 電路。

ADI 官方有一篇 app note 直接給你抄:How to Add Wilson's Central Terminal/Right Leg Drive Functions to the MAX30001/MAX30003 ECG AFEs in a Medical Wearable (若官網連結時好時壞,也可以查同名 Maxim Integrated 鏡像 )。建議的 op-amp 是 MAX44260 (低功耗、低 offset、SC70 包裝),跟 MAX30001 是天作之合。

RLD 的核心原理用一句話講:把 ECGP、ECGN 兩端的共模電壓抓出來、反相放大、回打到第三電極。這個 feedback loop 會主動把人體共模電位「壓回 reference」。

graph LR
  ECGP[ECGP] --> R1[R = 1MΩ]
  ECGN[ECGN] --> R2[R = 1MΩ]
  R1 --> SUM((+))
  R2 --> SUM
  SUM --> OPAMP([Op-Amp / MAX44260])
  VREF[VCM / Vref] --> OPAMP
  OPAMP --> RF[R = 350kΩ, safety limit]
  RF --> RL[Right Leg, 第三電極]

加了 RLD 之後,等效共模阻抗可以從 100 kΩ 級掉到幾百 Ω 級,整體 CMRR 直接加 20–40 dB。代價就是多一顆 op-amp 與三四顆電阻,以及一個你必須認真設計的 stability margin(loop gain 太高會自激)。

三種做法的選擇表

做法額外元件CMRR 改善安全性適用場景
直接接 GND0≈ 0 dB差不建議
VCM body bias(datasheet 官方)1 顆 200 kΩ+30~40 dBIEC 60601-1 合規多數消費級 / 中階醫療
外掛 RLD op-amp1 顆 op-amp + 4 顆 R+50~70 dB需 safety resistor高階醫療、IEC 60601-2-47 認證

我自己的選法:原型先 VCM bias 跑出可看的 ECG,產品送認證前再決定要不要升級到 RLD。多數 wearable patch(不是診斷級 12-lead)VCM bias 就夠了。

MAX30001 EV kit 上手實戰

三電極概念圖

下面是我從拿到 EV kit 到能穩定看到 ECG 的流程,這部分 Mbed MAX30001-FeatherWing 文件 寫的不完整,這裡補一些細節。

前置條件

  • 硬體:MAX30001EVSYS#(含 MAX30001 EV board + MAX32630FTHR + 三條 ECG cable)
  • 電源:USB micro 直接餵(或外接 5V 經 LDO)
  • GUI:Maxim 官方 Windows GUI(Win7/8/10 OK,Win11 我實測也能跑)
  • 電極:3M Red Dot 或 Ambu BlueSensor,丟掉那種沒牌子的便宜貨

Jumper 設定(三電極模式)

J_DRVP   open   ← BioZ 用,三電極 ECG 時不接
J_DRVN   open
DP_BP    open
DN_BN    open
BP_BN    open
BB_SEL   1-2    ← 用 VCM 作 body bias(三電極關鍵!)
J_RBIAS  1-2    ← 接 324kΩ 外部偏壓電阻

預設 jumper 其實已經是「兩電極 + BB_SEL=VCM」,但你必須真的把第三電極(黑色那條 RL/RA cable)接在身上才有效果。我看過太多人 jumper 沒動但 cable 只接兩條,然後抱怨「跟兩電極差不多啊」。

暫存器初始化

關鍵幾個暫存器(這是我做 PCB 之後韌體用的,EV kit GUI 會幫你設):

// 1. 軟體 reset
spi_write(0x08, 0x000000);

// 2. CNFG_GEN (0x10) — 啟用 ECG 通道 + 設定 lead bias
//   EN_ECG=1, EN_DCLOFF=1, EN_RBIAS=01 (ECG channel)
//   IPOL=0 (sourcing), IMAG=000 (5nA), VTH=00 (300mV)
//   EN_BLOFF=00 (BioZ lead off disabled, 因為沒用 BioZ)
//   RBIASN=1, RBIASP=1 — 啟用 100MΩ lead bias 到 VMID
//   注意:如果你採用 VCM body bias(三電極接法),
//         建議改為 RBIASN=0, RBIASP=0 避免兩種 biasing 打架。
//         以下這組值是「先單獨驗證 ECG 通道、暫未啟用 VCM bias」的設定。
spi_write(0x10, 0x081007);

// 3. CNFG_CAL (0x12) — 內建校正源(debug 用,量產關掉)
spi_write(0x12, 0x720000);

// 4. CNFG_ECG (0x15) — ECG 通道參數
//   RATE=00 (512 SPS), GAIN=11 (160 V/V)
//   DHPF=1 (0.5Hz HPF), DLPF=01 (40Hz LPF)
spi_write(0x15, 0x005000);

// 5. 啟動同步
spi_write(0x09, 0x000000);  // SYNCH

如果你要進一步加 R-to-R 偵測或 pace detection,再去設 CNFG_RTOR1 (0x1D) 與 CNFG_PACE (0x1A)。

第一次量測的儀式感

電極貼好(RA = 右胸鎖骨下、LA = 左胸鎖骨下、RL = 右下腹),GUI 按下 Start,看到 P-QRS-T 一波一波跑出來的瞬間真的會起雞皮疙瘩。

但你也會發現:當你深呼吸的時候,baseline 會跟著漂;當你動手臂的時候,整個畫面會出現大尖峰(motion artifact)。這些是 ECG patch 接下來要面對的第二輪戰爭,已經超出 RLD 能解決的範圍,要靠數位濾波 + IMU 融合。

從 EV kit 到量產 PCB

ECG patch 量產示意

EV kit 跑通之後,自己畫板的時候會撞到的問題比想像中多很多。整理我自己跟同事的踩坑紀錄:

踩坑 1:類比電源沒有單獨 LDO

我第一版偷懶把 VAVDD 跟 VDVDD 都從同一顆 1.8V switching regulator 拉。結果 ECG 波形上躺著一隻 SMPS 開關頻率的小尾巴。

解法:類比電源一定要用 ultra-low-noise LDO,例如 MAX8512、TPS7A47 那種 PSRR 高的;EV kit 上用的就是 MAX8512EXK。1.8V 不貴,多放一顆。

踩坑 2:input series resistor 太小,IEC 60601-2-47 測試掛點

EV kit BOM 裡 R26, R27, R29, R30 預設是 0 Ω jumper,但 datasheet Note 3 明確說:

One electrode drive with <10Ω source impedance, the other driven with 51kΩ in parallel with a 47nF per IEC 60601-2-47.

意思是認證測試時,會強制給你一邊接 51 kΩ ‖ 47 nF 的不平衡網路打進來,要看你能不能撐住。量產板務必把這四顆電阻換成 10–51 kΩ + 47 nF 形成 EMI / 共模 LPF,這也是 ECG patch 過 IEC 60601-1-2 EMC 測試的關鍵。

踩坑 3:lead-off 一脫落,RLD loop 自激

這是 TI 那篇 RLD app note SBAA188 特別警告的場景:當其中一個 ECG 電極脫落,feedback loop 會失去輸入訊號,op-amp 直接被 lead-off bias current 推到 rail,整個系統當機。

解法:

  1. 韌體要連續監測 lead-off 狀態(MAX30001 的 STATUS (0x01) 暫存器有 LDOFF_NL/NH/PL/PH 四個 bit)
  2. 偵測到 lead-off 立刻把 RLD loop 用 analog switch(TS5A3157 那類)打開,避免 op-amp 鎖死
  3. 重新接觸後再閉合 loop,並做一次 ECG Fast Recovery(MNGR_DYN 0x05 設定)

如果你用 VCM body bias 沒外加 op-amp,這個問題不存在——VCM 是被動 driver,脫落了頂多沒效,不會反鎖。這也是我建議「沒必要就別跳 RLD」的另一個理由。

踩坑 4:BioZ 電流耦合進 ECG

這是同時啟用 ECG 與 BioZ 通道時很常遇到的問題:BioZ 注入的 kHz 級 AC 電流會耦合到 ECG 通道。一些社群實作經驗(例如 TU Wien 一份 bio-signal 整合論文 在類似 wearable 平台上)也回報過必須採用時分量測。

解法:

  • 時分(pseudo-simultaneous):交替啟用 ECG 跟 BioZ,犧牲時間解析度換乾淨度
  • 或者把 BioZ 電流壓到最小(datasheet 給 8 µA 起跳),並把 ECG LPF 設在 40 Hz 把 BioZ 的 80 kHz 載波濾掉

踩坑 5:電極 cable 太長,遮蔽沒做好

EV kit 給的 cable 是 touchproof 的醫療規格,但我第一版 patch 自己接 1.5m FFC,結果 60 Hz 又回來了。ECG cable 一定要用 shielded twisted pair,shield 接 VCM(不是接 GND)。Patch 設計則應該讓電極離 IC 越近越好(< 5 cm),這也是 chest patch 的優勢。

什麼時候要升級到主動 RLD?

我整理的決策樹:

graph TD
    A[ECG 設計需求] --> B{要送 FDA / CE Class IIa+?}
    B -->|是| C{要求 12-lead 級 CMRR?}
    B -->|否| D[VCM body bias 即可]
    C -->|是| E[外掛 RLD op-amp]
    C -->|否| F{臨床環境多干擾?}
    F -->|手術房, ICU| E
    F -->|門診, 居家| D
    D --> G[2-3 顆元件就搞定]
    E --> H[MAX44260 + 4 顆 R + lead-off switch]

簡單講:消費級 wearable、運動手錶、家用 patch → VCM bias 夠了;醫院監護儀、Holter、過 IEC 60601-2-47 認證 → RLD。

結語

MAX30001 的 datasheet 把三電極設計藏在「Common-Mode Buffer」那一節短短兩句話裡,但這兩句話幾乎決定了你的產品能不能用。VCM body bias 是 80% 場景的最佳解,外掛 RLD 是 20% 高階場景的必須品。

如果你還沒拿到 EV kit,但已經在規劃 ECG 產品,建議直接從 Digi-Key / Mouser 訂一塊 MAX30001EVSYS#(價格自己查當前報價,預算抓百元美金等級),自己貼上身體量一次,比看 100 篇 app note 都有感。等你親眼看過第一次 QRS 從雜訊裡浮出來,所有 RLD、CMRR、IEC 60601 的英文縮寫才會真的進到你的腦袋裡。

下一篇我打算寫「MAX30001 BioZ 量呼吸實戰」——把第四電極加進來、跑 tetrapolar 模式、把胸阻抗信號從 motion artifact 裡撈出來的細節。有興趣的話留言告訴我,我會調整 priority。

延伸閱讀

8GB 的 RK3588 能跑多聰明的 LLM?ROCK 5C 用 NPU 實測 5 個模型

先講結論,省得你滑到最後: 在一片 8GB 的 RK3588 板子上,用 NPU 跑得最聰明的是 Qwen3-4B-Instruct-2507,我出的 7 題全對,但每秒只吐 3.7 個 token。 想要順一點的對話體驗,Qwen3.5-2B 的 8.4 tok/s 是比...