
简介峰值检测电路是电子工程中用于锁定并保持输入信号最高电压值的基础电路广泛应用于通信、数据采集与自动增益控制等场景。本资源面向电子设计竞赛选手、模拟电路学习者及硬件工程师系统梳理峰值检测电路的工作原理、常见缺陷与改进方案帮助读者理解二极管压降误差、电容负载失真等实际问题。压缩包内为1个doc文档约594KB内容涵盖超级二极管负反馈设计、电容放电复位开关、FET运放与分立元件方案以及LM311开集输出、ADI集成PKD01等不同实现路径并给出500kHz以下频率、100mVpp以上输入时误差可控制在3%以内的实测参考。目前已有345人学习下载适合需要快速掌握峰值检测电路选型依据、仿真验证思路与设计取舍的读者参考。1. 峰值检测电路从二极管电容到超级二极管的工程取舍做程控增益放大器时我吃过一次不大不小的亏。当时用某款有效值芯片做幅度判据测试信号换成占空比 10% 的窄脉冲后增益档位直接跳错了两级——有效值跟正负峰值本来就没有必然联系芯片再贵也救不了这个逻辑。后来换成峰值检测电路PKDPeak Detector问题才收敛。它的任务很纯粹对输入信号的峰值进行提取输出 Vo Vpeak并一直保持直到出现更大的峰值或电路复位。AGC 自动增益控制、传感器最值求取、程控增益放大器倍数判断都是它的主战场。这篇笔记按“原理—仿真—选型—避坑—进阶”的顺序拆一遍适合手里有示波器和烙铁、想把 PKD 真正用起来的硬件工程师。2. 峰值检测电路原理四个模块与超级二极管的由来2.1 从二极管加电容说起最简单的峰值检测器就是一个二极管串一个电容。输入信号正半周超过电容电压时二极管导通电容被充电到接近输入峰值输入回落时二极管反偏电容上的电荷无处泄放峰值就被“记住”了。用 TINA TI 7.0 搭一个输入 5kHz、2Vpp 正弦1nF 电容仿真跑下来 100ms 后才达到稳定峰值误差约 10%。这个结果说明两件事电路能工作但性能不理想。误差的第一来源是二极管正向导通压降。硅二极管约 0.6~0.7V输入峰值 1V 时电容只能充到 0.3~0.4V误差直接过半。第二来源是负载效应电容上的电荷会被后级电路或探头输入阻抗慢慢抽走峰值保持时间远短于理论值。所以一个能用的 PKD 至少要拆成四个模块来看模块作用常见实现模拟峰值存储器保存峰值电压电容器单向电流开关只允许充电方向导通二极管 / 三极管 / MOSFET输入输出缓冲隔离防止负载抽走电荷运算放大器电容放电复位开关复位到初始状态模拟开关 / 三极管第四项不是必须的。如果电容值选得合适、两次采样间隔足够大电容自己漏电也能复位只是精度和重复性会差一些。2.2 超级二极管把压降藏进负反馈里要消掉二极管压降模电书上的标准答案是“超级二极管”——把二极管放进运放的负反馈回路。运放的高开环增益会把二极管压降“吃掉”只要运放还没饱和输出就会自动抬高一个二极管压降使反相输入端跟随同相输入端。仿真里同等测试条件下检测误差从 10% 量级降到 1% 以内。但超级二极管有个副作用输入从负电压翻到正电压时运放要先从负饱和状态退出输出电压从负饱和值一路爬到 Vi Vd这段时间里如果输入还在变输出就会失真。常见做法是在输入和输出之间再并一个二极管类似电压钳位让运放不要深度饱和。这个二极管的方向和位置有讲究接反了会把峰值通路短路接错位置则起不到钳位作用。2.3 分立二极管电容型FET 运放与 1N4148 的性价比路线TI 的 Difet 静电计级运放 OPA128 数据手册里给过一个很经典的 PKD。它的几个设计点值得抄用 FET 输入运放提高直流特性OPA128 偏置电流低至 75fA电容上的电荷不会被运放输入级抽走把场效应管当二极管用反向电流小同时第一个运放的输出驱动力更强小电容并联在反馈回路里防止自激。实际做板子时OPA128 价格不友好。我一般用 TL082 双运放加 1N4148 替代性能价格比高很多。代价是偏置电流从 fA 级升到 pA 级保持时间会缩短电容值要相应加大。下面是一个可复现的仿真验证流程用 TINA TI 或 Multisim 都能跑1. 放置运放 U1TL082 前半同相端接输入正弦源 Vi 2. U1 反相端与输出之间串二极管 D11N4148方向反相端指向输出 3. U1 输出经 D21N4148接保持电容 C11nF~100nF到地 4. C1 上端接 U2TL082 后半同相端U2 接成电压跟随器输出即 Vpeak 5. 输入 5kHz、2Vpp 正弦瞬态分析跑 200ms观察 C1 电压建立过程 6. 在 C1 两端并一个模拟开关或 NPN 三极管基极接复位脉冲做放电复位。参数上C1 越大保持越稳但建立越慢5kHz 信号下 1nF~10nF 是常见起点。D2 选反向恢复时间短的开关二极管1N4148 的 4ns 反向恢复在 500kHz 以下够用。U2 的输入偏置电流直接决定保持时间TL082 的 pA 级偏置电流配 10nF 电容保持时间在秒级对多数采样场景足够。2.4 无二极管型用比较器开集输出代替二极管LM311 数据手册里给过一个更省成本的方案用比较器的开集 BJT 输出代替二极管。比较器输出为低时把电容拉低输出为高时开集三极管截止电容只能被输入通过另一条通路充电。这个结构省掉了二极管但比较器的响应时间和输出饱和压降会直接影响精度。我在 TINA TI 7.0 和 Multisim 10.1 里都试过这个电路TINA 没仿真成功Multisim 能跑。这不是电路本身的问题是两款仿真器对开集模型的处理差异。实际搭板时这个电路对比较器输出级的三极管 β 值和饱和压降比较敏感批次一致性不如二极管方案。EDN 英文版上有篇文章给过一个改进型无二极管 PKD性能曲线很漂亮但同样在 TINA 里跑不通Multisim 里能出结果。如果要用这个路线建议先在 Multisim 里验证再上板。2.5 集成方案与高速场景的边界ADI 的 PKD01 是集成峰值检测器本质还是二极管加电容结构省了外围器件但性能上限固定。高速场景下二极管加电容结构就跟不上了——二极管反向恢复、运放压摆率、电容充放电时间常数都会成为瓶颈。我见过用 FPGA DAC 高速比较器搭的峰值检测器DAC 输出一个阶梯电压和输入信号一起送进高速比较器FPGA 负责扫描 DAC 电压并检测比较器翻转。原理简单但需要 FPGA 有足够快的 GPIO 和比较器有足够小的传输延迟。这个方案适合 1MHz 以上的场景成本比高速模拟 PKD 低。3. 峰值检测电路仿真与实测从 TINA 到面包板的完整链路3.1 仿真参数怎么设才不骗自己仿真跑通不等于电路能用。我见过太多仿真里完美、上板就翻车的 PKD问题基本出在仿真参数和实际器件模型的差距上。几个必须设对的参数运放供电电压要留足余量。超级二极管结构里运放输出要比输入峰值高一个二极管压降再加裕量5V 供电跑 2Vpp 信号峰值 1V输出要到 1.7V 以上轨到轨运放没问题普通运放就要算清楚二极管模型选真实型号。TINA TI 里默认二极管是理想模型压降和反向恢复都跟实际差很远要从器件库调 1N4148 或 BAT54S 的模型瞬态分析步长要小于信号周期的 1/100。5kHz 信号周期 200μs步长设 1μs 以下才能看清建立过程电容初始条件设为零。有些仿真器默认电容有初始电压跑出来的波形会骗人。下面是一段用 Python 做后处理的脚本把仿真导出的 CSV 数据读进来算建立时间和稳态误差import numpy as np import csv # 读取仿真导出的 CSV第一列时间第二列电容电压 t, vc [], [] with open(pkd_sim.csv) as f: reader csv.reader(f) next(reader) # 跳过表头 for row in reader: t.append(float(row[0])) vc.append(float(row[1])) t np.array(t) vc np.array(vc) # 理论峰值输入 2Vpp 正弦正峰值 1V v_theory 1.0 # 建立时间电容电压首次进入并保持 ±2% 误差带 band 0.02 * v_theory inside np.abs(vc - v_theory) band settle_idx None for i in range(len(inside)): if inside[i] and np.all(inside[i:]): settle_idx i break if settle_idx is not None: print(f建立时间: {t[settle_idx]*1000:.2f} ms) print(f稳态误差: {abs(vc[-1]-v_theory)/v_theory*100:.2f}%) else: print(未在仿真时间内建立需加长仿真或调整电容值)这段脚本的关键在“首次进入并保持”的判断逻辑。只看某一时刻是否在误差带内会误判因为电容电压可能在误差带边缘来回晃。np.all(inside[i:])保证从该点之后一直在带内才是真正的建立。稳态误差取最后一点和理论峰值比如果仿真时间不够长最后一点可能还在爬升结果会偏大。3.2 面包板实测探头和布局的坑从仿真到面包板第一个坑是示波器探头。10:1 无源探头输入阻抗 10MΩ看起来很大但并联电容有 10~15pF。保持电容如果是 1nF探头电容直接分走 1.5% 的电荷峰值读数偏低。我一般用 1:1 探头或者 FET 探头测保持电容电压1:1 探头输入电容更小但带宽低看建立过程会失真。折中办法是先用 10:1 探头看趋势再用万用表直流档读稳态值。第二个坑是面包板漏电。面包板簧片间的绝缘电阻在潮湿环境下可能降到 10MΩ 量级跟探头阻抗一个数量级。保持电容 10nF 时漏电时间常数只有 0.1s峰值根本保持不住。所以面包板只适合验证电路拓扑真要测保持时间得焊到洞洞板或 PCB 上保持电容周围做 guard ring 或者用聚四氟乙烯绝缘子。第三个坑是输入信号源。函数发生器输出阻抗 50Ω接 PKD 输入时如果运放输入偏置电流大会在 50Ω 上产生压降输入峰值本身就偏了。常见做法是在信号源和 PKD 之间加一级电压跟随器或者用低偏置电流运放做输入级。3.3 误差预算3% 以内怎么算出来的前文提到二极管、电容、放大器组成的 PKD 在 500kHz 以下、100mVpp 以上输入时误差可到 3% 以内。这个 3% 是几项误差的合成运放输入失调电压TL082 典型 5mV100mVpp 信号峰值 50mV误差 10%所以 100mVpp 是下限二极管反向漏电流1N4148 在室温下约 1nA10nF 电容上 1ms 掉 0.1mV可忽略运放偏置电流TL082 输入偏置电流 30pA10nF 电容上 1ms 掉 0.3μV可忽略电容介质吸收普通瓷片电容介质吸收约 1%换成 C0G 或聚丙烯电容可降到 0.1% 以下。所以 3% 误差里运放失调是主要项。要压到 1% 以内输入信号幅度要提到 500mVpp 以上或者换低失调运放。这也是为什么 OPA128 那种静电计级运放贵——它的失调和偏置电流都低到可以忽略误差只剩电容和二极管的事。4. 峰值检测电路避坑五条血泪经验4.1 现象仿真波形完美上板后峰值一直往下掉原因保持电容被后级负载或探头抽走电荷。仿真里后级是理想电压跟随器输入阻抗无穷大实际 TL082 输入偏置电流虽然只有 pA 级但面包板漏电、探头电容、示波器输入阻抗都在抽电荷。解决保持电容加大到 100nF 以上后级用 FET 输入运放做跟随测量时用高阻抗探头。如果保持时间要求秒级以上保持电容周围做 guard ring或者改用聚丙烯电容降低介质吸收。4.2 现象输入信号频率升到 100kHz 以上输出峰值明显偏低原因运放压摆率不够。超级二极管结构里运放输出要在每个周期内从负饱和退出并爬到新峰值压摆率不足时输出跟不上输入变化。TL082 压摆率 13V/μs5kHz 时够用100kHz 时 2Vpp 信号半周期 5μs需要 0.4V/μs 的平均压摆率但退出饱和的瞬间需要更高压摆率。解决换高压摆率运放或者降低输入信号幅度。如果频率必须高考虑无二极管型比较器方案或 FPGADAC 方案。4.3 现象复位后第一次峰值检测误差特别大原因复位开关断开时注入电荷。模拟开关或三极管在关断瞬间会把控制端的电荷注入保持电容造成一个电压台阶。这个台阶跟复位信号的边沿速度、开关的寄生电容都有关系。解决复位开关选低电荷注入型号或者在开关和保持电容之间串一个小电阻100Ω 量级用 RC 滤波吃掉注入尖峰。复位脉冲边沿放慢到微秒级也能减小注入。4.4 现象无二极管型电路在 TINA 里仿真不收敛原因比较器开集输出模型在 TINA 里没有正确建立反馈路径仿真器找不到直流工作点。这不是电路问题是仿真器模型问题。解决换 Multisim 仿真或者在 TINA 里给比较器输出加一个大的下拉电阻1MΩ帮助建立工作点。如果都不行直接搭板测这个电路结构简单上板风险不大。4.5 现象多路 PKD 之间峰值互相干扰原因多路共用电源和地线某一路复位时电流突变通过地线阻抗耦合到其他路。保持电容上的电压对地线噪声很敏感mV 级的地弹就能让峰值读数跳几个字。解决每路 PKD 的保持电容地线单独走回电源地不要共用一段地线。复位信号用光耦或数字隔离器隔开避免复位脉冲通过地线耦合。电源加 LC 滤波每路运放电源脚就近放 100nF 加 10μF 去耦。5. 峰值检测电路的进阶技巧从 3% 到 1% 的最后一公里把误差从 3% 压到 1% 以内靠的不是换更贵的运放而是把几个容易被忽略的细节做到位。第一个细节是保持电容的介质选择。普通 X7R 瓷片电容的介质吸收能到 2%~3%意味着你放掉电容电压后它会自己“弹”回来一点峰值保持的重复性直接受影响。换成 C0G 或聚丙烯电容介质吸收降到 0.1% 以下这一项误差就基本消失了。代价是同样容值下体积大一圈10nF 的聚丙烯电容比 0805 瓷片大不少布局时要留位置。第二个细节是二极管的反向恢复。1N4148 反向恢复时间 4ns在 500kHz 以下没问题但如果你把 PKD 用到 1MHz反向恢复期间二极管等效短路保持电容会被输入信号反向抽走一部分电荷峰值读数偏低。换 BAT54S 肖特基二极管反向恢复时间降到 5ns 以内正向压降也从 0.7V 降到 0.3V超级二极管的运放输出摆幅要求也跟着降低。BAT54S 是双二极管串联封装一个封装搞定钳位和充电两个二极管布局还省地方。第三个细节是运放输入失调的温漂。TL082 失调温漂 10μV/°C室温到 50°C 漂 0.5mV100mVpp 信号下就是 1% 误差。如果设备要在宽温下工作要么选低漂移运放要么在出厂时做一次软件校准——用已知幅度的信号跑一遍 PKD把读数存进 MCU 的 flash运行时做线性补偿。这个校准不需要高精度源只要源本身稳定用万用表读准一个点就行。第四个细节是复位开关的时序。复位脉冲宽度要大于保持电容通过开关放电的 5 倍时间常数。假设开关导通电阻 50Ω保持电容 10nF时间常数 0.5μs复位脉冲至少 2.5μs。但复位脉冲也不能太宽否则在高速采样场景下占空比太大影响峰值捕获窗口。我一般用 5~10μs 的复位脉冲边沿控制在 100ns 量级兼顾放电彻底和电荷注入小。最后一个技巧是给保持电容加一个高阻抗缓冲。保持电容直接接后级运放同相端运放输入偏置电流会慢慢抽走电荷。如果保持时间要求到分钟级可以在保持电容和跟随器之间加一个 JFET 源极跟随器输入阻抗到 10^12Ω 量级偏置电流 fA 级保持时间直接拉长几个数量级。JFET 选 2N4117 这类低漏电流型号源极电阻用 1MΩ 以上静态电流控制在微安级不会给前级增加负担。从那以后我每次做 PKD都强制走一遍“仿真设真实模型—面包板验拓扑—洞洞板测保持—宽温跑漂移”的流程少一步后面就要返工。希望帮到你。本文还有配套的精品资源点击获取