跳至主要内容

【转】三极管放大原理

一、三极管的电流放大原理

晶体三极管(以下简称三极管)按材料分有两种:锗管和硅管。 而每一种又有NPN和PNP两种结构形式,但使用最多的是硅NPN和PNP两种三极管,两者除了电源极性不同外,其工作原理都是相同的,下面仅介绍NPN硅管的电流放大原理。

图一:晶体三极管(NPN)的结构


图一是NPN管的结构图,它是由2块N型半导体中间夹着一块P型半导体所组成,从图可见发射区与基区之间形成的PN结称为发射结,而集电区与基区形成的 PN结称为集电结,三条引线分别称为发射极e、基极b和集电极。当b点电位高于e点电位零点几伏时,发射结处于正偏状态,而C点电位高于b点电位几伏时,集电结处于反偏状态,集电极电源Ec要高于基极电源Ebo。
         在制造三极管时,有意识地使发射区的多数载流子浓度大于基区的,同时基区做得很薄,而且,要严格控制杂质含量,这样,一旦接通电源后,由于发射结正确,发射区的多数载流子(电子)及基区的多数载流子(控穴)很容易地截越过发射结构互相向反方各扩散,但因前者的浓度基大于后者,所以通过发射结的电流基本上是电子流,这股电子流称为发射极电流Ie。由于基区很薄,加上集电结的反偏,注入基区的电子大部分越过集电结进入集电区而形成集电集电流Ic,只剩下很少(1-10%)的电子在基区的空穴进行复合,被复合掉的基区空穴由基极电源Eb重新补纪念给,从而形成了基极电流Ibo根据电流连续性原理得: Ie=Ib+Ic 这就是说,在基极补充一个很小的Ib,就可以在集电极上得到一个较大的Ic,这就是所谓电流放大作用,Ic与Ib是维持一定的比例关系,即: β1=Ic/Ib 式中:β--称为直流放大倍数, 集电极电流的变化量△Ic与基极电流的变化量△Ib之比为: β= △Ic/△Ib 式中β--称为交流电流放大倍数,由于低频时β1和β的数值相差不大,所以有时为了方便起见,对两者不作严格区分,β值约为几十至一百多。三极管是一种电流放大器件,但在实际使用中常常利用三极管的电流放大作用,通过电阻转变为电压放大作用。

二、晶体三极管的开关特性

      1、静态特性

    晶体三极管由集电结和发射结两个PN结构成。根据两个PN结的偏置极性,三极管有截止、放大、饱和3种工作状态。图3.5(a)和(b)分别给出了一个用NPN型共发射极晶体三极管组成的简单电路及其输出特性曲线。

                       

   
该电路工作特点如下:

    1). 截止状态     uB0,两个PN结均为反偏,iB0,iC0,uCEUCC三极管呈现高阻抗,类似于开关断开。
    2). 放大状态     uB0,发射结正偏,集电结反偏,iC=βiB
    3). 饱和状态   uB0,两个PN结均为正偏,iBIBS(基极临界饱和电流)UCC/βRc ,此时iC=ICS(集电极饱和电流)≈UCC/Rc三极管呈现低阻抗,类似于开关接通

    
在数字逻辑电路中,三极管被作为开关元件工作在饱和与截止两种状态,相当于一个由基极信号控制的无触点开关,其作用对应于触点开关的"闭合"与"断开"

    
图3.6(a)、(b)给出了图3.5 所示电路在三极管截止与饱和状态下的等效电路。

图3.5    晶体三极管电路及其输出特性曲线

                      

      2、动态特性

    晶体三极管在饱和与截止两种状态转换过程中具有的特性称为三极管的动态特性。

    
三极管的开关过程和二极管一样,管子内部也存在着电荷的建立与消失过程。因此,饱和与截止两种状态的转换也需要一定的时间才能完成。
    假如在图3.5(a)所示电路的输入端输入一个理想的矩形波电压,那么,在理想情况下,iCUCE的波形应该如图3.7(a)所示。但实际转换过程中iCUCE的波形如图3.7(b)所示,无论从截止转向导通还是从导通转向截止都存在一个逐渐变化的过程。

图3.6  三极管截止与饱和状态下的等效电路  
    晶体三极管在截止与饱和这两种稳态下的特性称为三极管的静态开关特性。


                        

      1.开通时间

    开通时间:三极管从截止状态到饱和状态所需要的时间称为开通时间
    三极管处于截止状态时,发射结反偏,空间电荷区比较宽。当输入信号ui-U1跳变到+U2由于发射结空间电荷区仍保持在截止时的宽度,故发射区的电子还不能立即穿过发射结到达基区。这时发射区的电子进入空间电荷区,使空间电荷区变窄,然后发射区开始向基区发射电子,晶体管开始导通。这个过程所需要的时间称为延迟时间td
    经过延迟时间td后,发射区不断向基区注入电子,电子在基区积累,并向集电区扩散,形成集电极电流iC随着基区电子浓度的增加,iC不断增大。iC上升到最大值的90%所需要的时间称为上升时间tr

                         开通时间ton =td+tr

    开通时间的长短取决于晶体管的结构和电路工作条件。

      2.关闭时间

    关闭时间:三极管从饱和状态到截止状态所需要的时间称为关闭时间
    进入饱和状态后,集电极收集电子的能力减弱,过剩的电子在基区不断积累起来,称为超量存储电荷,同时集电区靠近边界处也积累起一定的空穴,集电结处于正向偏置
    
当输入电压ui+U2跳变到-U1时,存储电荷不能立即消失,而是在反向电压作用下产生漂移运动而形成反向基流,促使超量存储电荷泄放。在存储电荷完全消失前,集电极电流维持ICS不变,直至存储电荷全部消散,晶体管才开始退出饱和状态,iC开始下降。这个过程所需要的时间称为存储时间ts
    基区存储的多余电荷全部消失后,基区中的电子在反向电压作用下越来越少,集电极电流iC也不断减小,并逐渐接近于零。集电极电流由0.9ICS降至0.1ICS所需的时间称为下降时间tf

                    关闭时间toff=ts+tf

    同样,关闭时间的长短取决于三极管的结构和运用情况
    
开通时间ton和关闭时间toff的大小反映了三极管由截止到饱和与从饱和到截止的开关速度,它们是影响电路工作速度的主要因素。

三极管放大原理(形象)

对三极管放大作用的理解,切记一点:能量不会无缘无故的产生,所以,三极管一定不会产生能量,。

但三极管厉害的地方在于:它可以通过小电流控制大电流

放大的原理就在于:通过小的交流输入,控制大的静态直流。

假设三极管是个大坝,这个大坝奇怪的地方是,有两个阀门,一个大阀门,一个小阀门。小阀门可以用人力打开,大阀门很重,人力是打不开的,只能通过小阀门的水力打开。

所以,平常的工作流程便是,每当放水的时候,人们就打开小阀门,很小的水流涓涓流出,这涓涓细流冲击大阀门的开关,大阀门随之打开,汹涌的江水滔滔流下。

如果不停地改变小阀门开启的大小,那么大阀门也相应地不停改变,假若能严格地按比例改变,那么,完美的控制就完成了。

在这里,Ube就是小水流,Uce就是大水流,人就是输入信号。当然,如果把水流比为电流的话,会更确切,因为三极管毕竟是一个电流控制元件。

如果某一天,天气很旱,江水没有了,也就是大的水流那边是空的。管理员这时候打开了小阀门,尽管小阀门还是一如既往地冲击大阀门,并使之开启,但因为没有水流的存在,所以,并没有水流出来。这就是三极管中的截止区。

饱和区是一样的,因为此时江水达到了很大很大的程度,管理员开的阀门大小已经没用了。如果不开阀门江水就自己冲开了,这就是二极管的击穿。

在模拟电路中,一般阀门是半开的,通过控制其开启大小来决定输出水流的大小。没有信号的时候,水流也会流,所以,不工作的时候,也会有功耗。

而在数字电路中,阀门则处于开或是关两个状态。当不工作的时候,阀门是完全关闭的,没有功耗。

评论

此博客中的热门博文

【转】VxWorks中的地址映射

在运用嵌入式系统VxWorks和MPC860进行通信系统设计开发时,会遇到一个映射地址不能访问的问题。 缺省情况下,VxWorks系统已经进行了如下地址的映射:   memory地址、bcsr(Board Control and Status)地址、PC_BASE_ADRS(PCMCIA)地址、Internal Memory地址、rom(Flach memory)地址等,但是当你的硬件开发中要加上别的外设时,如(falsh、dsp、FPGA等),对这些外设的访问也是通过地址形式进行读写,如果你没有加相应的地址映射,那么是无法访问这些外设的。   和VxWorks缺省地址映射类似,你也可以进行相应的地址映射。   如下是地址映射原理及实现:   1、 地址映射结构 在Tornado\target\h\vmLib.h文件中 typedef struct phys_mem_desc { void *virtualAddr; void *physicalAddr; UINT len; UINT initialStateMask; /* mask parameter to vmStateSet */ UINT initialState; /* state parameter to vmStateSet */ } PHYS_MEM_DESC; virtualAddr:你要映射的虚拟地址 physicalAddr:硬件设计时定义的实际物理地址 len;要进行映射的地址长度 initialStateMask:可以初始化的地址状态: 有如下状态: #define VM_STATE_MASK_VALID 0x03 #define VM_STATE_MASK_WRITABLE 0x0c #define VM_STATE_MASK_CACHEABLE 0x30 #define VM_STATE_MASK_MEM_COHERENCY 0x40 #define VM_STATE_MASK_GUARDED 0x80 不同的CPU芯片类型还有其特殊状态 initialState:实际初始化的地址状态: 有如下状态: #define VM_STATE_VALID 0x01 #define VM_STATE_VALID_NOT 0x00 #define VM_STATE_WRITA

【转】cs8900网卡的移植至基于linux2.6内核的s3c2410平台

cs8900网卡的移植至基于linux2.6内核的s3c2410平台(转) 2008-03-11 20:58 硬件环境:SBC-2410X开发板(CPU:S3C2410X) 内核版本:2.6.11.1 运行环境:Debian2.6.8 交叉编译环境:gcc-3.3.4-glibc-2.3.3 第一部分 网卡CS8900A驱动程序的移植 一、从网上将Linux内核源代码下载到本机上,并将其解压: #tar jxf linux-2.6.11.1.tar.bz2 二、打开内核顶层目录中的Makefile文件,这个文件中需要修改的内容包括以下两个方面。 (1)指定目标平台。 移植前:         ARCH?= $(SUBARCH) 移植后: ARCH            :=arm (2)指定交叉编译器。 移植前: CROSS_COMPILE ?= 移植后: CROSS_COMPILE   :=/opt/crosstool/arm-s3c2410-linux-gnu/gcc-3.3.4-glibc-2.3.3/bin/arm-s3c2410-linux-gnu- 注:这里假设编译器就放在本机的那个目录下。 三、添加驱动程序源代码,这涉及到以下几个方面。(1)、从网上下载了cs8900.c和cs8900.h两个针对2.6.7的内核的驱动程序源代码,将其放在drivers/net/arm/目录下面。 #cp cs8900.c ./drivers/net/arm/ #cp cs8900.h ./drivers/net/arm/ 并在cs8900_probe()函数中,memset (&priv,0,sizeof (cs8900_t));函数之后添加如下两条语句: __raw_writel(0x2211d110,S3C2410_BWSCON); __raw_writel(0x1f7c,S3C2410_BANKCON3); 注:其原因在"第二部分"解释。 (2)、修改drivers/net/arm/目录下的Kconfig文件,在最后添加如下内容: Config ARM_CS8900    tristate "CS8900 support" depends on NET_ETHERNET && A

【转】多迷人Gtkmm啊

前边已经说过用glade设计界面然后动态装载,接下来再来看看怎么改变程序的皮肤(主题)     首先从 http://art.gnome.org/themes/gtk2 下载喜欢的主题,从压缩包里提取gtk-2.0文件夹让它和我们下边代码生成的可执行文件放在同一个目录下,这里我下载的的 http://art.gnome.org/download/themes/gtk2/1317/GTK2-CillopMidnite.tar.gz     然后用glade设计界面,命名为main.glade,一会让它和我们下边代码生成的可执行程序放在同一个目录下边     然后开始写代码如下: //main.cc #include <gtkmm.h> #include <libglademm/xml.h> int main(int argc, char *argv[]) {     Gtk::Main kit(argc,argv);         Gtk::Window *pWnd;        gtk_rc_parse("E:\\theme-viewer\\themes\\gtk-2.0\\gtkrc");       Glib::RefPtr<Gnome::Glade::Xml> refXml;     try     {         refXml = Gnome::Glade::Xml::create("main.glade");     }     catch(const Gnome::Glade::XmlError& ex)     {         Gtk::MessageDialog dialog("Load glade file failed!", false,       \                                   Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK);         dialog.run();               return 1;     }         refXml->get_widget("main", pWnd);     if(pW