简介:「峰值检测电路」文档面向电子工程初学者与电子设计竞赛参赛者,聚焦信号峰值提取与保持这一基础环节,帮助读者理解从二极管加电容的简易结构,到运放「超级二极管」改进方案的选型逻辑。全包仅1个doc文件,约594KB,内容按原理剖析、电路分类与器件选型展开:先以TINA-TI仿真对比简单检波与超级二极管的误差差异,再说明输入输出缓冲、电容放电复位开关等模块的作用,随后介绍分立二极管电容型、无二极管型以及ADI PKD01集成方案,并给出500kHz以下、100mVpp以上输入误差约3%的实测经验。文中还提及FET运放降低偏置电流、防止运放负饱和失真等工程细节,对程控增益放大器倍数判据的选取亦有讨论。已有348人学习,适合希望快速建立峰值检测电路设计框架、为实际搭建与调试做准备的读者参考。
1. 需求切入:为什么峰值保持比峰值比较更难做
峰值检测电路看着像模电课本里的一页,但真正把它做成能交付的毕设或课设方案,难点不在“取最大值”四个字,而在保持、复位和误差控制。自动增益控制里常用正峰值判断该选哪一档增益,有人图省事拿有效值芯片做判据,实际测试时会发现有效值和信号正负峰值没有必然联系,成本也不友好。这套方案要解决的是:输入从几十毫伏到几伏、频率从直流到几百千赫,电路输出一个与历史最大正峰值对应的直流电压,直到更大峰值出现或复位信号到来。它适合正在做模拟电路课程设计、电子类毕业设计的学生,也适合需要给传感器最值采样做前端保持的从业者。
2. 原理拆解:电容、单向开关、缓冲与复位四个模块
2.1 基本拓扑与误差来源
最朴素的峰值检测器只有两个核心器件:一个二极管和一个电容器。输入信号通过二极管给电容充电,当输入电压高于电容电压时二极管导通,电容电压跟随输入上升;输入回落时二极管反偏,电容上的电压保持住。这个结构在面包板上十分钟能搭出来,但它只能算原理验证,离可交付方案还有距离。
第一个误差来自二极管的正向导通压降。输入峰值经过二极管后,输出会比实际峰值低一个导通压降,输入幅度越小,相对误差越大。第二个误差来自电容的电荷泄漏,输出端只要接上负载、运放输入偏置电流或 PCB 表面漏电,电容电压就会缓慢下跌,保持时间越长,误差越明显。第三个误差来自充电速度,电容越大保持越好,但充电时间常数也越大,高频窄脉冲还没充到峰值就结束了。
提示:仿真里用理想二极管模型时,这两个误差经常被掩盖,等到实物测试才翻车。
我一般先做一张误差预算表,把二极管压降、运放偏置、电容漏电、复位电荷注入分别列出来,再决定用哪种拓扑。下面这张表可以直接套到自己的指标里,把“允许误差”拆到每个模块头上,后面选运放和电容时就不会凭感觉。
| 误差项 | 典型来源 | 影响表现 | 处理方向 |
|---|---|---|---|
| 二极管压降 | 普通二极管正向导通 | 小信号峰值偏低,非线性 | 超级二极管或比较器开集输出 |
| 运放偏置电流 | 输入级偏置电流流过保持电容 | 保持电压缓慢下跌或上升 | 低偏置电流运放、输入缓冲 |
| 电容漏电 | 电容介质、PCB 表面污染 | 长时间保持掉压 | 低泄漏电容、保护环、清洁 |
| 复位电荷注入 | 开关断开瞬间注入电荷 | 复位后残留底数 | 先断输入再复位、对称开关 |
| 输出缓冲失调 | 缓冲运放失调电压 | 固定直流偏移 | 选低失调运放或软件校准 |
2.2 超级二极管与负饱和恢复
把二极管放进运放的负反馈环里,就得到常说的“超级二极管”。运放会主动抬高输出,把二极管压降补偿掉,误差从几百毫伏降到毫伏级。这个结构在低频、大信号下很好用,但有一个容易被忽略的毛病:输入从负电压往正电压爬升时,运放要先从负饱和状态退出来,再通过二极管闭合反馈环。退出饱和需要时间,输入变化快的时候,输出会短暂失真,峰值保持的起点就不准了。
解决思路不是一味换更快的运放,而是在输入处理环节加防负饱和措施。常见做法是在输入和输出之间再加一个二极管做钳位,让运放输出不要深度饱和;也有方案在反馈路径上并联小电容,牺牲一点带宽换稳定性。我的经验是,先把输入信号的最小负摆幅和最高频率定下来,再选摆率足够的运放,最后用仿真看负饱和恢复段,别等画完板子才发现。
超级二极管也不能包打天下。输入信号很小、频率又高时,运放的输入偏置和噪声会变成主要误差;输入信号很大时,运放的输出摆幅和恢复时间又成了瓶颈。它适合几百千赫以下、百毫伏以上的场景,正好覆盖大多数课程设计和传感器最值采样。
2.3 模块划分与指标定义
把电路拆开看,峰值检测器可以分成四个模块:模拟峰值存储器,也就是保持电容;单向电流开关,可以是二极管、三极管或比较器开集输出;输入输出缓冲隔离,通常是运放;电容放电复位开关,用模拟开关、三极管或继电器都行,非必须但强烈建议留。
模块划分清楚之后,指标才有地方落。输入范围决定缓冲运放的共模范围和供电;频率上限决定运放带宽和充电电流;保持时间决定电容值和泄漏要求;复位时间决定放电电阻和开关速度;输出接口决定要不要加低通滤波和驱动缓冲。下面这张接口表是我做方案时先填的,填完再画原理图,能少改两版。
| 模块 | 输入 | 输出 | 关键约束 |
|---|---|---|---|
| 输入缓冲 | 被测信号 | 低阻抗驱动 | 共模范围、输入偏置、带宽 |
| 单向开关 | 缓冲输出 | 充电电流 | 正向压降、反向漏电、恢复时间 |
| 峰值存储器 | 充电电流 | 保持电压 | 电容容差、介质吸收、漏电 |
| 输出缓冲 | 保持电压 | 低阻抗输出 | 失调、输入偏置、负载能力 |
| 复位开关 | 复位控制 | 放电回路 | 电荷注入、导通电阻、时序 |
指标不用一上来就写“高精度”。课程设计通常定在 0 到 500kHz、100mVpp 到 5Vpp、误差不超过 3%、保持时间不低于 10ms、复位时间不超过 10us,这几个数足够撑起一份完整方案,也方便实测。频率再往上走,二极管加电容的结构就跟不上了,要换比较器加 DAC 的数字方案。
3. 方案选型:从分立二极管到数字比较的五条路线
3.1 分立二极管电容型:便宜但有边界
分立二极管加电容加运放是最容易落地的一条路线。公开数据手册里有一个经典结构:输入用低偏置电流的静电计级运放做缓冲,二极管放在反馈环里,保持电容接在输出端,另加一个小电容防止自激。低偏置电流运放的价值在于,它的输入偏置电流小到皮安甚至飞安级,不会把保持电容上的电荷抽走;小电容则是用来压住高频振荡,属于调试时救命的东西。
实际做课设不必追求静电计级运放。通用双运放加小信号开关二极管,性价比更高,500kHz 以下、100mVpp 以上做到 3% 以内是有机会的。这里的关键不是运放多贵,而是输入偏置电流和输出摆幅要匹配。双运放的一半做输入缓冲,另一半做输出缓冲,二极管放在两个运放之间,保持电容靠近输出缓冲的输入脚,复位开关并在电容两端。
这个方案最容易踩的坑是输出缓冲自激。保持电容直接挂在运放输出端时,容性负载会让某些运放振荡,现象是输出线上叠了几十毫伏的高频毛刺,峰值读数一直跳。处理办法是在输出缓冲前串一个小电阻,或者把保持电容接到一个高阻抗节点上,再由缓冲器隔离。别小看这个电阻,它经常决定实物能不能稳定读数。
3.2 无二极管开集比较器型:把单向开关换掉
无二极管型用比较器的开集三极管或开漏 MOS 代替二极管。比较器比较输入和保持电容电压,输入更高时输出管导通,给电容充电;输入低于电容电压时输出管截止,电容保持。这个结构省掉了二极管压降,成本也低,但比较器的响应速度和输出管饱和压降会影响精度。
公开数据手册里有很简单的峰值检测电路,看起来几个器件就能完成。实际调试时要注意两点:开集输出必须加上拉电阻,上拉电阻太大会拖慢充电速度,太小会增加功耗和比较器输出管的负担;比较器输入端的偏置电流和失调电压会直接变成峰值误差,输入信号小的时候尤其明显。
还有一点,这类电路在仿真里不一定顺利收敛。比较器开集输出加上电容负载,仿真器容易把工作点算到奇怪的状态,现象是输出一直不充电或者一直饱和。遇到这种情况,先检查上拉电阻和初始条件,再检查比较器输出管模型是不是理想开关。仿真跑不通不代表电路不能做,但实物一定要用示波器看充电波形和保持段。
3.3 集成峰值检测与高速数字比较路线
集成峰值检测芯片把二极管、电容和缓冲做在一起,外围电路少,适合空间紧张或不想调模拟环路的场景。它的本质仍然是二极管加电容,性能要看数据手册的保持下降率、带宽和复位方式。选型时别只看“集成”两个字,要盯着输入范围、输出驱动能力和复位后残留,尤其是复位开关的电荷注入,集成芯片也躲不开。
频率再高,模拟保持电容的充电时间就不够了。我见过的高速方案是 FPGA 加 DAC 加快速度比较器:DAC 输出一个参考电压,比较器比较输入信号和参考电压,FPGA 控制 DAC 电压逐步逼近并记录比较器翻转点,最后把峰值对应的数字量锁存。这个方案把模拟保持变成了数字搜索,精度取决于 DAC 位数和比较器延迟,适合高频、高重复性的场景。
这条路线对课程设计来说偏重,但如果毕设题目要求“高速峰值检测”或“数字峰值检测”,它反而是个完整的故事。实现时把 DAC 更新速率、比较器传输延迟、FPGA 状态机节拍算清楚,再留一个串口或并口把峰值读出来,方案就闭环了。
3.4 选型矩阵与适用边界
选型不要凭“哪个高级用哪个”,按指标打分更稳。下面这张矩阵把五条路线放在一起,分数按课程设计的常见权重给:精度、带宽、成本、调试难度、可扩展性。分数不是绝对标准,但能逼着人把需求想清楚。
| 路线 | 精度潜力 | 带宽 | 成本 | 调试难度 | 适用场景 |
|---|---|---|---|---|---|
| 普通二极管加电容 | 低 | 低 | 很低 | 低 | 原理演示、大信号 |
| 超级二极管 | 中高 | 中 | 中 | 中 | 500kHz 以下精密保持 |
| 开集比较器 | 中 | 中 | 低 | 中 | 成本敏感、中等精度 |
| 集成峰值检测 | 中 | 中 | 中高 | 低 | 空间受限、快速落地 |
| FPGA 加 DAC 加比较器 | 高 | 高 | 高 | 高 | 高速、数字化输出 |
我的建议是:课程设计优先选超级二极管路线,器件通用、资料多、指标够用;毕设如果题目偏高速,再考虑数字比较路线。集成芯片可以作为对比方案写进论文,但别把“集成”当成性能保证。选型矩阵填完,方案章节的对比表也就有了。
4. 落地实现:参数计算、仿真验证与复位时序
4.1 保持电容、复位电阻与误差计算
保持电容的选值要在充电速度和保持时间之间折中。电容越大,保持时间越长,但充电电流有限时,高频窄脉冲充不到峰值。我一般先按保持时间算最小电容,再按充电时间算最大电容,取中间值。下面这段 Python 把保持掉压、复位时间和充电斜率一起算出来,改几个参数就能套自己的指标。
# 峰值保持电容参数估算 # C: 保持电容,单位 F # I_leak: 总泄漏电流,单位 A(运放偏置 + 电容漏电 + PCB 漏电) # t_hold: 要求保持时间,单位 s # R_reset: 复位放电电阻,单位 ohm # I_charge: 可用充电电流,单位 A C = 1e-9 # 1 nF I_leak = 1e-9 # 1 nA,偏保守的泄漏估计 t_hold = 10e-3 # 10 ms R_reset = 100.0 # 100 ohm I_charge = 10e-3 # 10 mA # 保持期间掉压:dV = I * t / C dv_hold = I_leak * t_hold / C print("保持掉压(V):", dv_hold) # 复位时间按 5 倍 RC 估算到 99% 放电 t_reset = 5 * R_reset * C print("复位时间(s):", t_reset) # 充电斜率:dV/dt = I / C slew = I_charge / C print("充电斜率(V/s):", slew) # 若输入是 500 kHz 方波,半周期 1 us,看能充多少 half_period = 0.5 / 500e3 print("半周期内可充电电压(V):", slew * half_period)这段代码的输出不是最终答案,而是用来判断选值是否离谱。1nF 电容、1nA 泄漏、10ms 保持,掉压大约 10mV,对 1V 峰值是 1% 误差,可以接受;如果泄漏估算到 10nA,掉压就变成 100mV,必须换低泄漏电容或缩短保持时间。复位时间 5×100Ω×1nF 是 0.5us,满足 10us 以内的要求。充电斜率 10V/us,500kHz 方波半周期 1us 能充 10V,看起来够,但实际运放输出电流会随压差下降,所以仿真时还要看大信号阶跃。
注意:电容的介质吸收比容差更隐蔽。聚丙烯或聚苯硫醚电容的保持特性通常比普通陶瓷电容好,具体选型要看数据手册的介质吸收指标,别只看容值。
复位开关的导通电阻也要算进去。模拟开关导通电阻大,放电时间会变长;三极管饱和压降在电容电压很低时放电会变慢,留下几毫伏残留。解决方法是先用一个小的放电电阻快速拉到接近零,再用一个较大的电阻拉底,或者干脆用推挽式复位。课程设计里用一个小信号 MOS 管加限流电阻就够,但复位后一定要等电容电压稳定再开始下一次采集。
4.2 仿真验证:先看瞬态,再看负饱和
仿真不要只跑一个正弦波就结束。我通常分三步:第一步跑直流工作点,确认运放输入输出没有饱和、二极管有正确偏置;第二步跑瞬态,输入用 5kHz、2Vpp 正弦,观察充电建立时间和保持段掉压;第三步跑输入从负电压快速翻正的波形,专门看超级二极管的负饱和恢复段。
瞬态仿真里要把保持电容的初始条件设好,否则输出会从零开始爬,看起来建立时间很长。输入源的内阻也要加上,真实信号源不会理想为零。二极管的模型尽量用带结电容和反向恢复的,理想开关模型会把恢复时间藏掉。运放模型至少要有压摆率和输出电流限制,否则仿真出来的充电斜率比实物乐观。
仿真通过不代表实物通过,但仿真不通过一定要先找原因。常见现象是输出在输入峰值附近振荡,原因是输出缓冲带容性负载;另一个现象是保持段一直往下掉,原因是仿真里给保持电容并联了不该有的电阻,或者输出缓冲的输入偏置模型不对。把这两个问题排掉,再去画板子。
4.3 复位时序与微控制器控制
复位不是拉一下开关就完事。输入还在变化时复位,电容刚放完又被充电,输出会停在某个中间值;复位开关断开时的电荷注入还会在电容上留下一个小台阶。稳妥的时序是:先断开输入开关或把输入缓冲置零,再闭合复位开关,等放电完成,断开复位开关,最后恢复输入。下面这段 C 代码是一个简单的状态机,用在微控制器上控制三个引脚。
// 峰值检测复位时序控制(伪代码,引脚名按实际改) // input_en: 输入开关使能,1 接通,0 断开 // reset_en: 复位开关使能,1 放电,0 释放 // ready: 输出给采集端的就绪标志 #include <stdint.h> #define DELAY_DISCHARGE_US 20 #define DELAY_SETTLE_US 50 static void delay_us(uint32_t us); void pkd_reset_sequence(void) { // 1. 先切断输入,避免复位期间又被充电 input_en = 0; delay_us(2); // 2. 闭合复位开关,给保持电容放电 reset_en = 1; delay_us(DELAY_DISCHARGE_US); // 3. 先断开复位开关,再等电荷注入稳定 reset_en = 0; delay_us(DELAY_SETTLE_US); // 4. 恢复输入,允许下一次峰值捕获 input_en = 1; } uint8_t pkd_read_ready(void) { // 采集端在复位完成后读取;这里用简单标志示意 return ready; }这段代码的重点是顺序,不是延时数值。DELAY_DISCHARGE_US要大于 5 倍放电时间常数,DELAY_SETTLE_US要覆盖复位开关的电荷注入和运放恢复。实际调试时用示波器同时看复位引脚和保持电容电压,先把放电段看清楚,再调延时。输入开关如果用的是模拟开关,注意它的导通电阻和电荷注入,别把复位残留当成运放失调。
4.4 布局与保护环
模拟保持节点是高阻抗节点,布局比原理图更容易翻车。保持电容要靠近输出缓冲的输入脚,走线尽量短;复位开关的放电回路要单独走,避免放电电流流过输入缓冲的地;输入和输出不要平行长距离走线,减少耦合。PCB 表面如果残留助焊剂,几纳安的漏电就能让 10ms 保持掉几十毫伏,清洗和阻焊选择比换运放更有效。
有条件的话在保持节点周围加保护环,把保护环接到与保持电压相近的低阻抗节点,或者接到缓冲器的输出。保护环不能随便接地,接地会引入新的漏电通路。面包板阶段很难做保护环,所以面包板测出来的保持时间通常比 PCB 差,别用面包板数据下最终结论。
5. 避坑排查:五类翻车现象的原因与处理
5.1 超级二极管高频失真:负饱和恢复不是玄学
现象:输入从负电压快速翻正时,输出不是立刻跟随,而是先停一段再爬升,峰值读数偏低,频率越高越明显。原因:运放深度负饱和,退出饱和需要时间,二极管反馈环在这个窗口里没有闭合。解决:在输入和输出之间加钳位二极管,限制运放负摆幅;选压摆率足够的运放;在反馈路径加小电容加速恢复;必要时把输入信号抬到正电压范围,避免运放进入负饱和。
这个坑最容易被仿真掩盖,因为理想运放没有饱和恢复时间。实物调试时用方波或窄脉冲看上升沿,别只用正弦波。正弦波过零慢,恢复段被掩盖,方波才是照妖镜。
5.2 保持段掉压:先查漏电,再查偏置
现象:峰值保持后,输出在几十毫秒内缓慢下跌,输入越大跌得越明显。原因:保持电容漏电、PCB 表面污染、输出缓冲输入偏置电流、复位开关关断漏电。解决:换低泄漏电容;清洗 PCB 并做保护环;选低偏置电流运放;复位开关选关断漏电小的型号;在保持节点加高阻抗缓冲,避免负载直接挂在电容上。
排查时先断开负载看掉压是否消失,再断开复位开关看是否改善,最后用干净板子对比。别一上来就换运放,很多时候是板子没洗干净。
5.3 输出缓冲自激:容性负载惹的祸
现象:输出直流上叠了几十毫伏到几百毫伏的高频振荡,峰值读数跳动,示波器触发不稳。原因:保持电容是容性负载,某些运放驱动容性负载会相位裕度不足。解决:输出缓冲前串小电阻隔离;在反馈电阻上并联小电容补偿;选单位增益稳定且容性负载能力强的运放;把保持电容接到高阻抗节点,由缓冲器隔离。
这个现象在面包板上尤其常见,因为面包板寄生电容大。先降低带宽看振荡是否消失,再逐步加补偿,别用大电容硬压,会把响应压死。
5.4 复位残留:电荷注入和时序不对
现象:每次复位后输出不是零,而是几毫伏到几十毫伏的底数,连续复位底数还会漂。原因:复位开关断开瞬间注入电荷,输入没有断开导致电容又被充电,放电时间不够。解决:先断输入再复位;复位开关用对称结构或加小电阻限制注入;放电时间取 5 倍以上时间常数;复位后等运放恢复再采集。
用示波器看复位引脚和电容电压的时序,先把放电段和恢复段分开,再调延时。软件上加一次空复位读数做底数校准,也是个实用办法。
5.5 仿真通过实物失败:模型和负载没对齐
现象:仿真波形漂亮,实物误差大、保持短、还振荡。原因:仿真用了理想二极管、理想运放、理想电容,没带负载;实物有源内阻、PCB 漏电、探头电容。解决:仿真加信号源内阻、运放压摆率和输出电流限制、二极管结电容;实物测试用高阻探头,注意探头电容对保持节点的影响;把仿真和实测的波形叠在一起看差异。
我一般会留一版“最坏情况”仿真:泄漏取大、电容取小、运放取慢,如果最坏情况还能接受,实物才有把握。
5.6 排查顺序与记录表
遇到问题不要东改一下西改一下,按顺序排查:先看供电和地,再看直流工作点,再看输入缓冲输出是否正常,再看充电波形,再看保持段,最后看复位时序。每一步用示波器留一张图,记录输入幅度、频率、输出峰值、掉压、复位残留。下面这张表可以直接打印出来填。
| 检查项 | 测试条件 | 观察点 | 合格判据 | 实测记录 |
|---|---|---|---|---|
| 直流工作点 | 输入接地 | 各运放输出 | 不饱和、不振荡 | |
| 输入缓冲 | 1kHz 正弦 | 缓冲输出 | 跟随、无明显失真 | |
| 充电建立 | 5kHz 方波 | 保持电容电压 | 10 个周期内到峰值 99% | |
| 保持掉压 | 充到 1V 后断开输入 | 输出 10ms 变化 | 小于允许误差 | |
| 复位残留 | 连续复位 10 次 | 复位后输出 | 底数稳定且小于 5mV | |
| 频率上限 | 100mVpp 到 5Vpp | 输出峰值 | 误差小于 3% |
这张表填完,论文里的测试章节和答辩时的数据都有了。别嫌麻烦,峰值检测电路的很多问题不是“算错”,而是“没测”。
6. 验收答辩:用三张表把指标测清楚
验收别只摆一张原理图,要拿数据说话。我一般准备三张表:静态精度表、动态响应表、保持与复位表。静态精度表测直流或低频输入下,输出峰值和输入峰值的偏差,取 100mV、500mV、1V、2V、5V 几个点,每个点记录三次;动态响应表测不同频率和波形下的建立时间与过冲,正弦、方波、窄脉冲各来一组;保持与复位表测 10ms、100ms、1s 的掉压,以及复位后残留和复位时间。三张表合起来,方案的可信度就够了。
答辩时讲三件事:指标怎么定,误差怎么分,失败怎么定位。指标不要念参数,要说清为什么选 500kHz、为什么允许 3%、为什么保持 10ms;误差要能指到具体模块,二极管压降多少、运放偏置多少、电容漏电多少;失败定位要举一个真实调试例子,比如输出振荡最后查出来是容性负载,或者保持掉压最后查出来是板子没洗干净。老师更愿意听这种带血泪经验的定位过程,而不是背公式。
下面这张验收表可以直接放到报告里,把“实测”列填满,再把不达标项的处理办法写在备注里。注意测试时探头要选高阻低电容的,探头电容挂在保持节点上会让掉压变快,测出来的数据自己吓自己。
| 验收项 | 测试方法 | 目标值 | 实测值 | 备注 |
|---|---|---|---|---|
| 输入范围 | 直流扫描 | 100mVpp 到 5Vpp | ||
| 频率上限 | 正弦扫描 | 500kHz 内误差 ≤3% | ||
| 峰值误差 | 多点对比 | ≤3% | ||
| 保持掉压 | 10ms 保持 | ≤10mV | ||
| 复位残留 | 连续复位 | ≤5mV | ||
| 复位时间 | 示波器测放电 | ≤10us |
这套方案的分块表、参数计算脚本和验收记录表我整理成了一份可复用资料,需要直接拿去改指标的人可以按模块对照着搭。从那以后我每次带人做峰值检测电路,都先把复位时序和保持泄漏测一遍再谈精度,因为这两个地方翻车最不值。希望帮到你。
本文还有配套的精品资源,点击获取