1、 河南大学物理与电子学院本科毕业论文目 录摘 要:10 前言21 MATLAB GUI 设计基础31.1 知识点归纳31.2 二维绘图简介71.3 句柄图形系统81.4 预定义对话框122 双极型晶体管132.1 双极型晶体管的结构132.2 双极型晶体管的直流电流电压关系142.3 双极型晶体管共发射极电路153 MATLAB代码和运行结果163.1 代码163.2 运行结果224 结论24参考文献2523利用MATLAB GUI 实现共发射级输入输出特性曲线 摘 要: 本文介绍了利用Matlab GUI 相关的内容来实现三极管共发射极的输入输出特性曲线,Matlab是主要面对科学计算、可视
2、化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,因此利用Matlab强大的计算功能来去分析三极管的特性,较为直观的研究数据是很有意义的。关键词: 三极管,Matlab GUI 共发射极By using MATLAB GUI implementation level of input and output characteristic curve Abstract: This article introduce
3、s the Matlab GUI related to the content of the triode common emitter of the input and output characteristic curve, Matlab is mainly in the face of scientific calculation, visualization and interactive program design of the high-tech computing environment. It will numerical analysis, matrix calculati
4、on, scientific data visualization and nonlinear dynamic system of modeling and simulation, and many other strong function integration in an easy to use Windows environment, for scientific research, engineering design, and must have effective numerical calculation many fields of science provides a co
5、mprehensive solution, thus using the powerful calculation function of Matlab to analyze characteristics of the triode, more intuitive research data, it is very meaningful.Key words: Triode, Matlab GUI common emitter0 前言为了能够更好的适应社会多方面的发展,在未来的的设计领域内,作为可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言等如此强大功能的Matla
6、b掌握一些它的应用还是很有必要的。本文以三极管共发射极的输入输出特性来研究Matlab如何实现数据图像的创建。达到掌握matlab的目的。本文的第一章主要介绍了Matlab GUI的预备知识,Matlab的基本程序元素、本文GUI设计中使用到的数据类型和矩阵操作函数,以及程序设计的句型,思路等等。第二章主要介绍的三极管的共发射极电路,以及共发射极电路的特点,输入特性曲线和输出特性曲线。第三章是本次设计的编程代码,以及最后实现的图形。第四章是结论。1 MATLAB GUI 设计基础本章内容:知识点归纳基本程序元素 数据类型二维绘图简介 绘图工具 绘图注释句柄图形系统预定义对话框1.1 知识点归纳
7、2.1.1 基本程序元素1 变量程序中,为了方便操作内存中的值,需要给内存中的值设定一个标签,这个标签称之为变量。变量不需要事先声明,matlab遇到新的变量名是,会自动建立变量并分配内存。给变量赋值时,如果变量不存在,会创建它;如果变量存在,会更新它的值。变量名命名规则如下:始于字母、数字或者下划线组成。区分大小写。可任意长,但是仅使用前N个字符。N与硬件有关,由函数namelengthmax返回,一般N=63.不能使用关键字作为变量名。避免使用函数名作为变量名。如果变量采用函数名,该函数失效。例如在命令行键入:clear=3;clearclear=3Clear函数失效,不能清除基本工作空间
8、里的变量。与变量有关的函数见表2.1 表1.1 与变量有关的函数函数名函数说明Clear移除工作空间里的数据项,释放内存Clearvars从内存中清除变量Ans当没有指定输出变量时,临时存储最近的答案Namelengthmax返回最大的标识符长度Clear移除工作空间的变量,而clc则是清空命令窗口的输出基本工作区间:MATLAB将变量存储在一块内存区域中。函数不使用基本工作区间,每个函数都有自己的函数空间。在函数空间生成的变量,只在函数空间有效,在基本工作空间生成的只在基本工作区间有效。变量有以下3中基本类型: 局部变量。每个函数都有自己的局部变量,这些变量只能在定义它的函数内部使用。 全局
9、变量。 永久变量特殊值一些函数返回重要的特殊值,这个值可以在M文件中使用,见表1.2:。 表1.2 特殊值函数 函数说明Eps浮点数相对精度;MATLAB计算时的容许误差Pi3.1415926535897NaN非数,无效数值。比如:0/02 关键字MATLAB为程序语言保留的一些字,变量名不能为关键字。如:break,if ,end,try等。1.1.2 数据类型MATLAB有17种基本的数据类型,每种类型的数据都是以矩阵或数组的形式存在。1 数值型数字型数据包括无符号和有符号整数、单精度和双精度浮点数,matlab默认将所有数值存为双精度浮点数。 整数整数类型共有8种:4中带符号整数和4种无
10、符号整数。如单精度8位整数的表示函数为:int8 值的范围为-2727-1整数或者整数数组与标量double型浮点数。运算结果的数据类型与整数操作数的一样。 浮点数浮点数有单精度和双精度两种格式,默认是double格式。两种格式之间可以强制转换。Double型数据共有64位。Single型数据共有32位。1.1.3 单元数组1 单元数组单元数组是一种特殊数组,所谓单元数组,是在一个数组中包含多个单元(cell),每个单元作为一个独立的存储单元存储数据,如图1.3所示。图1.3 单元数组示意图Cell1,1数字数组Cell1,2字符数组Cell1,3逻辑数组Cell2,1向量Cell2,2结构数
11、组Cell2,3单元数组创建单元数组的方法:使用cell函数初始化单元数组。Cell的调用格式为:见表1.4表1.4 关于cell的函数调用格式 格式说明C=cell(n)创建一个nn的各单元为空矩阵的单元数组C=cell(m,n)创建一个mn的各单元为空矩阵的单元数组2 cell2matcell2mat函数的调用格式为:m= cell2mat(C)将单元数组c转化为单个矩阵m。要求单元数组c的每个单元列数必须相等。1.1.4 程序设计1函数参数 调用函数时,经常会有一些数据传递给被调用的函数,这些数据被称为输入参数;函数结束时返回给调用的函数的数据,称为输出参数。Function用来定义M文
12、件。M文件有两种类型:脚本和函数。脚本,是包含一系列MATLAB语句的简单文件。它不能接受输入参数,输出结果显示在命令窗口,变量保存在基本工作空间。而函数使用自己的局部变量,临时建立自己的函数空间,接受输入参数,也能返回输出参数。注意: 函数名必须由数字、字母、或者下划线组成,以字母开头。 函数文件的文件名必须与函数名一致。例如,函数fun1.m,开头的定义应该为:function varargout = fun1(varargin)。2函数句柄:函数句柄是一种特殊的数据类型,它提供了间接调用函数的方法,类似于C语言中的指针,只不过这里指向一下函数而已。函数句柄包含了函数的路径、函数名、类型以
13、及可能存在的重载方法,必须通过专门的定义创建,而一般的函数句柄是自动创建的。创建函数句柄使用或者str2func命令。采用符号创建函数句柄,是在函数名前加一个“”标志,并且不能附加函数的路径,即函数句柄=函数名。3常用的两种语句(1)for语句for语句用于循环次数确定的循环。调用格式为: for index=start:step:end statements end增量step的默认值为1。(2)switch语句Switch语句根据表达式的值执行相应的代码。常用的调用格式为:Switch expression Case val1 Statements1 Case val2 Statement
14、s2 End表达式的值必须为一个数值、字符和字符串。1.2 二维绘图简介本节内容绘图工具zoom绘图注释legend text xlabel和ylabel1.2.1 绘图工具绘图缩放绘图缩放使用zoom函数,缩放时鼠标为形状。其调用格式如下:zoom on 打开内部绘图缩放工具。单击左键或框选区域时放大,双击左键恢复原始大小。zoom xon:只打开x轴方向上的缩放。zoom yon:只打开y轴方向上的缩放。1.2.2 绘图注释1 legendlegend函数用于创建图例,调用格式为:legend(string1,string2,)legend(hide):隐藏当前图形中的图例。legend(
15、show):显示当前图形中的图例。2. Tex字符Tex字符 的Tex字符是:mu。另外Tex字符还可以设置字体、颜色和位置。a) bf:设置字体为粗字体。b) fortsize字体大小:设置字体大小。c) color颜色字符串:颜色名有:red、green、blue等3xlabel和ylabelxlabel、ylabel用于为x轴和y轴设定标签,调用格式为:xlabel(string)或者 ylabel(string)2.2.3 单击此处输入该标题单击此处输入内容1.3 句柄图形系统本节内容:句型图形系统句柄图形对象的层次结构根对象图形窗口对象坐标轴对象核心图形对象 line对象 text对
16、象uicontrol对象hggroup对象1.3.1 句柄图形对象句柄图形对象的层次结构在MATLAB中,由图形命令产生的每一个对象都是图形对象,图形对象是一幅图形很独特的成分,可以被单独操作。 图形对象是相互依赖的。通常,图形包括很多对象,他们组合在一起,形成有意义的图形。图形对象按父对象和子对象组成层次结构,如图1.41 图1.4 图形对象的层次结构句柄:创建对象时,MATLAB会返回一个用于标识此对象的数值,称为该对象的句柄。每个对象都有独一无二的句柄,通过操作句柄,可以查看对象的属性和修改大部分属性。1.3.2 根对象图形对象的根对象相当于计算机屏幕,是figure对象的父对象。根对象
17、独一无二,句柄值为0,父类为空,主要用于存储关于matlab状态、计算机系统和MATLAB默认值的信息。根对象不需要用户创建,当启动MATLAB时它就存在了。查看根的属性可使用语句get(0)。限于篇幅,此处不再列出。 1.3.3 图形窗口对象 图像窗口对象也称为figure对象,是MATLAB显示图形的窗口,可以看做GUI对象的“容器”。 创建图形窗口对象使用figure函数,常用的格式如下: figure(Propertyname,Propertyvalue,) 采用指定的属性值,创建一个图形窗口对象,任何未指的属性均为默认值。figure的部分属性见表格1.5 表1.5 figure的部
18、分属性属性属性描述有效属性值MenuBar使用或禁用菜单栏figure、noneNumberTitle图形标题中是否显示编号on、offPosition图形窗口的位置和大小四维位置向量,格式左,底,宽,高Toolbar指定工具栏是否显示none、auto、figure UIContextMenu图形窗口的右键菜单右键菜单句柄Visible设定图形窗口是否可见on、offmovegui函数:调用格式为:movegui(position)position有center、south等。1.3.4 坐标轴对象坐标轴对象也称为axes对象,由axes函数创建,调用格式如下:h=axes(Property
19、name,Propertyvalue,)采用指定的属性值,创建一个图形窗口对象,任何未指的属性均为默认值。Axes的部分属性见表1.6表1.6 axes对象的主要属性属性属性描述有效属性值Parent父对象的句柄,为figurefigure句柄Position绘图区域的位置和大小四维位置向量,格式左,底,宽,高UIContextMenu坐标轴对象的右键菜单右键菜单句柄Visible设定坐标轴是否可见on、offXLim,YLim,ZLim设定坐标轴的坐标范围二维向量,格式为minimum,maximum1.3.5 核心图形对象1line对象创建line(线条)对象采用line函数,调用格式为:
20、line(x,y)x和y若为向量,则增加由数据x和y定义的line到当前坐标轴。h=line(x,y,属性一,属性值一,)采用指定的属性值创建一个line对象,并返回line对象的句柄,任何未指的属性均为默认值。line对象的部分属性值见表1.7表1.7 line对象的部分属性属性属性描述有效属性值Color设定线条颜色颜色字符串或者三维RGB向量LineStyle指定线型-、-、:、noneParent父对象的句柄axes、hggroup等Visible设定line对象是否可见on、off2text对象创建text对象采用text函数,调用格式为text(x,y,string)例如:text
21、(0.5,0.5,sin(pi)1.3.6 uicontrol对象uicontrol对象是用户接口控制图形对象的简称,由函数uicontrol创建,调用格式为:h= uicontrol(Propertyname,Propertyvalue,)采用指定的属性值,在对象parent内创建一个uicontrol对象,并返回uicontrol的句柄,任何未指的属性均为默认值。Uicontrol对象的类型(style)不同,其外观和回调方式也不同,触控按钮(push Button,Style为pushbutton)当鼠标在触控按钮上单击时,调用其callback函数 切换按钮(Toggle Button
22、,Style为togglebutton)当鼠标再切换按钮上单击左键时,调用其callback函数;没执行一次callback函数,切换按钮的value值和状态均改变一次。1.3.7 hggroup对象h=hggroup(,Propertyname,Propertyvalue,)采用指定的属性和值创建一个组对象,并返回它的句柄。hggroup对象可以由除了light对象以外的任意核心对象组合而成,hggroup将多个核心对象“捆绑”在一起,便于用户同时对多个核心对象进行操纵和控制。hggroup对象与其子对象在下面3种情况下始终保持一致:可见性设置hggroup对象的可见性时,其子对象的可见性也
23、会自动更新,保持与组对象一致。可选择性设置hggroup对象的HitTest属性值为on,而其每个子对象的HitTest属性值为off,则当选择任何子对象时,均会选中所有的子对象。当前对象设置hggroup对象的HitTest属性值为on,而其每个子对象的HitTest属性值为off,则当选择任何子对象时,hggroup对象都会成为当前对象。Annotation,DisplayNameAnnotation控制hggroup对象的插图显示;Display设置hggroup对象在插图说明中的标签。Annotation属性值为hg. Annotation对象的句柄,hg. Annotation对象有
24、一个LegendInformation属性,它的属性值为hg.LegendEntry对象的句柄。hg.LegendEntry对象有一个IconDisplayStyle属性,该属性的值控制对象的插图显示方式。Annotation控制hggroup对象的插图显示流程如图1.81所示: 图1.8 Annotation控制hggroup对象的插图IconDisplayStyle属性有以下3种取值。on:只绘制hggroup对象的插图说明。off:默认值,不绘制hggroup对象的插图说明。children:只绘制子对象的插图说明。1.4 预定义对话框1.4.1 questdlg创建一个提问对话框。格式
25、为:Button=questdlg(q_str,str1,str2,str3,default)创建一个标题为title,问题字符串为q_str,按钮名分别为str1、str2和str3的提问对话框,返回用户选择的按钮名。若直接回车,返回按钮名default,default的有效值为str1、str2或str3。2 双极型晶体管2.1 双极型晶体管的结构2.1.1 晶体管的结构和类型根据不同的掺杂方式在同一个硅片上制造出三个掺杂区域,并形成两个PN结,就构成了晶体管。图2.13所示为NPN型管的结构示意图,发射区与基区的PN结称为发射结,基区与集电区间的PN结称为集电结。旁边是NPN管和PNP型
26、管的符号。图2.1 NPN管的结构示意图和晶体管的符号2.1.2 晶体管的电流放大作用 晶体管的最主要的作用就是具有放大电信号的作用,通过研究载流子的传输和各级电流的形成我们知道2 图2.2 晶体管内部载流子运动与外部电流发射极发射电子,电子穿越发射结进入基区发射区向基区注入电子;电子穿越基区基区传输电子;电子穿越集电结,被集电极收集集电极收集电子此外。因为集电结反向偏置,所以集电区的少数载流子(空穴)和基区中的少数载流子(电子)在外电场的作用下还将进行漂移运动。2.2 双极型晶体管的直流电流电压关系根据以上的分析和资料我们可以得到各级电流与电压的关系2:其中A是发射极面积,q是电子电荷,是发
27、射极空穴的扩散系数,是集电极空穴的扩散系数。是发射极空穴的扩散长度,是集电区空穴的扩散长度。是发射区少子的掺杂浓度,为基区多子的掺杂浓度,为集电区少子的掺杂浓度。为基区宽度,基区少子的寿命。是发射结两端电压,为集电结两端电压。 以上各式就是晶体管的电流电压关系,是均匀基区晶体管电流电压基本方程。他们描述了晶体管的各个电流与外加偏压、晶体管的结构参数、工艺参数和制作晶体管的材料参数之间的关系。2.3 双极型晶体管共发射极电路图2.33为了测量晶体管共发射极直流特性曲线的原理图。为基极与发射极间的电压降,为集电极与发射极间电压降,为基极串联电阻。 图2.3 测量共发射极直流特性曲线原理图1. 共发
28、射极直流输入特性曲线 在不同的下,改变,测量,可得一族关系曲线,这族曲线称为共发射极直流输入特性曲线。如图2.4(a)3 2.4(a)输入特性曲线2. 共发射极直流输出特性曲线固定不同的,改变,测量,可以得出一族曲线,这组曲线称为共发射极直流输出特性曲线如图2.4(b)3 图2.4(b)输出特性曲线 3 MATLAB代码和运行结果3.1 代码设计思路由于输入特性曲线是在不同的下生成的,而输出特性曲线也是在不同下生成的,故只要画出输出的一条和输入的其中一条其他曲线可通过调用函数来实现。3.2.1 主程序代码hFigure = figure(menubar, none, NumberTitle,
29、off, . position, 400 200 600 650, . name, 晶体管输入特性曲线,. visible,off,. CloseRequestFcn,closeQuest);movegui(hFigure,center);hAxes = axes(parent, hFigure, . position, 0.2 0.3 0.6 0.6,. xlim,0 1.5,ylim,0 1);xlabel(Ube/V);ylabel(Ib/uA);Ue=0:.01:0.8;Ib1=huitu(1);Ib2=huitu(10);Ib3=huitu(20);hg1=hggroup(Paren
30、t,hAxes);h1=line(Ue,Ib1,color,r,Parent,hg1,. displayname,Uce=1V);h2=line(Ue,Ib2,color,b,Parent,hg1,. displayname,Uce=10V,. linestyle,-);h3=line(Ue,Ib3,color,g,Parent,hg1,. displayname,Uce=20V,. linestyle,:);set(get(get(hg1,Annotation),legendinformation),. iconDisplaystyle,children);legend(show);set(
31、0, DefaultUicontrolBackgroundColor, get(hFigure, color);set(0, DefaultUicontrolFontsize, 12) ;h=uicontextmenu;set(gca,uicontextmenu,h);uimenu(h,label,zoom xon,callback,. set(h,visible,on);,. zoom xon);uimenu(h,label,zoom yon,callback,. set(h,visible,on);,. zoom yon);UCE=0:0.1:8;Ic1=shu(0.7442);Ic2=s
32、hu(0.7618);Ic3=shu(0.7722);Ic4=shu(0.7794);Ic5=shu(0.7854);Ic6=shu(0.79);Ic7=shu(0.7942);Ic8=shu(0.7974);Ic9=shu(0.8);hg2=hggroup(Parent,hAxes);h4=line(UCE,Ic1,Parent,hg2);h5=line(UCE,Ic2,Parent,hg2);h6=line(UCE,Ic3,Parent,hg2);h7=line(UCE,Ic4,Parent,hg2);h8=line(UCE,Ic5,Parent,hg2);h9=line(UCE,Ic6,
33、Parent,hg2);h10=line(UCE,Ic7,Parent,hg2);h11=line(UCE,Ic8,Parent,hg2);h12=line(UCE,Ic9,Parent,hg2);set(hg2,visible,off);covert_Callback=set(hg1,visible,off);,. set(hg2,visible,on);,. set(hAxes,xlim,0 8,ylim,0 0.6);,. xlabel(Uce/V);,. ylabel(Ic/mA);,. set(hFigure,name,晶体管输出特性曲线);. legend(hide);,. tex
34、t(6.5,0.072,colorred10fontsize12colorredmuA);,. text(6.5,0.135,colorred20fontsize12colorredmuA);,. text(6.5,0.19,colorred30fontsize12colorredmuA);,. text(6.5,0.25,colorred40fontsize12colorredmuA);,. text(6.5,0.312,colorred50fontsize12colorredmuA);,. text(6.5,0.375,colorred60fontsize12colorredmuA);,.
35、 text(6.5,0.43,colorred70fontsize12colorredmuA);,. text(6.5,0.485,colorred80fontsize12colorredmuA);,. text(6.5,0.542,colorredIB=88fontsize12colorredmuA);convert=uicontrol(parent,hFigure,. units,points,. tag,btnStop,. style,pushbutton,. string,切换,. position,150 50 50 20,. callback,covert_Callback);bt
36、nStop = uicontrol(parent,hFigure,. units,points,. tag,btnStop,. style,pushbutton,. string,停止,. position,250 50 50 20,. callback,zoom off);set(hFigure,visible,on);3.2.2 shu.m函数function Ic=shu(Ue)A=1.0e-4;q=1.602e-19;T=300;K=1.38e-23;Wb=2.5e-4;Pb=1.5e16;Nc=1.5e15;Ne=1.0e18;ni=1.0e10;Tnb=1.0e-6;Tne=1.0
37、e-7;Tnc=1.0e-6;Es=11.8;E0=8.85e-14;Pc=ni2/Nc;Nb=ni2/Pb;Ud1=K*T*log(Pb*Ne/(ni2)/q;Ud2=K*T*log(Pb*Nc/(ni2)/q;Un=1500;Up=600;Dpe=Up*K*T/q;Dpc=Dpe;Dnb=Un*K*T/q;Lpc=sqrt(Dpc*Tnc);Uce=0.2:0.1:8.2;d1=sqrt(2*Es*E0*(Ne+Pb)*(Ud1-Ue)/(q*Ne*Pb);d2=sqrt(2*Es*E0*(Nc+Pb)*(Ud2-(Ue-Uce)/(q*Nc*Pb);x1=Ne*d1/(Ne+Pb);x2
38、=Nc*d2/(Nc+Pb);Wb1=Wb-x1-x2;b1=cell(1,81);b2=cell(1,81);for i=1:81b1(i)=(A*q*Dnb*Nb/Wb1(i)-(q*A*Wb1(i)*Nb*0.5/Tnb)*(exp(q*Ue/(K*T)-1);b2(i)=(A*q*Dpc*Pc/Lpc)+(A*q*Dnb*Nb/Wb1(i)*(exp(q*(Ue-Uce(i)/(K*T)-1);endb3=cell2mat(b1);b4=cell2mat(b2);b5=cell(1,81);for j=1:81b5(j)=(b3(j)-b4(j);endb7=cell2mat(b5);
39、b6=cell(1,81);b6(1)=0;for n=2:81b6(n)=b7(n);endIc=cell2mat(b6);end3.2.3 huitu.m函数function Ib=huitu(Uce)A=1.0e-4;q=1.602e-19;T=300;K=1.38e-23;Wb=2.5e-4;Pb=1.5e16;Nc=1.5e15;Ne=1.0e18;ni=1.0e10;%Tnb=1.0e-6;Tne=1.0e-7;Tnc=1.0e-6;Es=11.8;E0=8.85e-14;Pc=ni2/Nc;Nb=ni2/Pb;Pe=ni2/Ne;Ud1=K*T*log(Pb*Ne/(ni2)/q
40、;Ud2=K*T*log(Pb*Nc/(ni2)/q;Un=1500;Up=600;Dpe=Up*K*T/q;Dpc=Dpe;Dnb=Un*K*T/q;Lpc=sqrt(Dpc*Tnc);Lpe=sqrt(Dpe*Tne);Ue=0:0.01:0.8;d1=sqrt(2*Es*E0*(Ne+Pb)*(Ud1-Ue)/(q*Ne*Pb);d2=sqrt(2*Es*E0*(Nc+Pb)*(Ud2-(Ue-Uce)/(q*Nc*Pb);x1=Ne*d1/(Ne+Pb);x2=Nc*d2/(Nc+Pb);Wb1=Wb-x1-x2;a1=cell(1,81);a2=cell(1,81);for i=1:
41、81a1(i)=(A*q*Dpe*Pe/Lpe)+(q*A*Wb1(i)*Nb/(2*Tnb)*(exp(q*Ue(i)/(K*T)-1);a2(i)=(A*q*Dpc*Pc/Lpc)+(A*q*Dnb*Nb/Wb1(i)*(exp(q*(Ue(i)-Uce)/(K*T)-1);enda3=cell2mat(a1);a4=cell2mat(a2);a5=cell(1,81);for j=1:81a5(j)=(a3(j)-a4(j)*105;endIb=cell2mat(a5);End3.2.4 closeQuest.m函数function closeQuest(hObject,)sel=questdlg(确认关闭当前窗口?,关闭确认,Yes,No,No);switch sel caseYes delete(hObject); caseNo return;end3.2 运行结果运行结果如下图: 图3.1 共发射极输入特性曲线 图3.2 放大后的共发射极输入特性曲线 图3.3 共发射极输出特性曲线