
第一次把自制的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到40HzP波和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决定G150kΩ/Rg。比如Rg取5.1kΩ增益就是150/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的基本是肌电和射频残留所以低通转折设在100Hz50Hz工频干扰虽然被右腿驱动大幅压低但不可能完全消失所以还可以加一个窄带陷波器。我先在纸上画带宽图0.05Hz以下一刀切掉100Hz以上一刀切掉然后在50Hz处挖一个坑。心电信号的QRS主频在10-40HzT波高频成分大约在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用C1100nF、C247nFR的取值按公式算出来大约是23.2kΩ。标准电阻取22kΩ实际截止频率大约105Hz完全够用。如果对截止频率有严格要求的应用可以用两个精密电阻微调。要注意Sallen-Key低通在Q0.707时对元件容差不敏感但运放的增益带宽积还是要留够余量。截止频率100Hz、增益1时任何通用运放都够用但后面主放大如果和滤波放在一起就要注意高增益和带宽的矛盾。我习惯把主放大和低通分开处理主放大用同相放大结构放大倍数约100倍同相端直接接高通后的信号然后低通单独一级避免同一级同时满足高增益和高Q值。4.4 双T有源陷波器50Hz的最后一刀做了右腿驱动之后50Hz残留通常已经很小但信号源附近的工频磁场耦合还是会给最终波形留下一点毛刺。所以我在低通之后加了一级有源双T陷波器专门对付50Hz。双T网络的核心元器件是三个电阻和三个电容中心频率由RC乘积决定。如果取电容100nF中心频率50Hz对应的电阻是31.8kΩ。标准电阻架设采用R1R232kΩ、R316kΩC1C2100nF、C3200nF两个100nF并联然后用一个运放做跟随器从两个T型网络的公共点注入少量正反馈提高Q值。陷波器的Q值不是越高越好。Q值太高虽然50Hz处衰减极深但3dB带宽只有3Hz左右中心频率稍微漂移一点就失效了而且对元件容差极其敏感。我用的Q值大约在3到5之间3dB带宽约10到16Hz既能把50Hz压掉20dB以上又不会因为元件偏差导致中心频率偏出谐振点。调试时用信号发生器输入一个1Vpp、频率在45Hz到55Hz之间扫动的正弦波调整陷波器里的微调电阻让输出幅度在50Hz附近最低调完后用热熔胶或漆把电位器固定住防止后续振动改变参数。5. 布局与屏蔽噪声对抗从原理图走向PCB5.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μVCMRR20log(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-100msT波方向与R波一致但宽度明显更宽低频成分丰富说明0.05Hz高通没有把T波尾巴切掉太多。这次做下来最深的体会是ECG前端设计的难度不在任何单个元件而在于所有问题都会叠加在一起。每个低频噪声、每条地线、每段导联线的处理单独看似乎都不是决定性的但最后的总信噪比取决于最差的那一环。我后来重新做一版时把右腿驱动的布局放在输入插座最近的位置屏蔽驱动、输入保护、滤波链路各占一块整体调试时间比第一版少了一半。如果你正准备搭自己的心电前端建议一次把布局和屏蔽想清楚比反复改板省事得多。