兩電極 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。

延伸閱讀

沒有留言:

張貼留言

TTS 文字轉語音完全指南:技術原理、聲音克隆與 2026 選型實戰

前陣子我在測 Qwen3-TTS,官方技術報告寫著首包延遲 97ms,聽起來就是為即時對話而生的。結果我照官方範例跑起來,按下生成、等了整整 10 秒才聽到第一個字。乾,差了一百倍。 這不是我環境爛,而是 TTS 這個領域的日常:論文數字、行銷頁數字、你實際跑出來的數字,是三個...