经过三组RC网络相移之后的电压波动

一、问题的提出

有了前面的结论,可以知道电容电压跟随交流电源电压的关系,是满足下面的方程的:

\(V_{C}(t)=\frac{V_{m}}{\sqrt{1+(\omega RC)^2}} \times e^{\frac{-t}{RC}} + \frac{V_{m}}{\sqrt{1+(\omega RC)^2}} \times sin(\omega t-arctan(\omega RC))\)

1、这个方程中的 Vm / [(1+(wRC)^2)^(1/2)] 可以被视为A,这个A就是电容电压波形中的峰值。也就是说:在电源正弦的作用下,电容上的电压形成了一个新的正弦波(虽然并不是完整的正弦、起始瞬态略有畸变),这个新形成的“正弦波”的波峰是A;

2、方程中的-arctan(wRC)被视为相移角φ,也就是电容正弦错后于电源正弦的相移;

3、那么新的正弦波的频率呢?频率是不变的。它的频率是和电源频率相同的,只是波峰略低、相位略微向右偏移。

有了如上概念之后,就可以完成以下的两个问题的解答:

1、如何构建一个完美的60°相移,然后通过3组RC相移,完成180°的相移;

2、在进行了180°相移之后的第三组RC网络的输出电压,波峰是多大?也就是说最终反馈回控制极的电压有多少?

这篇博客,将完成上面2个问题的计算和整理。

二、为了实现60°的单组RC相移,重新进行相关元件的参数设置

电源电压峰值:12V。之所以要将电源电压定义为12V,目的是与Jack Kilby的实验相符。在我阅读的相关书籍中提到,他在实验室中用12V直流电开始实验,并在示波器上看到了令人激动的振荡波型;

电源频率:暂定100Hz。之所以要定义成100Hz,是为了方便绘图观察。后期可以重新调整这个频率;

电容:1uF,也就是0.000001F;

电阻:之前我在仿真中是直接使用的1000Ω,现在按照相移角为60°进行计算,电阻应该使用2760Ω。这里还有一个额外的问题:为什么之前仿真中,电容使用1kΩ也可以正常振荡呢?这个问题需要以后有时间了,再深入推敲一下;

如上的基本参数就定义好了,按照上面定义的参数,进行绘图,然后进行仿真,看绘图计算结果与仿真结果是否一致。

三、三组RC相移之后的最终波形及电压

其实有了上面的计算依据之后,不画图也可以计算出经过3次RC相移之后的最终输出电压峰值是多大了。因为经过一组RC之后的电压峰值是A,所以经过3组RC之后的电压峰值是A的三次方。因而,如果电源电压的峰值时12V,那么:

经过第一组RC之后的电压将会是6V左右;第二组RC之后的电压将是3V;第三组之后的电压将是1.5V。也就是说最终反馈回控制极的电压的波动将在+1.5V ~ -1.5V之间。

下面是使用SageMath完成的画图,从只有电源电压开始、一条条的增加新的电容电压曲线。需要注意的是要忽略掉曲线开始瞬态部分的失真情况:

这个开始部分的失真真令人苦恼!要知道我之所以花了很多时间《搞清楚电容电压跟随电源电压的数学公式和推导过程》,目的就是想在最终的SageMath生成准确正确的图像。而现在看来还是无法生成出正确的图像来。

很奇怪各类仿真软件在这里是怎么做的,为什么通过仿真软件的示波器,就能够看到正确的波形图呢?

四、仿真对比

待续

五、备忘

1、本文中使用到的LaTex公式,为了方便日后使用,源码备注如下:

V_{C}(t)=
\frac{V_{m}}{\sqrt{1+(\omega RC)^2}}
 \times
 e^{\frac{-t}{RC}}
+
\frac{V_{m}}{\sqrt{1+(\omega RC)^2}}
 \times
sin(\omega t-arctan(\omega RC))

2、本文中使用到的SageMath绘图语句,整理如下,方便日后使用:

Vm = 12
R = 2760
C = 0.000001
F = 100
omega = 2*pi*F

Vs(t) = Vm*sin(omega*t)
A = Vm / sqrt(1+(omega*R*C)^2)
Vc1(t) = A * exp(-t/(R*C)) + A * sin(omega*t-arctan(omega*R*C))

B = A /  sqrt(1+(omega*R*C)^2)
Vc2(t) = B * exp(-t/(R*C)) + B * sin(omega*t-arctan(omega*R*C)*2)

CC = B /  sqrt(1+(omega*R*C)^2)
Vc3(t) =  CC * exp(-t/(R*C)) + CC * sin(omega*t-arctan(omega*R*C)*3)
plot(Vs, 0, 0.03, color='black')
+ plot(Vc1, 0, 0.03, color='red')
+ plot(Vc2, 0, 0.03, color='green')
+ plot(Vc3, 0, 0.03, color='blue')

六、拾遗

1、此时此刻(2024年4月19日 16:07),这篇博客才写了一半,发现我在数学计算中用到的相移角似乎有些错误,而且数学计算时的模型和实际电路模型也存在着偏差,所以得到的SageMath结果和仿真结果并不一致。但是二者从数值上看是有相似性和吻合性的,所以应该只是一些小的偏差、错误导致的问题。再假以时日,应该能将相关错误找到,并得出正确的结果。

以前上学的时候觉得所有的知识都挺容易理解的,现在也许是年龄大了,即便是对已经已经熟练掌握了的知识,再看的时候,都会感觉是“一头雾水”,唯有继续艰难的、一点点的重新理解,才能让自己感觉有所收获。

Related Posts

使用MT3608进行升压备忘

一、备忘与准备 MT3608是一颗SOT-23-6封装的DCDC升压芯片,这个封装尺寸对我而言非常小、不易进行焊接操作。当完成升压电路的学习和尝试之后,也许会再寻找其它芯片替换当前的芯片以方便后期的焊装操作(PS:最近几天一直在关注更大尺寸的IC,但直到此刻,还没有找到比SOT-23-6更大封装的类似芯片)。 因为MT3608的封装实在小、在表面上并没有Pin1的标记,而是默认从顶面看下去时,丝印文字的左下角(Lower Left)是Pin1,并且按照逆时针完成其余脚位的定义。 它的输入电压可以是2V-24V,输出最大可以提升到28V的输出电压。 我当前的需求是:输入电压是3.7-4.4V之间(锂电池供电)、或者是5V(通过带有初级升压的电源管理芯片供电),而输出电压需要通过配置电阻实现5V-12V的输出、以便通过输出电压的调整实现对蜂鸣器音量的控制。 这个需求看上去利用MT3608是可以实现的,按照它的技术手册推荐的电路设计方案,将5引脚输入上述的3.7V-5V电压,然后通过引脚4的使能信号决定芯片是否工作:如果引脚4使能低电平,则芯片不工作,这个时候输出电压将与输入电压相同;如果引脚4使能,则芯片工作,按照配置电阻完成升压给定,输出就是目标电压了。 但是这个推荐方案和我的需求是不一样的:我期望的是输出或者有电压、或者没有电压,原因是如果MT3608工作输出一个预期的电压、蜂鸣器是工作的;但是当MT3608不工作时,输出电压虽然没有升压、但依然与输入电压相同,此时蜂鸣器将一直在工作。所以我期望的是MT3608不工作、不升压时,输出电压也完全没有。因而我的电路结构如下: 输入引脚4和使能引脚5同时与电压源连接,当电压源存在时,则芯片工作、输出预期的电压;当电压源不存在时自然也就没有输出电压了。 接下来将按照上面的思路,将电路搭建起来,完成这个测试。 二、初步搭建出来的电路有问题 2025年4月11日下午,完成了上面电路的搭建,但是并不顺利:最终结果是得不到预期的升压效果。 1、起初完成电路的搭建之后,输出电压十分混乱:或者是没有输出电压、或者就是输出电压和输入电压几乎相同;在输出电压几乎和输入电压几乎相同时,消耗的电流却十分巨大、高达上百毫安——经过反复的尝试也没有找到明确的原因,最终我将原因假定在使用的面包板质量太差、存在内部缺陷。直接扔掉、更换了一个新的面包板; 2、更换完新的面包板之后依然只能得到与输入电压一样的输出电压,这意味着芯片并没有进行工作,通过使用示波器也发现芯片的确没有起振、工作。但是偶然发现如果将输入电压设置在6V以上时,芯片是可以开始工作的,但是输出电压的建立需要大约1-2秒才能完成; 3、上面的第2个问题原因是我没有引入C1和C2两处的电容:当初以为这两个地方的电容只是稳波用的,实际上C2的输出电容更主要的目的是建立输出电压;而C1处的电容是稳定输入电压以确保芯片能够正常工作,所以这两处的电容不能忽略。在C1处引入3颗10uF的电容并联、在C2处同样引入3颗10uF的电容并联,芯片大概就能正常工作了; 4、在完成了上面第3点的调整之后,芯片的确可以正常工作了:给入5V的电压,输出大约是10V;给如3.7V的电压,输出大约是6V;给入8V的电压,输出大约是15V。但是这个表现与MT3608应该具备的表现是完全不一样的:MT3608应该是通过R1和R2配置电阻的设置,得到一个不随输入电压变化的输出电压,例如我设定R1=20K、R2=1K,此时的输出电压应该一直稳定在12.6V,而实际上我的输出电压却一直是与输入电压相关的; 5、更离谱的是:输出电压带不动负载,即便只接入一个很轻的负载,输出电压也会立刻掉下去、掉到与输入电压一样; 6、上面的第4、5两点,昨晚想到今天,感觉最可能的是我使用的二极管选型存在着问题:我使用的是1N5819,这颗二极管的反向恢复时间(Trr)大约是75-150ns,因为它的Trr在肖特基二极管中属于较慢的,所以它适合于500kHz以下的工作频率;而对于MT3608这种高频开关芯片,反向恢复时间过长意味着倒灌发生的多、也就无法有效的建立起能量输出了。所以如果插件1N5822(Trr=35-50ns);如果贴片SK34或SS34(Trr=25-35ns)应该是更适合的; 7、基于上面第6点,所以又购买了SK34二极管,用于将现在使用的1N5819替换下来,看下是否能够将第4、5两个问题解决掉(现在感觉猜测方向应该靠谱,大概率能够解决问题)。 三、二极管还在运送途中 2025年4月14日晚6:40。上面的故障现象和可能的原因我怀疑是在自己使用的1N5819二极管的关断时间太长,所以无法有效的完成能量输出和电压建立,所以便又重新网购了一些SK34二极管,这些新网购的二极管现在还在路上。 同时,因为自己手中也没有合适的电容,之前只能用一些小容量的电容并联搭建电路,所以又网购了10uF和22uF的电容,这些电容今天已经到了,但是因为SK34还没有到手,所以也不急着测试。 在购买上面的IC时,我实在是有些不放心——也说不定自己对MT3608的理解不对呢?所以我便又购买了两块成品DCDC电路,这两块电路一来可以对比观察一下别人做出来的效果;二来万一自己搭建的电路还是无法工作,也可以有个参考的机会。这两块现成的DCDC今天也已经送到了,所以一会儿如果精力体力够用,就先测试一下这两块现成的DCDC电路板的效果。 我要测试的其实很简单:就是看一下输出电压是否能够稳定、带上负载之后是否依然有效。 四、问题越搞越不明朗 1、成品升压芯片的配置电阻不理解:这个成品的电路图看上去应该是和我使用的电路图完全一样的(大概率是一样的),但是它的R1=17K、R2=2K时,得到的输出电压并不是预期的5.1V,而是9V,这是什么原因呢? 2、成品输出电压是9V时,输入电压无论怎么改变,例如输入电压无论是3V、5V还是7V,输出都是9V,这是符合预期的。但是当我将SS34放到自己的电路中之后,依然无法得到恒定的输出电压,输出电压始终是输入电压的两倍。所以我还要继续替换自己电路中的IC,现在想着电容先不替换,而是将电感改成与成品一致的试一下;…

RC震荡电路学习笔记(7)

在《RC震荡电路学习笔记(6)》中,已经了解了电容中的电流与电压相位相差90°的原因,并且也知道了一个简单的RC电路可以形成电压信号的相移,此时按道理说,就可以通过3组RC相移器构造出的180°相移网络做出振荡器来了。 并且还是依据上一篇文章中最后得到的频率计算公式,可以计算出最终的频率应该是: 滞后器网络: 超前器网络: 然而事实上并不是上面这个计算得到的频率。上一篇文章中用于计算的只是“纯理论模型”,这个理论模型中的3组相移器是被假设成彼此孤立、不会相互影响的。然而实际电路并不是这种纯理想情况,实际电路中的三级相移器是彼此耦合在一起的,因而拿出任何一点考量,都会发现它并非单纯的RC电路,整个系统中的阻抗都会相互耦合作用到一起。 因而上一篇文章中的计算只是对RC相移网络的原理进行了解和讲解,并不能用于指导真实电路的设计和计算。 对于真实的电路,要使用传递函数进行分析,这个传递函数的定义是:,我使用M意思是测量量,这个具体的测量通常是电压,也就是输出点对输入点的电压比视为电路的信号传递能力。在三级RC相移网络中,不考虑RC网络前级、后级更复杂的情况,仅对这个相移网络进行分析的话,容易得出: 整个网络的信号传递 现在仅以第一级传递进行考量:因为第一级RC环路中的电流处处相等,因而输出点的电压就是R和C的分压。后面的第二级、第三级也都是这样的情况,所以可以根据传递函数得到如下的传递计算式:。 最终得到总的RC网络传递计算式: 因为考量的是输入点和输出点电压,而电压等于电流与阻抗分压的乘积,电流在每一个环路中显然又是处处相等、满足基尔霍夫电流定律的,因而这个传递式最终的表达式便变成了对电路中阻抗的分析。 如果按照上一篇文章中的理想模型来看,传递函数将写成:,这个模型不难求解,而且解出来的结果也是和上一篇文章最终得到的结论是一致的。 然而本篇文章已经明确了:在真实电路中由于各个IC的相互耦合引起了每一个考量点的阻抗的变化,因而上述传递函数最终变成了:。 也就是对于第一级、第二级的输出点位置上,并不是简单的串联点,而是与后级电路形成了并联关系。它的阻抗带入式是:。 看上去并不复杂,实际计算那是相当困难的。至少我经过了先后四次手算都没能得到最终的正确结果。现在感觉这个代数计算很困难,隐约觉得在复数工具中应该有比较便捷的计算方式,所以我便又重新开始看复数方面的知识,期望能够找到关于上式的计算工具。 总之,它的计算结果是:,此时为了方便后面的观察和分析,设 ,便可以将上述传递函数重新改写为:。 至此传递方程所能体现出的相移能力就显现出来了,因为这三组RC相移网络完成的恰是180°的相移,因而它的虚部等于0,也就是。这个虚部为0的物理客观,便构成了最终的结论。如此也就得到了真实电路(比上一篇理论电路真实、但依然是经过大幅度简化)的实际频率修正式。 但是注意到在更早之前的一篇笔记《RC振荡电路初学笔记(5)》中,对于实际的频率计算式还有更复杂的因素要考虑,当时我还在困惑是不是其中的哪一个频率计算式有错误,实际上两个计算式都是正确的,只是而一个式子是这篇文章已经得到了的,而那篇文章中的第二个计算式,显然是额外考虑了电路中其他的IC部分的耦合影响。 只是当前还没有学到。

RC震荡电路学习笔记(6)

一、之前的学习笔记整理: 学习笔记 内容简述及收获心得 RC振荡电路初学笔记(1) 关于Jack·Kilby发明集成电路,并且这个电路是RC相移震荡电路的引子 RC振荡电路初学笔记(2) 关于Jack·Kilby发明集成电路的历史趣闻 RC振荡电路初学笔记(3) 罗列了几点RC相移电路中的个人困惑和备忘 RC振荡电路初学笔记(4) 对Jack·Kilby为什么使用PNP而非NPN做震荡电路做了些毫无根据的猜测 RC振荡电路初学笔记(5) 通过仿真软件对RC电路具体参数确定时的正确输出频率做了仿真 RC相移震荡电路学习历史笔记列表 二、电容电流超前于电容电压的原因: 书上的解释是:只有对电容器充电之后,电容器内部有了电荷,电容器两端才有电压,所以流过电容器的电流是超前于电压的。如上的这个表述我是万分的无法理解和接受,电流和电压是同时产生的,怎么可能有谁超前、谁滞后的说法呢? 在物理世界中,电压与电流应该就是彼此同时产生、同时消失的,不会有电流超前于电压的“预知”能力(如果特别特别较真儿、我觉得也应该是先有电压才能驱动产生电流,但他们二者的因果时序近乎于瞬时,所以不能用可评估的时间去表述谁先谁后。所以无论如何也没有道理说出电流超前于电压这种话来)。更准确的表述应该是:电容器上的电压变化率引起了电容器上的电流产生,而电容器上的电压波形与电流波形在同个坐标系上比较,是相同的正弦波形,但相差着90°的相位差。 以最简单的一个理想电容器举例,图样就是一颗电容器画在纸面上: 这个时候电容器内部无论带有多少电荷,它的电荷量都不会随着时间发生变化,因而电容器上不会产生电流。当外部向电容器输入电荷、或者电容器向外部输出电荷时,随着电荷的增加或减小,电容器上同时的表现出了电压的波动和电流的产生。 因为电容器的电流 所以电流的波动和电压的波动是同时因为电荷的增减而同时引起的。 而又依然是通过上式可以看出来:在外部存在一个正弦电压施压在电容器上时,电容电压的变化频率就是电源电压的变化频率,所以电容电压 电容电流 此时就能看出来电容上的电压与电流相差90°的关系来了。 额外的,还可以用另一个更简单的解释来说明二者存在着90°的相位差。依然是通过观察电容器的电流 。能够想到的是其中的电压V是个正弦波形态,那么在这个波形的极值点上的导数是0,所以这些极值点时对应的电流就是0,而在x轴过零交点上的导数最大(变化率最大),因而过零点时刻的电流最大。 上面这个关系说明了:电压最大时(正、负极值)、电流最小;电压最小(电压=0v)时的电容器充放电流最大。这与物理常识并不矛盾。电压最大时,在dt时间范围内电压却不再发生变化,所以没有电压的变化就没有电流;过零点虽然电容器上不存在电压,但是这个时候却是外界对它施压最大的时刻,最大的电压当然会获得最大的电流。…

微分电路和积分电路

这里是一篇备忘文章,用来记录两个电路:微分电路和积分电路。 上面是两个模拟电路的示意图,它们的名字分别是微分器(图1)和积分器(图2)。我想把这两个电路好好学习、了解一下。

微信小程序開發備忘

小程序開發已經用三脚貓功夫做了一些粗略的實現,接下來就是學習這個技術框架中的細節,并且返工之前粗略、粗糙的地方。今天學習了一下幾個技術技巧: 一、子控件向父控件發送帶參數事件消息 頁面上的button按鈕是我做的一個子控件、這個按鈕是放在panel控件中的。現在我想點擊button按鈕的時候,button按鈕完成響應、并將事件通知給panel,由panel接收並繼續處理事件。 此前的實現非常拙劣,就是只使用panel進行事件的處理: 這樣做的壞處是顯然的:觸摸會發生在整個panel中。而我希望的是觸摸僅由裏面的button受理。改造過程如下: 1、首先panel的頁面層,調整代碼如下: 這樣調整之後,panel不再接受bind:tap消息,而是會接收名爲customEvent的事件,一旦接收到customEvent事件,則進行running執行。此時的customEvent事件將由button發出,所以button的代碼寫成下面的形式: 這樣只要點擊了button,就會運行sendEvent方法,這個方法内實現向父層發出消息的過程,具體js代碼是: 通過triggerEvent發出了一個customEvent事件,父控件因爲綁定了這個事件、接收到並開始處理就可以了。 二、動態成員訪問的方法 類似如下的PHP代碼: 在JavaScript中的實現方式是: 三、控件數據初始化 微信小程序的components控件,似乎沒有(我不確定)如pages頁面那樣的onLoad()方法,儅加載了一個小控件之後,向這個控件中傳入一些初始變量,便沒有辦法找到一個Init()或onLoad()的地方,對這些傳進來的變量進行預處理、以被在頁面上使用。 此時可以使用控件的observers監聽服務,對傳遞進來的變量進行監控,一旦傳遞進來的變量生效,observers服務啓動,以便進行數據的預處理操作。具體代碼如下: 四、頁面中的if/else流控方式 此前頁面中一直是這麽寫: 現在有了更好的方法: 雖然在頁面上的if/else流控寫法我已經瞭解了,但感覺并不如C/C++那樣直觀,總感覺有些奇怪,擔心它的嵌套不準確。不過也不重要,總之今天掌握的,就是這些。

《普林斯顿微积分》第8章学习备忘

这一章很简短,只有2个话题:如何进行隐函数求导、隐函数求导能够完成相关变化率的求解。这两个话题看的我是“一头雾水”,全都能够看懂、给出的例题也都会做,但其中的细节是没有一点儿能搞清楚的,总结就是这一章看的是“似懂非懂”。 一、隐函数求导: 1、什么是隐函数?这就是摆在我面前的第一个困惑,《普》几乎是很快就引入了隐函数求导的方法,而没有说明什么是“隐函数”,它是否是个更基础的、无需多说的知识呢?不得而知; 2、隐函数求导的具体过程。这一点对应着书中的§8.1,不费力气就看明白了。我在阅读这个章节的时候,对“链式求导法则”有了更豁然的理解,这个“豁然”要趁着现在还没有忘记、尽快花时间详细记录一下。否则一旦过段时间,很可能又会忘记掉; 3、具体的隐函数求导例题。没有什么难度,书中给出的例题都能跟着做出来。但诚如上面提到的,因为我不知道什么是“隐函数”,所以例题能做出来是没有意义的,原因在于:如果放在陌生的问题中,我可能很难一眼看出“这是一个隐函数”、“这里应该用隐函数求导去解决问题”; 4、隐函数求二阶导。同样的也可以将例题做出来,但是这里也存在着一个问题:我不理解二阶导的微分符号中,它的“分子”和“分母”中的上标位置区别的具体含义,或者说二阶导的上标符号具体是什么含义我不清楚。虽然能够隐约感觉到答案,但并不明确,所以这里也要再额外花时间推敲一下,形如下面的二阶导微分公式中,上标“2”的位置和具体含义: 二、相关变化率 1、§8.2章节是《相关变化率》的现实应用,以及利用隐函数求导方法求解。能知道说的是什么事情、能完成书中的例题的求解。 2、但是这些例题我自己却不会构建。不会自己构建例题说明自己完全不理解什么是“相关变化率”,不会自己构建例题意味着现实中即便遇到了“相关变化率”的问题或现象,也很难认识他们,知道他们,看得清他们,联想到使用隐函数求导的方式去解决他们; 3、相关变化率的具体概念要再花时间了解、学习。直到自己能够构建出例题、不费力气的就能信口举出例子、自己能够构建出应用场景和应用例题,才算是了解了这个话题。我现在能想到的比较感性的生活场景是人的吃饭、排泄,以及与体重的关系。这样一个生动的例子,如果能够随心所欲的构建出各类例子,并通过隐函数求导解决,应该就算是了解了。 三、小结 1、如上,就是这一章节的学习心得。可见这一章当前只是囫囵吞枣地阅读了、了解了,并不理解; 2、接下来将继续阅读第九章:指数函数和对数函数。