ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

运放用作比较器:从开环原理到迟滞设计实战

运放用作比较器:从开环原理到迟滞设计实战 做第一个光电计数器时我把光敏电阻的电压变化先送进一级同相放大器再把放大后的信号交给单片机ADC。直到后来想省一个引脚才把另一枚运放直接当成比较器用给阈值输出高低电平触发计数。结果发现“能用”和“好用”之间隔着一整条经验尤其是开环输出、共模范围、迟滞这几个概念几乎每一项都把我按在地上摩擦过。这篇“运算放大器基础1”就来把“运放用作比较器”这件事讲透适合刚接触运放、或者想用一个双运放芯片同时干放大和比较两件事的朋友。我会从最底层的开环原理讲起给一个可以直接在面包板上复现的低电量报警电路再分享我实测中踩到过的坑和迟滞设计的具体计算。1. 同一块硅片两种人格开环才是比较器的真相1.1 从运放模型推导“比较”的本质很多人学运放第一节课就是“虚短虚断”于是潜意识里觉得运放一定要接负反馈才行。其实那是线性应用的条件不是运放的物理本质。运放本身做的事情非常简单把两个输入端的电压差放大到输出。理想运放的输出表达式是Vout A_OL × (V - V-)这里的A_OL是开环增益。普通通用运放的直流开环增益通常在100dB到120dB之间也就是十万倍到百万倍。假设供电电压是5V开环增益取十万倍那只要输入端存在 5V / 100000 50µV 的电压差输出就已经被推到电源轨饱和了。换句话说一旦去掉负反馈运放在绝大多数情况下根本没有机会工作在“线性放大区”它只会做一件事判断V和V-谁大然后输出直接顶到正电源或负电源附近。这正是比较器需要的功能。所以“运放用作比较器”不是某种邪门用法而是开环状态下运放的默认人格。只是我们平时习惯用负反馈把这种人格压制住了。1.2 虚短的条件被拿掉后会发生什么负反馈下的运放输出会通过反馈网络反作用于输入端想方设法让V和V-逼近相等这个状态才叫“虚短”。当我把反馈电阻拿掉或者故意不接负反馈V和V-之间失去这种“自我修正”机制差多少就是多少只要差几微伏输出就会跑到一边去。这里有一个初学者容易搞混的点运放用作比较器输出并不等于“标准的数字高电平”而是等于当前供电下的饱和输出电压。对非轨到轨运放来说这个饱和电压可能离电源还有一段距离。这一点我在后面第3部分会专门展开这里先记住比较器输出“高”是物理上的饱和高电压不是IEEE定义的标准逻辑电平。可以用下面这张表来理解两种工作状态的区别对比项线性放大器开环比较器反馈形式深度负反馈无负反馈或正反馈输入关系V ≈ V-虚短成立V 与 V- 被拉开输出状态线性区内连续变化饱和在电源轨附近典型用途信号调理、滤波、跟随过压/欠压判断、波形整形、阈值触发主要风险稳定性、带宽输出摆幅、速度、输入共模限制我个人的体会是不要把“比较器”想象成运放的一个额外功能而是要把“开环”这件事本身当成运放的基础属性去理解。很多电路的异常现象比如输出抖个不停、高电平不够高、翻转慢只要回到“开环增益极大、输出只能饱和”这个模型都能解释得通。2. 从电池电压到LED灯一个能直接复现的低电量报警电路2.1 需求、器件选型与连接关系这一节我们做一个具体的项目检测3.7V锂电池当电池电压低于3.5V时点亮LED提醒充电电压正常时LED熄灭。有人会说这种需求直接用比较器芯片不就行了吗没错但教学目的不一样。这里用LM358是因为它几乎是每个电子爱好者手里都有的器件而且它里面有两个运放一个用来做比较器另一个还能留着下节课做线性放大非常适合“基础1”这个定位。器件清单如下器件参数数量运放LM358双运放1片基准源TLV4311.24V1只电阻150kΩ1只电阻82kΩ1只电阻1kΩ1只电阻330Ω1只电容100nF2只LED红色正向压降约2V1只电池或直流电源3.0V4.2V模拟电池1路电路连接的核心思路是把电池电压分压后送到V端把固定参考电压送到V-端。具体是这样接的电池正极 VCC 经过150kΩ接到运放V引脚V引脚再经过82kΩ接地形成1:0.353的分压网络。电池正极经过1kΩ接到TLV431的阴极TLV431的阴极直接连到运放V-引脚TLV431阳极接地。TLV431会把阴极稳定在1.24V。运放输出引脚接LED限流电阻330Ω到LED阳极LED阴极接到运放输出引脚——注意是LED放在电源和输出之间不是输出串LED到地。VCC和GND之间放一个100nF去耦电容TLV431阴极也放一个100nF到地。这里选择了TLV431而不是更常见的TL431原因很关键TLV431参考电压是1.24V可以在3.0V这么低的供电下正常工作而TL431的参考电压是2.5V在3.7V电池供电下LM358输入端共模范围最高大约只有VCC减1.5V2.5V已经超出范围了。如果手头只有TL431建议把整个电路用5V供电别用电池直接供。2.2 阈值计算为什么必须用固定基准而不是两路分压我最开始想过一个“省事”方案两组分压电阻都从电池电压上取一组给V一组给V-只要电阻比不同就能判断过压欠压。但仔细一算就知道有问题。两组分压都正比于电池电压最终比较的是两个比例而不是绝对电压。比如一组分压比是0.5另一组是0.4只要电池电压从4.2V一路掉到2V输出翻转点永远是电池电压的某个固定比例电压绝对值从4.2V掉到2V时虽然比例没变但实际电压早就不对了。低电量报警要的是“低于3.5V这个绝对电压就报警”所以必须有一个不随电池电压变化的固定基准。TLV431在这里的作用就是提供一个绝对值1.24V的参考它不跟着电池电压跑。然后我们通过电阻分压把电池电压3.5V映射到1.24V。分压比计算分压比 V_ref / V_threshold 1.24V / 3.5V ≈ 0.3543选R1(上端)150kΩR2(下端)82kΩ实际分压比是R2 / (R1 R2) 82 / (150 82) 0.3534实际翻转阈值V_threshold V_ref × (R1 R2) / R2 1.24 × 232 / 82 ≈ 3.506V误差只有6mV左右完全够用。TLV431阴极串联电阻1kΩ在电池电压3.7V时TLV431工作电流约 (3.7-1.24)/1000 2.46mA在3.2V时也有约1.96mA都处在TLV431正常工作区间内。LED限流电阻取330Ω按电池3.7V、LED正向压降2V、LM358输出低电平约0.15V来算I_LED ≈ (3.7 - 2.0 - 0.15) / 330 ≈ 4.7mA这亮度在室内看得很清楚也不会把运放输出级压垮。2.3 面包板调测用可调电源模拟电池放电搭建完成后先用直流稳压电源模拟电池别直接上真实锂电池不然反复放电太折腾。我从3.8V开始慢慢往下调同时用万用表盯着运放输出引脚。在3.8V时V端电压 3.8 × 82/232 ≈ 1.343V高于V-端的1.24V输出为高LED灭。继续把电压降到3.5V附近V端电压掉到约1.24V附近输出开始翻转LED点亮。实际受电阻误差影响翻转点可能在3.42V到3.58V之间这是正常的。如果要求更高精度把上端电阻换成100k电位器串联或者选1%精度的电阻。测量记录大致像这样电池电压V端电压V-端电压运放输出LED状态3.80V1.343V1.24V高约3.1V灭3.60V1.272V1.24V高灭3.50V1.237V1.24V低亮3.20V1.131V1.24V低亮这组数据里已经能看到一个细节电池电压3.8V时LM358输出高电平只有3.1V左右而不是3.8V。这就是下一节要说的第一只坑。3. 我在实测中被坑到的四件事输出摆幅、共模范围、速度与驱动3.1 输出高电平到不了VCC才是通用运放的真实面貌第一次搭完电路我盯着万用表有点怀疑人生电池电压3.8V运放输出高电平按理说该接近3.8V结果只有3.1V。我把表笔换到芯片供电端确认没接错又把输出空载依然只有3.1V左右。这就是通用运放和“数字芯片”思维最大的冲突点。LM358的输出级是双极型晶体管推挽结构并不是CMOS轨到轨输出。在正电源附近它的高电平输出会受到输出级饱和压降的限制典型就是VCC减去0.7V到1.5V具体看负载电流。负载电流越大损失越多。排查过程是这样的先怀疑LED接错断开LED再测输出高电平从3.1V变成3.2V左右说明负载确实有影响但问题根源不在LED。然后去看数据手册的输出电压特性曲线才发现这个“VCC-1.5V”的坑。如果你的下一级是3.3V单片机的GPIO问题还不大3.1V还能被识别成高电平。但如果下一级是另一个比较器、CMOS逻辑门或需要接近供电轨的电路就要小心了。解决方案有三条换用轨到轨输出的运放比如MCP6002、OPA340这类CMOS运放在输出端加一级晶体管做电平转换或者干脆换真比较器后面第5部分会细说。3.2 输入共模范围不是所有输入电压都允许出现在引脚上第二个坑更隐蔽。LM358的输入共模电压范围是0到VCC-1.5V左右。表面意思就是两个输入端子的电压都应该落在这个范围里运放才能正常工作。在一个3.7V供电的系统里LM358的共模范围上限大概是2.2V。这就是为什么前面的电路里我不能随便用TL431的2.5V做参考因为2.5V已经超出了LM358的共模范围。当某个输入超过这个范围运放可能出现意想不到的行为比如输入级饱和、输出反转、甚至旧型号还会出现相位反转。所以当你要比较一个接近正电源的信号时别直接怼到输入端最好先分压成范围内的电压。这听起来多此一举但能在后面帮你省掉一晚上的排查时间。另外还有一个差分输入电压问题。线性应用时V和V-靠虚短维持得很近但比较器应用里两个输入大概率会差出好几伏甚至一个接近地、一个接近电源。很多运放的差分输入电压是有上限的超出后内部保护二极管会导通恢复时间变长严重时还会触发闩锁。通用运放的datasheet里通常会标“Differential Input Voltage”这一项用之前务必翻一下。3.3 压摆率和传播延迟为什么会慢到怀疑人生低速阈值检测无所谓但一旦把运放当比较器用在高频信号上就会遇到第三个坑——速度。运放内部为了负反馈稳定性普遍做了主极点补偿说白了就是内部有一个专门“拖慢”信号的电容。这个设计让线性放大不容易自激振荡但代价是开环状态下输出翻转速度被限制得很死。LM358的压摆率典型值是0.5V/µs。什么意思假设我这一节电路的输出需要从低电平0.15V翻到高电平3.1V电压变化约3V理论最短时间也要t ΔV / SR 3.0V / 0.5V/µs 6µs这还只是理想情况。实际比较器应用还要看输入过驱动电压过驱动越小翻转越慢。换句话说运放当比较器在处理100kHz以上的方波整形、PWM反馈或过零检测时基本不太行。真比较器的传播延迟通常在几百纳秒到几微秒而且datasheet会直接给出“过驱动1mV、5mV、10mV下的响应时间”方便你设计。如果你的项目只是“电池电压低于阈值点个灯”1kHz都嫌快那运放完全够用。如果后面要做电机编码器倍频计数请直接看向比较器芯片。3.4 输出驱动能力与输入偏置电流两个容易被忽略的小账第四坑不痛不痒但会影响长期可靠性。运放的输出级能拉电流也能灌电流但这不意味着你可以拿它当功率驱动。LM358输出短路电流上限大约30mA到60mA实际长时间输出大电流时输出电压会明显塌陷芯片温度也上去了。我的习惯是LED电流控制在5mA以内驱动MOS管或继电器必须加晶体管别直接接在输出上。还有一个不算坑、但特别影响精度的参数输入偏置电流。LM358不是低偏置器件最大输入偏置电流可能到250nA。如果你用高阻值的分压网络和反馈电阻偏置电流会在电阻上形成附加压降把阈值推偏。比如后一节要加迟滞电阻如果直接拿150k和82k去算反馈电阻算出来可能需要好几兆欧。几兆欧电阻流过250nA偏置电流会产生几百毫伏的误差这对比较器电路来说非常致命。所以我在做迟滞验证时会故意把分压电阻整体缩小十倍后面会看到具体处理方式。4. 迟滞比较器正反馈把抖动摇铃变成干脆的一跳4.1 先看没有迟滞时发生了什么如果你在实际项目里把前面那个低电量报警电路接到有纹波的电源上会发现一个尴尬现象LED在阈值附近不是干脆地点亮而是先闪几下再稳定甚至持续微亮。原因是比较器的翻转只有一个阈值理论上输入只要在Vth附近有微小噪声输出就会来回翻转。真实世界没有理想的“缓慢平滑跨过阈值”多半是带着纹波、毛刺、甚至开关电源的尖峰在过线。每次过线输出就跟着抖一次。解决思路不是把信号弄干净而是反过来给比较器“加两个阈值”一个用于从低到高一个用于从高到低。这两个阈值之间留出一个回差区间只要噪声幅度小于回差输出就不会乱跳。这就是迟滞比较器也常被叫做施密特触发器形态的比较器。4.2 迟滞电阻的参数推导与实例取值在设计迟滞后原来的低电量报警电路要加一个正反馈电阻从比较器输出端接到V输入端。先回顾原来不带迟滞的参数参考电压 V_ref 1.24V分压比 r R2/(R1R2) 0.3534翻转阈值 V_th 3.506VV节点对地的等效内阻 R_th R1 ∥ R2 150k ∥ 82k ≈ 53.0kΩ为了让后面反馈电阻不至于大到被偏置电流干扰我把分压电阻整体缩小十倍改成R115kΩ、R28.2kΩ分压比不变仍是0.3534但此时的等效内阻R_th 15k ∥ 8.2k ≈ 5.30kΩ定义反馈系数α R_th / (R_th R_f)加上正反馈后V节点的电压不再是单纯的分压值还要算上输出通过反馈电阻拉来的影响V_node ≈ r × V_bat × (1 - α) V_out × α当 V_node V_ref 时比较器翻转。从输出高电平状态翻转到低电平的下限阈值以及从低电平回到高电平的上限阈值可以这样近似估算V_low (V_ref - V_OH × α) / (r × (1 - α)) V_high (V_ref - V_OL × α) / (r × (1 - α))以LM358实测输出高约3.2V、输出低约0.15V为参考我希望下限阈值在3.4V附近上限阈值在3.57V附近。反推反馈系数α约0.019于是R_f R_th × (1 - α) / α ≈ 5.30k × 51 ≈ 270kΩ取标准值270kΩ。V端输出的上拉/下拉作用大约让低阈值落在3.4V上下高阈值落在3.57V上下回差约170mV已经足够吸收大多数电源纹波。画重点这组数值不是死参数。不同供电电压、不同负载下运放的实际V_OH和V_OL不一样两个阈值会不对称地移动。所以接好电阻后不要只看计算值一定要实测一次翻转点。4.3 要不要用示波器验证阈值这里有简单方法验证迟滞效果最直观的办法是给电路输入一个低频三角波。把函数发生器输出设为0V到4.2V、频率1Hz左右接到电路的VCC端前提是你的函数发生器能提供几十毫安电流。没有函数发生器也没关系用可调电源慢慢往上拧和往下拧记录LED点亮和熄灭时对应的电压就行。有示波器时可以看到输出波形从高跳低的位置和从低跳高的位置不在同一个输入电压上这就是迟滞窗口。我实测的结果是从高到低大约在电池电压3.38V时触发从低到高大约在3.55V时恢复比理论值略低原因是LM358的V_OH实际没有到3.2V那么乐观加上电阻误差略偏下是意料之中的。给个实用建议如果LED在阈值附近仍有轻微抖动优先检查电源去耦电容再检查反馈电阻是不是被输入偏置电流影响。只要回差窗口够宽绝大多数抖动都能被“吃掉”。5. 什么时候该把运放换成正牌比较器5.1 运放与比较器的关键差异对照前面所有内容都在教你怎么把运放当比较器用这一节反过来泼冷水能把电路跑起来不等于它适合量产或高速场景。真比较器在物理结构上是为开环应用优化的和运放不是一回事。对比项通用运放LM358真比较器LM393输出结构推挽输出可直接源/灌电流多数是集电极开路/漏极开路输出高电平受内部饱和压降限制取决于外部上拉电阻接的电压响应速度受主极点补偿限制慢专为开环响应优化快差分输入承受能力通常有限制可承受接近电源轨的差分电压输入共模范围需要严格确认通常设计得比较宽静态功耗中等常见低功耗型号远低于通用运放是否需要上拉电阻不需要集电极开路必需但可以自由选择逻辑电平最典型的是LM393同是双路但输出是集电极开路必须外接一个上拉电阻才能输出高电平。好处是这个上拉电阻可以接到3.3V、5V或者其他逻辑电压让输出直接匹配你的MCU电平不会出现LM358那种“高电平只有3.1V”的问题。代价是输出不能主动向外部推电流LED这类负载这样接电源正极→LED→限流电阻→比较器输出输出拉低时点亮。5.2 三个典型场景直接换比较器更省心第一个场景是高速信号整形。比如电机编码器输出、转速传感器出来的脉冲不太干净需要转成规整的方波进单片机计数器。运放当比较器动辄几十微秒的翻转延迟在这个场景下会让计数严重丢脉冲。这里应该用LM393或者响应更快的轨到轨比较器。第二个场景是窗口比较器也就是判断“电压是否在A和B之间”。这本质上需要两个阈值也就是两路比较器。这时候用LM393这种双比较器比用两个运放更合适因为它的集电极开路输出还能方便地做线与逻辑把两路结果直接合并成一个中断信号。第三个场景是低功耗电池设备。你在文档里会看到一些“纳米功耗比较器”比如TLV3691、MAX9117这类静态电流可以低到几百纳安专门用来在休眠状态下监测电压。通用运放做比较器静态电流再小也是百微安级别放在纽扣电池设备里根本耗不起。5.3 如果坚持用运放做比较器选型时记住三条当然也有不少场景是用运放做比较器完全没问题的尤其是低速阈值判断、LED指示、继电器控制这类对速度不敏感、对功耗要求不高的场合。真遇到必须用运放的情况选型时盯住三件事优先选轨到轨输出、轨到轨输入的CMOS运放比如MCP6002、TLV6002、OPA340它们能让输出电平和逻辑电平更好兼容查一下差分输入电压上限确保信号在开环状态下差出好几伏时不会损坏芯片只要分压或反馈回路总阻抗高于几十千欧就优先选低输入偏置电流的CMOS运放避免偏置电流在电阻网络上制造额外误差。我在实际项目里的选择标准很简单需要输出精确“0V/VCC”的电平或者需要高频翻转或者要低功耗直接上真比较器只是做一个不追求速度的阈值指示手头有多余的运放那就大胆用。搞清楚这层边界比背住某些“禁止把运放当比较器”的教条更有用。最后分享一个个人的小习惯无论用运放还是真比较器电源引脚旁一定要放一颗100nF陶瓷电容去耦电容和芯片的距离尽量控制在5毫米以内。阈值时刻电路最容易受电源噪声影响这个电容往往比在输入端加一堆滤波都管用。这个基础系列后面我会继续拆解比较器的输入保护、高速设计和常见振荡原因如果你在实测中也遇到阈值漂移或输出抖动欢迎把数据和现象一起发来大家讨论起来比单看书效率高得多。
返回列表