简介:峰值检测电路是面向电子工程学习者与硬件设计人员的一份技术文档,围绕如何准确捕获并保持输入信号最高电压展开,可用于通信、数据采集、自动增益控制及传感器最值求取等场景的学习与方案参考。压缩包内仅含1个doc文件,大小约594KB,内容以电路原理、方案对比和设计要点整理为主,便于集中查阅。文档从二极管与电容构成的基础结构讲起,分析正向压降、负载泄放等误差来源,并延伸至“超级二极管”、输入输出缓冲、电容放电复位及FET运放等改进方案;同时介绍分立二极管电容型、无二极管型以及ADI PKD01等集成实现,给出频率范围与检测误差等选型参考。已有348人学习,适合需要理解峰值检测电路工作机理、比较不同实现方式并辅助电路选型的读者。
1. 峰值检测电路:为什么"一个二极管加一个电容"注定测不准
峰值检测电路(PKD)最反直觉的一点是:教科书上那个"一个二极管加一个电容"的图,在真实电路里几乎从不能直接用。同样是 5kHz、2Vpp 的正弦输入,1nF 保持电容要花 100ms 才勉强爬到稳定值,量出来的峰值还偏低 10%。问题不在电容漏电,而在二极管的正向导通压降和缺失的缓冲——电荷进得慢、出得快。搞懂这两件事,就搞懂了 AGC 环路里那个"峰值判据"为什么总在临界点上抖,也搞懂了程控增益放大器选挡时到底该信峰值还是信有效值。
2. 电荷记账:峰值"保持"到底在保持什么
2.1 从 i = C·dv/dt 出发,保持就是"没有电流"
峰值检测的目标是 Vo = Vpeak,并且在新峰值到来之前一直不变。把这句话翻译成电学语言:电容上的电压要冻结,而冻结的唯一条件是流过电容的净电流为零。于是整个电路的设计问题就被化简成一句话——在所有不该充电的时刻,把漏电流压到足够小;在所有该充电的时刻,把充电电流做得足够大。
这个视角一旦建立,很多看起来玄学的现象就变得可解释了。为什么 FET 输入运放被反复推荐?不是因为它"高级",而是因为它的输入偏置电流能低到 75fA 量级,几乎不偷电荷。为什么保持电容不能随便选大?因为充电电流有限,C 越大,dv/dt 越小,建立时间按比例恶化。为什么 PCB 要用清洗过的板子、要加保护环?因为助焊剂残留和表面受潮形成的漏电路径,阻值可能只有 10^10 欧姆量级,在 1V 电压下就是 100pA,比 FET 运放的偏置电流大了三个数量级。
下面这段代码把常见的几路漏电流折算成实际的电压跌落速率,这个换算在做方案评估时很值得先跑一遍,比事后在示波器上猜要省事得多。
# 保持阶段的电压跌落:把每一路漏电流折算成 droop C_HOLD = 1e-9 # 保持电容 1nF leaks = { "双极型运放输入偏置电流": 80e-9, # 80nA "FET 输入运放偏置电流": 75e-15, # 75fA "二极管反向漏电流": 20e-9, # 20nA @ 25C "PCB 表面漏电(受潮)": 1e-9, # 1nA } for name, i_leak in leaks.items(): droop = i_leak / C_HOLD # 单位 V/s dv = droop * 1e-3 * 1e3 # 保持 1ms 的跌落量,换算成 mV print(f"{name:<22} droop={droop:>10.3f} V/s 1ms 跌落 {dv:>9.3f} mV")参数只有两个:C_HOLD是保持电容的容值,i_leak是某一路漏电流的安培数,droop就是这条路径单独造成的电压下降速率。结果很说明问题:双极型运放那一路是 80 V/s,1ms 就掉 80mV,完全没法用;换成 FET 输入,同样的电容下 1ms 只掉不到 0.1μV;而二极管的反向漏电和板子的表面漏电,在 FET 方案里反而成了主要矛盾。这就是为什么很多看起来"用了好运放却还是保持不住"的电路,问题其实出在二极管选型和 PCB 工艺上,跟运放没关系。
2.2 建立过程:为什么充电越到后面越慢
在简单二极管加电容的结构里,充电条件是 Vi > Vc + Vd。以 2Vpp 正弦为例,峰值是 1V,二极管压降按 0.6V 算,那么只有当输入瞬时值超过 Vc + 0.6V 时才有充电电流。刚开始 Vc = 0,输入超过 0.6V 的那一段都能充电,导通窗口很宽;随着 Vc 抬高,窗口越来越窄,到 Vc 接近 0.4V 时,输入只有峰值那一瞬间才勉强超过阈值,充电电流脉冲窄到几乎可以忽略。
这就是收敛慢的根源——它不是一个线性 RC 充电过程,而是一个几何收敛过程,每一轮只能把差距缩小一点点,所以表现为"越到后面爬得越慢"。100ms 后还差 10%,本质上是还没充到位,而不是电容自放电。同时,二极管在小电流下压降会下降(对数关系),这让最终的稳态值不会停在 Vpeak - 0.6V 这种夸张的位置,但代价是整个逼近过程被拉得极长。仿真里看到的那条缓慢上升的曲线,就是这两件事叠加的结果。
理解这一点很关键:简单二极管结构的误差是"静态压降"和"动态未充满"两个成分的混合,改善措施也得分头对症——前者靠把二极管放进反馈环,后者靠增大充电电流、减小保持电容或者提供一条低阻充电旁路。
2.3 把误差拆成三笔账
真正动手调电路之前,把误差按来源分类,比漫无目的地换器件有效得多。下面这张表是实际调试时最常用的一版归类。
| 误差来源 | 表现形态 | 典型量级 | 对策方向 |
|---|---|---|---|
| 二极管正向压降 | 输出稳定偏低一个固定值 | 0.3~0.7V | 超级二极管、开集输出替代 |
| 充电窗口过窄 | 输出缓慢爬升,长时间不收敛 | 与 C、输入频率强相关 | 减小 C、增大充电电流、加旁路 |
| 漏电流 | 峰值后单调下跌,无平台 | nA~pA 级,随温度恶化 | FET 运放、低漏电二极管、清洗 PCB |
| 运放失调与偏置 | 小信号误差占比爆炸 | μV~mV | 低 Vos 器件、斩波稳零 |
| 电容介质吸收 | 复位后残余电压回弹 | 0.1%~1% 的先前电压 | 换 C0G/聚丙烯介质 |
介质吸收这一项经常被忽略,但它在需要频繁复位的场合非常致命。电解电容和某些高介电常数陶瓷电容在放电后,介质内部被"困住"的电荷会慢慢释放回极板,表现为复位后输出从 0 缓慢回升几十毫伏。做高精度保持电路时,保持电容优先选 C0G 或聚丙烯,不是因为"发烧",是因为它们的介质吸收能低一个数量级。
3. 超级二极管:把二极管塞进反馈环,0.65V 去哪了
3.1 环路增益如何把 Vd 除掉一个数量级
简单二极管的问题出在二极管在反馈环外面——它的压降是开环的,直接叠加在输出上。把二极管挪到运放的反馈路径里,情况就完全不同了:运放会主动把自己的输出抬高到"刚好让 Vout 等于 Vin"的程度,二极管压降被闭环增益吸收掉了。
推导不复杂。设运放开环增益 A,反馈系数 β(跟随器接法下 β≈1),二极管压降 Vd,那么残余误差近似为 Vd/(1+Aβ)。这个式子说明一件事:超级二极管的精度不取决于二极管选得多好,而取决于运放还有多少开环增益剩余。
# 超级二极管把 Vd 压掉多少:残余误差 ≈ Vd / (1 + A*beta) Vd = 0.65 # 二极管正向压降,V for A in (1e3, 1e4, 1e5, 1e6): # 开环增益 beta = 1.0 # 跟随器接法,反馈系数 ≈ 1 residual = Vd / (1 + A * beta) print(f"A={A:>9.0f} 残余压降={residual*1e6:>8.1f} uV")A是运放在工作频率下的开环增益,注意不是数据手册首页那个直流值。低频时 A 能到 10^5~10^6,残余压降降到微伏级,误差直接从"百分比"掉到"ppm";但到了几十 kHz,A 可能已经衰减到 10^3 以下,残余误差又回到几百微伏。所以超级二极管的精度是随频率衰减的,这一点在宽频应用里必须算进去。
更要紧的是,把 Vd 压下去之后,瓶颈立刻换人了——运放自身的失调电压 Vos 不在反馈环内被抑制,它原封不动地加在输出上。精密运放的 Vos 可以做到几十微伏,普通运放则是几个毫伏。这就是为什么超级二极管方案里,选运放的重点从"带宽"转向了"Vos 和 Ib"。
3.2 负饱和:超级二极管真正的代价
超级二极管换来精度的同时,引入了一个简单结构里根本不存在的问题。当输入电压低于电容上的保持电压时,二极管必须截止,而此时运放为了维持闭环,输出会一路向下跑,直到撞上负电源轨进入饱和。等下一个峰值到来,输入由负转正,运放必须先从负饱和里爬出来,爬回 Vd 以上,二极管才重新导通。这段爬升时间就是"死区",期间输入的任何变化都不会被记录,输出就是失真的。
# 负饱和恢复:运放从负饱和轨摆回导通点要多久 SR = 10e6 # 压摆率 10 V/us Vsat = -13.0 # 负饱和输出 Vturn_on = 0.65 # 二极管重新导通所需的运放输出 for extra in (0.0, 0.7): # 0 = 无钳位,0.7 = 加了跨接二极管后的起点 dv = abs(Vturn_on - (Vsat + extra)) print(f"需摆动 {dv:5.1f} V -> {dv/SR*1e6:5.2f} us")SR是运放的压摆率,dv是需要跨越的电压差。没有防饱和措施时,运放要从 -13V 摆到 +0.65V,跨度接近 14V,10V/μs 的运放要花 1.4μs。对于 500kHz 的信号,一个周期才 2μs,意味着大半个周期都处在"运放还在爬"的状态。这就是为什么很多超级二极管电路在低频测试台上表现完美,一上到几百 kHz 输出波形就开始畸变——不是带宽不够,是恢复时间吃掉了有效窗口。
3.3 跨接二极管:用一条旁路换回恢复时间
解决办法很直接:在输入和输出之间再跨一个二极管。它的作用有两层,很多人只看到第一层。
第一层是钳位。当输入快速上升时,这条旁路让输入直接给保持电容充电,绕过了运放的压摆率限制,充电电流不再受运放输出能力约束。第二层是防饱和:当输入低于输出时,这条二极管反向截止,但它把运放输出端的负向摆幅限制在 -0.7V 附近(通过反馈路径把输出钉住),于是运放不再掉到 -13V。恢复时间对应的dv从 14V 变成 1.4V,恢复到 0.14μs,快了一个数量级。
代价是引入了一条额外的反向漏电路径,以及输入端的负载效应。跨接二极管的反向漏电会直接给保持电容充电或放电,所以这个位置对二极管的反向特性要求比主二极管更严。用普通硅开关二极管时,室温下几 nA 的反向漏电在 1nF 电容上就是几 V/s 的 droop,需要评估是否可接受;要求高的话得换低漏电器件。
三种结构放在一起对比,取舍关系就清楚了。
| 结构 | 静态误差 | 恢复时间 | 成本 | 适用场景 |
|---|---|---|---|---|
| 简单二极管+电容 | 数百 mV | 无此问题 | 最低 | 只做定性判断、输入幅度大且精度要求低 |
| 超级二极管 | 数十 μV(低频) | 1μs 量级 | 中 | 中低频、精度要求高的保持电路 |
| 超级二极管+跨接钳位 | 数十 μV | 0.1μs 量级 | 中 | 几百 kHz 以内、需要快速跟踪的场合 |
4. 四种拓扑:从分立元件到 DAC 逐次逼近
4.1 分立二极管电容型:FET 运放、FET 当二极管、防自激电容
这是文献里最经典的一套方案,值得逐个元件拆开看设计意图,因为每一个都不是随手画的。
输入端用静电计级 FET 运放,理由前面已经说过:75fA 的偏置电流意味着在 1nF 电容上 droop 只有 0.075V/s,保持几毫秒完全没问题。第二个运放的反馈路径里用一个结型场效应管代替二极管,这是整套电路里最巧的一笔。场效应管的栅极是反向偏置的 PN 结,反向电流比普通二极管小得多,同时它的沟道能通过的电流比小信号二极管大,等于同时改善了漏电和驱动能力两个指标。此外,第一级运放输出到反相输入之间那个小电容也并非可有可无,那是用来做超前补偿、防止驱动容性负载时自激的。
这套电路在实际落地时可以降级:通用双运放配普通硅小信号开关二极管,性能会掉一些,但性价比高得多。降级之后要接受两个后果——偏置电流从 fA 级升到 pA 级,保持时间缩短;二极管反向漏电成为 droop 的主要来源。对于采样间隔在几百微秒量级的场合,这个降级完全够用。
这类电路的有效工作边界,实践下来是 500kHz 以下、输入 100mVpp 以上、误差 3% 以内。低于 100mVpp 之后,运放失调和二极管残余压降占比迅速上升,误差会失控;高于 500kHz 之后,运放的开环增益和压摆率同时不够,恢复时间开始吃掉波形。
4.2 无二极管型:把比较器的开集输出当开关用
既然二极管的正向压降和反向漏电都让人头疼,那干脆不用二极管——用比较器的开集电极 BJT 或者开漏 MOSFET 直接当单向开关。这个思路的巧妙之处在于,它把"单向导电"这件事交给了一个本来就在做开关动作的器件。
比较器的输出级是开集结构时,输出高电平时三极管截止,相当于二极管反偏;输出低电平时三极管饱和导通,把保持电容拉向...等等,这里的接法要反过来看:比较器比较的是输入和保持电容电压,当输入高于电容电压时输出翻转,开集管导通,通过上拉电阻给电容充电;当输入低于电容电压时开集管截止,充电通路断开。单向性由比较器的判决逻辑保证,而不是器件的物理特性。
这种结构的优势很实在:省掉了二极管压降,充电电流由外接上拉电阻决定,可以做得很大;成本比精密运放方案低。劣势是开集管的饱和压降 Vce(sat) 仍然存在(几十毫伏量级),而且比较器的响应延迟会限制最高工作频率。另外这类电路在仿真里经常跑不通——比较器模型的输出饱和行为、上拉电阻与容性负载的收敛问题、比较器内部迟滞的建模差异,都会让瞬态分析失败。仿真不收敛不等于电路错,这种时候面包板比仿真器更可靠。
4.3 集成方案与高速 DAC 比较器方案
集成峰值检测器的本质仍然是二极管加电容,只是把运放、二极管、保持电容和复位开关封在一起,省掉了外围布局和漏电控制的麻烦。它的价值在于一致性——自己搭的分立电路,droop 性能高度依赖 PCB 清洁度和走线,批次之间漂移大;集成器件至少保证参数在手册范围内。代价是灵活性归零,保持电容不可调,建立时间和 droop 的权衡被厂家定死了。
到了高速场合,模拟保持这条路走不通了,因为任何电容保持方案都受限于运放的建立时间和介质特性。这时候思路要换成"用数字方式记录峰值"——高速比较器负责判决,DAC 负责产生参考电压,逻辑负责搜索。工作过程是:在每个采样窗口内,逻辑控制 DAC 从高位到低位逐次逼近,每次把 DAC 输出和输入信号送进比较器,根据结果决定这一位保留还是清除,最终得到这一时刻输入电压的数字量;再把多次结果做最大值比较,就得到了数字域的峰值。
下面这段代码是这个逐次逼近过程的简化模型。
# 高速峰值检测:DAC + 比较器 + 逻辑,逐次逼近 def sar_sample(vin, nbits=12, vref=2.0): code = 0 for i in range(nbits - 1, -1, -1): trial = code | (1 << i) # 试探置位 vdac = trial * vref / (1 << nbits) # DAC 输出对应的模拟电压 if vdac <= vin: # 比较器判决:DAC 还没追上输入 code = trial # 保留这一位 # 否则清除这一位,进入下一位 return code * vref / (1 << nbits) def peak_over_window(samples, nbits=12, vref=2.0): return max(sar_sample(v, nbits, vref) for v in samples)nbits决定分辨率,vref是 DAC 满量程,单次逼近需要nbits个时钟周期,因此最高采样率受限于 DAC 建立时间加比较器延迟再乘以位数。12 位、1MSPS 量级的 DAC 配 5ns 延迟的比较器,做百 kHz 信号的峰值提取绰绰有余。精度下限是 1 LSB,2V 满量程 12 位对应 0.49mV,这个分辨率对绝大多数 AGC 判据已经够用,而且完全不受二极管压降、运放失调、介质吸收这些模拟世界的老问题影响。
4.4 拓扑对照:各自的频率与精度边界
把四条路线放在一张表里,选型时对着看比翻手册快。
| 拓扑 | 精度下限 | 速度上限 | 保持能力 | 主要失效模式 |
|---|---|---|---|---|
| 简单二极管+电容 | 数百 mV | 高(受限于二极管) | 差 | 压降误差、无缓冲 |
| 分立精密型 | 数十 μV | 500kHz 量级 | 好(FET 运放) | 负饱和、PCB 漏电 |
| 无二极管型 | 数十 mV | 数百 kHz | 中 | 饱和压降、比较器延迟 |
| DAC+比较器 | 1 LSB | 取决于 DAC/比较器 | 数字域无限 | 时钟抖动、DAC 单调性 |
5. 避坑与排查:五个让峰值检测现场翻车的细节
5.1 上电就爬到正电源轨,再也不下来
现象:输入明明是小信号,输出却一路顶到正电源轨附近,无论怎么调输入幅度都不动。
原因:运放驱动容性负载导致的自激振荡。保持电容直接挂在运放输出端,构成了一个额外的极点,与运放自身的输出阻抗形成相位滞后,环路相位裕度被吃掉,输出在几十 MHz 上自激。自激的高频分量被二极管整流后,电荷持续泵进保持电容,输出就一直往上爬。这类问题在示波器上把带宽限制到 20MHz 才看得出来,直接看波形只看到一条平线。
解决:在运放输出和保持电容之间串一个小电阻(几十到几百欧姆)做隔离,或者在反馈路径上加超前补偿电容。隔离电阻会引入一点额外的压降和建立时间,但它把环路稳定性买回来了。另一个常被忽略的点是电源去耦——去耦不良时电源轨上的高频噪声会通过运放共模路径耦合进来,表现和自激很像。
5.2 峰值保持不住,毫秒级往下掉
现象:输入撤掉后,输出以肉眼可见的速度下降,几毫秒内掉几十毫伏,没有稳定的平台。
原因:漏电流路径没清干净。最常见的三个来源是:输出端接了分压电阻网络(哪怕阻值上百 kΩ,在 1V 下也是几十 μA 量级);保持电容本身介质绝缘电阻不够(电解电容尤其明显);PCB 上的助焊剂残留和指纹形成表面漏电。很多人在仿真里看不到这个问题,因为仿真模型里电容的绝缘电阻默认无穷大、PCB 漏电根本不存在。
解决:输出端接高阻缓冲,绝不直接挂负载;保持电容换 C0G 或聚丙烯;PCB 清洗后烘干,保持节点周围加保护环并接到低阻参考点。排查的时候可以用一台高阻表或者静电计直接测保持节点对地的电阻,如果测出来低于 10^11 欧姆,那 droop 基本就是它造成的。
5.3 几十毫伏的小信号测不出来
现象:输入幅度大于几百毫伏时一切正常,降到几十毫伏后输出要么贴在某个固定电压上,要么误差大到没意义。
原因:误差源在小信号下的绝对值不变,但占比爆炸。运放失调电压 1mV 在 1V 输入时是 0.1%,在 20mV 输入时是 5%;二极管残余压降、比较器饱和压降同理。此外还要看输入共模范围——很多运放在接近负轨时输入级工作不正常,偏置电流会剧增。
解决:换低失调精密运放,必要时用斩波稳零结构;把二极管放进反馈环(见第 3 章)以除掉固定压降;给输入加一个小幅度的直流偏置,把工作点抬离电源轨。最后这条有点"作弊"的意思,但在单电源系统里非常实用,代价是动态范围损失一点。
5.4 复位之后不归零
现象:复位开关动作之后,输出从 0 缓慢回升几十毫伏,或者残留一个固定的小电压。
原因:两个机制。一是复位开关的电荷注入——MOS 开关在关断瞬间把沟道电荷注入保持电容,量级是几十 fC 到几 pC,在 1nF 上就是几十毫伏。二是介质吸收,前面提过,高介电常数电容放电后内部电荷慢慢释放回来。
解决:复位开关用对称结构(CMOS 传输门)并做电荷注入补偿;复位结束后留一段死区时间再开始检测;保持电容换低介质吸收材质。如果系统允许,把复位后的第一个采样直接丢弃,比在模拟域死磕电荷注入更省事。
5.5 频率一高,输出变成三角波
现象:输入是干净的正弦,输出却是一串三角波或者梯形,峰值明显偏低。
原因:运放压摆率不足或者保持电容太大。充电电流受限于运放输出能力和二极管正向特性,C·dv/dt 的上限摆在那里,输入上升沿再快,电容也只能按自己的速度爬。表现出来就是输出追不上输入峰值,形态上被"削"成三角。
解决:算一遍I_charge / C得到最大 dv/dt,和输入信号在峰值附近的最大斜率比较,前者必须显著大于后者。不够的话,减小保持电容、换成输出电流更大的运放、或者在输入输出间加跨接二极管提供旁路充电通路。注意减小电容会恶化 droop,这是一个必须显式权衡的取舍,而不是单方向优化。
6. 设计取舍:精度、速度、保持时间的三元悖论
做到这里会发现,峰值检测电路没有一个"最优解",只有一组被明确接受的妥协。保持电容 C 就是那个把所有矛盾串起来的旋钮:C 越大,droop 越小、保持时间越长,但建立时间和压摆率要求同步恶化;C 越小,跟踪速度越快,但漏电流的影响被放大,保持能力变差。
把几个量级摆在一起看会更直观。假设充电电流 1mA、总漏电流 1nA:
| 保持电容 | droop(1nA 漏电) | 充满 1V 所需时间(1mA) | 适用输入频率上限 |
|---|---|---|---|
| 100pF | 10 V/s | 0.1 μs | 数百 kHz |
| 1nF | 1 V/s | 1 μs | 数百 kHz |
| 10nF | 0.1 V/s | 10 μs | 数十 kHz |
| 100nF | 0.01 V/s | 100 μs | 数 kHz |
| 1μF | 0.001 V/s | 1 ms | 数百 Hz |
这张表传达的信息是:没有一个电容值能同时满足快速跟踪和长保持,选型本质上是先确定系统最不能妥协的那一项,再倒推其他参数。采样间隔长的系统(比如每隔几十毫秒读一次传感器最值),容忍慢建立,就往大电容走;需要跟随快速变化的 AGC 环路,容忍 droop,就往小电容走。
还有一个常被忽略的取舍维度:模拟保持和数字记录的选择。模拟方案的优势是连续时间、无采样损失,任何窄脉冲都能被捕获;劣势是所有前文讨论的漏电、介质吸收、负饱和问题都要在模拟域解决。数字方案(DAC + 比较器 + 逻辑)把精度问题转成了分辨率和时钟问题,代价是存在采样盲区——脉冲宽度小于一个逼近周期就可能漏掉。做脉冲峰值检测时这个区别是致命的,必须先用信号的最窄脉宽去卡采样率。
还有一个更隐蔽的取舍在二极管选型上。正向压降小的器件(比如肖特基)反向漏电大,反向漏电小的器件(比如结型场效应管)往往需要额外的驱动设计。这两个参数在物理上是矛盾的,因为都来自同一个 PN 结特性。超级二极管结构之所以值得用,就是因为它把这个矛盾从"必须同时满足"变成了"只需要满足一条"——压降被环路吃掉了,剩下的只有漏电要管。
我在调第一个峰值保持电路时踩的坑,是把所有精力放在运放选型上,换了三颗器件 droop 还是不见好,最后发现问题出在保持电容用的是普通陶瓷介质,加上板子没洗。从那以后我每次搭保持类电路,都强制走一遍:先算 droop 预算,再测保持节点对地绝缘电阻,最后才动器件。这个顺序反过来做,基本上就是在给器件厂商交学费。希望帮到你。
本文还有配套的精品资源,点击获取