草庐IT

【模电】0010 正弦波产生电路(RC正弦波振荡电路)

xiaobaibai_2021 2023-04-08 原文

上一节我们分析了使用比较器产生方波和正弦波的电路,其本质上是在电容充放电的一段延时后,利用比较器产生电平翻转。而本节分析的正弦波产生电路,产生的原理不同。

1)振荡产生的原理

正弦波产生电路,原理如下图所示:

放大电路反馈电路组成,形成一个回路,从放大电路的输出作为电路的总输出。

一般要求在放大电路和反馈回路中,经过一个回路放大后,增益大于1,而且有一定的延时。增益大于1,可以使得外部的扰动或者电路自身初始的不稳定信号放大,得到初始激励;经过绕环路一周,延时使得相位变化后,满足延时整数倍周期的信号回到放大电路A处时,会再次放大,相位相同的信号得到正反馈,这个过程可以看做电路对频率的选择作用,所以称为选频网络;如此不断循环,特定频率的信号幅值越来越大,最终达到稳定,实现自行振荡的作用。

2)RC正弦波振荡电路

原理如下图:

图中,左侧的RC在充放电时,会使得信号产生延时,构成选频网络;右侧的放大器形成同相比例放大电路。

列出选频网络部分的拉普拉斯方程:

 可以求出,当 ω = 1/RC 时,幅频响应最大,反馈系数Fmax = 1/3,相频响应为0。

也即是当取 ω = 1/RC 时,输出电压幅值最大,而且没有相位差;此时Vf = Vo/3,也就是说图中 Rf 应该选择为 R1 的两倍,使得放大电路将Vf放大3倍得到Vo,才能建立稳定的振荡。

以上是振荡稳定后的状态,对选频后的信号是不放大的。但在实际工程中,设计电路时,为了初始时能够起振,需要把放大电路的放大倍数设置得大于3,才能从初始的杂波中一步步将选频网络选中的波形放大,一般来说放大倍数越大越容易启振。

但是,从理论分析看,放大倍数大于3时,是不能稳定的,信号幅值会越来越大。直到达到运放输出的最大幅值,产生非线性失真。而此时信号不会是标准的正弦波。

仿真电路图如下:

 这里放大倍数为33/10,略大于3,可以起振;但是可以看到,最终稳定后的波形有失真,不是标准的正弦波。

为了减少失真,可以减小放大倍数,如设置为放大倍数为3.1,失真会变小,如下图:

但是,放大倍数变小会使得起振到稳定的时间变长。而且失真是始终会存在的,只能减小不能消除。

还有一种方法可以减小失真至几乎没有,就是使用非线性器件,如下图增加两个二极管:

 该电路分析如下:在刚起振时,输出幅值很小,经电阻分压到二极管上的电压也很小,二极管不导通,所以放大倍数大于3;一定的时间后,输出幅值变大后,二极管能够导通时,则放大倍数会减小;当放大倍数减小到等于3时,达到平衡,振荡波形稳定。这样输出的波形为近似标准的正弦波。

由于运放的带宽限制,一般RC和运放组成的这种电路,只适用于产生频率较低的正弦波,如1MHz以下时使用较为合适。

 PS:记录一个小技巧,在使用multsim仿真软件时,运放要选择“5 Terminal Opamp Model”类型的器件。如果选择了“3 Terminal Opamp Model”的运放,它会不受电源的限制,输出幅值可能会超出电源范围。

另外,本人最近开通了微信公众号,感兴趣的可以关注一下,这里的技术文章也会同步更新到公众号:

有关【模电】0010 正弦波产生电路(RC正弦波振荡电路)的更多相关文章

  1. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

  2. ruby-on-rails - Rails 3.1.rc4 中的 Omniauth - 2

    我正在使用最新版本的Rails,启动一个我将在3.1发布后部署的新应用程序,但我无法让omniauth工作。如果我只是将omniauth添加到我的Gemfile,它会bundle起来,但是当我运行rake、railss或几乎所有命令时,它会出错:nosuchfiletoload--omniauth/password有什么想法吗?是否有适用于Rails3.1的分支或分支?还是只有我遇到这个问题? 最佳答案 实际问题是bundler选择了旧版本的omniauth。为了帮助bundler选择正确的版本,请使用:gem'omniauth',

  3. ruby - 猴子修补 float 中缀运算符产生意想不到的结果 - 2

    重新定义Float#/似乎没有效果:classFloatdef/(other)"magic!"endendputs10.0/2.0#=>5.0但是当另一个中缀运算符Float#*被重新定义时,Float#/突然采用了新的定义:classFloatdef/(other)"magic!"enddef*(other)"spooky"endendputs10.0/2.0#=>"magic!"我很想知道是否有人可以解释这种行为的来源,以及其他人是否得到相同的结果。ruby:ruby2.0.0p353(2013-11-22)[x64-mingw32]要快速确认错误,请运行thisscript.

  4. ruby - 为什么 Gemfile 语义版本控制运算符 (~>) 会产生与一个数字不一致的结果? - 2

    gemspec语义版本控制运算符~>(又名twiddle-wakka,又名pessimistic运算符)允许限制gem版本但允许进行一些升级。我经常看到它可以读作:"~>3.1"=>"Anyversion3.x,butatleast3.1""~>3.1.1"=>"Anyversion3.1.x,butatleast3.1.1"但是有了一个数字,这条规则就失效了:"~>3"=>"Anyversionx,butatleast3"*NOTTRUE!*"~>3"=>"Anyversion3.x"*True.Butwhy?*如果我想要“任何版本3.x”,我可以只使用“~>3.0”,这是一致的。就

  5. ruby - 为什么 openssl 在 windows 上产生错误但在 centos 上不产生错误:PKCS12_parse: mac verify failure (OpenSSL::PKCS12::PKCS12Error) - 2

    require'openssl'ifARGV.length==2pkcs12=OpenSSL::PKCS12.new(File.read(ARGV[0]),ARGV[1])ppkcs12.certificateelseputs"Usage:load_cert.rb"end运行它会在Windows上产生错误,但在Linux上不会。错误:OpenSSL::PKCS12::PKCS12Error:PKCS12_parse:macverifyfailurefrom(irb):21:ininitializefrom(irb):21:innewfrom(irb):21fromC:/Ruby192/

  6. 1个串口用1根线实现多机半双工通信+开机控制电路 - 2

    功能需求:主机使用一个串口,与两个从机进行双向通信,主机向从机发送数据,从机能够返回数据,由于结构限制,主机与从机之间只有3根线(电源、地、数据线),并且从机上没有设物理的电源开关,需要通过与主机连接的数据线来控制开机,总结如下:1、数据线只有1根2、能够双向通信3、主机能够控制从机开机4、主机可以单独向1个从机发数据,也可以同时向两个从机发送数据根据需求,设计出如下电路:工作原理分析:VCC_24V_IN、GND、LINE_L(LINE_R)三根线接线连接到从机,电源开启电路是从机内部的电源控制。开机的逻辑:*主机先上电,LINE_L因为主机的R1上拉而有高电平,使Q6导通,Q5的G极电压被

  7. Ruby 要求 'tk' 产生 LoadError : no such file to load -- tk - 2

    我无法让ruby​​成功地require'tk'。我正在使用rvm、ruby2.0.0、ActiveTcl-8.6和Ubuntu12.04LTS。我已经运行了随ActiveTcl一起提供的wish,它似乎正在运行。我查看了RVM网站http://rvm.io/integration/tk和几个像这样的StackOverflow问题RVMRubywithTKinstallation(OSX).我在不同版本的ruby​​上多次尝试rvmreinstall2.0.0--enable-shared--enable-pthread--with-tk--with-tcl但没有成功。有什么想法吗?当

  8. ruby - 将字符串插入数组中的数组会产生意外结果 - 2

    我在Ruby中有一个包含5个空数组的数组。我正在尝试使用运算符将字符串插入第一个数组,但结果是字符串被插入所有数组。请帮助我理解这一点。预期的输出是:#=>[["car"],[],[],[],[]]但我得到:#=>[["car"],["car"],["car"],["car"],["car"]]IRB转储:1.9.3-p194:001>output=Array.new(5,[])=>[[],[],[],[],[]]1.9.3-p194:002>output.inspect=>"[[],[],[],[],[]]"1.9.3-p194:003>output[0].inspect=>"[]"

  9. ruby - 在没有机架的情况下运行 Capybara 在使用 url 参数时会产生错误 - 2

    这是我的设置,基于此建议:HowtogetCucumber/Capybara/Mechanizetoworkagainstexternalnon-railssite在我将参数添加到URL之前它一直有效。对解决这个问题有什么建议吗?require'rspec'require'capybara/rspec'require'capybara/dsl'@test_url="test"RSpec.configuredo|config|config.includeCapybara::DSLendCapybara.configuredo|config|config.run_server=falsec

  10. ruby - Selenium RC :How to launch Interactive testing with Multiple browsers - 2

    我想自动化这个场景。用户A将一个项目分配给用户B,用户B收到一条警告消息。为此,我想用不同的帐户启动两个不同的浏览器来测试这种交互。有可能这样做吗?如果是,如何? 最佳答案 看起来这个问题已经在我的示例代码中得到了回答:http://stackoverflow.com/questions/213430/selenium-rc-run-tests-in-multiple-browsers-automatically。firefox=Selenium::SeleniumDriver.new("localhost",4444,'*fire

随机推荐