发帖数

43

原创数

43

关注者

16

阅读数

9333

点赞数

2

张角

  • 讲透有史以来广受欢迎的运算放大器μA741(2)---恒压恒流源

    大家好,我是张飞实战电子张角老师!

    上一篇文章对uA741的电流源还没有分析结束,下面我们继续往下看741运放内部P管构成的镜像电流源是怎么工作的。下图就是P管组成的电流镜的具体方案,这个和我提出来的方案是不一样的,具体它们的不同之处在哪里,这篇文章就给大家做下详细的分析。

    image.png

    Q1Q2两个P管镜像恒流源这个地方,能够提供多大的能力,表面上看这个能力是取决于Q2这个电流源的负载。如果它的负载越大,那么提供的电流肯定是越小,反之电流也就越大。实际上真的是这样么? 

    T4集电极处的电压是T4RceR2Q1Rce三个电阻分压的结果。我们假定T4的集电极电压Vc上升了,那么Q3/Q4Vb肯定上升,那自然T1T2Ve肯定上升。上面这些都没有疑问对吧。T1T2这两个管子都是恒流源接法,对吧。也就是说T1T2这两个管子都是处于放大状态,流经它们的Ib小了,那么自然Ic也会小了。那Q2自身的Ie也就会小了,是吧。Q2这个管子处于临界饱和状态,那么自然它的Ib也就小了。Q1Q2这两个管子的Ib电流是相同的,那么Q1Ib电流也就小了,那么Ib放大之后能够提供的电流Ib*βt也就小了,那是不是这个电流就小于原来的电流IcT3Ic电流值)了。这个时候,Q1这个管子就往放大状态移动了对吧,同时T4这个管子往饱和方向移动。管子往放大状态移动,它的Rce是不是变大了呀;管子往饱和方向移动,它的Rce是不是变小了呀。所以就有了Q1Rce上升,T4Rce下降状态。那么T4这个管子集电极处的Vc是不是要下降了,那这样就对冲了T4集电极处电压上升的影响,T4集电极处的电压就会保持一个稳定的状态。这个电位稳定了,按照刚才的逻辑推理,那么T1T2Ic之和,也就是Q2Ic是不是就稳定了。所以我们说,流过Q2Ie电流是一个定值。

    当然这个分析过程也可以直接从Q2 Ie或者Ic的角度进行分析,分析的结果其实是一样的,大家可以尝试一下。

    image.png

    反向的调节过程,大家可以自己下去分析一下,这里我们就不再赘述了。

    image.png

    另外大家还发现没有Q2C极电位,是不是一个固定的电位呀,这个电位是不是Vcc-0.7V。为什么Q2Vbe一定是0.7V呢?因为Q2这个管子处于临界饱和状态,大家下去可以查一查相关的资料。这里因为Vcc是固定的,Q2Vbe也是固定的,所以Q2C极电压一定是固定的。所以这个电源是不是可以认为是一个恒压恒流源。这个设计确实非常巧妙。

    在上篇文章中,我们是不是提出了一个自创的恒流源设计方式,如下图所示。

    image.png

    我们这里是不是使用的Q1Ib电流作为偏置的呀,那么是不是也就是说Q2最大也只能流经这么大的电流,这个是电流镜的根本特征是吧。我们举个例子,当上图中负载的阻抗变大的时候,是不是它就不需要那么多的电流了呀,那这个时候,流经Q2 Ic电流是不是就没有流经Q1Ic电流大了呀。但是它们的Ib电流是不是还是相等的,那这个时候Q2是不是就往饱和方向移动了,而且这个时候Q2的集电极电压也不再是Vcc-0.7V了。那么也就是说,这个电流镜的做法,不能够保证Q2 集电极处的恒压恒流特征,具体是不是恒压恒流,取决于负载的状态。

    那么我们能不能同样使用反馈的方式来做到让这个电流镜一样恒压恒流呢?比如像刚才那样同样进行电流反馈,我们依然按照刚才的逻辑来分析。假定T2 C极的电压上升了,这肯定会导致Q2Ic变小,但是这个反馈回路是不是对Q1Ib是不是没有什么影响呀,大家可以看一下图纸。由于T2 C极的电位上升,确实会导致导致了Q1Ib变小,那么也就是说Q2IbIc是同时变小的,这个也没有办法保证Q2集电极处恒压、恒流特征。所以我们提出的那个方案,没有芯片设计方给出的方案更好。

    image.png

    那这样,运放电源部分的设计我们就先到这里。如果我们能够知道每个运放的放大倍数,那么我们就可以精确地计算出来各个支路的电流值到底是多少,这样也算是对电源部分有较为深入的理解了。

    Q5Q6这两个管子的作用主要是调整偏置电压和增加运放的差分增益,这块内容我们下节课再进行探讨。


    收藏 0 回复 0 浏览 231
  • STM32 UART通信深入探讨

           大家好,我是张飞实战电子张角老师!

    在单片机开发过程中,我们常用的通信协议主要有UARTSPII2C这几种,是吧。这三种通信协议,本质上都是串口通信,也就是说在一个时钟周期中,只发送一个数据位。顾名思义,如果在一个时钟周期里面发送多个数据,是不是就是并行通信了,并行通信,自然需要更多的数据线,进而会占据更多的资源。不过并行通信的好处也是显而易见的,也就是说单位时间内(或者说一个时钟周期内)可以传递更多的数据,比如在大屏显示这种通信类型的时候,一般就需要使用并行传输协议。没办法呀,数据量太大,不得不如此。但是在相对低速的通信场景中,串口通信能够满足绝大多数的需求,所以在单片机的外设资源中,串口通信占据了不少份额。

    image.png

         我们首先来分析一下串口通信的原理。串口通信的接收过程,大概就是上图中描述的样子。这个图中我们只是使用三个数据来示意表达。DSR发送过来的“010”这三个数被移位寄存器移位以后,通过“D1D2D3”并行输出。实际上一般这里是8D触发器,实现8个串行数据的并出效果,单片机的最小存储单元一般是8bits么。发送端实现的一般是“并入串出”,只是方向反过来了,原理和上面的一样的。上图中N管和P管组成的电路是为了上电的时候,对D触发器的数据进行复位,这个地方大家不必太在意。

    UARTSPII2C这三种最为常用的串口通信中,以UART的实现最为简单,通信的双方不需要严格的时钟配合,只需要设定好波特率就可以了。所谓不需要严格的时钟同步,也就是说通信的双方可以使用各自的时钟,通信双方的时钟频率不一定相等,我们在使用UART进行数据通信的时候,每次发送的数据最长是8bits,可以比这个短,但是不能再比这个长了。如下图所示,数据位可以是8/7/6三类。那究竟是为什么呢?一次发送多个数据不行么?

    image.png

    异步通信可以允许通信的双方具有一定的时钟误差,时钟误差越大,每次能够发送的数据位数就越短;时钟误差越小,每次能够发送的数据长度也就越长。为什么是这样呢?假定对于主机,一个bit对应的脉冲数正好是10个,对于从机一个bit对应的脉冲数是10.2个。那么随着bit数的增多,比如达到5bit的时候,从机就会出现有51个脉冲数,那多出来的一个脉冲数该怎么对应呢?电路设计上该怎么设计呢?换句话说,就会出现数据错位。从这个例子来看,只要从机和主机时间频率上有误差,随着单次数据传递量的增长,那么一定会有数据错位出现。这个也就是UART进行数据传输的时候,一次只传输一个byte,主要的目的就是为了防止出现数据错乱的情况发生。

    我们下面用图形化的方式来说明一下这个问题。

    image.png

        如上图所示,PWM1PWM2是两个不同的时钟信号,大家可以看一下这两个时钟的周期明显是不一样的。我们让这两个时钟都同时从A时刻起步,大家可以看一下,到达B时刻的时候PWM1PWM2已经反相了,到达C时刻的时候PWM1PWM2又变成同相了。大家可以看一下,到达C时刻的时候,PWM2的周期数已经比PWM1多了一个了,那么多出来的这个时钟周期就会出现无法和数据位匹配的情况。反过来对于数据来说,也就是会出现数据错乱的现象。

    但是SPIUART通信的双方有一条时钟线相连,通过这条时钟线他们实现了严格的时序匹配。因为双方时序完全一致,那么在数据采样、移位以及存储的时候,就不可能出现数据错乱的情况。某种意义上时钟有多快,数据传输的速度就会有多快。当然实际应用中,SPII2C数据传输的速度,还受到通信接口本身器件特性(结电容)、CPU处理数据的速度、存储器存储数据的速度以及布线等因素的影响,具体的数据传输速度是考虑了诸多因素之后确定的一个值,我们需要具体应用具体分析。

    对于Uart来说,为什么通信双方的波特率需要设置的是一样的呢?波特率是不是就是数字信号采样的速率,如果通信双方采样的速率不一样,很显然会导致错误的结果。我们假定UART发送方的波特率是9600,接收方的波特率是19200。发送方发送的数据是“0101 0001”,那接收方会接收到什么数据呢?我们这里接收方数据采样的速率是不是发送方的两倍呀,大家可以看下面的图。

    image.png

        接收方数据采样出来的数据是不是0011 0011”呀,是不是发送方的每个数据才接收方采样了两次呀,而且停止位是不是还出现了错误。这个例子从侧面说明了,发送方和接收方波特率必须一致的原因。

    异步通信,相比同步通信,还有一个缺点,那就是说信号传递的速度相对较慢。在UART协议中,每个字符都需要起始位和停止位作为字符和开始和结束的标志,另外还有一个校验位,这些辅助设施大约增加了20%的信息位,以至占用了信号传输的时间,所以通信的速度就上不去。

    UART通信过程的探讨,我们先到这里。


    收藏 0 回复 0 浏览 219
  • 讲透有史以来广受欢迎的运算放大器μA741(7)---放大级、输出级及米勒电容

    大家好,我是张飞实战电子张角老师!

    image.png

    我们接着上面文章,继续分析运放的输出级。受限于运放封装的体积,运算放大器的推电流和拉电流都不会太大。那么为了限制电流超过一定的值,uA741内部还专门设计了限流电路,包括推电流限制电路和拉电流限制电路。

    我们先来看推电流限制电路这个功能的实现主要是靠T13这个管子。从电源流经T12R9,然后再到负载(Vo)的电流达到一定程度的时候,R9两端的电压就会达到0.7V。我们来计算一下这个电流值。I = 0.7V/R9 = 0.7V/27R = 25mA。那么也就是说,当流过R9的电流值达到25mA左右的时候,R9两端的电压会达到0.7V。大家看一下,R9这个电阻两端的电压是不是恰好就是T13的基极和射极的端电压,那么也就是说此时T13饱和导通了。T13饱和导通以后,T12Vbe是不是就小于0.7V了,那么T12是不是就关闭了。那么自然流过R9的电流就变小了。R9T13这两个器件在这里扮演的,是不是就是一个负反馈的角色,本质上利用的是N管基极电位和集电极电位相位相反的特性来实现的。

    image.png

    下面我们来看一下,拉电流是如何限流的,这个功能主要是由Q8T15T14这三个器件来实现的。

    当运放输出为低的时候,比如Q6射极电压低于输出电压Vo,那么对于运放来说,电流的流向是从负载流向Q7的。当流经R10的电流达到一定程度的时候,Q8这个管子就会开通了。Q8这个管子开通了之后,T15这个管子就会流过电流了。T14这个管子是镜像T15的,这里是一个镜像电流源,也就是说T15T14的集电极电位是相同的。随着流过T15的电流越来越大,那么T15集电极上的电压也就越来越低。同理,T14集电极上的电压也就越来越低,当T14集电极上的电压降低到一定程度之后,那么T8T9这两个管子就会趋向于关闭状态。这个时候,T9集电极上的电压就会升高了,那么Q6射极上的电压也就提高了,那么流过Q7IbIc都会变小了。这样也就起到了拉电流的保护作用。

    另外,在741内部,当时的研发人员还搞了一个比较牛逼的发明,就是在放大级和输出级之间加上了一个电容,这个电容也称作米勒电容。

    image.png

    因为T8T9组成达林顿管形式,放大倍数会很大。如果每个管子的放大倍数是100倍,那么两个管子联合起来就是10000倍。那么也就是说F点电压微小的变化,都会在T9的集电极产生非常剧烈的电压变化。这个剧烈的dv/dt,其实对运放的稳定性是不利的。为了解决这个稳定性的问题,科学家们尝试了很多办法,最终在uA741这个运放内部形成了一个较为完美的方案,就是加上一个小电容。在这之前,运放内部都是没有电容的。我们下面来看一下,这个电容可以起到什么样的效果。我们假定F点电压是向下降低的,那么T9 C端的电压是不是急剧上升呀;这个急剧上升的电压,会通过弥勒电容给F点充电,对吧。那么F点的电位是不是就不会下降得那么快了。那这样,T9 C点的电压也就不会上升得那么快了,也就是这个地方的dv/dt也就没有那么剧烈了,进而整个运放系统的稳定性也就得到了改善。但是这个改善,肯定是有成本的。对于放大交流信号,大家很容易看出来,运放整体的增益是下降的;信号的频率越高,运放整体的增益也就越低。某种意义上讲,这个电容在这里起到的是一个低通滤波的作用。


    收藏 0 回复 0 浏览 214
  • if和for等基本语句结构

    大家好,我是张飞实战电子张角老师!

    同学们好,我们从今天开始探讨单片机C语言,我们首先从iffor等基本语句结构开始。

    iffor,这两个从本质上来说,是不是C语言的两个关键字呀。那么我们为什么又把它称之为C语言的基本结构的一部分呢。要回答这个问题,我们是不是首先要搞清楚C语言的基本结构是什么?

    实际上,任何结构化编程语言的基本结构都是相同的,也就是三种基本的程序结构:顺序,分支和循环。由这三者最基本的结构,可以搭建出任何我们想实现的程序结构。在狄杰斯特拉(Edsger W. Dijkstra)反复研究面条式代码(spaghetti code),并在1968年给某位编辑写了一篇著名的简信,题为《Go to语句是有害的》之后,计算机科学家Corrado BohmGiuseppe Jacopini证明,使用顺序(sequencing),分支/选择(alternation)和循环(iteration)这三种流程结构就足以表达所有程序的本质。C语言作为结构化编程语言的一种,其程序结构,自然也是由这三种最基本的程序结构组成。

    顺序执行程序,这个很好理解,一条语句接着一条语句执行就可以了。那么C语言的分支和循环是如何实现的呢?

    对于分支,我们常见的关键词是不是有if/elseswitch/case两种组合呀。if/else翻译过来,是不是就是“如果,否则”,是一个条件判断。如果用伪代码的方式来进行表达的话,一般有这两种形式。

    第一种形式如下:

    if(条件为真)

    {

    代码段1

    }

    else

    {

    代码段2

    }

    这里else的含义其实就是条件不为真,那么也就是条件为假。

    image.png

    第二种形式是这样的,

    if(条件1为真)

    {

    代码段1

    }

    else if(条件2为真)

    {

    代码段2

    }

    else

    {

    代码段3

    }

    image.png

    第一种形式和第二种形式本质上的区别,其实就是第一个是双分支,第二个是多分支。两种不同的分支,我们要根据具体情况去使用。某种意义上多分支模式可以由双分支演变而来,比如我们可以在双分支模式里面的else里嵌套一个双分支结构就可以了。

    if(条件1为真)

    {

    代码段1

    }

    else

    {

    if(条件2为真)

    {

    代码段2

    }

    else

    {

    代码段3

    }

    }

    从这个意义上看,双分支和多分支其实是一回事情,本质上都是分支。分支这个概念,大家应该都是相对容易接受的,任何一件事情总有它的对立面,高对低,胖对瘦,大对小,物质对暗物质等等。分支这个概念应该是反映了事物的一种本源的状态,是描述程序是不可再进行切分的维度,也就是说分支成为了任何程序的三种基本结构之一。

    其实对于多分支的情况,C语言有另外一套关键字组合switch/case,写成伪代码的形式,大概是这样的。


    switch(变量){

    case 常数1

    代码段1

    break

    case 常数2

    代码段2

    break

    case 常数3

    代码段3

    break

     

    。。。

     

    default

    代码段n

    break

    }

    大家注意没,对于switch/case组合来说,它的条件一定要是常量,而且要是整数。这个是不是对判断的条件作出了限制呀。这里的default关键字,是和if/else里面的else对应的,表示意外情况。从表面看,switch/case适用于逻辑条件简单,但是分类较多的情况;if/else适用于判断条件复杂,但是分支较少的情况。但是从另外一个层面看来,switch/case所具备的功能,if/else完成起来,完全没有问题呀。那为什么还要搞出来这一个关键字组合呢?

    我个人的理解是switch/case关键字的执行效率,在某些情况下,要比if/else要高。

    int a = 0;

     switch(a)
     {
     case -1:
        break;
     case -2:
        break;
     case -3:
        break;
     case -4:
        break;
     case 0:
        printf("I am in switch case!n");
        break;
     default:
      break;
     }

     printf("I am between the switch case and if/else if/else!n"); 
     


     if (-1 == a)
     {
     }
     else if (-2 == a)
     {
     }
     else if (-3 == a)
     {
     }
     else if (-4 == a)
     {
     }
     else if (-5 == a)
     {
     }
     else
     {
         printf("I am in if/else if/else!n"); 
     }

    比如对于上面的代码段,对于switch/case关键词对来说,程序是直接跳到case0的情况下的;但是对于if/else而言,程序则是一句一句比较之后才达到了else”这一句,程序执行效率的高低是显而易见的。

    但是我们说,switch/case的程序执行效率可以比较高,并不是没有条件的。从汇编语言的层面来看,switch/case是建立了一张跳转表,因此需要一定的空间才行。这里某种程度上有以空间换时间的意思。

    因此,如果程序可以使用switch/case尽量使用这个,以便提高它的执行效率。其实,我们这样比对一番之后,自己也就轻而易举地牢牢记住了它们,这个可能也就是知其然知其所以然的效果,符合人的记忆规律。

    讲完了分支,我们来看一下循环。循环这个基本结构,在C语言里面,一共有两种实现方式,for循环和while循环,其中while循环还可以分为两种,一种是while循环,一种是do/while循环。我们下面分别看一下,这三种结构的程序表达大概是什么模样。

    for(循环控制变量初始化;循环终止条件;循环控制变量增量){

    循环体;

    }

    for循环的执行步骤是:首先执行循环变量的初始化,然后执行循环终止条件;如果判断条件为假(不符合终止条件),那么就开始执行循环体;然后执行循环控制变量的增量程序,执行完以后,再去判断是不是符合循环终止条件;如何符合条件,那么就退出循环;如果不符合条件,那么就继续执行循环体,并重复执行上述步骤。

    感觉用第二种方式来描述这个循环体的执行过程,更为清晰。第一,先进行循环控制变量初始化;第二,执行循环终止条件,如果判断结果为假,则进入第三步;如果为假则循环终止并退出;第三,执行循环体;第四,执行循环控制变量增量,转入第二步;

    注意,其实for循环括号中的三部分其实都可以省略,如果全部省略了,就变成了一个无限循环的死循环,跳不出来了。无限循环在操作系统中使用的是非常多的,每一个任务都是一个无限循环体,包括main函数也是一个无限循环体。

    下面,我们来看一下while循环的代码格式。

    循环控制变量初始化;

    while(循环终止条件){

    循环体;

    循环控制变量增量;

    }

    while循环的执行步骤可以描述为如下的样子。

    第一在while之前,先执行循环控制变量的初始化;第二,判断循环终止条件是否成立,如果成立那么就跳出循环,如果不成立就进入第三步;第三步,执行循环体;第四步,执行循环控制变量增量,然后进入第二步。

    do/while的代码格式是什么样子呢?

    循环控制变量初始化;

    do{

    循环体;

    循环控制变量增量;

    }while(循环终止条件)

    while循环的执行步骤可以描述为如下的样子。第一,在do(也就是执行)之前,先执行循环控制变量的初始化;第二,先执行一次循环体和循环控制变量的增量;第三步,判断循环终止条件是否成立,如果成立那么就跳出循环,如果不成立就进入第二步;

    我们来看一下呀,whiledo/while主要的区别,一个是先判断再执行,一个是先执行再判断,那么也就是说do/while这个关键字组合中,函数体至少执行一次。但是这并不影响whiledo/while之间的转化呀,同样的功能绝大多数情况下,可以用while也可以使用do/while来实现。那么有没有必须要用do/while的时候呢?答案是有的,在linux编程中,do/while常用的一个方式是do while0)。

    比如,我需要定义一个宏:

     #define SAFE_FREE(p)  do{free(p); p=NULL}  while(0)

    假设这里去掉do{....} while(0),及定义为:

    #define SAFE_FREE(p)  free(p); p=NULL

    那么以下代码:

    If(NULL!=p)

       SAFE_FREE(p)

    else

       .......

    会被展开成如下的有仇

    If(NULL!=p)

       free(p); p=NULL 

    else

       .......

    展开之后,存在两个问题。因为if分支后面有两个语句,会导致else分支没有对应的if,编译失败。即使假设没有else分支,SAFE_FREE中的第二句,无论if测试是否通过,这个都会被执行。那么如何解决上述问题呢?有人说给SAFE_FREE的定义加上{}就可以了,比如如下的样子:

     

     

    #define SAFE_FREE(p)  { free(p); p=NULL; }

     

    代码展开如下:

     

    If(NULL!=p)

        { free(p); p=NULL; }

     else

        .......

     

    这样问题又来了,else 没有对应的if了,编译还是会失败。但是使用了do while0)则可以完美解决上述问题。代码展开如下,

    If(NULL!=p)

       do { free(p); p=NULL; } while(0)

     else

        .......

    所以,do while(0)的使用是为了保证宏定义的使用者能无编译错误的使用宏。

     

    下面我们讨论一下,为什么C语言有了for,还需要while呢?除了上面的do while0)的必要性之外,好像还真得没有确切的其他原因。比如在golang编译其中,就只有for,没有while了;再比如,java的源代码里面,就是有一堆的for(;;),据说可以提高性能。所以更大程度上讲,C语言只是为了,兼容程序员的编码习惯,保留了while这个关键字而已。

    一些更现代的语言还加入了foreachfor in这种专门遍历集合的语法糖,也有pythonruby这种直接抛弃了C语言三段式for,只保留了for in,而把非遍历型的循环统统放到while循环里面的做法。

    我们这次关于程序基本结构的探讨就先到这里。

     

    参考资料: 

     基础学习C语言第四章:三种基本结构 https://zhuanlan.zhihu.com/p/97629275

     Linux - switch/caseif/else if/else的效率比较  

    http://blog.sina.com.cn/s/blog_5acb430f0100ael9.html

      if/elseswitch/case的区别

    https://www.cnblogs.com/anlia/p/11685639.html

      深度理解do{} while(0)  

    https://blog.csdn.net/weibo1230123/article/details/81904498

     


    收藏 0 回复 0 浏览 208
  • 讲透有史以来广受欢迎的运算放大器μA741(3)---电流源

    大家好,我是张飞实战电子张角老师!

    这篇文章,我们来分析一下电源及输入级几个管子的工作状态。

    我们下面来看一下,N管和P管的放大接法(恒流源接法)。大家可以看一下,如果负载阻值不超过一定的值,那么Q2T2就一定是处于放大状态的,这个时候满足Ic = β*Ib这个关系。当负载阻值RL比较大的时候,Vcc/(Rf+RL)能够提供的电流值小于了恒流值,这个时候三极管就会处于饱和状态。那么uA741这个管子里面,从接法上看,T1T2 Q3Q4这四个管子都是放大状态接法,它们具体是工作在什么状态呢?

    image.png

    前面的分析中,我们把IN+IN-都接到了地上,我们假定此时运放输出的电压为零。下面我们来看一下,如果把IN+IN-这两个管脚都接到+5V上,这个时候运放的输出会有什么变化?T1T2这两个管子的工作状态会有什么变化?

    从前面的分析可以看出,Q3Q4这两个管子存在的意义就是引出Ib反馈电流。如果两个输入端的电压都调整成+5V,对于T1T2这两个管子的IcIb之间的比例关系会发生变化么?这个分析就取决于D点电位在这种状态下是如何变化的。这个时候,运放分析起来就相对比较复杂。我们这里采用极限分析法,可以假定一种极端的情况,如果给IN+IN-这两个端口都加上电源电压VCC,这个时候T1T2Ib电流肯定是加大的,因为T1T2IbIc之和是一个定值,所以流经T1T2这两个管子的Ic之和肯定减小。那么T1T2这两个管子肯定往饱和方向移动。那么同样的,Q3Q4也会往饱和方向移动,T1T2VceQ3Q4Vce都在变小,那么这个时候F点的电压也就会上升,这种因为输入电压变化导致的输出电压的变化,我们称之为失调电压。因为T1T2IcIb200倍的放大关系,所以我们认为即使有影响,这个影响也是很小的。那么也就是说T1T2Ic电流之和变化很小,也就是T1T2这两个N管的负载基本不变,那么也就是说T1T2这两个管子一直工作在放大状态。

    实际的工作状态应该是这样的,当T1T2Ib增大的时候,意味着VbdVcd的压差在增大,那么这个时候,T1T2Ic也要增大。问题是我们前面提到过,这两个电流之和是一个定值,等于T3Ic

    所以这里只能Vd的电位增加,那么自然VbdVcd之间的压差变小了。那么也就是说Vd这里是一个浮动的电压,在不同的输入电压下呈现不同的值。

    image.png

    Q3Q4这两个P管,因为它们的放大倍数没有T1T2大(我们假定N管放大倍数是200倍,P管放大倍数是50倍),但是它们Ic电流也是相等的。所以Q3Q4这两个管子这两个管子的Ib电流要大一些,这里主要是增强反馈回路的作用。。

    下面我们来看一下运算uA741这个运算的放大过程。我们说Q3Q4的基极电位是相同的。当Vin+大于Vin-的时候,那么流过T1Q3Ic电流是要大于T2Q4Ic电流的。这个也很好理解,因为Vab大于Vac,而AB回路和AC回路上的是两个相同的PN节。相同的PN节,加上不同的开启电压,那么自然Ib电流是不同的。Ib电流不同,那么自然Ic电流也是不同的。如果Vab大于Vac,那么流过T1Q3IcI1)是要大于流过T2Q4IcI2)的,这两个电流值发生变化,就会导致T5C极电压发生变化,T5C极电压也就能反映IN+IN-之间的压差。那么这样也就可以给中间级(增益级)提供放大信号输出。 

    image.png

    收藏 0 回复 0 浏览 204
×
张角