
1. 为什么选择LM358做信号发生器1.1 从一颗“白菜价”运放说起如果你刚开始接触模拟电路或者想找一个成本极低、容易上手、资料又多的运放来练手LM358几乎是绕不开的选择。它内部集成了两个独立的运算放大器采用双电源或单电源供电都能工作价格便宜到按毛计算随便一个电子市场或者网购平台都能买到。很多人第一次搭振荡电路、第一次做波形变换、第一次理解“虚短虚断”用的就是它。我最初做信号发生器的时候其实也考虑过用NE5532或者TL082。NE5532的压摆率和噪声表现确实更好但它的输入偏置电流和供电范围对新手不太友好TL082需要比较对称的双电源单电源下输出摆幅受限明显。LM358虽然压摆率只有0.3V/μs左右带宽增益积GBW大约1MHz但它有一个非常实用的特点输出可以拉到接近地电位单电源供电时也能输出比较干净的方波和三角波。对于低频信号发生器来说这个特性比高带宽更重要。注意LM358的压摆率决定了它不适合产生高频信号。如果你想要几十千赫兹以上的三角波波形会明显失真边沿变缓三角波会变成近似正弦波。所以这个项目的定位是低频信号发生器频率范围大概在几赫兹到十几千赫兹之间。1.2 方波和三角波到底是怎么“生”出来的很多人第一次看到振荡电路会觉得很神奇没有输入信号为什么输出端会有波形其实核心思想就是“自己激励自己”。方波发生器的本质是一个比较器加一个积分器比较器输出高电平或低电平积分器把方波积分成三角波三角波再反馈回比较器让比较器翻转。整个过程形成一个闭环能量在电容和电阻之间来回交换就产生了持续振荡。具体来说方波由比较器产生比较器的输出只有高和低两种状态。当输出为高时积分器开始反向积分输出电压线性下降当积分器输出降到比较器的下门限时比较器翻转输出变为低然后积分器开始正向积分输出电压线性上升升到上门限时比较器再次翻转。如此循环比较器输出方波积分器输出三角波。这个结构有一个很实用的优点方波和三角波的频率严格一致而且三角波的线性度只取决于积分器的RC时间常数和比较器的门限稳定性。只要RC元件选得准三角波的线性度可以做得相当好。1.3 这个项目适合谁能解决什么问题这个项目特别适合三类人第一类是电子类专业的学生正在学模电想找一个能同时观察方波和三角波的实验第二类是刚入门的硬件爱好者想做一个低成本信号源来测试自己搭的滤波电路、放大电路第三类是参加电子设计竞赛的同学需要一个可调频率、可调幅度的低频信号源作为调试工具。它解决的问题也很明确市面上的函数信号发生器动辄几百上千而用LM358搭一个成本不到十块钱频率和幅度都能手动调节虽然精度和稳定性不如商用设备但用来做低频电路调试完全够用。而且自己搭一遍之后对运放的工作原理、比较器、积分器、滞回特性这些概念会有非常直观的理解。2. 核心电路原理与参数计算2.1 方波发生器的核心滞回比较器方波发生部分其实就是一个滞回比较器也叫施密特触发器。它的核心是正反馈。LM358的一个运放单元接成比较器输出通过两个电阻分压后反馈到同相输入端形成正反馈。反相输入端接一个电容电容上的电压由积分器控制。滞回比较器的门限电压由反馈电阻决定。假设输出高电平为Voh输出低电平为Vol正反馈网络由R1和R2组成R1从输出接到同相输入端R2从同相输入端到地。那么上门限Vth_high和下门限Vth_low分别为Vth_high Voh × R2 / (R1 R2) Vth_low Vol × R2 / (R1 R2)如果LM358单电源供电比如12V输出高电平大约在10.5V左右因为LM358输出高电平会比电源正轨低1.5V左右输出低电平大约在0.1V左右。假设R110kΩR210kΩ那么上门限大约是5.25V下门限大约是0.05V。这个门限范围决定了三角波的幅度。实操心得R1和R2的比值决定了滞回窗口的宽度。窗口越宽三角波幅度越大但比较器翻转需要的积分时间也越长频率会降低。所以调频率的时候不要只盯着积分器的RC滞回窗口也是一个重要变量。2.2 三角波发生器的核心积分器积分器是三角波产生的关键。LM358的另一个运放单元接成反相积分器输入来自方波输出输出接到比较器的反相输入端。积分器的基本结构是反相输入端通过一个电阻R连接到方波输出反馈回路由一个电容C构成同相输入端接地或接虚地。积分器的输出电压变化率由输入电压和RC时间常数决定dVout/dt -Vin / (R × C)当方波输出为高电平时Vin为正积分器输出线性下降当方波输出为低电平时Vin为负相对于虚地积分器输出线性上升。因为方波的高电平和低电平幅度基本对称所以三角波的上升和下降斜率也基本对称。三角波的频率可以通过以下公式估算f 1 / (4 × R × C × (R2 / R1))这个公式的推导思路是积分器从下门限升到上门限所需的时间加上从上门限降到下门限所需的时间就是一个完整周期。每个半周期的时间等于滞回窗口宽度除以积分器斜率。假设R10kΩC100nFR110kΩR210kΩ那么f ≈ 1 / (4 × 10^4 × 10^-7 × 1) 250Hz。这个频率在音频范围内用示波器观察非常方便。2.3 元件选型与参数计算实例下面给出一组我实际用过的参数可以直接抄作业元件参数作用LM358双运放一个做比较器一个做积分器R110kΩ滞回反馈上电阻R210kΩ滞回反馈下电阻R310kΩ积分器输入电阻C1100nF积分电容R41kΩ输出限流电阻电源12V单电源供电按照这组参数理论频率大约是250Hz。实际搭出来之后频率会在200Hz到300Hz之间因为LM358的输出高电平不是满幅电容也有容差。如果你想要频率可调可以把R3换成一个10kΩ的电位器串联一个1kΩ的固定电阻这样频率可以在几十赫兹到几千赫兹之间调节。注意积分电容C1建议用薄膜电容或者C0G陶瓷电容不要用普通的X7R或Y5V陶瓷电容因为它们的容值随电压和温度变化很大会导致三角波频率漂移。我试过用X7R电容频率随温度变化能差出20%以上。2.4 为什么不用单运放而用双运放LM358内部有两个运放正好一个做比较器一个做积分器。如果用单运放就需要外加一个比较器芯片比如LM393但LM393是开集输出需要上拉电阻而且它的输出高电平取决于上拉电源不如LM358方便。另外LM358的两个运放单元在同一芯片上温度特性一致比较器和积分器的温漂会相互抵消一部分频率稳定性反而比用两个独立芯片更好。还有一个实际考虑LM358的输出可以直接驱动积分器的输入电阻不需要额外的缓冲。虽然它的输出阻抗不算特别低但对于10kΩ级别的输入电阻来说分压误差不到1%完全可以接受。3. 手把手实操从面包板到稳定波形3.1 面包板搭建步骤与布线技巧我建议先在面包板上搭一遍确认原理没问题之后再焊到洞洞板上。面包板搭建的顺序很重要不要一上来就把所有元件插上去那样出了问题很难排查。第一步先把LM358插到面包板中间注意缺口朝左这样引脚1到4在下面5到8在上面。第8脚接12V第4脚接地。第1脚是运放A的输出第2脚是运放A的反相输入第3脚是运放A的同相输入。第5脚是运放B的同相输入第6脚是运放B的反相输入第7脚是运放B的输出。第二步搭比较器部分。运放A做比较器第3脚接R1和R2的分压点R1从第1脚接到第3脚R2从第3脚接到地。第2脚接积分器的输出。第1脚就是方波输出。第三步搭积分器部分。运放B做积分器第6脚通过R3接到第1脚第6脚和第7脚之间接C1第5脚接地。第7脚就是三角波输出。第四步检查电源。用万用表测LM358的第8脚和第4脚之间确认有12V电压。然后测第1脚电压应该在6V左右摆动如果一直停在12V或者0V说明比较器没有翻转。实操心得面包板上的接触电阻有时候会捣乱尤其是积分电容的引脚如果氧化了会导致三角波变成锯齿波或者波形抖动。我一般会在插之前用砂纸轻轻打磨一下元件引脚接触会好很多。3.2 上电调试与波形观察上电之后先用示波器看第1脚。如果电路正常应该能看到一个频率大约250Hz的方波幅度在0.1V到10.5V之间。如果看不到波形先把示波器调到直流耦合垂直档位调到5V/格水平档位调到1ms/格慢慢找。如果第1脚有方波再看第7脚。第7脚应该是三角波幅度大约在0.05V到5.25V之间频率和方波一致。如果第7脚没有波形检查C1有没有接错R3有没有虚焊。如果第1脚没有方波先断开积分器把第2脚直接接地这时候比较器应该输出高电平。然后把第2脚接5V比较器应该输出低电平。如果比较器能翻转说明比较器没问题问题在积分器。如果比较器不翻转检查R1和R2有没有接错LM358有没有损坏。我遇到过一种情况方波频率特别高示波器上看不清。后来发现是积分电容C1的容值太小换了一个1μF的电容频率就降到几十赫兹了。所以如果你发现频率不对先检查C1的容值。3.3 频率和幅度调节的实操方法频率调节最直接的方法是改变R3或者C1。R3增大积分电流减小积分时间变长频率降低。C1增大积分时间也变长频率降低。我一般把R3做成电位器这样频率可以连续调节。但要注意R3不能太小否则积分电流太大LM358的输出电流可能不够波形会失真。LM358的输出短路电流大约40mA建议积分电流不要超过1mA所以R3最小不要低于10kΩ在12V供电下。幅度调节比较麻烦因为三角波的幅度由滞回窗口决定而滞回窗口又影响频率。如果你只想调幅度可以改变R1和R2的比值。R1减小滞回窗口变宽三角波幅度增大但频率会降低。所以调幅度之后要重新调频率。我一般先把幅度调到想要的数值再调R3把频率调回来。方波的幅度基本等于电源电压减去LM358的输出压降单电源12V供电时方波幅度大约10.5V。如果你想要更小的方波幅度可以在输出端加一个分压电阻网络但要注意分压电阻不能太小否则会加载LM358的输出。3.4 从面包板到洞洞板的焊接要点面包板验证通过之后建议焊到洞洞板上这样波形更稳定也方便长期使用。焊接的时候有几个要点第一电源走线要粗一点最好用0.5mm以上的漆包线或者裸铜线不要用细的跳线。LM358虽然功耗不大但方波输出的时候电流是脉冲式的细走线会有压降。第二积分电容C1要尽量靠近LM358的第6脚和第7脚引线越短越好。引线长了会引入寄生电容和电感影响三角波的线性度。第三比较器的反馈电阻R1和R2要靠近第1脚和第3脚减少干扰。第四输出端可以加一个1kΩ的限流电阻和一个LED指示灯方便观察有没有输出。但LED会消耗电流如果LED太亮可能会影响方波的高电平幅度所以LED的限流电阻不要太小建议2kΩ以上。注意焊接LM358的时候电烙铁要接地良好或者用防静电烙铁。LM358的输入级是PNP晶体管静电容易打坏。我有个朋友就是因为烙铁漏电焊坏了三片LM358后来换了防静电烙铁才搞定。4. 常见问题与排查技巧实录4.1 波形失真与频率不稳的排查思路波形失真最常见的原因是积分电容的介质吸收效应。普通的X7R陶瓷电容和电解电容都有明显的介质吸收会导致三角波的尖角变圆甚至变成正弦波。解决办法是换用薄膜电容或者C0G电容。我试过用10μF的电解电容做积分电容三角波直接变成了近似正弦波换了1μF的薄膜电容之后三角波的线性度就好了很多。频率不稳的另一个原因是电源电压波动。LM358的滞回门限和输出高电平都跟电源电压有关如果电源电压变化频率也会跟着变。所以建议用稳压电源供电不要用电池或者不稳定的适配器。如果一定要用电池可以在电源端并联一个100μF的电解电容和一个100nF的陶瓷电容滤掉低频和高频波动。还有一种情况是波形上有高频毛刺这通常是面包板或者洞洞板的走线电感引起的。解决办法是在LM358的电源引脚旁边就近放一个100nF的陶瓷电容把高频毛刺旁路掉。4.2 不起振、单边输出、频率偏差的典型原因不起振是最常见的问题。如果上电之后输出一直停在某个电平先检查比较器的正反馈有没有接对。R1必须从输出接到同相输入端如果接到反相输入端就变成负反馈了比较器会变成放大器不会翻转。单边输出是指方波只有高电平或者只有低电平。这通常是积分器没有正常工作。检查C1有没有接反电解电容有极性接反了容值会变得很小。如果是薄膜电容没有极性但要注意引脚有没有虚焊。频率偏差太大的原因通常是元件容差。电阻的精度一般是1%到5%电容的精度可能是10%到20%。如果你算出来是250Hz实际测出来是200Hz不要惊讶这是正常的。想要更准的频率可以用精密电阻和精密电容或者加一个频率微调电位器。还有一个容易被忽略的问题LM358的输出高电平不是固定的它跟负载电流有关。如果输出端接了很重的负载输出高电平会下降滞回门限也会跟着变频率就会偏移。所以输出端尽量不要接低于1kΩ的负载。4.3 常见问题速查表现象可能原因排查方法解决办法不起振正反馈接错检查R1是否接在同相输入端把R1改接到同相输入端单边输出积分电容接反或损坏用万用表测电容容值更换电容注意极性频率偏高积分电容容值偏小测C1实际容值换更大容值的电容频率偏低积分电阻偏大测R3实际阻值换更小阻值的电阻波形失真积分电容介质吸收观察三角波尖角是否变圆换薄膜电容或C0G电容高频毛刺电源退耦不足示波器看电源引脚加100nF退耦电容幅度不稳电源电压波动测电源电压是否稳定用稳压电源供电4.4 进阶改进让波形更干净、频率更可调如果你想让这个信号发生器更实用可以做几个改进。第一个改进是在方波输出端加一个电压跟随器用LM358的另一个运放或者用晶体管射极跟随器提高输出驱动能力。这样即使接上较重的负载方波幅度也不会明显下降。第二个改进是在积分器前面加一个电位器做成频率粗调和细调。粗调用电位器改变R3细调用电位器改变C1的并联电容。这样频率调节范围可以做到10Hz到10kHz。第三个改进是用一个双联电位器同时改变R1和R2保持滞回窗口宽度不变只改变频率。这样调频率的时候幅度不会跟着变操作更方便。第四个改进是加一个输出缓冲放大器把三角波和方波分别缓冲后再输出避免负载影响振荡器本身。缓冲放大器可以用LM358的另一个运放但LM358只有两个运放已经用完了。所以如果要加缓冲需要再加一片LM358或者用晶体管缓冲。实操心得我试过用LM358做缓冲发现它的压摆率太低方波的边沿会变缓从原来的几百纳秒变成几微秒。如果你对边沿要求不高可以用如果要求高建议用TL072或者NE5532做缓冲。5. 从LM358信号发生器延伸出去的几个方向5.1 用仿真软件提前验证电路在动手搭电路之前我强烈建议先用仿真软件跑一遍。CircuitJS或者LTspice都可以CircuitJS更简单打开网页就能用适合新手。在CircuitJS里搭好电路之后你可以直接看到方波和三角波的波形还可以拖动电位器看频率变化。这样可以在几分钟内验证参数是否合理避免焊好了才发现电路有问题。在CircuitJS里设置运放增益的时候注意它的理想运放模型默认增益是无穷大但LM358的实际增益是有限的大约100dB。如果你要更真实的仿真可以在CircuitJS里给运放加一个有限增益参数或者直接用LTspice的LM358模型。LTspice的模型更准确但操作稍微复杂一点。仿真的时候要注意一点仿真软件里的电容是理想的没有介质吸收所以三角波会非常完美。实际搭出来之后三角波会有轻微的弯曲这是正常的。不要因为仿真完美就以为实际也完美要留出一定的误差余量。5.2 从方波到三角波再到正弦波的转换思路有了方波和三角波之后很多人会想能不能再加一个正弦波输出答案是肯定的但需要额外的电路。最简单的方法是用一个低通滤波器把方波的高次谐波滤掉剩下的基波就是正弦波。但方波的谐波非常丰富要滤出干净的正弦波需要高阶滤波器比如四级或五级RC低通滤波器而且滤波器的截止频率要正好等于方波频率调试比较麻烦。另一种方法是用二极管整形网络把三角波的尖角削圆近似成正弦波。这种方法电路简单但正弦波的失真度比较大大概在3%到5%左右。如果你只是需要一个近似正弦波可以用这种方法。还有一种方法是直接用DDS芯片比如AD9833它可以产生精确的正弦波、方波和三角波频率和幅度都可以数字控制。但那就不是LM358的范畴了成本也会高一些。不过如果你想把信号发生器做得更专业DDS是一个很好的方向。5.3 这个电路还能怎么玩从测试工具到教学演示这个LM358信号发生器除了做测试工具还可以做教学演示。比如在讲运放的虚短虚断时可以用这个电路让学生直观地看到比较器和积分器的区别。比较器工作在非线性区虚短不成立积分器工作在线性区虚短成立。通过示波器观察波形学生可以很快理解这两个概念。还可以用这个电路做滤波器的测试。把三角波输入到一个低通滤波器观察滤波器的输出波形可以看到高频成分被滤掉三角波变成近似正弦波。这样就能直观地理解滤波器的频率响应。另外这个电路还可以改造成压控振荡器VCO。把积分器的输入电阻R3改成由外部电压控制的可变电阻比如用晶体管或者FET做压控电阻就可以用电压控制频率。这样就能做简单的频率调制FM实验。我个人在实际操作中的体会是LM358虽然性能一般但它的“容错率”很高即使接错了也不容易烧非常适合反复折腾。我前后搭过五六个版本从面包板到洞洞板从固定频率到可调频率每次都能学到新东西。如果你也想入门模拟电路这个信号发生器是一个很好的起点。