第一次把自制的ECG心电前端接到示波器上时,屏幕里只有一条粗壮的50Hz波浪线,那种感觉就像费劲搭好一台精密天平,结果一端放了个铁块。后来折腾了几个周末,把仪表放大器、右腿驱动、滤波链路和PCB布局挨个查了一遍,才终于看到干净的P-QRS-T波群。这篇就是从零搭建ECG心电图仪模拟前端的完整复盘,重点在电路怎么设计、噪声从哪来,以及怎么用手头的示波器把问题逐级揪出来。这不是医疗设备方案,只是用于学习和实验的信号链设计,真要进入临床还得解决隔离、安规和认证那一整套问题。
1. 先搞清楚信号长什么样,再谈电路设计
1.1 心电信号的真实面目:毫伏级的微弱信号
体表心电信号真的非常小。R波峰值通常在0.5mV到2mV之间,典型值是1mV左右,P波、T波往往只有0.1mV到0.3mV。这意味着我们需要的是一台能分辨几十微伏信号变化的前端,同时输入动态范围还要容得下比信号大几十倍的直流极化电压。
频率方面,心电信号的主要能量集中在0.05Hz到100Hz之间。QRS波群持续时间大约80ms到100ms,对应主频在10Hz到40Hz;P波和T波更慢,低频成分可以低到0.5Hz以下。所以一个实用的模拟前端,带宽至少覆盖0.05Hz到100Hz,想保留更多诊断细节就需要到150Hz,但超出这个范围的信号基本都是噪声,最好滤干净。
还有两个容易被新手忽略的要点。第一,电极与皮肤接触会产生直流极化电压,幅度几十毫伏到几百毫伏不等,这个电压远远大于心电信号本身;第二,电极-皮肤阻抗不是固定值,通常在10kΩ到几百kΩ之间,和频率、出汗程度、电极类型都有关系。这两个因素直接决定了前端输入阻抗要足够高,同时第一级增益不能太大,否则极化电压一上来输出就饱和了。
我把设计指标定为:差分输入阻抗大于10MΩ,总增益1000倍上下,带宽0.05Hz到100Hz,系统CMRR大于100dB,输入端等效噪声小于10μVpp。这个标准不算苛刻,但足以让后面的PCB布局和电源处理相当难受。
1.2 噪声的"三条路径":人体是天线,导线是传输线,地是垃圾桶
做ECG前端,本质上不是把信号放大1000倍,而是在各种比信号大几个数量级的干扰里,把心电信号"择"出来。最大的敌人就是50Hz工频干扰。
第一条路径是电场耦合。人体在工频电场里相当于一根天线,不需要直接接触任何电线,体表就能感应出几伏到十几伏的工频共模电压。这个电压比心电信号大了三个数量级,如果不处理,仪表放大器输入端直接过载。
第二条路径是导联线的不对称。两根导联线对地都有寄生电容,如果分布不均匀,共模电压会在两根线上形成不同的分压,从而转成差模信号。这个转差模的过程无法靠仪表放大器的共模抑制比完全消除,因为转换发生在放大器之前。
第三条路径是地。示波器探头接地夹子、USB调试器、电源适配器,任何一个接地点都会引入地环路电流,在测量回路里产生压降。很多人在调试心电前端时用示波器观察输出,结果看到满屏50Hz大波浪,第一反应是电路没做好,实际上把示波器探头的地线断开,或者改用隔离探头,波形立刻就安静了。
除了工频,还有肌电干扰、电极移动产生的接触噪声、以及低于0.5Hz的基线漂移。肌电频谱大致在20Hz到500Hz,和心电QRS频段有重叠,完全避免很难,低通滤波能压掉一部分;基线漂移主要靠高通滤波器解决,转折频率选得越低越好,但太低的话响应又太慢,需要实际取舍。
1.3 整条信号链的架构规划
做完整的前端,我推荐的信号链顺序是这样的:输入保护和RFI滤波 → 仪表放大器第一级放大 → 高通滤波分离直流极化电压 → 主放大 → 低通滤波 → 可选50Hz陷波 → ADC驱动级。
这个顺序里有个关键决策:第一级仪表放大器增益不要太高。我最初把增益做到20以上,结果极化电压经过放大后直接把后面的运放顶到饱和,输出是一条平直的直流电平,再怎么样都看不到P波。后来把第一级增益降到10左右,高通放在仪表放大器之后、主放大之前,让极化电压在第一级输出端虽然还有两三伏直流偏置,但经过高通后被彻底隔掉,后面的主放大器就能专心放大交流心电信号了。
2. 前端第一级:仪表放大器的选型与输入保护设计
2.1 为什么必须是仪表放大器
心电信号的源阻抗高、幅值小、共模干扰大,这三个条件凑在一起,决定了第一级只能用仪表放大器(INA)。仪表放大器的内部是三运放结构,两个对称的输入缓冲级提供了极高的输入阻抗,后级差分放大器负责把双端信号转成单端信号。相比普通运放搭差分电路,INA的共模抑制比在直流到数百赫兹范围内都能保持很高,而且输入偏置电流小,对高阻抗源不敏感。
常用的芯片有AD620、INA128、INA118这几款。它们都是经典的三运放仪表放大器,性能指标接近。AD620在国内采购最方便、资料多;INA128的输入噪声稍低一点,CMRR指标在增益10时能到110dB以上。我最后用的是INA128。
这里要说清楚增益公式:INA128的增益由外部电阻Rg决定,G=1+50kΩ/Rg。比如Rg取5.1kΩ,增益就是1+50/5.1≈10.8。这个公式只对INA128/INA129这类芯片成立,AD620的系数是49.4kΩ,别把两颗芯片的公式搞混。
第一级选10倍增益,主要基于三个理由:一是让极化电压在输出端不至于直接饱和;二是仪表放大器的失调电压和噪声经过第一级放大后,会被后面的高通滤波去除直流部分,但交流噪声会随增益一起放大,第一级增益低一些有利于整体噪声优化;三是考虑到共模电压的存在,输入端的线性范围有限,增益太大会减小允许的输入共模范围。
2.2 输入偏置电流的返回路径:最容易翻车的直流回路
仪表放大器在工作时,输入端必须有偏置电流的直流返回路径,否则输入级会逐渐累积电荷,输出漂移到电源轨上。这个坑我踩得很实在:第一次上电,我把INA128的输入端直接通过香蕉头接电极,没有给输入端到地一个直流回路,结果输出一路漂到正电源轨,怎么看都不知道哪里的问题。
在ECG应用中,偏置电流的返回路径通常由右腿驱动电路提供。简单说,右腿驱动从输入端取出共模电压,经过反相放大后接回到人体的右腿电极,形成一个闭环。这样既提供了偏置电流回路,又降低了人体共模电位,一举两得。如果暂时不接右腿驱动,就得在仪表放大器的两个输入端并联一个几十kΩ到几MΩ的电阻到地,提供直流路径,但这会降低输入阻抗。
需要注意的是,仪表放大器数据手册里的输入偏置电流是pA级,但实际电极和线缆会把噪声电流耦合进输入端,所以在输入走线周围做保护环、屏蔽驱动,往往比纠结偏置电流本身更重要。这个放到后面布局章节细说。
2.3 输入保护与RFI滤波:别让射频干扰坏了事
ECG前端直接接触人体,必须考虑静电放电和意外接触。常规做法是在每个输入端串联一个10kΩ以内的电阻,配合对地二极管钳位,限制流入INA的电流。INA128内部已经有输入保护二极管,能承受一定能量,但外部加ESD二极管和串联电阻更保险。串联电阻不宜过大,因为电阻本身的热噪声会被后级放大,10kΩ在100Hz带宽里的热噪声约1.3μVrms,对于10μVpp的设计目标来说已经占了不小比例,所以实际我用了1kΩ。
射频干扰是个隐蔽问题。手机信号、电台、甚至开关电源的振铃,如果进入运放输入端,会被运放的输入级非线性整流,变成一个直流偏置误差,反映在输出端就像"灵异"的基线漂移或偏置变化。解决办法是在输入端加一个低通RC滤波,把转折频率设在几百kHz甚至几十kHz,既不影响100Hz的心电信号,又能衰减射频。
这里有个小技巧:RC滤波的电容如果直接接到地,会造成共模和差模的不对称,降低CMRR。更规范的做法是差分电容跨接在两根输入线之间,同时每个输入线对地再接一个等值电容。这样对共模信号来说两个RC完全对称,差模信号则经过两级滤波,高频抑制能力更强。
3. 右腿驱动电路:共模抑制的胜负手
3.1 共模电压到底有多危险
假设人体感应出5V的50Hz共模电压,仪表放大器CMRR为110dB,也就是约316000倍衰减,输出端残留的50Hz成分大约为16μV,看起来不大,但问题在于输入端感应的共模电压很可能高达十几伏,而且不是纯正弦,带谐波,一旦超出仪表放大器输入线性范围,电路直接恶化到不可用。更重要的是,共模电压会通过导联线到地的寄生电容'泄漏',在两根线上产生微小但致命的差模分量,这才是工业干扰最头疼的部分。
右腿驱动(Right Leg Drive)的思路,就是主动把人体的共模电位"钳"到参考地附近,让共模电压不再走高。它本质上是一个负反馈回路:检测人体共模电位,反相放大,再通过右腿电极反馈回人体,把感应出来的共模电压抵消掉。
3.2 电路实现与参数计算
先看共模采样。右腿驱动不必从仪表放大器的输出端取信号,那里面混着被放大的差模分量,不合适。常规做法是从两个输入端各自串一个电阻接到右腿驱动运放的反相端,取两个输入端的平均电位,也就是共模电压。
我用的参数是这样的:两个输入采样电阻都是100kΩ,反馈电阻1MΩ,反馈电容1nF,运放的输出串联1MΩ限流电阻接到右腿电极。反相放大增益是1MΩ/100kΩ=10倍。反馈电容和反馈电阻构成一个低通极点,转折频率约159Hz,这样右腿驱动主要抑制50Hz附近的共模分量,不会对更高频率的干扰反应过度,还能防止自激振荡。
从反馈环路角度看,人体和电极之间存在100pF量级的电容,加上电极-皮肤阻抗,整个反馈回路有多个高频极点。如果不加反馈电容把高频增益降下来,右腿驱动很容易变成振荡器。我测试的时候遇到过一种情况:不接右腿驱动时输出只是工频稍大,接上之后反而出现几kHz的轻微振铃,就是反馈电容选太小导致的。换成1nF后振铃消失,50Hz也压到了几乎看不见的水平。
3.3 安全限制:流入人体的电流必须被约束
右腿驱动输出直接通过人体形成回路,所以安全是第一位的。反馈环路里串联的1MΩ电阻,即使运放输出达到电源轨,经过1MΩ限流后流过人体的电流也只有几微安到十几微安,符合通用安全标准里对漏电流的要求。这个电阻不能省,位置在靠近右腿电极那边,这样才能真正限制故障状态下的电流。
还有一个安全细节:右腿驱动运放的电源和信号链共用,必须确保任何时候都不会把危险的电压送到人体。教学实验中通常用电池或隔离电源供电,避免与市电有任何硬连接。如果市电供电,必须用医疗级隔离模块,并且通过隔离式DC-DC把模拟地完全"浮动"起来。这一点没有商量的余地,涉及人身安全,不能省。
4. 滤波链路:高通、低通、50Hz陷波的搭配与调参
4.1 各频段的角色分配
ECG滤波不是越多的滤波器越好,关键是每级滤波器处理一段明确的问题频率。基线漂移和极化电压是超低频,需要高通在0.05Hz左右开始压制;心电信号的有用信息在0.05Hz到100Hz,超过100Hz的基本是肌电和射频残留,所以低通转折设在100Hz;50Hz工频干扰虽然被右腿驱动大幅压低,但不可能完全消失,所以还可以加一个窄带陷波器。
我先在纸上画带宽图:0.05Hz以下一刀切掉,100Hz以上一刀切掉,然后在50Hz处挖一个坑。心电信号的QRS主频在10-40Hz,T波高频成分大约在2-5Hz位置也可能延伸,所以50Hz陷波其实对心电信号本身的损伤不大。
4.2 高通滤波器:0.05Hz是个刁钻的要求
理想情况下,ECG需要0.05Hz的高通转折,对应的时间常数是3.18秒。这个数值意味着RC乘积必须非常大,电容和电阻都得往大了选。我用了3.3μF薄膜电容加上1MΩ电阻,转折频率约0.048Hz,基本符合0.05Hz目标。这里不能用普通电解电容,漏电流太大,等效为一个直流电阻会破坏低频响应,最好选聚丙烯膜电容。
高通放在哪一级,直接影响整个系统的动态范围。前面说了,我把高通放在INA128后面,这样极化电压虽然被第一级放大到两三伏,但高通能把它连同更低频率的漂移一起滤掉。这里有个代价:这么大的时间常数,上电后要10到20秒输出才能稳定,第一次上电看到波形慢慢从饱和状态爬回来,别着急,这和电路故障无关。
如果想让上电更快,可以在高通电阻上并联一个模拟开关或三极管复位电路,上电瞬间把电容短路一下再释放。这个技巧对长时间监测试验特别有用,否则每次上电都等半分钟,调试效率太低了。
4.3 低通滤波器:Sallen-Key还是MFB?
低通我推荐用Sallen-Key结构,同样的截止频率下用的元件少,增益平坦,适合作为心电信号的抗混叠滤波器。Sallen-Key是二阶滤波器,Q值决定幅频特性形状,巴特沃斯响应的Q值是0.707,这时通带最平坦,不会对心电波形造成明显的过冲和振铃。
我取截止频率100Hz,用C1=100nF、C2=47nF,R的取值按公式算出来大约是23.2kΩ。标准电阻取22kΩ,实际截止频率大约105Hz,完全够用。如果对截止频率有严格要求的应用,可以用两个精密电阻微调。
要注意Sallen-Key低通在Q=0.707时对元件容差不敏感,但运放的增益带宽积还是要留够余量。截止频率100Hz、增益1时,任何通用运放都够用,但后面主放大如果和滤波放在一起,就要注意高增益和带宽的矛盾。我习惯把主放大和低通分开处理,主放大用同相放大结构,放大倍数约100倍(同相端直接接高通后的信号),然后低通单独一级,避免同一级同时满足高增益和高Q值。
4.4 双T有源陷波器:50Hz的最后一刀
做了右腿驱动之后,50Hz残留通常已经很小,但信号源附近的工频磁场耦合还是会给最终波形留下一点毛刺。所以我在低通之后加了一级有源双T陷波器,专门对付50Hz。
双T网络的核心元器件是三个电阻和三个电容,中心频率由RC乘积决定。如果取电容100nF,中心频率50Hz对应的电阻是31.8kΩ。标准电阻架设采用R1=R2=32kΩ、R3=16kΩ,C1=C2=100nF、C3=200nF(两个100nF并联),然后用一个运放做跟随器,从两个T型网络的公共点注入少量正反馈,提高Q值。
陷波器的Q值不是越高越好。Q值太高虽然50Hz处衰减极深,但3dB带宽只有3Hz左右,中心频率稍微漂移一点就失效了,而且对元件容差极其敏感。我用的Q值大约在3到5之间,3dB带宽约10到16Hz,既能把50Hz压掉20dB以上,又不会因为元件偏差导致中心频率偏出谐振点。调试时用信号发生器输入一个1Vpp、频率在45Hz到55Hz之间扫动的正弦波,调整陷波器里的微调电阻,让输出幅度在50Hz附近最低,调完后用热熔胶或漆把电位器固定住,防止后续振动改变参数。
5. 布局与屏蔽:噪声对抗从原理图走向PCB
5.1 噪声路径分析:先把敌人找全
原理图设计得再漂亮,如果PCB布局和导线走向不重视,一样看不到干净的心电波形。ECG前端的噪声来源主要有这几个:
第一是电场耦合。人体和导联线处于工频电场中,和周围导体之间存在寄生电容,噪声电流通过电容耦合进测量回路。高频成分(比如手机射频)也能通过类似路径进入。
第二是磁场耦合。电源变压器、电机、开关电源的感性元件会在周围产生交变磁场,在导联线环路上感应出差模电压。这个环路面积越大,感应越强。
第三是共用阻抗耦合。模拟地、数字地、电源地如果走线不合理,大电流会在地线上形成电压差,噪声通过地线注入微弱信号。心电前端对地线上的毫伏级波动都极其敏感。
第四是电源纹波。开关电源的纹波、DC-DC的开关噪声,都会通过运放电源引脚进入信号链。我的经验是前端运放电源用LDO二次稳压,并且每个运放电源引脚旁边放100nF陶瓷电容加上10μF钽电容做低频储能。
5.2 PCB布局的核心打法
我的布局原则可以概括为:信号路径短而对称,模拟地单点汇聚,数字部分物理隔离。
导联输入插座放在PCB一端,仪表放大器紧挨着插座,中间不要走任何其他信号线。两根输入信号线等长、并行走线,周围用地线包裹,减少差分对之间的不平衡。仪表放大器的Rg电阻要靠近芯片放置,而且这颗电阻的稳定性直接影响增益精度,选温度系数低的金属膜电阻。
模拟地和数字地在ADC芯片处单点连接,不要大面积铺地混在一起。采样保持、基准电压和ADC的模拟电源单独用磁珠或几十欧姆电阻隔离,避免数字开关噪声顺着地线流回前端。如果PCB面积允许,把模拟区域和数字区域在物理上拉开距离,中间用一条地线隔离槽隔开。
输入端保护环也很重要。INA128的输入引脚漏电流极小,但PCB表面污染后会产生微小漏电流,相当于给输入端并联了一个高阻电阻,造成偏置漂移。解决方法是在输入引脚周围铺一圈连接到保护端的铜皮(guard ring),让漏电流改道流入低阻的保护节点,而不是流入高阻输入端。这个技巧在做高输入阻抗生物电放大器时特别管用。
5.3 导联线屏蔽驱动:降低电缆电容的不平衡
医用ECG导联线通常外面有一层屏蔽网,很多人直接把屏蔽层接地,以为这样能挡干扰。对于心电信号,这个做法可能适得其反。屏蔽层接地后,屏蔽层和芯线之间形成电容,两根线电容不可能完全一样,共模电压在这个不平衡电容上分压,就生成了差模干扰。
我更推荐用"屏蔽驱动"(guard drive)连接方式:用一个运放做缓冲器,输入接仪表放大器输出端的共模电位,输出接到屏蔽层。这样屏蔽层的电位和输入导联线的共模电位保持一致,屏蔽层与芯线之间的电容两端几乎没有交流压差,也就不会通过寄生电容泄漏共模电流。市面上很多成品生物电放大器都采用这种设计,看起来只是多了一个运放,但对系统的有效CMRR提升非常明显。
如果你用的是普通同轴线做导联线,务必把屏蔽层接到共模电位而非系统地。如果用普通跳线做测量,导线之间距离要尽量拉开,避免相互耦合,但又要保持对地电容平衡,这个矛盾其实只能靠正规屏蔽线解决。
5.4 面包板和实验板:为什么都会失败
我不推荐用面包板搭ECG模拟前端。面包板的寄生电容很大,相邻引脚之间的电容可以达到几pF,在信号输入端这种高阻节点上,几个pF的差异就直接破坏共模平衡了。而且面包板的接触电阻不稳定,导线一动,电极阻抗就变,基线嗖嗖乱跑。你很难分辨到底是设计问题还是接触问题。
我调试原型用的是覆铜板加洞洞板,尽量让信号走线短、有铺地区域,电源和地也用粗铜线。即便如此,第一版在导联输入部分还是太长,后来重新打了PCB才解决问题。心电前端这种高增益高阻放大器,尽早做正规PCB比在面包板上穷折腾效率高得多。
6. 实测与调试:如何验证CMRR和最终波形
6.1 上电测试前的台架准备
在接人体之前,先做台架验证。我用信号发生器模拟心电信号:把信号发生器输出设置为1mVpp、1Hz左右的低频正弦波,通过两个等值电阻和一个串联电阻分压成差分信号,叠加一个1Vpp的50Hz共模信号,一起送入右腿驱动和仪表放大器输入端。
测量CMRR的方法很简单:把仪表放大器的两个输入端短接,接信号发生器输出端,输入1Vpp的50Hz正弦波,在系统输出端测出残留的50Hz幅度Vout_pp。已知总增益约1000倍,那么系统等效输入端的共模残留就是Vout_pp/1000,再除以1V,换算成dB就是CMRR。比如输出端残留25mV,等效输入残留25μV,CMRR=20log(1V/25μV)≈92dB。实测中只要达到90dB以上,基本就能满足实心电测试的要求。
还要测一下输入端等效噪声。把两个输入端各自通过51kΩ电阻接地,模拟真实的源阻抗,记录输出端噪声的有效值,除以总增益再换算成峰峰值。正常应该在10μVpp以下,如果明显偏大,排查电源纹波和地回路问题。
6.2 示波器排查链路:按路径逐级找问题
如果接上模拟信号源后输出仍然是一团糟,不要急着怀疑芯片坏了,按信号链的顺序逐级看。
先看INA128的输出端,应该能看到被放大10倍后的信号叠加一个直流偏置。如果这里是满满50Hz,说明要么共模电压太大、右腿驱动没起作用,要么输入端失去了直流回路。接着看高通之后的信号,应该看不到直流偏置了,如果还有缓慢漂移,检查电容有没有漏电或引脚松动。再看主放大器输出,这时信号幅度应该接近满量程,如果看到高频毛刺,多半是电源去耦不足或者示波器探头地线太长。
有一个排查技巧:用示波器的FFT功能看输出频谱,能直接看到50Hz及其谐波、100Hz、高频噪声的幅度。50Hz高,优先查右腿驱动和屏蔽;100Hz高,多半是电源整流纹波或者磁场耦合;宽频噪声抬高,则要考虑地线回路和探头接线。
表格式总结一下常见故障现象和排查方向,方便照图索骥:
| 现象 | 可能原因 | 优先检查项 |
|---|---|---|
| 输出恒定在电源轨 | 输入端无偏置回路 | 右腿驱动是否接好、输入电阻是否对地 |
| 满屏50Hz大波浪 | 共模抑制失效 | 右腿驱动增益、导联线屏蔽、探头地回路 |
| 信号叠加周期毛刺 | 电源纹波、数字开关噪声 | 示波器探头地线长度、电源去耦电容 |
| 基线缓慢漂移 | 高通时间常数大、电极运动 | 滤波电容漏电、导联线固定、皮肤处理 |
| 信号振幅忽大忽小 | 电极接触不良、接触阻抗波动 | 电极凝胶、皮肤清洁、导联线接头 |
6.3 真实人体测试:必须遵守的安全底线
信号源测试通过后再接人体。我强烈建议先用电池供电,或者用隔离电源,让整个模拟前端和市电完全脱开。示波器如果接市电且没有隔离,它的地线与大地相连,一旦探头夹子连到人体,就可能形成危险回路,这在医疗电子实验里是绝对不能出现的操作。实践里我都是给系统用两节9V电池,或者一块充电宝配合隔离式DC-DC,然后把示波器设置为"浮地"模式或者用隔离通道测量,确保没有漏电路径。
人体测试时,两路信号电极分别贴在两手腕内侧,右腿驱动电极贴在右脚踝。皮肤先用水或酒精轻轻擦拭,减少角质层阻抗,让电极和皮肤充分贴合。坐姿放松,不要说话,保持平稳呼吸。我自己的经验是,静坐稳定后30秒,基线漂移明显变小,P-QRS-T波群能清晰看到。
接上人体后如果还有50Hz残留,先确认右腿驱动电极是否贴牢,再看导联线是否和电源线平行走向。电源线挪个位置往往就有立竿见影的效果。肌电干扰大时,让被测者把胳膊自然下垂、肩膀放松,紧张状态下骨骼肌电会污染心电信号,这个在测试前就要交代清楚。
最终看到屏幕上的P波、QRS波群和T波一个一个冒出来时,前面所有反复核查都值了。R波高度在1V左右,QRS波群宽度大约80-100ms,T波方向与R波一致但宽度明显更宽,低频成分丰富,说明0.05Hz高通没有把T波尾巴切掉太多。
这次做下来最深的体会是,ECG前端设计的难度不在任何单个元件,而在于所有问题都会叠加在一起。每个低频噪声、每条地线、每段导联线的处理,单独看似乎都不是决定性的,但最后的总信噪比取决于最差的那一环。我后来重新做一版时,把右腿驱动的布局放在输入插座最近的位置,屏蔽驱动、输入保护、滤波链路各占一块,整体调试时间比第一版少了一半。如果你正准备搭自己的心电前端,建议一次把布局和屏蔽想清楚,比反复改板省事得多。