ARTICLE DETAIL

资讯详情

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

基于LM358的1Hz-10kHz连续可调方波发生器设计与Multisim仿真

基于LM358的1Hz-10kHz连续可调方波发生器设计与Multisim仿真 1. 从一个实际需求说起为什么我要做这个方波发生器前段时间帮一个做传感器测试的朋友搭一套激励源需求很明确给一个电容式传感器提供方波激励信号频率范围要覆盖1Hz到10kHz而且频率要连续可调。市面上现成的信号发生器要么太贵要么频率下限做不到1Hz这么低要么波形质量在低频段惨不忍睹。思来想去还是自己搭一个比较靠谱。方波发生器这个东西看起来简单但真要做到1Hz到10kHz连续可调、波形干净、占空比稳定里面的门道其实不少。我前后用Multisim仿真加实际打板验证折腾了差不多两周时间中间踩了不少坑也积累了一些经验。这篇文章就把整个设计过程完整地梳理一遍从方案选型、电路原理、Multisim仿真设置到PCB设计建议尽量把每个环节的“为什么”讲清楚。如果你也在做类似的信号源设计或者正在学模电、想找一个能落地的运放实战项目这篇内容应该能帮你省下不少时间。整个方案的核心器件用的是LM358双运放便宜、好买、资料多非常适合练手和小批量制作。下面我会从设计思路开始一步步拆解到具体的电阻电容取值、仿真参数设置、PCB布局要点以及我实际调试中遇到的问题和解决办法。2. 整体方案设计与核心思路拆解2.1 为什么选运放方案而不是555或者单片机做方波发生器最直接的想法可能是用555定时器或者用单片机加DAC。这两种方案我都考虑过但最后都放弃了。555的问题在于频率调节范围。标准555振荡电路要做到1Hz需要很大的RC时间常数电阻得用到兆欧级别电容得用几十微法。大电阻配大电容的组合频率稳定性很差温度漂移和漏电流都会严重影响低频段的精度。而且555的输出是单极性的要得到干净的方波还需要额外的整形电路。更关键的是555的占空比调节和频率调节会互相影响想要连续可调很麻烦。单片机方案倒是灵活但需要写代码、加DAC或者PWM滤波对于纯模拟信号源来说有点杀鸡用牛刀。而且PWM滤波出来的方波边沿质量和幅度精度都受限于滤波电路和电源低频段还好到了10kHz以上边沿就开始变缓。运放方案的好处在于第一频率调节通过改变RC常数实现用双联电位器或者波段开关切换电容可以做到很宽的调节范围第二运放输出的方波边沿陡峭幅度由电源决定很干净第三电路结构简单成本低LM358几毛钱一片外围元件也都是常规值。所以最终我选了运放方案具体来说是用LM358构成滞回比较器加RC充放电的结构也就是经典的方波发生器拓扑。2.2 核心电路拓扑滞回比较器加RC充放电这个电路的核心思想其实很朴素用一个运放做滞回比较器输出通过一个电阻给电容充放电电容上的电压又反馈到比较器的输入端。当电容电压超过比较器的上阈值时输出翻转低于下阈值时输出再次翻转。这样循环往复就产生了方波。具体来说LM358里面有两个运放我用第一个运放做比较器第二个运放做缓冲输出。比较器的同相输入端接一个由两个电阻分压得到的参考电压但这个参考电压不是固定的而是通过正反馈电阻从输出端引入一部分电压形成滞回特性。反相输入端接RC充放电网络。输出端通过反馈电阻给电容充电或放电电容电压变化到一定程度比较器输出翻转电容又开始反向充放电。这个结构的频率计算公式是f 1 / (2 * R * C * ln(1 2 * R1 / R2))其中R是充放电电阻C是充放电电容R1和R2是滞回网络的两个电阻。这个公式的推导过程涉及比较器阈值电压的计算和RC充放电的指数方程后面我会详细展开。2.3 频率调节策略分段电容加连续电阻调节1Hz到10kHz跨度是四个数量级。如果只用一个电位器调节电阻要做到四个数量级的连续变化电位器的线性度和分辨率根本达不到。所以必须采用分段策略用波段开关切换不同的电容值每个电容对应一个频率段然后在每个频段内用电位器连续调节电阻。我分了四个频段1Hz到10Hz、10Hz到100Hz、100Hz到1kHz、1kHz到10kHz。每个频段用一个固定电容配合一个100kΩ的电位器实现10倍范围的连续调节。这样每个频段内的调节范围是10倍电位器的分辨率足够频率读数也比较准。电容的取值需要根据公式反推。假设滞回网络的两个电阻R1和R2的比值固定那么频率和RC成反比。我先确定滞回网络的参数然后根据目标频率范围计算每个频段需要的电容值。具体计算过程在下一节展开。2.4 为什么用LM358而不是NE5532或者其他运放LM358是双运放单电源供电价格便宜货源充足。它的增益带宽积是1MHz对于10kHz的方波来说虽然不算宽裕但方波的主要能量集中在基频和低次谐波10kHz的基频用1MHz的GBW来放大边沿上升时间大概在几微秒量级对于一般测试应用足够了。NE5532的GBW是10MHz性能更好但它是双电源供电而且价格比LM358贵不少。对于这个应用来说LM358完全够用。当然如果你对边沿质量要求很高或者频率要上到100kHz以上那可以考虑换成TL072或者NE5532但电源设计就要改成双电源了。还有一个实际考虑LM358的输出摆幅在单电源供电时低电平可以到接近0V高电平大概在VCC-1.5V左右。如果VCC用12V输出高电平大概10.5V低电平接近0V幅度差不多10V峰峰值对于大多数测试场景够用了。如果需要更大的幅度可以提高电源电压LM358最高可以到32V。3. 核心细节解析与参数计算实操3.1 滞回比较器的阈值电压计算滞回比较器的核心是两个阈值电压上阈值VTH和下阈值VTL。当输出为高电平时同相输入端的电压就是上阈值当输出为低电平时同相输入端的电压就是下阈值。假设比较器输出高电平为VOH低电平为VOL正反馈电阻为Rf同相输入端到地的电阻为Rg那么上阈值和下阈值的计算公式是VTH (VOH * Rg VREF * Rf) / (Rf Rg)VTL (VOL * Rg VREF * Rf) / (Rf Rg)其中VREF是参考电压如果同相输入端没有额外的参考电压源只是通过Rf和Rg分压那么VREF可以认为是0即Rg接地。简化后VTH VOH * Rg / (Rf Rg)VTL VOL * Rg / (Rf Rg)滞回宽度ΔV VTH - VTL (VOH - VOL) * Rg / (Rf Rg)。这个滞回宽度决定了电容充放电的电压范围。滞回宽度越大电容充放电到阈值的时间越长频率越低。所以调节Rf和Rg的比值可以改变频率范围但一旦确定在频率调节过程中就不应该再改变否则频率和占空比会互相影响。我选的是Rf 100kΩRg 10kΩ这样滞回宽度大约是输出摆幅的1/11。假设输出摆幅是10V滞回宽度大约0.9V。这个值比较合适既不会因为滞回太小而容易受噪声干扰也不会因为滞回太大而限制频率上限。3.2 RC充放电时间与频率公式推导电容充放电的过程是指数曲线。假设电容从VTL充电到VTH充电电阻为R电容为C电源电压为VOH那么充电时间t1满足VTH VOH (VTL - VOH) * exp(-t1 / (R * C))解这个方程得到t1 R * C * ln((VOH - VTL) / (VOH - VTH))同理放电时间t2为t2 R * C * ln((VTH - VOL) / (VTL - VOL))如果VOH和VOL对称即VOH -VOL且VTH -VTL那么t1 t2总周期T t1 t2 2 * R * C * ln((VOH - VTL) / (VOH - VTH))。代入VTH和VTL的表达式经过化简可以得到T 2 * R * C * ln(1 2 * Rg / Rf)所以频率f 1 / T 1 / (2 * R * C * ln(1 2 * Rg / Rf))。这个公式就是设计的核心依据。可以看到频率只和R、C以及Rg/Rf的比值有关和电源电压无关前提是输出摆幅对称。这是一个很好的特性意味着电源电压波动不会影响频率。3.3 各频段电容和电阻的取值计算根据上面的公式我先确定Rg/Rf 10k/100k 0.1那么ln(1 2*0.1) ln(1.2) ≈ 0.1823。所以f 1 / (2 * R * C * 0.1823) 2.742 / (R * C)。反过来R * C 2.742 / f。对于每个频段我取频段的最低频率来计算最大RC值最高频率对应最小RC值。由于每个频段内电阻R从某个最小值变到最大值变化范围是10倍所以RC的变化范围也是10倍正好覆盖一个频段。以1Hz到10Hz频段为例最低频率1Hz对应最大RCRC_max 2.742 / 1 2.742秒。如果电位器最大值是100kΩ那么C 2.742 / 100k 27.42μF。这个电容值比较大可以用27μF或者33μF的电解电容。但电解电容的容差大、稳定性差对于低频段来说频率精度要求不高可以接受。10Hz到100Hz频段RC_max 2.742 / 10 0.2742秒。C 0.2742 / 100k 2.742μF。可以用2.7μF或者3.3μF的薄膜电容或者钽电容。100Hz到1kHz频段RC_max 2.742 / 100 0.02742秒。C 0.02742 / 100k 0.2742μF。可以用0.27μF或者0.33μF的薄膜电容。1kHz到10kHz频段RC_max 2.742 / 1000 0.002742秒。C 0.002742 / 100k 0.02742μF。可以用0.027μF或者0.033μF的薄膜电容。实际选值时我用了标准值33μF、3.3μF、0.33μF、0.033μF对应的频率范围会略有偏移但通过电位器调节可以覆盖目标范围。电位器我选的是100kΩ的多圈精密电位器调节起来比较精细。3.4 输出缓冲与电平转换比较器输出的方波直接驱动负载能力有限而且负载变化会影响比较器的阈值所以需要加一级缓冲。LM358的第二个运放就用来做这个缓冲接成电压跟随器形式同相输入端接比较器输出反相输入端直接连输出端。电压跟随器的输入阻抗很高不会影响比较器的输出输出阻抗很低可以驱动较大的负载。LM358的输出电流能力大概在20mA左右驱动一般的逻辑电路或者传感器足够了。如果需要驱动更大的负载可以在后面再加一级三极管或者MOS管扩流。另外如果需要的方波幅度和电源电压不同可以在缓冲级后面加一个电平转换电路比如用电阻分压或者稳压管钳位。不过对于大多数应用来说直接用电源电压作为方波幅度就可以了。4. Multisim仿真设置与实操过程4.1 Multisim中搭建电路的具体步骤打开Multisim新建一个空白电路。首先从元件库中调出LM358在“Analog”组里的“OPAMP”系列中可以找到。然后放置电阻、电容、电位器等无源元件。电位器在“Basic”组里的“POTENTIOMETER”系列中。按照前面的设计连接电路LM358的第一个运放做比较器同相输入端接Rf和Rg组成的分压网络反相输入端接RC网络。输出端通过反馈电阻Rf连接到同相输入端形成正反馈。第二个运放接成电压跟随器输入接第一个运放的输出。RC网络中的电阻用电位器代替方便仿真时调节频率。电容用固定值通过开关切换不同电容来模拟波段开关。Multisim中有模拟开关或者可以用多个电容并联通过开关控制接入。电源用直流电源设置12V。注意LM358是单电源供电V接12VV-接地。输入端的共模范围要保证在0到VCC-1.5V之间所以RC网络的电压范围要在这个区间内。4.2 仿真参数设置与瞬态分析电路搭好后需要设置仿真参数。在“Simulate”菜单里选择“Analyses and Simulation”然后选“Transient Analysis”。瞬态分析可以观察电路启动后一段时间内的波形变化。设置仿真时间很关键。对于1Hz的信号周期是1秒要看到几个完整周期仿真时间至少设5秒。但Multisim默认的最大时间步长可能太大导致波形失真。我一般把最大时间步长设为周期的1/1000左右。对于1Hz信号步长设1ms对于10kHz信号步长设0.1μs。初始条件也很重要。电容的初始电压设为0这样电路会从零开始充放电经过几个周期后进入稳定状态。如果初始条件设得不对可能会看到很长的启动过程。仿真速度方面Multisim在仿真低频电路时可能会很慢因为需要计算很长时间。可以在“Simulate”菜单里的“Interactive Simulation Settings”中调整仿真速度把“Maximum time step”设大一些但要注意不要影响精度。另外可以关闭一些不必要的显示选项比如节点电压和电流的实时显示能提高仿真速度。4.3 波形观察与频率测量仿真运行后用示波器观察输出波形。Multisim的示波器可以同时显示多个通道我把比较器输出和电容电压分别接到两个通道这样可以清楚地看到充放电过程和输出翻转的关系。测量频率可以用示波器的光标功能测量两个上升沿之间的时间差取倒数就是频率。也可以用Multisim的“Measurement”功能直接测量频率、周期、占空比等参数。我实测下来在1Hz频段仿真得到的频率和理论计算值误差在5%以内主要来自电容的容差和运放的非理想特性。在10kHz频段误差稍微大一些大概在8%左右主要是因为LM358的压摆率限制导致边沿变缓影响了阈值检测的准确性。4.4 常见仿真报错与解决办法Multisim用久了总会遇到一些报错这里说几个我经常碰到的。一个是“Multisim主数据库无法访问”或者“访问数据库发生错误”。这个问题一般是数据库文件损坏或者权限问题。解决办法是找到Multisim的数据库文件一般在安装目录下的“Database”文件夹里把损坏的文件删掉然后从备份恢复或者重新安装。如果只是权限问题以管理员身份运行Multisim通常能解决。另一个是仿真速度太慢尤其是低频电路。除了前面说的调整最大时间步长还可以把仿真模式从“Interactive”改成“Batch”这样Multisim会一次性计算完所有时间点而不是实时显示。虽然看不到实时波形但速度快很多。还有的时候仿真会报“Singular matrix”或者“Convergence error”这通常是电路中有悬空节点或者参数设置不合理。检查一下有没有未连接的引脚或者把一些电阻值设得太极端。LM358的模型有时候在特定条件下会不收敛可以尝试在运放输出端加一个很小的负载电阻比如1kΩ帮助收敛。5. PCB设计建议与布局要点5.1 元件布局的基本原则PCB布局对模拟电路的性能影响很大尤其是这种包含比较器和RC充放电网络的电路。我的经验是先按信号流向布局再考虑电源和地。信号流向是从比较器到缓冲器再到输出所以LM358应该放在板子中间偏左的位置RC网络靠近比较器的反相输入端反馈网络靠近同相输入端。电位器和波段开关放在板子边缘方便调节。输出接口放在板子右侧。电源部分如果用的是外部直流电源只需要一个电源插座和滤波电容。滤波电容要靠近LM358的电源引脚一般用100nF的陶瓷电容并联10μF的电解电容。陶瓷电容滤高频电解电容滤低频。5.2 地线处理与电源去耦模拟电路的地线处理是重中之重。我一般采用单点接地或者星形接地把所有地线汇聚到一个点避免地环路。具体做法是在LM358的GND引脚附近设置一个接地汇流点所有需要接地的元件都单独走线到这个点而不是就近接地。电源去耦电容的布局也很关键。100nF的陶瓷电容要尽量靠近LM358的V引脚引线越短越好。如果板子上有多个运放或者多个电源引脚每个引脚都要单独去耦。10μF的电解电容可以放在电源入口处作为全局滤波。另外RC网络中的电容和电阻要尽量靠近比较器的输入引脚减少引线电感。电位器的引线也不要太长否则容易引入噪声。5.3 关键信号的走线技巧比较器输出到缓冲器输入的走线要尽量短因为这段信号是方波边沿陡峭容易辐射噪声。如果走线太长可能会耦合到RC网络影响频率稳定性。RC网络的走线要远离输出走线避免正反馈。如果实在避不开可以在中间加一条地线作为隔离。地线要尽量宽降低阻抗。电位器的走线要注意三个引脚中中间引脚是滑动端两边是固定端。滑动端的走线要尽量短因为这段信号比较敏感。如果电位器离电路板较远建议用屏蔽线连接。5.4 元件选型与封装建议电阻用1%精度的金属膜电阻尤其是滞回网络中的Rf和Rg精度直接影响频率准确性。电容方面低频段用的电解电容要选低漏电流的否则漏电流会影响充放电时间。高频段的电容用CBB薄膜电容温度稳定性好损耗小。LM358用DIP-8封装方便插拔和更换。如果板子空间紧张可以用SOP-8封装但焊接难度大一些。电位器用多圈精密电位器调节精度高但价格贵一些。波段开关用旋转式的接触电阻小寿命长。PCB板材用普通的FR-4就可以厚度1.6mm铜厚1oz。如果是高频应用可以考虑用更好的板材但对于10kHz以下的信号FR-4完全够用。6. 常见问题与排查技巧实录6.1 上电后没有输出怎么办这是最常见的问题。先检查电源是否正常用万用表量LM358的V引脚应该有12V左右。如果电源正常再检查比较器的输出端看是否有电压变化。如果输出一直高或者一直低说明比较器没有翻转。可能的原因有几个一是RC网络的电容没有接好或者电容值太大导致充放电时间太长看起来像没有输出。可以把电容换小一点试试。二是滞回网络的电阻值不对导致阈值电压超出了RC网络的充放电范围。检查Rf和Rg的比值确保滞回宽度合适。三是LM358的引脚接错了尤其是电源引脚和输出引脚仔细核对数据手册。6.2 频率调节范围不够或者调节不线性如果电位器调到头了频率还达不到目标值说明RC常数不对。检查电容值是否和设计一致电位器的最大阻值是否足够。如果频率调节不线性可能是电位器的线性度不好换成线性电位器B型试试。另外如果频率在高频段上不去可能是LM358的压摆率限制。LM358的压摆率是0.3V/μs对于10V的方波上升时间大概33μs对应的最高频率大概在15kHz左右。如果要在10kHz以上工作边沿会明显变缓但频率还是能出来的。如果要求边沿陡峭需要换更高压摆率的运放。6.3 波形失真或者占空比不对波形失真一般是因为RC充放电的指数特性导致的。理论上方波发生器的输出是方波但电容电压是指数曲线比较器翻转的时刻取决于阈值电压。如果阈值电压不对称占空比就会偏离50%。检查滞回网络的两个电阻是否对称电源电压是否稳定。如果电源电压波动输出高电平会变化导致阈值电压变化占空比也会变。可以在电源端加一个稳压器比如7812提高电源稳定性。如果波形边沿有振荡或者过冲可能是PCB布局不好引线电感太大。在输出端加一个小的RC吸收电路比如100Ω电阻串联100pF电容可以抑制振荡。6.4 常见问题速查表问题现象可能原因排查方法解决办法上电无输出电源未接通万用表测V引脚检查电源连接上电无输出电容未接好检查电容引脚重新焊接上电无输出阈值电压不对测量同相输入端电压调整Rf/Rg比值频率范围不够RC常数不对测量实际RC值更换电容或电位器频率不线性电位器线性度差测量电位器阻值变化换线性电位器波形失真阈值不对称测量上下阈值调整电阻精度占空比不对电源波动测量电源电压加稳压器边沿振荡PCB布局差检查走线长度加RC吸收电路仿真不收敛电路参数极端检查元件值加负载电阻仿真速度慢时间步长太小检查仿真设置增大最大时间步长6.5 几个容易被忽略的实操细节第一个是电容的极性。电解电容有正负极接反了会漏液甚至爆炸。在PCB上要标清楚正负极焊接前仔细核对。薄膜电容没有极性但也要注意耐压值至少要高于电源电压。第二个是电位器的引脚定义。多圈电位器一般有三个引脚中间是滑动端两边是固定端。但不同厂家的引脚排列可能不同焊接前用万用表量一下确认滑动端的位置。第三个是LM358的输入偏置电流。LM358的输入偏置电流大概在几十纳安对于高阻抗的RC网络来说这个电流会影响电容的充放电。如果RC网络的电阻很大比如超过1MΩ偏置电流的影响就不能忽略了。解决办法是减小RC网络的电阻值或者选用输入偏置电流更小的运放比如TL072。第四个是电源的退耦。我一开始没加退耦电容结果输出波形上有很大的高频噪声。后来在LM358的电源引脚旁边加了100nF的陶瓷电容噪声立刻小了很多。这个电容一定要加而且要紧靠引脚。7. 从仿真到实物的过渡经验仿真通过不代表实物就能正常工作这中间还有不少坑。我第一次打板回来上电后频率和仿真差了将近20%。排查了半天发现是电容的容差问题。我用的电解电容标称33μF实际测量只有27μF左右容差超过15%。后来换了钽电容容差控制在5%以内频率就准多了。还有一个问题是电位器的调节手感。多圈电位器虽然精度高但调节起来很慢要转好几圈才能从最低频率调到最高频率。如果经常需要改变频率用单圈电位器更方便但精度差一些。我的做法是在面板上装一个多圈电位器同时在PCB上留一个单圈电位器的焊盘根据实际需要选择。另外实物的边沿质量比仿真差很多。仿真里LM358是理想模型实际器件的压摆率限制和寄生电容会导致边沿变缓。我在10kHz时测到的上升时间大概40μs比理论值大一些。如果对边沿要求高可以在输出端加一个施密特触发器整形比如74HC14能把边沿做到纳秒级。最后说一个调试小技巧如果频率怎么调都不对先别急着换元件用示波器同时看电容电压和输出波形。如果电容电压的充放电范围不在阈值电压之间说明滞回网络有问题如果电容电压正常但输出不翻转说明比较器有问题。这样分段排查很快就能找到问题所在。这个方波发生器我前后做了三版第一版是纯仿真验证第二版是洞洞板搭的第三版才是PCB。每一版都发现了新的问题也学到了新的东西。模拟电路就是这样理论计算只是起点真正的功夫在调试和优化上。希望这些经验能帮你少走一些弯路。
返回列表