目录
最近在学习电机控制,遇到了与运算放大电路相关的知识,然而太久没有接触模拟电路,对该知识已经淡忘了,及时温故而知新,做好笔记,若有错误、不足的地方,希望您能提出来,大家一起学习、提升。
注意:Uref是同相输入端的,Ui是反向输入端的。
一般的单限电压比较器具有很高的分辨率,当正相输入电压大于反向输入电压时,运算放大器输入高电平Uoh,相反,当正相输入电压小于反向输入电压时,运算放大器输入低电平Uol。如下图所示:

由上图可知,随着反向输入的交流电压变化,运算放大器的输入也是在变化的,而且输出高电平时间也是比输出低电平时间要长的,这也是符合实际的(一个周期的交流信号,小于2.5V的时长要比大于2.5V时长长)。
这里有一点要注意的,上图的运算放大器是采用正负双电源供电的(运算放大器的2、5引脚),这要说明什么呢?大家有没有发现,运算放大器的输出电压Uoh、Uol分别与电源供电引脚2、5的输入电压相等的,因此单限电压比较器的输出电压是由电源供电电压控制的。
单限电压比较器的输出电压是由电源供电电压控制的 这个结论验证,如下图所示:
①、将运算放大器的负供电输入电压改成-5V。

在上图可知运算放大器输出电压Uol变成了-5V了。
②、将运算放大器的负供电输入电压改成接地。

在上图可知运算放大器输出电压Uol变成了接近0V。
大家细心看看上面两个实验截图都有个问题,反向输入端的上峰值电压和下峰值电压不对称了,这是什么原因呢,其实是运算放大器内部的偏置电流产生附加的失调电压,我们只需要修改运算放大器同相输入端或者反向输入端电阻即可,如下图所示:
使用平衡电阻的原因,这里我推荐一篇博主写的文章:点击该链接

如上图可知,修改反向输入端电阻后,反向输入端的上峰值电压和下峰值电压已经相对比较对称了。

上一节所说的单限电压比较器虽然分辨率高,但是它的抗干扰能力差,比如我们用在什么声控灯、温控报警等电路设计上去的话,会发生一个严重的问题,如果该某些原因导致Ui电压值在Uref电压来回波动,那么等是不是会疯狂闪烁、报警声发疯似的响停。为了解决这个问题,可以将同相输入端与输入相接,构成正反馈电路,该电路称为滞回电压比较器。
滞回电压比较器有两个阈值,电压从大到小变化对应一个阈值,电压从小到大变化对应另一个阈值。与单限电压比较器的相同点是当电压单调变化时只有一个阈值,不同点是电压变化方向不同时对应不同的阈值。
滞回电压比较器基本电路,如下图所示:

根据上图公式可知电压传输特性,如下图所示:

根据公式可知,我们想改变 (回差△ = (+Ut - -Ut)) 的话,只需要修改R1、R2、Uo这三个即可,在前面就说过了,如果不想输出负电压的话,只需要将运算放大器的负供电输入电压端接地即可让Uol = 0V,除此之外,我们可以在运算放大电路输出端上拉一个电阻或者接上稳压二极管即可。
注意:在运算放大器接入反馈电路节点前串联一个电阻,不然 Uo改变无效。
输出无串联电阻,接入上拉电阻,如下图实验截图:

输出有串联电阻,接入上拉电阻,如下图实验截图:

输出有串联电阻,接入双向稳压二极管,如下图实验截图:


回差电压大时,比较器的抗干扰能力强,反之则灵敏度高。
单限电压比较器和滞回电压比较器共同点是单调变化时只有一个阈值,如果要单调变化时有两个阈值,这时就需要用到窗口电压比较器。

分析就省略啦!



大家可能会有疑问,前面讲述的迟滞比较器计算阈值不是这样的呀,应该是以下那样的。

其实这个很简单,以该电路为例,如果Vref这个输入电压是理想的电压源,那么我们就不需要考虑分压电阻,直接使用上图中的同相输入端理想电压源计算Ut阈值即可。而该电路的同相输入电压不是理想的电压源,因此需要考虑电阻,所以应该使用图1的计算方法计算Ut阈值。
为了不是瞎说话,直接贴上Multisim仿真验证截图,如下图所示:
Ⅰ、采用分压后的输入电压:

Ⅱ、采用理想电压源的输入电压:

经过MUltisim的仿真验证,如我所说的理论是一致的。
大家在这里还有个疑问点,为什么输出端接的上拉电阻R6之前没有串联一个电阻呢?
这是因为该电路设计是并不是要将Ut的阈值往上平移,而是想提高该输出端的驱动能力,强上拉电阻可以增加输出端的输出电流,从而达到提高输出端的驱动能力。


请帮助我理解范围运算符...和..之间的区别,作为Ruby中使用的“触发器”。这是PragmaticProgrammersguidetoRuby中的一个示例:a=(11..20).collect{|i|(i%4==0)..(i%3==0)?i:nil}返回:[nil,12,nil,nil,nil,16,17,18,nil,20]还有:a=(11..20).collect{|i|(i%4==0)...(i%3==0)?i:nil}返回:[nil,12,13,14,15,16,17,18,nil,20] 最佳答案 触发器(又名f/f)是
我明白了:x,(y,z)=1,*[2,3]x#=>1y#=>2z#=>nil我想知道为什么z的值为nil。 最佳答案 x,(y,z)=1,*[2,3]右侧的splat*是内联扩展的,所以它等同于:x,(y,z)=1,2,3左边带括号的列表被视为嵌套赋值,所以它等价于:x=1y,z=23被丢弃,而z被分配给nil。 关于ruby-带括号和splat运算符的并行赋值,我们在StackOverflow上找到一个类似的问题: https://stackoverflow
问题是:除了在“OperatorExpressions”?例如:1%!2 最佳答案 是的,可以创建自定义运算符,但有一些注意事项。Ruby本身并不直接支持它,但是superatorsgem做了一个巧妙的把戏,将运算符链接在一起。这允许您创建自己的运算符,但有一些限制:$geminstallsuperators19然后:require'superators19'classArraysuperator"%~"do|operand|"#{self}percent-tilde#{operand}"endendputs[1]%~[2]#Out
在Ruby中有运算符(operator)。在API中,他们没有命名它的名字,只是:Theclassmustdefinetheoperator...Comparableusestoimplementtheconventionalcomparison......theobjectsinthecollectionmustalsoimplementameaningfuloperator...它叫什么名字? 最佳答案 参见上面的@Tony。然而,它也被称为(俚语)“宇宙飞船运算符(operator)”。
也许这听起来很荒谬,但我想知道这对Ruby是否可行?基本上我有一个功能...defadda,bc=a+breturncend我希望能够将“+”或其他运算符(例如“-”)传递给函数,这样它就类似于...defsuma,b,operatorc=aoperatorbreturncend这可能吗? 最佳答案 两种可能性:以方法/算子名作为符号:defsuma,b,operatora.send(operator,b)endsum42,23,:+或者更通用的解决方案:采取一个block:defsuma,byielda,bendsum42,23,
可能真的很简单,但我很难在网上找到关于这个的文档我在Ruby中有两个activerecord查询,我想通过OR运算符连接在一起@pro=Project.where(:manager_user_id=>current_user.id)@proa=Project.where(:account_manager=>current_user.id)我是ruby的新手,但我自己尝试使用||@pro=Project.where(:manager_user_id=>current_user.id||:account_manager=>current_user.id)这没有用,所以1.我想知道如何在
我是Ruby和这个网站的新手。下面两个函数是不同的,一个在函数外修改变量,一个不修改。defm1(x)x我想确保我理解正确-当调用m1时,对str的引用被复制并传递给将其视为x的函数。运算符当调用m2时,对str的引用被复制并传递给将其视为x的函数。运算符+创建一个新字符串,赋值x=x+"4"只是将x重定向到新字符串,而原始str变量保持不变。对吧?谢谢 最佳答案 String#+::str+other_str→new_strConcatenation—ReturnsanewStringcontainingother_strconc
ruby中有这样的东西吗?send(+,1,2)我想让这段代码看起来不那么冗余ifop=="+"returnarg1+arg2elsifop=="-"returnarg1-arg2elsifop=="*"returnarg1*arg2elsifop=="/"returnarg1/arg2 最佳答案 是的,只需像这样使用send(或者更好的是public_send):arg1.public_send(op,arg2)这是可行的,因为Ruby中的大多数运算符(包括+、-、*、/、andmore)只需调用方法。所以1+2与1.+(2)相同
您如何找到有关代码中运算符用法的信息(最好是通过Google)?在这种情况下,我想找到这段代码在Ruby中的含义。x=[1,2,3]x.send:[]=,0,2x[0]+x.[](1)+x.send(:[],2)我要你教我如何钓鱼——不要告诉我运算符(operator)是做什么的。当我去Google并尝试搜索符号时,我得到的示例或教程没有涵盖特定的用法。https://stackoverflow.com/questions/1165786/how-to-search-for-punctuation-that-gets-ignored-by-google表示谷歌驳回了这种表示法;我寻找“
重新定义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.