资讯动态

峰值检测电路设计:从原理到避坑的工程实战指南

发布时间:2026/10/15 7:24:58 来源:尧图企业网站定制
简介峰值检测电路是电子工程中用于锁定并保持输入信号最高电压值的基础电路广泛应用于通信、数据采集、自动增益控制及传感器最值求取等场景。本资源面向电子设计竞赛选手、模拟电路学习者与硬件工程师系统梳理峰值检测电路从原理到实现的完整知识脉络。压缩包内为1个doc文档约594KB内容涵盖二极管加电容的基本结构、二极管正向压降误差分析、超级二极管与运放负反馈改进方案、电容放电复位开关设计以及TI OPA128、LM311、ADI PKD01等分立与集成方案对比并给出500kHz以下、100mVpp以上输入时误差可控制在3%以内的实测结论。目前已有345人学习适合需要深入理解峰值检测原理、选型依据与电路优化思路的读者参考。1. 峰值检测电路从“抓不住尖峰”到“锁得住瞬间”的工程真相做信号采集的同行大概率都遇到过这种场景传感器输出的脉冲信号明明在示波器上看得见送到 ADC 之后却总是采不到最高点要么幅值偏低要么干脆漏掉整个尖峰。问题往往不在 ADC 的采样率而在于前端少了一级峰值检测电路。它的核心任务只有一个——把输入信号里转瞬即逝的最高电平“抓住”并保持足够长的时间让后级 ADC 或比较器从容读取。听起来简单但真正动手做的时候运放选型、保持电容漏电、复位开关时序每一个环节都能让电路翻车。这篇笔记面向正在做脉冲幅值采集、超声回波检测、粒子计数或光谱峰值保持的硬件工程师把峰值检测电路从原理到参数到踩坑一次讲透。2. 峰值检测电路到底怎么工作三种拓扑的选型逻辑2.1 二极管加电容最原始但也最容易翻车的方案最朴素的峰值检测电路就是一只二极管串一个电容。输入信号通过二极管给电容充电电容电压跟随输入上升当输入回落时二极管反偏电容上的电压就保持住了。这个结构只有两个元件但它的问题和它的简洁一样突出。第一个问题是二极管的正向压降。硅二极管在导通时大约有 0.60.7V 的压降这意味着电容上充到的电压永远比输入峰值低一个二极管压降。对于 5V 量程的信号这个误差大约 12%14%完全不可接受。即使用肖特基二极管把压降降到 0.20.3V在小信号场景下仍然捉襟见肘。第二个问题是电容的放电回路。电容上的电荷会通过二极管的反向漏电流、电容自身的漏电流以及后级电路的输入阻抗慢慢泄放。如果保持时间要求到毫秒级普通电解电容的漏电流就能让峰值电压明显下降。第三个问题是输入阻抗。信号源直接通过二极管驱动电容充电电流完全取决于信号源的驱动能力。如果信号源内阻较大电容充电时间常数会很大窄脉冲根本来不及充到峰值。所以这个方案只适合信号幅度大比如 12V 以上、精度要求低±10% 可接受、脉冲宽度足够宽的场合。我一般只在做粗略的包络检测或者给比较器提供一个门限参考时才会用它。2.2 运放加二极管用反馈环消除压降要解决二极管压降的问题标准做法是把二极管放进运放的反馈环路里。具体来说运放的同相端接输入信号反相端通过二极管和电容连接到输出。当输入上升时运放输出升高二极管导通电容充电当输入下降时运放输出降低二极管截止电容保持。这个结构的关键优势在于二极管压在运放的负反馈环路内部运放的开环增益会把二极管压降的影响缩小到 1/A_ol 的量级。以一颗开环增益 100dB即 100000 倍的运放为例0.7V 的二极管压降折算到输入端的等效误差只有 7μV完全可以忽略。但这里有一个容易被忽视的细节运放的反相端在二极管截止后会处于开环状态。此时运放的输出会向负电源轨饱和因为输入差分对失去了反馈。当输入再次上升时运放需要从饱和状态恢复这个恢复时间会直接影响电路能捕捉到的最小脉冲宽度。选运放时一定要看 datasheet 里的“过载恢复时间”overload recovery time这个参数通常标注在“大信号响应”或“饱和恢复”章节里。我见过太多人只盯着压摆率和增益带宽积选运放结果窄脉冲一来运放还在从饱和里往外爬峰值早就过去了。2.3 带复位开关的完整峰值保持电路实际工程里用的峰值检测电路几乎都会加一个复位开关。原因很简单保持电容上的电压不会自己消失下一次测量之前必须把它泄放掉。复位开关可以是一只 N 沟道 MOSFET也可以是一颗模拟开关芯片并联在保持电容两端。完整的电路拓扑是这样的输入信号先经过一级电压跟随器做缓冲然后进入运放加二极管的峰值充电环路保持电容跨接在输出和地之间复位 MOSFET 并联在电容两端最后由第二级电压跟随器做输出缓冲把电容上的高阻节点和后续 ADC 的低阻输入隔离开。这里每一级都有存在的理由。输入缓冲器是为了避免信号源内阻影响充电速度输出缓冲器是因为保持电容通常只有几百 pF 到几 nF直接接 ADC 的输入阻抗会让电容迅速放电复位开关是为了给下一次测量准备初始条件。选型上输入缓冲运放需要高输入阻抗和足够的带宽输出缓冲运放需要低失调电压和低输入偏置电流。保持电容的选型更讲究容值越大保持时间越长但充电时间也越长能捕捉的最小脉冲宽度就越大。常见取值在 100pF 到 10nF 之间具体要看信号的最小脉冲宽度和允许的电压跌落。参数典型取值影响保持电容100pF10nF容值大→保持久但响应慢复位开关导通电阻 10Ω电阻大→复位慢残余电压高运放输入偏置电流 1nA偏置电流大→电容电压漂移快二极管反向漏电流 1nA漏电流大→峰值保持时间缩短运放过载恢复时间 1μs恢复慢→窄脉冲捕捉失败3. 动手搭一个可复现的峰值检测电路从元件选到波形验证3.1 元件选型与电路参数计算假设我们要做一个脉冲峰值检测电路输入信号是 05V 的单极性脉冲最小脉冲宽度 1μs要求峰值保持精度优于 1%保持时间至少 100μs复位时间小于 500ns。第一步确定保持电容。保持时间由电容漏电流和运放输入偏置电流决定。假设总漏电流为 I_leak保持时间为 t_hold允许的电压跌落为 ΔV则C I_leak × t_hold / ΔV取 I_leak 1nA运放偏置电流 0.5nA 加二极管漏电流 0.5nAt_hold 100μsΔV 5V × 1% 50mV算得 C 1nA × 100μs / 50mV 2pF。这个值太小了实际电路中寄生电容都不止 2pF。所以漏电流不是限制因素真正限制保持时间的是后级负载。如果输出缓冲运放的输入偏置电流也是 1nA那实际漏电流就是 2nA算出来 C 4pF仍然很小。但电容不能取太小因为复位开关的电荷注入会带来误差。模拟开关在导通和断开时会把沟道电荷注入到电容上这个电荷量通常在几 pC 到几十 pC。如果 C 100pF注入 10pC 电荷会产生 100mV 的电压跳变直接破坏精度。所以电容至少要取到 1nF 以上让电荷注入的影响降到 10mV 以内。最终我选 C 2.2nF 的 C0G 陶瓷电容。C0G 的介质吸收极低温度系数接近零漏电流在 pA 级是保持电容的首选。X7R 虽然容值大但介质吸收会导致“电压回弹”现象——电容放电后电压会自己回来一点这在峰值检测里是致命的。第二步选运放。输入缓冲运放我选的是 FET 输入型输入偏置电流典型值 1pA增益带宽积 10MHz压摆率 5V/μs。峰值充电环路的运放要求更高过载恢复时间要短开环增益要大。我选的是某款精密运放过载恢复时间 200ns开环增益 120dB输入偏置电流 0.5nA。输出缓冲运放用同型号即可。第三步选二极管。普通硅二极管的反向漏电流在 nA 级肖特基在 μA 级所以这里反而要用普通硅二极管而不是肖特基。因为二极管在反馈环路里正向压降被运放增益压掉了不需要靠肖特基来降压力。选一只低漏电流的开关二极管反向漏电流小于 1nA。第四步选复位开关。模拟开关的导通电阻要小电荷注入要低。我选的是某款单刀单掷模拟开关导通电阻 5Ω电荷注入 5pC导通时间 50ns断开时间 30ns。3.2 电路搭建与关键节点波形电路分四级搭建。第一级是输入缓冲运放接成电压跟随器同相端接输入信号输出接峰值充电环路的运放同相端。第二级是峰值充电运放的同相端接缓冲后的信号反相端接二极管阳极二极管阴极接保持电容和运放输出。第三级是输出缓冲运放接成电压跟随器同相端接保持电容输出接 ADC。第四级是复位开关模拟开关并联在保持电容两端控制端接 MCU 的 GPIO。# 峰值检测电路参数计算脚本 # 用于快速评估不同参数组合下的保持精度和响应时间 def calc_peak_detector(C_hold, I_leak, t_hold, V_peak, t_pulse, I_charge): C_hold: 保持电容值单位 F I_leak: 总漏电流单位 A t_hold: 要求保持时间单位 s V_peak: 峰值电压单位 V t_pulse: 最小脉冲宽度单位 s I_charge: 充电电流单位 A # 保持阶段的电压跌落 delta_V_hold I_leak * t_hold / C_hold # 充电阶段的电压建立误差 # 充电电流由运放输出能力和二极管动态电阻决定 # 简化模型充电时间常数 tau C_hold * V_peak / I_charge tau_charge C_hold * V_peak / I_charge # 脉冲宽度内电容能充到的电压比例 charge_ratio 1 - pow(2.718, -t_pulse / tau_charge) print(f保持 {t_hold*1e6:.0f}us 后电压跌落: {delta_V_hold*1e3:.2f}mV) print(f充电时间常数: {tau_charge*1e9:.1f}ns) print(f{t_pulse*1e9:.0f}ns 脉冲内充电完成度: {charge_ratio*100:.2f}%) print(f峰值误差: {(1-charge_ratio)*100:.2f}%) return delta_V_hold, charge_ratio # 示例C2.2nF, 漏电流2nA, 保持100us, 峰值5V, 脉冲1us, 充电电流10mA calc_peak_detector(2.2e-9, 2e-9, 100e-6, 5.0, 1e-6, 10e-3)这段脚本用来快速评估参数是否合理。C_hold是保持电容I_leak是总漏电流t_hold是要求的保持时间V_peak是峰值电压t_pulse是最小脉冲宽度I_charge是充电电流。输出三个关键指标保持阶段的电压跌落、充电时间常数、脉冲内的充电完成度。如果充电完成度低于 99%说明电容太大或充电电流太小需要调整。实际调试时我用信号发生器产生 1μs 宽、5V 幅值的脉冲用示波器同时看输入信号和保持电容上的电压。理想情况下电容电压应该在脉冲结束后迅速稳定在 5V 附近然后在保持阶段缓慢下降。如果发现电容电压在脉冲期间只充到 3V 就上不去了说明充电电流不够要么是运放输出电流受限要么是二极管动态电阻太大。如果发现电容电压在保持阶段下降很快说明漏电流超标要检查运放偏置电流和二极管反向漏电流。3.3 复位时序与 MCU 接口复位开关的控制时序很关键。在峰值采集阶段复位开关必须完全断开否则电容上的电荷会通过开关泄放。在复位阶段开关导通电容放电。复位脉冲的宽度要足够让电容电压降到接近零同时不能太宽以免影响下一次采集。以 2.2nF 电容和 5Ω 导通电阻为例放电时间常数是 11ns理论上 5 个时间常数55ns就能放电到 1% 以下。但实际模拟开关的导通电阻会随温度变化而且开关的电荷注入会在断开瞬间给电容充一点电。所以复位脉冲我一般取 200500ns留足余量。MCU 接口这边GPIO 直接驱动模拟开关的控制端。注意模拟开关的控制端通常是 CMOS 电平3.3V 的 GPIO 可以直接驱动。如果模拟开关的控制端需要更高电压就要加一级电平转换。另外复位脉冲的边沿要干净避免在开关切换瞬间产生振铃否则振铃会耦合到保持电容上形成误差。// MCU 控制峰值检测电路复位和采集的时序 // 假设 GPIO_PEAK_RST 连接模拟开关控制端 // ADC 通道连接输出缓冲器 #define RST_PULSE_WIDTH_US 1 // 复位脉冲宽度 1us void peak_detector_reset(void) { // 拉高复位控制端导通模拟开关 GPIO_SetHigh(GPIO_PEAK_RST); // 保持足够时间让电容放电 delay_us(RST_PULSE_WIDTH_US); // 拉低复位控制端断开模拟开关 GPIO_SetLow(GPIO_PEAK_RST); // 等待开关完全断开避免电荷注入影响 delay_us(1); } uint16_t peak_detector_read(void) { // 触发 ADC 转换 ADC_StartConversion(ADC_CH_PEAK); // 等待转换完成 while (!ADC_IsConversionDone()); // 读取结果 return ADC_GetResult(); } // 主循环复位 - 等待脉冲 - 读取峰值 void main_loop(void) { while (1) { peak_detector_reset(); // 等待输入脉冲到来 // 实际应用中可以用外部中断或比较器触发 delay_ms(10); uint16_t peak_value peak_detector_read(); // 处理峰值数据 process_peak(peak_value); } }这段代码展示了 MCU 控制峰值检测电路的基本时序。peak_detector_reset函数拉高复位控制端保持 1μs 让电容放电然后拉低并等待 1μs 让开关完全断开。peak_detector_read函数触发 ADC 并读取结果。主循环里先复位等待脉冲到来再读取峰值。实际应用中等待脉冲的部分可以用外部中断或比较器触发避免固定延时导致错过脉冲。注意复位开关断开后不要立即启动 ADC 转换等 1μs 让模拟开关的电荷注入稳定下来。这个等待时间看起来不起眼但省掉它会让峰值读数偏高几十毫伏。4. 峰值检测电路避坑指南五个让精度翻车的真实原因4.1 运放从饱和恢复太慢窄脉冲直接漏掉现象输入一个 500ns 宽的脉冲保持电容上的电压只充到峰值的 60%脉冲结束后电容电压还在慢慢往上爬但输入已经回落了。原因峰值充电环路的运放在二极管截止后处于开环状态输出饱和到负电源轨。当输入再次上升时运放需要从饱和状态恢复这个恢复时间就是过载恢复时间。如果恢复时间大于脉冲宽度运放还没回到线性区脉冲就结束了。解决选过载恢复时间短的运放datasheet 里一般标在“大信号响应”或“饱和恢复”参数里。如果找不到这个参数可以看“差分输入过载恢复时间”。另外可以在运放输出和二极管之间加一个小电阻限制饱和深度但电阻会降低充电电流需要权衡。我一般优先选恢复时间小于最小脉冲宽度 1/5 的运放。4.2 保持电容介质吸收导致电压回弹现象复位后电容电压降到 0V但过几毫秒再测电压又回来了几十毫伏。或者峰值保持一段时间后电压先降后升出现一个“凹坑”。原因X7R、Y5V 这类高介电常数陶瓷电容有严重的介质吸收效应。电容放电时介质内部的电荷来不及释放等外部电压消失后这些电荷又慢慢释放出来表现为电压回弹。电解电容的介质吸收更严重。解决保持电容必须用 C0GNP0或聚丙烯薄膜电容。C0G 的介质吸收在 0.1% 以下薄膜电容更低。不要为了省空间或省成本用 X7R介质吸收带来的误差远大于容值误差。如果容值不够可以并联多个 C0G 电容但要注意并联后的寄生电感可能引起振铃。4.3 复位开关电荷注入让峰值偏高现象每次复位后电容电压不是 0V而是 2050mV。这个偏置会叠加到峰值上导致读数偏高。原因模拟开关在导通时沟道里存储的电荷在断开瞬间会注入到保持电容上。注入电荷量通常在几 pC 到几十 pC除以电容值就是电压跳变。2.2nF 电容上注入 10pC 电荷电压跳变约 4.5mV。如果电容只有 100pF跳变就是 100mV。解决第一保持电容不要取太小至少 1nF 以上。第二选电荷注入低的模拟开关datasheet 里会标“Charge Injection”。第三可以在开关和电容之间串一个小电阻让注入电荷通过电阻慢慢释放但电阻会延长复位时间。第四如果精度要求极高可以用差分结构两个开关对称注入共模抵消。4.4 输出缓冲器输入偏置电流让电容慢慢放电现象峰值保持时间达不到要求电容电压在几百微秒内就下降了 5% 以上。原因输出缓冲运放的输入偏置电流会从保持电容上持续抽取电荷。如果偏置电流是 1nA电容是 1nF电压下降速率就是 1V/s100μs 下降 100μV看起来不大。但如果偏置电流是 100nA双极型运放的常见值下降速率就是 100V/s100μs 下降 10mV对于 1V 量程就是 1% 误差。解决输出缓冲运放必须选 FET 输入型输入偏置电流在 pA 级。如果已经用了双极型运放可以在运放输入端加一个补偿电阻让偏置电流在两个输入端产生的压降抵消但这个方法对偏置电流的温漂无效。最彻底的办法还是换 FET 输入运放。4.5 二极管反向漏电流在高温下急剧增大现象常温下峰值保持精度很好一到 60℃ 以上保持时间就明显缩短电压跌落加快。原因二极管的反向漏电流对温度极其敏感每升高 10℃漏电流大约翻一倍。常温下 1nA 的漏电流到 60℃ 就变成 8nA到 80℃ 就是 32nA。如果保持电容只有 1nF32nA 的漏电流在 100μs 内就能让电压下降 3.2mV对于 1V 量程是 0.32% 误差对于 100mV 量程就是 3.2% 误差。解决选反向漏电流小的二极管开关二极管比整流二极管好硅二极管比肖特基好。如果工作温度高可以考虑用 JFET 代替二极管做峰值充电开关JFET 的漏电流在 pA 级但驱动电路更复杂。另外保持电容不要取太小容值越大同样的漏电流引起的电压下降越小。5. 把峰值检测精度再压一档自校准与差分保持的实战技巧前面讲的都是单端峰值检测电路精度做到 1% 左右已经不错了。但如果应用场景要求 0.1% 甚至更高比如精密脉冲幅值分析或者粒子能谱测量单端结构就不够用了。这时候有两个进阶方向自校准和差分保持。自校准的思路是在系统里加一个已知幅值的参考脉冲定期注入到峰值检测电路的输入端测量电路的实际输出和参考值比较得到一个校正系数。这个系数可以补偿运放失调、二极管漏电流、电容容差等所有静态误差。具体实现上可以用一个模拟开关在输入缓冲器前面切换信号源和参考源。参考源用精密基准电压芯片产生比如 2.500V 或 4.096V。校正频率取决于温度变化速度一般每隔几分钟或温度变化超过 5℃ 就校正一次。差分保持的思路是用两个完全对称的峰值检测通道一个检测输入信号一个检测参考地。两个通道的输出送到差分放大器共模误差比如运放失调、电源波动、温度漂移被抵消掉。这个结构对元件匹配要求很高两个通道的运放、二极管、电容都要选同一批次PCB 布局也要对称。但效果很显著共模抑制比可以做到 60dB 以上相当于把误差再压两个数量级。我自己的习惯是如果精度要求 1% 以内单端结构加 C0G 电容加 FET 输入运放就够了如果要求 0.1% 以内先做自校准成本低见效快如果要求 0.01% 以内才考虑差分保持因为匹配和布局的代价很高。另外不管哪种结构PCB 布局都要注意保持电容的节点要尽量短周围加保护环guard ring减少漏电流保护环接和电容同电位的缓冲输出不要接地。这个细节很多人忽略但在高阻节点上PCB 表面的漏电流可能比元件漏电流还大。最后说一个验证方法用信号发生器产生一个幅值已知的窄脉冲送到峰值检测电路用高精度万用表测量保持电容上的电压通过输出缓冲器比较两者差异。改变脉冲幅值从 0.1V 到 5V画一条误差曲线。如果误差曲线是平的说明增益误差小如果误差随幅值线性增加说明增益有问题如果误差在零点附近最大说明失调或电荷注入是主要误差源。这条曲线比任何仿真都管用我每次调完电路都会跑一遍心里才有底。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑