这几年一直在捣鼓生物电采集相关的电路,手头攒了不少方案,但要说最经典、最适合用来吃透模拟信号链设计的,还得是自己从头做一块基于集成运放的心电放大器。正好最近整理资料,把原来的设计重新梳理了一遍,顺便把踩过的坑也一并写出来。这篇博文从指标设定、器件选型、各级电路计算,到PCB布局和实物调试,完整走一遍流程。想做医疗电子、学生物医学工程,或者单纯想搞定微弱信号放大电路的,都可以拿这份内容当参考底稿。
1. 心电信号为什么难放大:读懂源信号才能定指标
很多人拿到心电放大这类题目,第一反应是“放大倍数不够就多放大几级”。这个思路不能说错,但如果不先搞清楚心电信号本身长什么样、周围的噪声环境又多恶劣,做出来的板子大概率是“接上电极就饱和,去掉电极就工频”。
1.1 我们要放大的究竟是个什么东西
先从源信号说起。心电信号在体表表现出来的幅度大概在0.5mV到4mV之间,QRS波群最明显,可以到1到2mV,P波和T波就小得多,有些导联上只有0.1到0.3mV。频率范围按诊断标准是0.05Hz到100Hz,但能量最集中的区域在0.5Hz到45Hz这个区间。
这几个数字乍一看没什么,但稍微算一下就明白难在哪里了。
假设我们后级要接一个5V供电的ADC,为了充分利用它的动态范围,把心电信号放大到2V左右比较合适,以2mV的典型幅度来算,系统总增益需要约1000倍,也就是60dB。这个增益并不夸张,很多音频放大器轻松就能做到,但问题在于心电信号的另一个特性——源阻抗高且不稳定。
皮肤与电极之间的接触阻抗通常在几十千欧到几兆欧之间,还会随着出汗、呼吸、身体活动不断变化。如果放大器的输入阻抗不够高,信号在源阻抗上分压之后就会被吃掉一大截。更麻烦的是,接触阻抗不对称时,外界共模干扰会在这里转化为差模干扰,直接进入放大器内部。
体表采集到的信号,除了微弱的ECG之外,还有大量干扰成分。最典型的就是50Hz工频干扰,人体本身就是一个大型天线,在工频电场里会感应出几伏甚至十几伏的电压。这比心电信号大了上千倍,如果共模抑制能力不够,这些干扰会轻松把有用信号淹没。
1.2 设计指标怎么定下来
明确了源信号特性和干扰环境,设计指标就不是拍脑袋定的,而是逐项推导出来的。
| 指标 | 设计值 | 设定依据 |
|---|---|---|
| 总增益 | 60dB(1000倍) | 2mV信号放大到2V,匹配后级采集 |
| 带宽 | 0.5Hz~100Hz | 覆盖QRS、T波主要能量,压低肌电和射频干扰 |
| 输入阻抗 | ≥10MΩ | 减小电极接触阻抗带来的分压和共模转差模 |
| 共模抑制比 | ≥80dB,目标90dB+ | 人体感应工频达伏级,需衰减10000倍以上 |
| 输出摆幅 | 接近电源轨 | 后级ADC或示波器可直读 |
| 等效输入噪声 | ≤10μVpp | 保证2mV信号有40dB以上信噪比 |
带宽取0.5Hz到100Hz需要注意一点,严格说这不是“诊断级”标准,更像“监护级”标准。诊断心电要求低频做到0.05Hz,用来观察ST段等慢变化成分,这需要更大的耦合电容和更复杂的基线恢复电路,做起来难度会上一个台阶。考虑到这是独立设计项目,监护级指标在工程实现和信号质量之间取了个均衡。
噪声方面,10μVpp的等效输入噪声对应到输出就是10mVpp,在2V的信号幅度面前完全不影响观察。这个指标靠普通的低噪声运放就能达到。
2. 架构与选型:为什么三运放仪表放大器是前置级的公认答案
系统指标定完之后,下一步是决定用什么样的电路架构。很多初学者会直接拿一个通用运放接成差分放大电路,比如典型的单运放差分结构,电路简单,元件少,但实际做出来效果非常糟糕,问题出在共模抑制比上。
2.1 仪表放大器的结构优势
单运放差分电路想要有高共模抑制比,前提是四个匹配电阻严格相等。这事在理论上成立,在现实中很难做到。拿1%精度的电阻来说,只要有一个电阻偏了1%,共模抑制比就会掉到40dB左右,这离我们80dB的目标差了十万八千里。哪怕用0.1%精度的电阻,也只是勉强够用,成本却高了不少。
集成仪表放大器解决的正是这个匹配难题。它内部用三个运放组成经典结构:第一级是两个同相放大器,以差分方式工作,差模信号被正常放大,共模信号只是跟随通过;中间那级是差分转单端电路,把两个输入端的差值提取出来。关键在于,内部所有决定增益和匹配的电阻都做在同一个芯片里,经过激光修调,匹配精度远不是外部电阻能比的。
AD620的结构比较有代表性,外部只需要一个电阻RG就能设定增益,增益公式为:
G = 49.4kΩ / RG + 1
这个49.4kΩ是内部增益电阻网络上等效出来的数值。用这个公式,想要多少倍增益,算一下换个电阻就行,非常方便。
输入阻抗方面,仪表放大器第一级是同相放大结构,输入阻抗直接等于运放的共模输入阻抗,典型值在10^9Ω以上,对前面的源阻抗来说几乎是开路的,完全不用担心电极接触阻抗的影响。
2.2 集成方案与分立方案的取舍
前置级选择集成仪表放大器,理由已经比较充分了。但市面上型号很多,参数各有侧重,选型时要结合具体场景来考虑。
我当时对比的几个方案如下:
| 型号 | 增益电阻 | 输入噪声 | 偏置电流 | 供电范围 | 特点 |
|---|---|---|---|---|---|
| AD620 | 外置RG | 9nV/√Hz | 1nA max | ±2.3V~±18V | 低功耗、经典款,增益公式简单 |
| INA128 | 外置RG | 8nV/√Hz | 5nA max | ±2.25V~±18V | 高精度、共模抑制比略高 |
| INA826 | 外置RG | 18nV/√Hz | 50nA max | 2.7V~36V单电源 | 单电源低压方案合适 |
| OP07三运放分立搭建 | 外部电阻网络 | 10nV/√Hz级别 | 低 | ±3V~±18V | 成本最低,匹配精度难以保证 |
如果做的是低功耗便携设备,AD620或者INA826更合适;如果追求极致的共模抑制比和低温漂,INA128可以排前面。但要是纯粹作为学习项目来验证仪表放大器的原理,用两颗OP07加一颗运放自己搭一个三运放仪表放大器也完全可行,成本会低不少,只是需要额外挑电阻,非常折腾。
我自己最终选了AD620,主要是看重它外围简单、资料多、不容易翻车,调试电路的时候能省不少时间。这个项目核心是把信号链跑通,不是跟电阻匹配较劲。
2.3 增益分配逻辑:别让第一级吃太饱
系统总增益1000倍,怎么分配到各级,这是个非常有讲究的问题。如果把全部增益都放在前置级,输入端拾取的直流偏置和噪声也会被同比例放大,导致中间级饱和,后面再好的滤波都白搭。
这里要专门说一下电极直流偏置的问题。生物电采集电极与皮肤接触时,会产生一个所谓的半电池电势,这个电势可以高达正负300mV。这不是放大器的故障,而是电化学现象的物理结果。如果前置级直接以1000倍增益去放大这个直流成分,输出直接就是300V,早饱和到电源轨了。
所以整个信号链的安排必须遵循一个原则:先把直流隔掉,再放大交流;或者用适当的增益分配,让前级输出不至于饱和。
我设计的增益分配是:前置仪表放大器约20倍,中后级再放大约50倍,总增益约1000倍(60dB)。20倍的放大对300mV直流偏置来说,输出是6V,如果不隔直还是会饱和,所以前置级后面必须紧跟一个高通滤波器,把直流和超低频成分滤掉,再进入后面的放大级。这个顺序是不能颠倒的。
3. 从图纸到电路:各级设计与完整计算
架构定好后,剩下的就是硬碰硬的电路设计。每一个电阻、电容的取值都要落到计算上,不是因为“大家都这么用”,而是算出来的结果能直接对应到指标上。
3.1 前置仪表放大级:AD620外围电阻计算
AD620的增益计算很简单,目标增益20倍,代入公式:
RG = 49.4kΩ / (G - 1) = 49.4 / 19 ≈ 2.6kΩ
实际选型时,我用了2.4kΩ精密电阻串联200Ω多圈可调电位器,这样可以把增益精确调在20倍附近。如果对增益精度要求不高,直接用2.61kΩ的组合也行,比如2个5.1kΩ并联再加一个100Ω,但这种组合没必要。多圈电位器还附带一个好处,调试时可以用它微调增益来配合后级。
前置级的输入端不能悬空,两个输入引脚各用一支1MΩ电阻接到共模点,既提供偏置电流通路,也为后面的右腿驱动电路提供共模采样点。这两个电阻值的选择主要是折中:太小会降低输入阻抗、增加源负载;太大又会让偏置电流在上面产生压降。1MΩ对AD620这个级别的偏置电流来说完全没问题。
3.2 高通耦合与基线漂移抑制
前置级输出后进入到高通滤波级。这一级有两个功能:一是隔断前置级输出中的直流分量,二是设定系统低频截止频率,压制基线漂移。
经典的RC高通滤波器截止频率公式是:
fL = 1 / (2πRC)
要压低基线漂移但又不损失心电的ST段信息,我选择了约0.5Hz的截止频率。取R = 1MΩ,C = 0.33μF,代入计算:
fL = 1 / (2π × 1MΩ × 0.33μF) ≈ 0.48Hz
RC乘积的部分用1MΩ电阻和0.33μF电容的组合。这里有一个容易踩的坑:耦合电容必须用漏电小的类型,比如CBB电容或者聚丙烯电容,尽量不要用电解电容。电解电容的漏电等效于并联了一个电阻,会让理想的RC高通特性变形,表现为基线缓慢漂移且难以消除。
高通滤波器本身是无源RC结构,没有增益,不会引入额外噪声,这和后面有源滤波器是不同的,所以放在这里比较安全。
3.3 低通滤波:100Hz带宽如何搭出来
信号经过高通之后,进入低通滤波级,用来限制带宽到100Hz左右,把高频的肌电干扰和射频噪声挡在外面。
为了获得比较陡的衰减特性,我没有用简单的一阶RC,而是用了二阶Sallen-Key有源低通滤波器。这种拓扑的好处是结构简单,用一个运放加四个无源元件就能实现二阶响应,而且可以用等值电阻简化计算。
Sallen-Key单位增益低通滤波器的设计公式:
fH = 1 / (2πR√(C1C2))
取C1 = 0.01μF,C2 = 0.02μF(两个0.01μF并联),截止频率100Hz时:
R = 1 / (2π × 100 × √(0.01μF × 0.02μF)) ≈ 112.5kΩ
实际取标称值110kΩ,算下来截止频率约102Hz。电容取2:1的比例是为了获得接近巴特沃斯响应的阻尼系数,让通带内更平坦,不会在截止频率附近出现明显振铃。
我推荐的这一级电路里,运放可以采用四运放芯片里的其中一路,比如TL084、LM324之类的,因为信号到这一级已经被放大到足够大的幅度,运放本身的噪声已经不那么关键了。但要注意,如果供电电压允许,尽量选择压摆率稍高的运放,避免大信号时产生失真。
3.4 主放大级与输出驱动
低通滤波器本身是单位增益结构,没有放大功能。剩下的增益任务由主放大级来完成。
前置级已经放大了20倍,系统目标是1000倍,所以主放大级需要50倍增益。用同相放大结构:
G = 1 + R2 / R1 = 1 + 100kΩ / 2kΩ = 51倍
总增益 = 20 × 51 = 1020倍,相当于约60.2dB,与指标吻合。这个51倍和50倍的误差完全可以接受,后期微调电位器还能进一步修正。
同相放大器的输入阻抗很高,不会对前面滤波器的输出造成负载问题,这也正是它适合放在这里的原因。
输出级在运放输出端串联一个100Ω电阻再接负载。这个电阻的作用不是限流,而是隔离运放输出端的容性负载。示波器探头、ADC输入往往都有一定的输入电容,如果这个电容直接接在运放输出上,在某些频率上会和运放的输出阻抗形成极点,导致相位裕度不足,产生高频振荡。串一个100Ω电阻可以把容性负载和运放隔离开来,是模拟电路里常用的小技巧。
3.5 右腿驱动及其他辅助电路
右腿驱动电路是整个模拟前端里最容易被忽略但又特别有效的一环。它的思路是:把两个输入端的共模电压采样出来,反相放大后送回人体,用反馈的方式把人体的共模电位“稳住”,而不是任由它随着工频电场飘动。
具体实现是在两个输入端各接一个1MΩ电阻,把两路共模信号汇总到一个节点,再用一个运放接成电压跟随器缓冲,输出经过一个100kΩ到1MΩ之间的电阻接到右腿电极。
右腿驱动能显著降低共模干扰。反馈环路的放大倍数不需要太高,关键是相位要正确,如果反馈反了反而会振荡。实际测试中,开启右腿驱动后输出端的50Hz残留通常能降低一个数量级以上。
电源部分我用的是±5V双电源。可以用两节9V电池串联后分别取正负,也可以直接用实验室电源。每个运放的电源引脚旁边都加一个0.1μF陶瓷电容做去耦,这属于常规操作,但很多翻车案例就是少了这几个电容导致的。
4. 50Hz工频干扰:这个敌人必须单独列一章
做心电放大器,绕不开50Hz工频干扰。很多方案输就输在工频上。调好的电路白天测没问题,到了晚上某个教室里灯一开就满屏波浪。这里面既有原理性的问题,也有工程处理的问题。
4.1 工频干扰是怎么进入放大器的
工频干扰的耦合途径主要有三条。
第一条是空间电磁耦合。人体和导联线在50Hz电场中相当于天线,通过分布电容感应出电位。这个感应的共模电压可能高达几伏甚至十几伏,相比之下心电信号只有几毫伏。
第二条是电源纹波传导。整流滤波后的电源即使加了稳压,也还有微弱的50Hz或100Hz纹波,如果运放电源抑制比不够高,或者去耦电容放的位置不好,纹波就会串入信号通路。
第三条是地环路。当电路通过示波器、电脑USB等设备接地时,不同接地点之间存在电位差,形成一个包含大地在内的环路,50Hz电流在环路中产生压降,被放大器当成差模信号放大。
搞清楚来源,就有对应的治理手段。空间耦合靠右腿驱动、屏蔽和差分放大器的共模抑制来压制;电源纹波靠高质量的稳压和去耦来解决;地环路则需要在系统接地策略上做文章。
4.2 双T有源陷波器的设计与调校
尽管前置级有较高的共模抑制比,右腿驱动也能压掉一大截共模,但工程中很难做到把50Hz完全消灭干净。尤其是在电磁环境比较差的实验室里,输出端依然能看到明显的50Hz正弦波叠加在心电波形上。
这时候就需要陷波器上场。我用的是双T有源陷波器,原理是RC双T网络在中心频率处形成低阻抗反馈路径,将该频率处的增益压得很低,其他频率几乎不受影响。
双T网络的中心频率计算:
f0 = 1 / (2πRC)
如果取R = 31.8kΩ、C = 0.1μF,可以得到约50Hz的陷波频率。由于31.8kΩ不是标称值,我用30kΩ电阻串联一个5kΩ多圈电位器的方式,把中心频率精确校正到50Hz。
实际调试时,先输入一个已知幅度的50Hz正弦波,用示波器看输出,然后慢慢调节电位器,让输出幅度降到最低。这个过程对电阻电容的匹配度非常敏感,如果双T网络的两个R值不相等、或者两个C值不相等,陷波深度会大打折扣。我测试时用了1%精度的电阻和5%精度的CBB电容,最终能把50Hz压掉40dB以上,基本满足需求。
陷波器放置的位置也有讲究。我把它放在低通滤波器之后、主放大级之前。这时候信号幅度还不算太大,陷波器本身的插入损耗不会影响后级信噪比,而且陷波器自身可能会引入一些噪声,放在增益级之前会被进一步放大,所以放在主放大级之前、经过了一些滤波和增益之后更合理。
4.3 屏蔽、接地与电源去耦的细节
在低频模拟电路里,屏蔽层怎么接是个细节但很关键的问题。我一开始给输入引线加了屏蔽线,但把屏蔽层在放大板端直接接地,测量时发现干扰反而变大了。这是因为屏蔽层和地构成了一个大环路,工频磁场在这个环路里感应出电流,产生噪声。
标准的做法是屏蔽层只在信号源端单点接地,放大器端悬空,或者通过一个小电容接地,这样可以避免形成地环路。对于心电导联线这种低频信号,屏蔽层的接法更多是为了防护电场干扰,环路问题要靠右腿驱动来解决。
电源去耦方面,除了每个运放电源脚0.1μF陶瓷电容就近放置之外,建议在板子的电源入口处再加一个10μF到100μF的电解电容。陶瓷电容负责高频,电解电容负责低频稳压,两者配合才是完整的去耦方案。
还有一个容易被忽略的细节:模拟部分的地不要跟数字部分的地混在一起。如果板上只有模拟电路,那就统一单点接地,把所有地线汇聚到电源入口处的一个点,避免形成多个地环路。
5. 打板、焊接与逐级调试:从元件到真实波形的过程
电路图画得再漂亮,焊出来效果不好一样白搭。这一章讲讲板级实现和调试,这些经验都是真金白银的学费换来的。
5.1 PCB布局的几个原则
如果只是为了验证原理,用洞洞板飞线就能搭出能用的心电放大器。但如果想做得稳定可靠,建议还是画一块PCB,哪怕双面板就够了。
布局的核心原则有几个。
第一,输入级器件要紧挨着输入端。AD620和输入端的电阻电容应该尽量集中,走线越短越好,输入端周围不要走电源线和高频数字信号线。在双面板上,输入端下方不要铺地平面,因为寄生电容会让共模抑制比下降。
第二,反馈网络要就近布局。AD620的RG电阻、主放大级的反馈电阻,都要尽量靠近运放的引脚,缩短反馈路径。反馈路径走长了,容易引入寄生电感和电容,破坏稳定性。
第三,地线采用星形接地。电源入口处作为星形接地的中心,各路地线单独回到这个中心点,而不是串链式连接。这样每个部分的地电位相对干净,不容易互相干扰。如果做四层板,可以单独铺一个模拟地平面,效果更好,但对这个项目来说双面板足够。
第四,所有去耦电容必须尽量靠近目标芯片的电源脚,中间不要打太多过孔。去耦电容的引脚走线太长,它的等效串联电感就会变大,高频去耦效果大打折扣。
5.2 逐级调试的正确顺序
我的调试流程是严格分级的,绝不跳过任何一步。
第一步,先不装任何芯片,只焊接电源部分。通电后量各级电源电压是否正常,正负5V是否对称。这个环节如果出问题,后面全白做。
第二步,安装AD620和后面的运放,但前置级输入短接到地。用示波器看各级输出,确认没有自激振荡。正常的输出应该是一条干净的直线,噪声在示波器上表现为毛刺,幅度越小越好。如果看到幅度比较大的周期波形,说明电路在自激,优先检查去耦电容和反馈网络。
第三步,在输入端接入一个已知幅度的正弦波信号,从前往后逐级用示波器观察波形。先看前置级输出,幅度应该是输入乘以20,再看低通输出,幅度不变且高频噪声被滤掉,最后看主放大级输出,幅度再乘51。哪一级不对就检查哪一级。
第四步,把输入端换成心电信号模拟源或者直接接电极实测。
整个调试过程要记录各级的直流工作点和交流增益,一旦后面出现问题,可以快速定位是哪一级出了状况。
5.3 我踩过的坑和对应解药
调试过程中踩过几个坑,拿出来分享一下。
第一个坑是输入端悬空导致输出饱和。刚焊好板子,我直接拿示波器探头去点输入端,结果输出端直接是一条平线顶到电源轨。原因很简单,输入端悬空时,运放的偏置电流无处流,会在输入电容上充电,直到运放输出饱和。解决方法是输入端必须始终有直流路径,也就是那对1MΩ偏置电阻不能省。
第二个坑是测量仪器带来的干扰。用示波器探头测量输入端时,如果示波器本身接了大地,探头的地线夹会把大地电位引到电路的地上,形成地环路。这时候即使电池供电,电路依然会有很大的50Hz干扰。后来我改用探头的尖端直接测信号、地线夹不接,或者用一个隔离变压器给示波器供电,情况好很多。
第三个坑是电容漏电。一开始我把耦合电容用了普通的电解电容,结果基线不断缓慢漂移,就像一个“会呼吸”的直流偏置。换成了CBB电容之后,问题立刻消失。对于这种低频模拟电路,漏电参数远比容量精度重要。
第四个坑是电位器调整陷波频率时,手一碰到调节杆,波形就变样。人体通过电位器金属杆给电路引入了一个容性耦合路径。后来我在电位器外面套了绝缘帽,调完频率就不再去碰它。
6. 波形验证:信号源模拟与人体实测
电路调通了,不等于项目结束了。还需要通过两种方式的验证,确认它确实能可靠地放大心电信号。
6.1 用信号发生器制造一个“假心电”
在直接上人体之前,先用信号发生器模拟心电信号来验证放大器是更科学的方式。因为真实心电信号难以控制幅度和频率,出了问题也不好判断是放大电路的问题还是信号源的问题。
信号发生器的输出通常最小也有几十毫伏,直接送到放大器输入端会把放大器打饱和。我用了电阻分压方式做了一个衰减器:信号发生器设置成2V输出,经过一个10kΩ电阻和一个10Ω电阻分压,从10Ω两端取出信号,衰减比大约为1000:1,实际送到放大器的就是约2mV。
把信号频率设置成1.2Hz,波形选正弦波或者三角波,模拟心电的节奏。这时候示波器在放大器输出端应该看到约2V幅度、1.2Hz频率的清晰波形,无失真、无饱和。用方波测试则能观察放大器的带宽是否足够,方波前沿如果变得圆滑,说明高频不足;如果出现振铃,说明带宽过宽或滤波器阻尼不够。
这个衰减器测试法不仅用于本项目,调试任何微小信号放大器都非常实用。
6.2 上手臂实测的注意事项和结果判断
信号发生器测试通过之后,就可以上人体实测了。心电标准导联有很多种,最常见的简单接法是左臂、右臂和右腿三电极系统。
电极贴之前一定要用酒精棉擦拭皮肤,降低接触阻抗。湿毛巾擦也可以,目的是去油去角质。皮肤准备做得好不好,直接影响信号质量和50Hz干扰程度。
左臂接放大器正输入,右臂接负输入,右腿接右腿驱动。坐下来,手放在腿上不动,保持放松,这时候示波器上应该能看到比较清晰的心电波形,QRS波群突出,T波隐约可见。
实测中遇到过一个很典型的困惑:只要手一活动,波形就开始剧烈漂移,看起来像放大器坏了。后来明白了,这是运动伪迹。人体活动时,电极与皮肤的接触阻抗发生变化,产生低频干扰,这部分干扰超出了模拟滤波器的能力范围,并不是电路故障。事实上,在保证接触良好的前提下,稳定静坐时的波形基本可以把心电的主要特征看清楚。
如果实测时仍然有50Hz干扰,优先检查右腿驱动是否接好、偏置电阻网络路径是否正确、示波器是否形成了地环路这三件事。按照我的经验,90%以上的工频问题都出在这三处。
整套系统跑通之后,信号链路基本是清晰的:电极拾取微弱心电,AD620前置放大20倍并抑制共模,RC高通隔直、Sallen-Key低通限带宽,双T陷波器压制工频,主放大级再放大50倍输出。每一级的参数都由系统指标反推而来,没有玄学成分。这套设计做完之后,再去看那些商用心电模块的规格书,里面每一行指标都有了实际对应物。做模拟电路最有价值的地方就在这里——原理不是书本上的公式,而是手里的波形和噪声。