做生物电信号采集,绕不开的第一个硬骨头,就是心电。相信不少电子爱好者、生物医学工程的同学,甚至刚入行的硬件工程师,都动过“自己搭一个心电放大器”的念头。市面上现成的心电模块很多,但真正从集成运放开始,自己设计前端放大链路、滤波网络、驱动电路,再把它调通、测出稳定波形的人,并不多。这不是一个“看 datasheet 就能抄完”的活,里面涉及信号完整性、共模抑制、噪声控制、阻抗匹配等一系列问题。
这篇博文,我以自己完成的一个原创心电放大器设计为主线,把整体方案、运放选型、每级电路参数计算、PCB布局要点、上电调试流程,以及我在实际调板过程中踩过的坑和排查心得,完整拆开讲一遍。文章面向有一定模拟电路基础、想真正动手做生物电采集前端的读者,也适合准备电子设计竞赛或课程设计的同学参考。我会尽量把“为什么这样设计”讲透,而不只是丢一个能用的原理图。
1. 设计目标与整体思路拆解
1.1 心电信号到底有多“难伺候”
在确定电路架构之前,得先搞清楚一个问题:为什么心电放大器不能像普通音频放大器一样,直接拿个运放把信号放大就完事?
心电信号本身有几个非常不利于放大的特点。首先是幅值小,体表测量时典型的心电信号幅度只有 0.5mV 到 4mV,需要放大到 ADC 可以采集的范围,比如 0 到 3.3V,意味着整体增益要做到 1000 倍左右,也就是 60dB。这个增益量级并不算高,难的是信噪比。人体本身就是一个巨大的天线,50Hz 工频干扰在体表感应出来的电压,往往比心电信号本身还要大好几倍,如果前端没有足够的共模抑制能力,后面放大再多也是白搭。
第二个麻烦是源阻抗高。体表电极和皮肤接触面的阻抗可能达到几十千欧甚至更高,而且这个阻抗会随着出汗、电极移动而变化。如果放大器的输入阻抗不够高,信号就会在输入级被分压,造成幅度衰减和波形失真。
第三个问题是极化电位。电极和皮肤接触时,会产生一个直流偏置电压,医学上叫半电池电位,通常在几十毫伏到几百毫伏的范围。这个直流电位如果直接进入高增益放大器,后果就是运放输出瞬间饱和,心电信号直接被“顶”到电源轨上。
所以,一个靠谱的心电放大器,核心不是“放大”本身,而是如何在一个充满直流偏置、共模干扰、高频噪声的环境中,把微弱的差模心电信号干净地提取出来。理解了这一点,后面所有电路设计决策就有了明确的出发点。
1.2 整体架构:三级放大 + 滤波 + 驱动
我的整体方案采用经典的三级级联结构,分为前置放大级、滤波级、后级放大级。前置放大级负责把电极拾取到的微弱差分信号进行初步放大,同时提供极高的共模抑制比;滤波级负责把带外干扰和噪声压下去;后级放大级负责把信号进一步放大到 ADC 需要的幅度。
除此之外,系统还包括右腿驱动电路和屏蔽驱动电路。右腿驱动电路是抑制 50Hz 工频干扰的关键一环,它把人体共模电位采样后反相放大,再反馈回人体,相当于主动“抵消”共模干扰。屏蔽驱动电路则用于减小输入线缆分布电容对共模抑制比的影响,这在采用分体式电极线时尤其管用。
整个系统的增益分配上,前置级固定放大 10 倍左右,后级做成可调增益,范围 50 到 100 倍,这样总增益可以覆盖 500 到 1000 倍。带宽设计为 0.05Hz 到 100Hz,这个范围覆盖了心电信号的主要能量集中频段,同时能有效抑制高频噪声和肌电干扰。
2. 集成运放选型与核心电路设计
2.1 前置级为什么选择仪表放大器
心电放大器前置级的选择,是所有设计决策里最关键的一步。这里不能用普通单端运放,因为心电信号的拾取本身就是差分的,两个电极之间的电位差才是有效信号,而两个电极上同时感应的共模干扰必须被大幅度抑制。
仪表放大器天生就是为这种场景设计的。它内部是两个对称的输入运放加一个差分放大级,输入阻抗极高,共模抑制比指标也远优于普通运放搭建的差分电路。经典的 AD620 就是这类芯片的代表,它只需要一个外部电阻就能设定增益,G = 49.4kΩ / RG + 1,用起来非常方便。
我在设计中也对比过用普通运放搭三运放仪表放大器结构,但最终还是选择了集成仪表放大器。道理很简单:三运放方案虽然成本更低,但共模抑制比极度依赖电阻的精密匹配,0.1% 精度的金属膜电阻依然会限制整体 CMRR 在 80dB 左右,而 AD620 这类芯片内部经过激光调阻,增益为 10 时 CMRR 可以到 100dB 以上。对于微弱生物电信号来说,这 20dB 的差距就是“能看波形”和“全是干扰”的区别。
带宽方面也需要留意。虽然心电信号只到 100Hz,但前置级的增益带宽积不能只看这个,因为高共模抑制比在较高频率下会退化。AD620 在增益 10 时的带宽约为 800kHz,对这个应用来说绰绰有余。选定 AD620 作为前置放大核心,RG 取 5.49kΩ,按公式计算增益约为 10 倍,这一步固定不变。
2.2 高通与低通滤波:划定信号频段
前置放大级之后,信号里还混杂着直流偏置、基线漂移、高频噪声和残余工频干扰。滤波级的作用就是“划频段”,只让 0.05Hz 到 100Hz 的有用心电信号通过。
高通滤波部分,我选择在模拟前端用一阶 RC 高通,截止频率设置在 0.05Hz 左右。用公式 f = 1 / (2πRC) 计算,取 R = 1MΩ、C = 3.3μF 时,截止频率约为 0.048Hz。这个频率选得很低,目的是尽量不影响心电 ST 段的形态,因为 ST 段本身就是接近直流的缓慢电位变化,如果高通截止频率设得太高,比如 0.5Hz,ST 段会被拉歪,医生看心电图时会误判。当然,RC 值过大也会带来问题,就是高通建立时间变长,上电后需要等好几秒甚至十几秒基线才能稳定下来,这个我在调试部分会细说。
低通滤波部分,我用了二阶有源低通,采用 Sallen-Key 结构,截止频率 100Hz 左右。Sallen-Key 的好处是结构简单,一个运放加四个阻容就能实现二阶滤波。设计时取 Q 值约 0.707,对应巴特沃斯响应,通带内最平坦,既能有效滤除高频噪声,又不会在截止频率附近产生明显的过冲。
这里有一个容易被忽略但实际很重要的细节:滤波级同样会产生增益误差。为了保证整机增益准确,滤波网络里的电阻电容精度尽量选 1% 以上的,电容首选 CBB 电容或薄膜电容,其温度稳定性和精度都优于普通瓷片电容。
2.3 后级放大与输出驱动
滤波完成后的信号幅度仍然偏小,需要后级放大级把它提到 ADC 能够满量程利用的水平。我在这里用一个通用运放,比如 OPA2134 或者 LM358 都行,关键是输入失调电压低一点会更好。电路采用同相放大结构,增益通过一个 100kΩ 电位器来调节,配合固定电阻实现 50 到 100 倍的可调范围。
同相放大电路的增益公式是 G = 1 + Rf / Rg。我把 Rf 用 100kΩ 电位器,Rg 用固定的 1kΩ 电阻,增益范围就是 1 + 100k / 1k = 101 倍;电位器调到最小值时,增益接近 1 倍。不过实际使用中我通常把增益预设到 80 倍左右,配合前级的 10 倍,整机增益约 800 倍,采集到的心电信号幅度大约在 0.5V 到 2.5V 之间,刚好适合 3.3V 供电的 ADC。
输出端还要加上一阶无源低通,截止频率约 500Hz,目的是滤除后级运放可能产生的高频噪声,以及数字电路串扰进来的高频毛刺。这个滤波虽然简单,但对提升采样后的波形质量很有效,成本却几乎为零。
2.4 右腿驱动与屏蔽驱动:消灭工频干扰的两张王牌
50Hz 工频干扰是心电放大器设计里最顽固的敌人。它来自电网的电场耦合,人体相当于一个悬浮的导体,与电源线之间存在寄生电容,会感应出约 50Hz 的共模电压,幅度可达几伏甚至更高。仪表放大器虽然能抑制共模信号,但抑制能力有限,而且输入不对称、线缆分布电容不均都会让共模转差模,单纯靠 CMRR 远远不够。
右腿驱动电路就是针对这个问题的主动降噪方案。从两个输入电极取出人体的共模电压,经过一个反相放大器放大后,接到右腿电极上反馈回人体。这样做的本质是构建一个负反馈环路,把人体电位“锚定”在电路参考地附近,大幅度减小共模电压的幅值。
我的实现方式是这样的:共模反馈信号从前置级的 REF 端取出,经过一个运放组成的反相放大器,增益约 20 到 50 倍,输出端通过一个 100kΩ 到 1MΩ 的电阻接到右腿电极。这个电阻是安全限流电阻,生物电测量场景下必须有,防止意外漏电流过大。这个运放增益不宜过高,否则反馈环路容易振荡。
屏蔽驱动也是小成本但收益明显的电路。心电输入线通常用屏蔽线,但屏蔽层如果直接接地,线缆的分布电容会在输入端形成额外的共模通路,破坏 CMRR。屏蔽驱动电路的思路是让屏蔽层不接地,而是接在一个电压跟随器的输出端,跟随器的输入接共模电压。这样屏蔽层的电位和输入线缆的共模电位一致,两者之间没有电位差,分布电容就不会产生电流,也就不再影响共模抑制比。
3. 完整电路实现与参数计算
3.1 各级电路与元器件取值清单
把上面的设计思路落实到具体电路,整机可以分成三个核心模块:前端放大模块、滤波模块、电源与输出模块。下面给出的是我当时调试定稿的元器件取值,注意电容精度和耐压这些细节。
前置放大模块的电路是这样的:两个心电电极分别经过 ESD 保护二极管和 100kΩ 限流电阻,接入 AD620 的同相和反相输入端。AD620 的增益电阻 RG 接 5.49kΩ(1% 精度),第 5 脚 REF 端接右腿驱动电路和输出基准。AD620 采用 ±5V 双电源供电,每一个电源引脚上都要加 0.1μF 陶瓷电容就近去耦。
滤波模块的高通部分有争议,有经验的工程师可能会觉得 RC 用 1MΩ、3.3μF 太大了,电容漏电流会导致基线漂移。我实测下来,在功放级输入阻抗足够高的前提下,这个参数工作正常。如果需要更快建立时间,可以把两极高通级联,频率各设在 0.1Hz 左右,等效截止频率接近 0.07Hz,建立时间会快很多。这里我给的是单级方案,全项目结构更简单。
低通滤波模块采用 Sallen-Key 二阶结构。截止频率由 R 和 C 决定,取 R1=R2=16kΩ,C1=47nF,C2=22nF,用公式 f = 1 / (2πR√(C1·C2)) 计算得约 101Hz,Q 值约 0.71。运放用前级 AD620 输出缓冲后的同相输入。值得注意的是,Sallen-Key 结构中两个电容的比值直接影响 Q 值,C1/C2 通常取 2 到 4 之间,这里取约 2.1,Q 值在 0.7 左右。
元件清单汇总如下:
| 模块 | 元器件 | 取值/型号 | 精度要求 | 作用 |
|---|---|---|---|---|
| 前置放大 | U1 | AD620 | - | 差分信号放大,高CMRR |
| 前置放大 | Rg | 5.49kΩ | 1% | 设定前置增益约10倍 |
| 输入保护 | D1 D2 | BAV99 | - | ESD保护 |
| 输入限流 | R1 R2 | 100kΩ | 1% | 限流和抗RFI |
| 高通滤波 | R3 | 1MΩ | 1% | 高通时间常数RC |
| 高通滤波 | C3 | 3.3μF | 薄膜 | 高通时间常数RC |
| 低通滤波 | R4 R5 | 16kΩ | 1% | Sallen-Key 频率设定 |
| 低通滤波 | C4 C5 | 47nF / 22nF | 薄膜 | Sallen-Key 频率设定 |
| 后级放大 | U2 | OPA2134 | - | 可调增益放大 |
| 后级放大 | Rf | 100kΩ 电位器 | - | 增益调节 |
| 后级放大 | Rg | 1kΩ | 1% | 增益下限设定 |
| 输出滤波 | R6 | 10kΩ | 1% | 一阶低通 |
| 输出滤波 | C6 | 33nF | 薄膜 | 一阶低通,约482Hz |
| 右腿驱动 | U3 | OPA2134 | - | 共模反馈 |
| 右腿驱动 | R7 R8 | 20kΩ / 1MΩ | 1% | 反相放大20倍 |
| 右腿驱动 | R9 | 200kΩ | - | 安全限流电阻 |
| 电源去耦 | C7 C8 | 0.1μF | 陶瓷 | 电源去耦 |
3.2 PCB布局与装配要点
原理图再漂亮,PCB 布局不合理也一样出不来好波形。心电放大器属于典型的“高输入阻抗、弱信号”模拟电路,布局上最核心的原则是保护输入端。输入线要尽可能短,AD620 的两个输入引脚周围不要走数字信号线,也不要让电源走线和输入走线平行长距离伴行。
我的布局经验是:输入接插件放在板边靠近 AD620 的位置,中间不穿其他信号线。AD620 的输出走线尽量短,直接进入高通 RC 电路。滤波运放放在 AD620 的同一侧,形成一条清晰的“信号流”路径,避免输出信号反馈耦合到输入端。
电源部分采用星形接地和电源去耦结合的策略。电源从板子一角接入,先经过 10μF 钽电容和 0.1μF 陶瓷电容,再到各运放电源引脚。模拟地单独一个平面,不要和数字地直接大面积融合,如果板上同时有 MCU,用 0Ω 电阻或磁珠单点连接模拟地和数字地。
屏蔽驱动引线要从屏蔽层连接点单独引出,不能和信号地混在一起。右腿驱动运放输出端到电极接插件的走线要保持一定宽度,因为这是一个低阻抗反馈输出。另外,右腿驱动走线要尽量远离输入端走线,防止反馈信号直接耦合到输入,形成正反馈导致振荡。
还有一个实际细节:心电输入线的屏蔽层,在 PCB 端不要直接接外壳地,而是接到屏蔽驱动电压跟随器的输出端。如果只做单板测试,没有分体线缆,这个电路可以暂时不接,但预留焊盘,方便以后扩展。
3.3 上电调试流程:从“先测运放”到“看到心跳”
焊完板子先别急着接人体,按照下面的顺序逐级调试,能帮你省下大量排查时间。
第一步,断电检查。用万用表测量电源正负端对地阻抗,排除短路。确认所有电解电容极性正确,这个看似基础但很关键。
第二步,空载上电。先不接输入电极,给板子通 ±5V 电源,用示波器观察各级运放输出。正常情况下,AD620 输出应该是接近 0V 的直流电平,因为两个输入都浮空,没有差分信号。如果输出已经到达电源轨,先检查前置增益电阻是否焊错、AD620 的 REF 端接法是否正确。
第三步,输入短接测试。把两个输入端短接,这时输入差分信号为零,理论上输出端应该是一个干净稳定的直流电平,示波器上看不到明显交流纹波。这一步能验证共模抑制通路是否正常工作。如果输出端有 50Hz 大幅波形,先检查右腿驱动是否接入、屏蔽层是否正确驱动,再检查电源本身纹波是否过大。
第四步,注入测试信号。用信号发生器输出一个 1mVpp、10Hz 正弦波,通过两个 10kΩ 电阻分压后接到两个输入端(模拟心电的差分信号源),观察后级输出波形。这时候输出应该有约 800mVpp 的正弦波,数字示波器能看得很清楚。如果是这个结果,说明放大链路和滤波链路都没问题。
第五步,人体实测。双手分别握住两个心电电极(或者贴片电极贴到胸口),右腿电极夹到右腿或右手腕。这时候示波器上应该能出现清晰的心电波形,幅度约 0.5V 到 2V。这里有个小技巧:观察时示波器用 DC 耦合,时间轴设在 0.5s/div 左右,电压轴设在 0.5V/div,能看到完整的 P-QRS-T 波形。如果波形有漂移,多等十几秒让高通电路建立稳定。
人体实测时务必注意安全,所有电源隔离处理,最好用电池供电,严禁在连接示波器的情况下接入非隔离市电电源。关于这一点,现在很多入门书籍和帖子没有强调,但在生物电测量这个领域是绝对不能妥协的底线。
4. 常见问题与排查技巧实录
4.1 50Hz 工频干扰压不下去
这是心电放大器制作中最常见、也最容易让人抓狂的问题。现象是输出波形上叠了一层密密麻麻的“毛草”,频率固定 50Hz,幅值甚至比心电信号还大。
排查顺序有讲究。第一看右腿驱动环路有没有闭环。右腿驱动输出端如果没有接到人体,或者运放供电异常,共模反馈就失效了,50Hz 干扰会直接窜进来。用示波器探头分别测两个输入端对地的共模电压,如果达到伏特级,而右腿驱动接上后降到了毫伏级,说明环路已经工作。
第二看屏蔽层接法。如果屏蔽层直接接地,而输入线又比较长,分布电容的共模转差模作用会非常明显。这时候把屏蔽层改成接屏蔽驱动输出,50Hz 干扰通常会大幅下降。
第三看电源纹波。用示波器 AC 耦合测电源输出,如果纹波超过 20mVpp,需要考虑加强电源滤波。增加一级 LC 滤波,L 取 10μH 到 100μH,C 取 100μF 电解加 0.1μF 陶瓷,通常能把纹波压到 5mV 以下。
还有一个比较隐蔽的问题:实验桌上如果同时开着开关电源给其他设备供电,开关频率的谐波会耦合进高阻前端。解决办法是实测时把手机充电器、开关电源类设备尽量移远,改用电池供电最干净。
4.2 输出饱和或波形削顶
最常见的原因是前级增益设置过高,叠加电极极化电位后,信号直接顶到电源轨。这类情况分两种:一是输入短路但输出已经是电源正轨,说明偏置电流回路有问题,AD620 的输入偏置电流必须有一条返回路径,如果输入端串了大电阻而另一端没有到地的回路,偏置电流会把输入拉到电源轨。解决办法是在两个输入端到地之间接一个 1MΩ 到 10MΩ 的电阻,给偏置电流提供泄放通路。
第二种情况是接上人体后输出饱和,波形只有一截平的“帽沿”。这往往是因为电极极化电位过大,或者后级增益太大。用万用表先测一下电极之间的直流电压,正常应在几十毫伏到几百毫伏,如果超过 1V,就需要换电极、清洁皮肤,或者重新贴片。在电路上也可以加一个隔直电容到后级,避免极化电位被二次放大。
还有一种情况是运放损坏或电源没有完全建立。AD620 是精密仪表放大器,如果输入端加了过高的静电电压,芯片内部输入级容易损坏,表现就是输出直接固定在电源轨。所以输入端加 ESD 保护二极管非常有必要,不能省。
4.3 基线漂移严重、波形缓慢浮动
刚上电的几十秒内波形慢慢飘动,这是正常的,高通电路在建立稳态。但一直漂移不停,就需要检查了。
最常见的原因是电极接触不良。皮肤表面的油脂和角质层会显著提高接触阻抗,导致基线不稳定。用酒精棉擦拭皮肤再贴电极,接触阻抗能降低不少。另一个原因是电极干燥或导电膏不足,尤其在冬天空气干燥时,这个问题很明显。
电路层面的原因是高通时间常数太大。0.05Hz 的高通,RC 乘积约 3.3 秒,理论上建立时间是 5 倍时间常数,也就是 16 秒左右。如果你等足了 20 秒还是漂,再看电极。如果高通电容用了电解电容或漏电流较大的陶瓷电容,漏电流会造成电压偏置漂移,这时候换用薄膜电容能从根本上解决问题。
我实测时还遇到过一种情况:示波器探头地线夹和人体形成了新的共模回路。示波器探头的地线夹接了 220V 市电的地,两端设备之间有地电位差,这个地环路会产生明显的 50Hz 交流声和漂移。解决办法是尽量用电池供电和浮地示波器,或者把示波器探头地线夹悬空,用差分探头做测量,但成本和操作门槛会高一些。
4.4 调试过程中的波形异常速查表
| 异常现象 | 可能原因 | 排查方向 |
|---|---|---|
| 输出始终在电源正轨 | AD620 无输入偏置回路 | 两个输入端对地加 1MΩ 到 10MΩ 电阻 |
| 输出大量 50Hz 毛刺 | 右腿驱动失效或屏蔽层接地 | 检查右腿运放,屏蔽层改接屏蔽驱动 |
| 波形幅度过小 | 增益电阻虚焊或后级电位器异常 | 测量 RG 实际阻值,调整电位器 |
| 基线长时间漂移 | 高通电容漏电或电极接触不良 | 更换薄膜电容,清洁皮肤 |
| 信号上下不对称严重 | 运放单电源供电或输出偏置不正确 | 检查正负电源电压是否对称 |
| 接人体后运放发热 | 输入端存在过大外部电压 | 检查电极接线,加 ESD 保护 |
| 波形有过冲或振铃 | 低通 Q 值过高,增益带宽积不足 | 加大 C1/C2 比值,降低闭环增益 |
5. 后续扩展与实测体会
这套心电放大器前端做好之后,可以很方便地扩展成完整的心电采集系统。后端接一个 STM32 或 ESP32 的 ADC,用 250Hz 采样率就能满足心电信号分析的需求。我自己的下一步就是把后级输出接到 MCU,加上蓝牙模块,把波形实时传送到手机端显示,做成一个便携式单导联心电记录仪。如果想进一步压低噪声,可以在后级加一个陷波器做 50Hz 数字滤波,但模拟前端还是要尽量做好,数字滤波解决不了模拟域的共模饱和问题。
前置放大芯片 AD620 之外,也可以尝试 INA128、INA333 这些同类型仪表放大器。INA333 是零漂移结构,偏置电流更小,采用单电源供电时表现也不错,适合对功耗有要求的便携设备。如果换成 INA333,电路架构不用大改,只要注意它的输出基准端接法和 AD620 略有差异即可。
最后分享一个我调试时学到的教训:心电放大器这类高增益弱信号电路,很多时候问题不在电路本身,而在测试方法。示波器探头接地点选择不当、电源不干净、测试环境里开关电源太近,这些外部因素产生的干扰,会让人误以为电路设计有问题,白白浪费大量排查时间。先保证测试环境干净,再怀疑电路,这个顺序能省下很多精力。
生物电采集前端是一门“细节里出魔鬼”的功夫,每一步的选择都有取舍,但把原理吃透之后,从 0 到 1 做一个能用的心电放大器,其实并不遥远。希望这篇记录能帮后来者少走点弯路。