Proteus仿真之继电器驱动电灯泡

 

Proteus仿真之继电器驱动电灯泡

——Seaman(SJTU 2012-1-2)

1.   继电器简述

继电器(如图1所示)是一种电控制器件,具有控制系统(输入回路)和被控制系统(输出回路)之间的互动关系,实际上就是用小电流控制大电流运作的一种“自动开关”,在电路中起着自动调节、安全保护、电路转换等作用。

当流入继电器的电流乘以继电器的标称电阻达到其标称电压时,继电器就在磁场作用下将原先悬置的开关拉到另一个开关处,即由“常开触点”到“常闭触点”。

图 1 Proteus中继电器形状

2.   Proteus硬件电路设计

Proteus中,继电器驱动电灯泡的电路如图2所示。这里,采用at89C51来提供微小电流,控制电灯泡的开关。

图 2 继电器控制电灯泡之硬件电路图

图2中,芯片AT89C51左边电路为其复位和晶振电路,同时将 引脚接高(51单片机在使用外部存储器时,此引脚接低,直接接地即可;否则接高)。除有特殊说明,默认接高即为+5V。图中所有的电流表和电压表在实际应用中皆可不接,只为测试用。

         电路中,因为单片机输出口的电流很小,无法驱动继电器,所以在继电器输入端应该接一个PNP三极管,用来放大电流,驱动继电器工作。而为了保护此三极管的正常工作,还应在三极管的输出端(集电极)加上一个二极管用来保护三极管不被过流击穿,此二极管在实际应用中非常重要。继电器的电路设计如图3所示。

图 3 继电器的电路设计

3.   C51软件设计

本文只为了说明问题,所以软件部分没有任何复杂性与难度,只是将输出的对应脚置低,程序如下所示。

#include

sbit led1 = P2^4;

#define uchar unsigned char

#define uint unsigned int

void main()

{

         while(1)

         {

                   led1 = 0;

         }

}

 

4.   实验结果

运行之后,如图4所示,灯泡L1和L2将被点亮,但是两者的颜色却并不一样。这是因为,对于一定功率(额定电压和额定电阻)的灯泡,驱动灯泡发光的电流大小将直接决定其亮暗程度,这个很好理解。

图 4 实验结果

将右边部分放大(图5所示),可以看到,流过三极管Q1基极的电流为-0.44mA,流过Q1集电极的电流为9.82mA。因为Q1由发射极流进电流,一部分流向基极,另一部分流向集电极,所以按照图中接法,基极处电压为负。

图 5 放大后的示数值

由于Q1的放大倍数β=100,但是0.44×100=44,显然超过9.82。这是为什么呢?秘密在于继电器RL1中。打开RL1属性,我们可以发现RL1的标称电压为5V,标称电阻为500Ω,这就是说流进继电器的电流要达到(或接近[1])0.01A即10mA,才能驱动继电器工作。而电路中,Q1的导通电压约为0.3V,即集电极的电压约为4.7V,而此时有电阻500Ω,所以流出的电流为4.7/500=9.4mA≈9.82mA,而继电器在此工作电流下亦能正常工作。

这里,可以改变继电器的阻值来观察其效果。改变继电器的线圈阻值为100Ω,则流出Q1集电极的电流为47.6mA,近100倍放大基极电流,同时灯泡点亮。

但是,工作后,继电器两端为什么还会有0.91V的电压呢?这是一个很值得探讨的问题。仔细思考下,我们就可以知道,那是因为此时的继电器仍然存在一定的内阻,而且值为0.91/9.13≈0.1Ω。可是这个值在继电器中又是如何设置的?

继电器在proteus中是一个模型,其电气行为由一个叫MODFILE(LISA Model File)的文件定义的,而ACTVRLY就是继电器的MODFILE。RLY为relay,即继电器;ACTV为active,所有诸如继电器这样在仿真的时候能用动画来改变自身状态的模型都为ACTIVE模型,像发光二极管、数码管等。打开proteus安装目录\MODELS,找到ACTIVE.LML的文件,将其后缀名改为.txt后,用写字板就可以打开。搜索relay,可以找到如下一段文字。

*PROPERTIES,5   

RCOIL=100

RCONTACT=0.1

ROFF=100M

VOFF=0.5*

VON=0.8*

 

*MODELDEFS,0   

 

*PARTLIST,6    

AVS1,AVS,"ABS(V(A,B))",PRIMITIVE=ANALOGUE

R1,RESISTOR,,PRIMITIVE=ANALOG

S1,VSWITCH,VSWITCH,PRIMITIVE=ANALOGUE,ROFF=,RON=,VH=(-)/2,VT=(+)/2

S2,VSWITCH,VSWITCH,PRIMITIVE=ANALOGUE,ROFF=,RON=,VH=(-)/2,VT=(+)/2

S3,VSWITCH,VSWITCH,PRIMITIVE=ANALOGUE,ROFF=1M,RON=1,VH=(-)/2,VT=(+)/2

VP1,RTVPROBE,ACTIVE_VPROBE,LOAD=1k,MAX=1.0,PRIMITIVE=ANALOG

 

RCOIL表示继电器左边的线圈电阻为100Ω;RCONTACT=0.1表示继电器右边的开关,即当它闭合的时候有0.1Ω的电阻,这就解释了上面的疑问。ROFF=100M表示继电器右边的开关在断开的时候有100MΩ的电阻。

VOFF=0.5*:VALUE表示的是继电器的电压,当新放置一个继电器时,看到的12V字样,就是这个。尖括号的意思是,这个数值在仿真运行的时候,取自你属性对话框里设定的数值。而VON即与此相反。这里,表示当施加的电压小于0.5*时,继电器释放;大于0.8*时,继电器合上。这也解释了上面提到的“接近”。

下面的语句有S1,S2和S3,表示此继电器由三个开关组成。关注语句中的ROFF=:左边的ROFF表示器件模型里的开关在断开时候的电阻,这个电阻是器件的组成分;右面的表示给ROFF一个多大的数值,此值来自属性表。如果属情表中没有赋值,ROFF就是系统默认的100M,否则使用属性表中的值。



[1] 见后面解释

你可能感兴趣的:(Proteus)