小工具开发备忘
最近用C++语言写一个小的工具程序,进展还算顺利,大的方向和功能开展的比较顺利,但是细节上有很多小问题。为了确保软件开发的进度,我是抓大放小,先力求能将整体功能全部实现出来。 对于细节问题,只能是做些备注、放在一旁,等软件整体完成之后,再回过头来逐一推敲了。这里记录一下遇到的小问题,当是给自己的备忘,等以后有时间了,再慢慢研究。 1、《系统托盘菜单点击之后500毫秒内的残影》 这个问题并不严重,临时解决方案是在程序中触发截屏时,先延迟一段时间再开始进行截屏。 2、《std::vector.size()返回的是size_t类型》 这并不是“放在一旁、暂且不管”的缺陷,而是我在写代码的时候遇到的一个“引起程序崩溃”的bug。实际上并非真的导致了程序的崩溃,而是因为wxWidgets中的调试断言弹出了警告对话框。 只不过因为我对C++不熟悉、又这个弹出警告框的文字实在难于阅读,所以起初一直以为是程序崩溃了。找了好久才找到原因,并且发现只不过是在f(x)函数的调用是,参数x使用了int类型,而真正应该使用的是size_t类型。虽然int和size_t几乎一样,但严格的断言判定最终生成了警告信息。 这个问题虽然已经解决,但是额外的需要再补充一下细节知识的缺失——《C++中的int和size_t有什么不同?》 3、《wxWidgets似乎没有事件广播机制》 我现在对wxWidgets的认知来看,它是没有事件广播机制的,但是对于我现在正在开发的一个“相对复杂”的窗口,如果能够以事件广播,将会令代码更加简单。所以想到了一个也许笨拙的方法——使用全局单例——来临时解决问题。 ================ 以下为尚未这里问题 ================ 一、已解决的问题主要有: 1、为什么在程序退出时会产生一些内存泄漏? 答:之前使用的退出方式不正确,之前的退出方式在“程序退出”时,虽然也调用了析构函数,但是那个调用析构函数的时候,实际上内存已经泄露了。我在那个析构函数中进行资源释放,实际上是对已经泄露了内存、且资源句柄已经无效的时刻,才去释放资源,结果就是无权访问会引发程序崩溃。 按照之前的错误思路,怎么办呢?释放就会崩溃,所以只能选择不释放资源,这样程序就不会崩溃了。但是在debug调试器中,就会看到有内存泄漏产生。虽然这里产生的内存泄漏会再被系统回收处理,但是这相当于是将“烂摊子”交给了操作系统的内存控制器。 现在已经解决了。解决的方法就是改用正确的退出函数,这样正确的退出函数会触发正确的析构过程,在这个新的析构过程中,释放资源,此时的资源还没有泄露,也就可以正常的被释放掉。 2、icontray的弹出菜单文字的动态调整 这里只是一个小技巧而已:将mainFrame的指针传给iconTray,这样iconTray内部就能在弹出菜单之前,判断出mainFrame当前的状态,再根据mainFrame的当前状态实时生成菜单,就能够令弹出菜单的内容“实时”,使用体验会比较好。 二、尚未解决的问题: 1、程序多次被启动,虽然我用互斥锁能判断出来,但是第二次启动只能弹出一个提示“已有实例,不要重复启动”。 但是我想做的更好一些,使用IPC通信,第二次的启动可以通过IPC通知第一个实例,第一个实例如果正处于隐藏状态(icontray状态),就自己重新唤醒起来。 2、paintDC的绘制效率很低:已经使用双缓存和悬浮层两个方案,共同解决了这个问题。 3、wxSashLayoutWindow窗口的拖拽改变尺寸,产生的事件 OnSashDrag(wxSashEvent&) 这个事件折磨了我大约4个小时,后来才想起来打印看一下,结果发现这是在鼠标抬起的时候才唯一的产生一次响应。难怪无法实时改变窗口的大小。还没有解决思路。
经过三组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完成的画图,从只有电源电压开始、一条条的增加新的电容电压曲线。需要注意的是要忽略掉曲线开始瞬态部分的失真情况:…
电容电压跟随电源电压的过程(2)
一、问题的提出 在上一篇博客《电容电压跟随电源电压的过程》中,基本搞清楚了电容的充电过程和放电过程电压的变化规律。但是它对我想了解的电路而言太基础了,根本无法指导我对当前电路的分析。 我更想搞清楚的是当电源为交流电时,电容电压的跟随情况,如下图所示: 图中的电源是100Hz的5V交流电,可以看到在电容上形成的电压的峰值(红线)略微低于5V,并且是滞后于电源电压的。这在网上已经有不少公式说明了它们之间的关系,但是却没有给出推导过程。 并且更为令我不安的,是这些现成的公式都是指电路进入“稳态”之后,而在上电的起始阶段,可以看出电容与电源之间的电压并不出现相位差。 所以在我想来,这个“现成的公式”是无法解答我的困惑的,所以这篇文章以及接下来的一段日子,我将尽可能搞清这个问题:电容电压是如何跟随交流电压的。 二、困扰 又陷入了“AI胡说”的困扰,这篇博客提出来的问题,我自认为问题定义的还是比较清晰的,但却找不到准确的文献。如果继续执着于利用搜索引擎或AI问答引擎,恐怕接下来要浪费的时间将是巨大的。 其实我觉得这个问题应该比较容易,它只是在解如下的方程: 这似乎没什么难度,但因为缺少相关的参考资料,所以我很难确定自己的推导过程每一步是否准确。尤其又因为我自己解出的答案,绘制成图形之后和预期的图形相差太远——因而可以确定我的求解是错误的。 有些不知该如何继续了。 三、找到了正确的计算公式、虽然并不完美 经过多次的搜索、查找,终于找到了一篇“正确的”参考资料: https://www.iitp.ac.in/~siva/2016/ee101/Sinusoidal_Steady_State_Analysis.pdf 之所以可以认为这篇参考资料是正确的,是因为基于这篇资料计算电容电压,绘制出来的电容电压的波形是准确的(相移角准确、电容可以得到的最大电压准确、并且是稳定持续输出的): 这很不容易!我之前一个下午都在使用AI问答引擎找答案,结果给出来的各个计算公式都不正确。直到晚饭之后,都已经准备放弃了。但不甘心又找了一下,才找到上面这篇文档。 虽然这个文档给出的结论并不是我要的最终结论——它显然缺少系统上电的起始阶段的分析和曲线。但至少有了稳态之后的正确公式,可以先把后面的知识了解、掌握一下。 四、瞬态响应阶段和稳态阶段的完美波形 我感觉自己是找到“宝”了,上面的参考文档实际上是准确、完美的。只不过起初找到的时候没有细看,草草的照葫芦画瓢画了个初步的图形。细看之下,这篇文档实际上是含有初始瞬态响应阶段的分析的。按照最终的正确公式进行绘图,得到的图形正确、完美: 文档中给出来的推导公式也非常的简要明了。所以接下来只需要将文档中提及的公式好好学习、自行推导一遍,这一目的功课就应该算是完成了。 五、小节 1、其实上面的图形我完全可以在仿真软件里模拟出来,然后直接截屏就可以正常使用了。但是之所以纠结这个图形的产生过程,是因为我想搞清楚仿真软件中这个“电容电压跟随电源电压”的计算过程,究竟是怎样的; 2、如果不知道具体计算过程、不知道具体的推导过程,就很难理解为什么最终是RC的阻值、容值决定了它的相移。也无法自己利用SageMath绘制图形。不能自己绘制图形,就很难在博客文章或者“视频文章”中给出更详细的展现; 3、如今已经有了这个具体的“绘图公式”,我就可以按照自己之前的想法,绘制一系列的曲线,通过这些曲线说明为什么每一个RC网络可以实现(0°-90°)之间的相移、为什么必须需要至少3组RC网络才能形成180°的相移; 4、额外的,除了可以说明三组RC网络形成的180°相移外,还可以计算出最终反馈回去的电压有多少,与控制极的初始电压叠加之后形成的控制极电压波动有多大、进而推算出控制极的电流形成的开关效应,最终将Jack Kilby的RC Phase…
电容电压跟随电源电压的过程
一、问题的提出: 一颗有电且“满电”的电池,它的正极有着比负极更高的电势。 当将这颗“满电电池”的正负极通过导线连通时,通过电场力的作用,这条通路上的电子便会从低电势区域向高电势区域移动,目的是减小正负极之间的电势差,从而形成电子持续的定向移动,也就是电流。 因为这条导线是理想的、电池也是理想没有内阻的,所以电子的定向移动不会受到任何的阻碍,单位时间内通过导线横截面的电子数量可以无限多、电流无限大,只需近乎于0秒的时间,电池正负极的电势差就被拉成零、没有了电势差。 重新回到初始状态,在这条理想导线上加入一颗电阻,目的是阻碍电流的移动,使得导线上的电流不再是无限大,而是I=U/R,问:此种状态下,需要经过多少时间,电池的正负极电势差才能从U降低到0呢? 二、初步讨论 上面的问题中,一直用的是“电池”,目的是让问题更感性一些。其实这篇文章主要聊的是电容,因为电池和电容基本相似、可以类比,所以上面一直用“电池”来做表述。但电池和电容本质上是有差异的,所以为了更加严谨一些,下面不再使用“电池”的称呼,而是用“电容”来继续讨论。 一旦系统接通,电池(电容)将开始进行放电,电流经过电阻做工,并且逐渐的电容内部的电压会降低、直至电容电压降低到0。这也是上面提出来的问题:要经过多久的时间,电容电压才会从初始电压(例如5V),降低到0V呢?这里有一个值得注意的事情:电容初始电压虽然是5V、在系统导通的起始时刻,流经电阻(100Ω)的电流是I=5V/100Ω=50mA,但是这个电流并非恒定不变的。 随着时间的推移,电容内部的电场强度(如果是电池、则可以理解成电量)会越来越低、电容的端电压也会随之下降,从而导致流经电阻的电流也会越来越小。这个过程是连续的——每一个当前时刻的电流都是上一个时刻的电容电压决定的。在没有仔细的推敲之前,不妨先随手胡乱的画一画它们随时间t的变化关系: 如上的若干图形都是肆意画出来的,只有大概的猜测、并没有任何的理论依据。大方向上而言,电容电压随时间的推移一定是越来越低的,但究竟是上面图中哪一种形式呢?如果花更多一些时间思考,似乎能从“电能密度”的角度上猜测出,上面的3个曲线中,最右边的曲线似乎是更贴近于真实情况的。但也只是猜测。 另外,我们最关心的“经过了多长时间,电容电压变为0”,在上面的图形中也是无法推敲出来的。虽然我们知道这个时间一定非常小,所以图中都是“拍着脑袋决定”,在0.01s的时候,电容电压就已经降低到0V了,但实际情况究竟应该是怎样一个时刻?所以接下来就要从数学的角度具体推算一下了。 三、具体数学推导 电容放电过程中的电压变化,可以从两个维度上考虑,分别是KVL和KCL两个角度,也就是考虑电容上的电压时时刻刻等于电阻上的电压、或电容上流出的电流时时刻刻等于电阻上流过的电流。这两种思考角度本质上是一样的,具体的推到过程由下面的两个参考资料中可以详尽的看明白: 1、以电压考虑,依据Kirchhoff’s voltage law (KVL)进行推导: 参考资料:https://web.mit.edu/sahughes/www/8.022/lec09.pdf 2、以电流考虑,依据Kirchhoff’s current law (KCL)进行推导: 参考资料:https://mechatrofice.com/circuits/charging-capacitor-derivation 3、额外的,一篇不错的科普概述文章: 参考资料:https://courses.lumenlearning.com/suny-physics/chapter/21-6-dc-circuits-containing-resistors-and-capacitors/ 这里直接给出最终的结论,电容上的电压随时间T的关系式是: 由此看出电容电压在数学上是永远不会等于0的,它只会越来越趋近于0。但是现实世界中,因为电路上的IC并非理想的、并且存在着热扰动,所以只要经过一段时间,电容趋近于0的电压就会因为一个“小的波动”而抵达X轴,从而时电压归零。…
RC振荡电路初学笔记(3)
这是一篇临时的备忘文章,主要是将最近几天对RC振荡器的学习进展做一个简单的罗列。虽然已经花了不少时间在这个电路上,但是我对这个电路的细节还有很多的欠缺。好在最令我困惑的几个问题,已经基本搞清楚了: 1、在这个振荡电路中,使用相移器的目的是什么? 答:这个问题我现在“隐约”有了答案,但是还需要对当前的认知进行更深入的学习,以便从数学公式上对相关的“相移量”有个更加准确的认识、并且要能通过参数计算出具体的结果。尤其是我现在所初步感受到的“电容电压跟随源电压”,它的跟随程度和如何控制,要学会具体的计算过程; 2、为什么要使用3组RC相移网络? 答:这个问题现在我已经可以通过画图的方法得出答案了。这个问题的答案的得来对我而言十分的不易:自己既没有夯实的基础知识、网络上又没有比较明确的答案。幸好最后自己想出了答案。虽然暂时没有办法印证我当前的答案是否标准、正确,但感觉应该基本是靠谱的。为了让答案更容易理解,这个知识点要配合一些画图才能完成。所以接下来将学习使用SageMath将相关的正弦波形绘制出来; 3、电容的容抗的本质是什么? 答:还没有搞清楚; 4、NPN为什么是电流控制型元件? 答:这个问题似乎也有了一个初步的答案。不过也还没有将答案从头梳理、逐一印证。所以还需要一定的时间完成这部分知识的整理、证实。并且在确定自己的想法就是书本上表述的意思之后,整理成博客文章,发在这个系列文集之中。 5、我当前绘制的RC相移振荡器电路,起振阶段的工作原理是怎样的? 答:不确定,不了解。因为我现在使用的2款仿真软件对于起振阶段的仿真并不相同,所以也说不清哪一个软件的起振阶段描述是准确的。因为无法确定哪一个表现准确,也就无法去“打哪儿指哪儿”的想它的起振过程。所以这个起振阶段的起振过程,还要再花时间推敲; 6、我当前绘制的RC相移振荡器电路,是否真实、准确? 答:这是相比Jack Kilby的论文而言的。他的论文中对于RC相移部分使用了一个很简略的画法。现在不确定他的简略画法是:a、一坨电容覆盖在一坨电阻上面,就是与3组RC网络等效的;b、其实简略画法要展开成3组RC网络才可以;c、在他的真实电路实现内部,还有其它未知的细节;以上哪种情况呢? 以上,就是现在我对RC相移振荡器的学习进展。如此看来,已经学习过的内容还没有整理成文章、大体了解了的内容还没有深入探究、尚未了解的内容还有很多……如此看来,这个系列的学习工作,还是有很多事情要继续的。
重新学习有关电阻和电容的基础知识
最近看RC相移振荡器的时候,发现自己欠缺的基础知识有些多,所以不得不重新学习有关电阻和电容的基础知识。 一、基本概念和定义: 要想了解关于电容的基础知识,我想应该从最基本的电流、电压、电阻方面的知识学起。而这三个基本概念分别是安培、伏特和欧姆三位先生所定义出来的,所以这三个基本的单位使用了三位先生的名字作为定义。 于是就有了: 1、电流:单位是“安培”(Ampere),这是在1836年时为了纪念在电磁学方面有突出贡献的法国科学家安德烈·马里·安培,而以他的名字命名的(虽然是1836年正式命名,但是电流的定义应该早于1800年、早于电压的定义时间)。电流的定义是I=Q/t,含义为在导体内单位时间内所移动的电荷量。 2、电压:单位是“伏特”(Volta),这个概念是亚历山德罗·伏特(Alessandro Volta)在1800年提出的。它的定义是:U=W/Q,即单位电量做出的功。如果电量Q做出的功是n焦耳,说明这些电量Q的电势能降低了、从而释放出了n焦耳的能量。这些Q之所以电势能降低、释放出能量,是因为它们从处于高势能的电场区域移动到了低势能的电场区域。 3、电阻:单位是“欧姆”(Ohm),欧姆定律是在1827年首次提出的。德国物理学家乔治·欧姆(Georg Ohm)在当年发表的《The galvanic circuit investigated mathematically》中,详细描述欧姆定律。在这本书中,欧姆解释了通过简单电路中的各种长度导线时的电压和电流的测量结果,并提出了与现代形式略有不同的稍微复杂的方程来解释他的实验结果。电阻的定义是R=V/I。 二、直接和间接: 从上面的对电流、电压、电阻的定义能够看出来:电流和电压都是有着明确的定义、并且可以通过直接测量,例如直接使用电流表和电压表得到的物理量。所以他们是被精确定义的物理量和物理单位。 而电阻则是根据欧姆定律计算得到的,属于间接物理量和物理单位。虽然电阻也可以通过万用表测量出来,但是使用万用表进行电阻的测量,其内部原理仍然是施加一个电压、然后测量电流,通过电压和电流的测量值,计算出来电阻。所以电阻是计算出来,而不是测量出来的。所以电阻是间接定义、计算得到的物理量。 三、展开说一下“间接”计算: 之所以上面会提到“电阻是基于电压和电流、通过欧姆定律计算”而间接的得出的,原因是对于很多类似的公式,我都存在着困惑:这些计算公式是怎么得来的? 例如,除了电阻R=U/I外,在《电磁学》中提到的Priestley实验,这个Henry Cavendish在1773年完成的实验中,得到了如下的电场力公式: 这个公式我也存在同样的疑惑:Henry Cavendish是凭什么给出的这样一个公式的呢?在这篇blog写作的时候,我似乎解答了自己多年的困惑——这些“间接计算量”并不是想当然地提出来的,而是通过大量的试验,根据试验的数据拟合出来的结果。 为了进一步的将自己的想法整理清晰,先将上面的公式简化一下,直接用库仑定律来当例子。库仑定律是说两个点电荷q1和q2之间的库仑力F,定义如下: 这个库仑定律以及库仑力的计算公式,我之前长久的困惑就是:为什么库伦当年就能“定义成”力是与距离的平方成反比的,为什么偏偏是“平方”,而不是“3次方”、“8次方”呢? 我的想法应该说是非常幼稚的,但我就是闹不明白。现在应该大体上有了答案:库伦之所以能够肯定,是因为他做了大量的实验,并通过实验得出的结论。例如我也给出一些数字来,这些数字假设是实验的记录,那么根据这些数字,反推出公式应该是不难的。 A球电荷量 B球电荷量…
RC振荡电路初学笔记(2)
在上一篇Blog最后提及的Jack Kilby设计制造的人类历史上第一片集成电路芯片,是一枚RC相移振荡器(RC Phase shift oscillator),在输入12V的直流电时,可以产生特定频率的波形输出信号,具体的输出频率和幅值是通过其中的RC相移器设置产生的。 这枚人类历史上的第一枚集成电路芯片,诞生于1958年9月12日的德州仪器实验室中。它之所以与众不同、并且成为今天计算机发展历史上的重要一环,原因在于它是第一枚完全使用半导体工艺、在单晶片上集合集成了电阻、电容、PNP管的电路、也就是我们常说的“集成电路”。 在当时的德州仪器,已经可以规模化生产电阻器、电容器、PNP等电子元件,但是电阻和电容并不是通过半导体工艺生产的,所以要想将这些不同的IC小型化、集成化的“封装”在一起,则需要针对不同的IC进行不同的工艺制作,以便让每一个IC都缩小、让不同的IC彼此靠的更加紧密,从而使最终整体封装出来的电路尽可能小型化、高集成化。 这种令每一个元件都更小、令他们彼此考得更近的“小型化”想法,是比较朴素的想法,德州仪器也是在这种朴素的想法的指引下,设计了多种方案(可能是三种设计方案),但是这些方案本质上都是先将每一个IC缩小、再进行整体组装,如此就不可避免地还是会令最终的产品是一个“组装设备”,相对而言还是会比较大。 图中,Jack Kilby坐在正中间。图片来源:https://commons.wikimedia.org/wiki/File:TIDallasPhippsWeaverBiardKilbyFischer.png Jack Kilby则采用了与上面想法不同的思路:他直接使用半导体生产工艺进行电阻、电容的制造,具体是使用氮化钛制作电阻、使用聚四氟乙烯制造电容,这样就可以令电路中所有用到的IC都是采用相同的半导体制造机制来生产,也就是说最终的所有IC都是“生长”在多片硅晶体上的,不再需要进行彼此的组装,而是一层层“生长、叠放”在一起,从而大幅度的缩小了最终电路的尺寸。 Jack Kilby的想法在实验室中最终得以实现,并且成功的在示波器上看到了预期的振荡输出波形。 最终,Jack Kilby被称为“集成电路之父”并于2000年时因发明集成电路而荣获了诺贝尔物理学奖。与Jack Kilby齐名的是来自于仙童半导体的罗伯特·诺伊斯,他则因集成电路平面制作工艺的发明,所以他们两人被同时誉为“集成电路之父”。
RC振荡电路初学笔记(1)
振荡电路(Oscillator Circuit)是用于产生特定频率和振幅的正弦波形或非正弦波形的电路。整句话有些拗口,简单来说:震荡电路就是可以产生正弦波形的电路。想要构成振荡电路,需要由三个基本功能单元共同构成:振荡器、放大器、反馈器。 比较常见的是LC振荡电路和RC振荡电路,因为最近在看《半导体发展史话》,其中提到了人类历史上第一枚集成电路芯片,顺着这个话题看下去,Jack·Kilby先生最初制造的三个基础电路之一,便是RC震荡电路。于是对RC振荡电路产生了兴趣,希望能够深入的了解一下。 RC振荡电路的组成方式比较多,其中使用元件数量最少、原理相对最简单的是RC相移振荡电路,即RC Phase Shift Oscillator Circuit,它仅需少量的RC网络、以及一颗开关管,即可实现稳定的震荡输出。 例如以下电路,仅需使用电阻和电容构成的RC相移网络(3组),在9V直流电压源驱动下,便可以产生固定频率的振荡输出(正弦波输出): 上图是比较常见的RC Phase Shift Oscillator电路,使用的是NPN开关管,但是Jack·Kilby当初设计的时候使用的是PNP开关管,这其中的差异和原因暂时并不重要,无论使用NPN还是PNP,先将基本的电路画出来、有个感性的认知便可以了。 Jack Kilby的发明所刊发的论文是 US3138743A,在其中提到了使用集成电路半导体生产工艺制作的几个电路图。在这篇论文所提及的几个应用电路中,最简单、最具代表性的便是RC振荡器。 但是这份发明专利看上去有一些吃力,主要是其中的电路图并不是我们今天熟悉的绘制方法。虽然图8.b和图8.c仔细看还是能够看出原理图的线框,但其中的符号对于初学者而言却有一些陌生,看似认识、其实与标准画法都有一些差异,它对相关电路的画法如下: 将上面的原文8.c重新绘制一下,大概是下面这个样子。这个RC振荡电路和今天比较成熟的振荡电路有一些差异,例如和本文上面所画不同,在 Jack Kilby 的论文中使用的是 PNP 开关管、而如今主流的则多是使用 NPN,或者在今天更多的则是使用 MOS 管、或直接使用放大器作为核心放大部分。 不过具体使用什么核心器件进行放大,本质上都是相似的。我想只要对其中一个细致深入的学习明白,其他的相似电路也就能够较快掌握了。所以接下来,我将对这个电路进行更详细的研究、学习。
UP4000焊接USB Type-B端子接口备忘
最近工作中用到了一台UP4000的小电脑,要从这台单板电脑(SBC)的主板上引出一个USB接口,与其他外部设备连接。 在UP4000的主板上,是有这个扩展设计的,它的CN15接口就是USB/UART扩展,这个CN15接口共有10个接线端子,其中可以引出2路USB总线。我使用的就是其中一路,也就是只使用这个接口的pin1-pin4引脚就可以了。 USB端子使用的是Type-B公口端子,线序定义网上也很容易找到。按理说从CN15到Type-B只有4条线,且这4条线的定义明确,应该很容易就搞定。但是我先后做过2批次的手动焊接,每一次都要再重新逐一核对这些线序的对应关系。想着也许今后还要再做这个工作,到时候可能又会忘记,还要再逐一核对,实在是太麻烦了。 所以干脆把这个工作做成图文,备忘一下吧。 最终的成品如下图所示,为了展示方便,所以Type-B端子那边没有用热缩管包裹。真正制作的时候是需要用热缩管对4条线的焊脚部分整体包裹、固定一下的: UP4000单板电脑的CN15接口线序定义如下: USB各个段子的线序定义: 最后再将焊接的示意图备忘一下。这张图右下角的手绘部分,其实更好的应该用手绘板,但是我实在犯懒、懒得起身,所以就直接用鼠标哆哆嗦嗦的画一下,估计自己今后看到的时候还能知道他们的对应关系(实际上恐怕很难,以我的经验而言,这种信手随便做的备忘,过不了多久自己再看的时候,就会忘记都是什么意思了。也许今后再做这个焊接工作的时候,我还是会再次重新回忆那边是Pin1、然后还要逐一核对这4条线是否正确)。
WordPress发布文章失败问题与解决
昨天完成这个博客的升级之后,想着不如顺便搞一搞当前这台服务器的SSL支持、利用CloudFlare提供的免费服务为当前网站开通SSL证书、并启用https协议访问的功能。 CloudFlare提供的免费证书非常容易申请,只要将域名DNS给到CloudFlare托管、便可以直接开启SSL功能。而且配置起来也很灵活、方便。用了不到20分钟,便令当前网站支持了https协议。 但是试用了一阵发现,WordPress出现了一些问题:前台文章访问、阅读等一切功能都正常,但进入后台之后,发布文章或修改文章时,会提示:Updating failed. You are probably offline。 这是因为后台发布文章时,wordpress会在服务器上直接本地调用自身的接口,而它尝试本地调用的使用也是采用https协议。但我并没有在服务器上部署证书、当初偷懒,只在CloudFlare上做了边缘证书。也就是说通过dns解析域名时,会经过cloudFlare进行中转,但在服务器上直接访问时却发现服务器实际上并未真实的支持SSL协议。 解决起来也简单:对wordpress进行一些修改,让它在进行文章发布、更新时,仍然使用http进行访问。不过这样的修改工作量其实远比做一套完整、完备的端到端证书要更加繁琐。而且同样的工作量下,这样一种“修修补补”的方式反而会给自己日后升级blog埋下隐患。 所以,既然服务器的权限完全在自己手里,又能够对apache进行各种配置、调整,就没有必要只做一个边缘证书,而是中规中矩的在CloudFlare中申请一套免费证书、并且下载到服务器上,开通apache的ssl mod,并将证书文件指定好,如此一番操作下来,彻底完成当前web server的端到端加密访问支持。 重启apache服务,一切正常,无论wordpress的前台还是后台功能,就都正常了。 后记:利用CloudFlare提供的免费证书完成服务器的ssl支持,还是非常简单、容易的。我起初对这个流程并不了解,在网上搜索他人教程,发现写的也是五花八门、迂回曲折。但自己真正的一条路走下来,发现整个过程并不复杂,现在想着自己手里还有另外一个小网站也是多年没有维护、还停留在http访问方式上。 待过些日子,对那个网站也做一下SSL的支持,到时将完整的配置过程,逐步截图留存,并写一个step by step的图文,当给同样遇此问题的朋友们参考吧。