上拉电阻.docx

上传人:b****8 文档编号:11150789 上传时间:2023-02-25 格式:DOCX 页数:15 大小:107.29KB
下载 相关 举报
上拉电阻.docx_第1页
第1页 / 共15页
上拉电阻.docx_第2页
第2页 / 共15页
上拉电阻.docx_第3页
第3页 / 共15页
上拉电阻.docx_第4页
第4页 / 共15页
上拉电阻.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

上拉电阻.docx

《上拉电阻.docx》由会员分享,可在线阅读,更多相关《上拉电阻.docx(15页珍藏版)》请在冰豆网上搜索。

上拉电阻.docx

上拉电阻

谈谈AT89S51的上拉电阻问题

2008-10-2611:

26

很多网友都问我AT89S51的P0口为什么要接一个上拉电阻。

我就用一个篇幅来说一说

P0口和其它三个口的内部电路是不同的,如下图

  P0口是接在两个三极管D0和D1之间的,而P1-P3口的上部是接一个电阻的。

P0口的上面那个三极管D0是在进扩展存储器或扩展总线时使用MOVX指令时才会控制它的导通和截止,在不用此指令时都是截止的。

在平常我们使用如:

P0_1=0 P0_1=1这些语句时控制的都是下面那个三极管D1。

  我们先假设P1口接一个74HC373,来看一看它的等效图

当AT89S51的P1口上接了74HC373后就等于接了一个负载,如上图右边。

一般来说这些数字电路的输入阻抗都很大,都在几百K到上兆欧姆,而P1口内的电阻R一般在几十K以内。

如上图,当我们发出指令P1=0时,三极管D导通,见中间的等效图,这时P1点的电位为0。

  当发出P1=1的指令后,三极管D截止,见右边等效图,因为Rx的阻值要比R的阻值大得多,因此P1点的电位是接近电源电压的。

即高电平。

我们再来看看P0口接负载时的图

当P0=0时,等效图是中间的,三极管D1导通,P0点的电位为0。

而当P0=1时,等效图是右边的,三极管D1截止,而上面的三极管D0始终是截止的,这样P0点就等效于悬空了,它处在不稳定状态,P0点又是RX的高阻抗输入点,很容易受到外界和周围电路的干扰从而直接影响到74HC373的输出状态。

因此就得加上个电阻。

如下图

加上电阻Rc后,电路的状态就和P1口一样了,这个电阻Rc就是上拉电阻。

但你如果只是为了让P0口驱动个发光管,那电路可以直接简化成下图那样。

S51内部的电流最好不超过15mA,如果发光管的电压为2.2V那电阻就是(5-2.2)÷15=0.18K,也就是180欧姆。

当P0=0时P0点为低电位,发光管亮起,流过D1的电流约为15mA。

当P0=1时,P0点为悬空,但发光管和180欧电阻都是低阻抗元件,P点电位就为高电位,再说也无任何输出影响,因此这样电路是可以的。

类别:

默认分类|

|添加到搜藏|分享到i贴吧|浏览(11611)|评论 (47)

 

上一篇:

15、写给对制做并口ISP下载线有...    下一篇:

17、模数转换ICADC0809的使用制...

 

已有8人分享了这篇文章:

EWB5

Ta的分享

hxccd

Ta的分享

naruto六代

Ta的分享

23、补一堂通俗的电子基础课

2009-05-1614:

08

很多初学单片机的网友都问过我,关于如何确定数码管的限流电阻问题。

我想这是对电路不理解造成的。

因此在这就用最通俗的方法说说基础的电子知识。

 首先就说说三极管,实际上只要你了解了三极管的特性对你使用单片机就顺手很多了。

大家其实也都知道三极管具有放大作用,但如何去真正理解它却是你以后会不会使用大部分电子电路和IC的关键。

  我们一般所说的普通三极管是具有电流放大作用的器件。

其它的三极管也都是在这个原理基础上功能延伸。

三极管的符号如下图左边,我们就以NPN型三极管为例来说说它的工作原理。

  它就是一个以b(基极)电流Ib来驱动流过CE的电流Ic的器件,它的工作原理很像一个可控制的阀门。

 左边细管子里蓝色的小水流冲动杠杆使大水管的阀门开大,就可允许较大红色的水流通过这个阀门。

当蓝色水流越大,也就使大管中红色的水流更大。

如果放大倍数是100,那么当蓝色小水流为1千克/小时,那么就允许大管子流过100千克/小时的水。

三极管的原理也跟这个一样,放大倍数为100时,当Ib(基极电流)为1mA时,就允许100mA的电流通过Ice。

我这么说大家能理解吗?

  这个原理大家可能也都知道,但是把它用在电路里的状况能理解,那单片机的运用就少了一大障碍了。

最常用的连接如下图。

  我们来分析一下这个电路,如果它的放大倍数是100,基极电压我们不计。

基极电流就是10V÷10K=1mA,集电极电流就应该是100mA。

根据欧姆定律,这样Rc上的电压就是0.1A×50Ω=5V。

那么剩下的5V就吃在了三极管的C、E极上了。

好!

现在我们假如让Rb为1K,那么基极电流就是10V÷1K=10mA,这样按照放大倍数100算,Ic就是不是就为1000mA也就是1A了呢?

假如真的为1安,那么Rc上的电压为1A×50Ω=50V。

啊?

50V!

都超过电源电压了,三极管都成发电机了吗?

其实不是这样的。

见下图:

  我们还是用水管内流水来比喻电流,当这个控制电流为10mA时使主水管上的阀开大到能流过1A的电流,但是不是就能有1A的电流流过呢?

不是的,因为上面还有个电阻,它就相当于是个固定开度的阀门,它串在这个主水管的上面,当下面那个可控制的阀开度到大于上面那个固定电阻的开度时,水流就不会再增大而是等于通过上面那个固定阀开度的水流了,因此,下面的三极管再开大开度也没有用了。

因此我们可以计算出那个固定电阻的最大电流10V÷50Ω=0.2A也就是200mA。

就是说在电路中三极管基极电流增大集电极的电流也增大,当基极电流Ib增大到2mA时,集电极电流就增大到了200mA。

当基极电流再增大时,集电极电流已不会再增大,就在200mA不动了。

此时上面那个电阻也就是起限流作用了。

下面我们来理解单片机内的IO的状况:

  在单片机内有P1-P3的24个IO口的电路都如上图那样。

平常我们用电子电路的目的是最终让目标器件工作,例如让发光二极管亮起来,让电机正常转起来,从根本上说就是让这些器件获得一定的电流让它做功。

例如要让发光二极管亮一般就需要1mA以上的电流。

但是,单片机是智能芯片,它可以通过检测各IO口的电压值来做出逻辑分析和判断,并能输出高或低电压作为结果信号,因此可以看出,单片机的各IO口注重的是所产生的电压而不是流过R和三极管的电流。

那么单片机内IO口的电压和电流的关系又是怎么样的呢?

我们还是用水管流水的例子来说明。

  假设我们让R的这个阀开的较大,让下面那个控制阀全关,这时如图1所示可以看出P点的压力就是水箱的压力。

当我们将下面的控制阀全开,如图2所示,则水将以很大的水流流过管线,而此时P点的压力为0。

这个原理和电子电路很相似。

通过三极管的关闭或开大来使输出点P测得的逻辑量为1(电源电压)或0(0电位)。

但这个过程有一个问题,就是当需要P点输出为0时,三极管将开得很大,流过的电流很大,单片机上有32个IO口,这样消耗的电能就很多。

有没有办法改进呢?

有!

见下图:

  见图3,如果我们将上面那个阀门R关得很小,将下面的控制阀全关,这时P点的压力仍旧会是水箱的压力,和上面图1是一样的。

但当我们将控制阀开大时,如图4,P点的压力虽然也同样为0,但这时通过的水流就大大减少了。

这样我们既能输出1或者0。

但消耗的水却很少。

单片机里的电路正是这样做的,它上面的电阻R大约为50K,最大电流是5V÷50K=0.1mA。

也就是说,当P输出1时,不消耗电流,当P输出0时消耗的电流为0.1mA。

正因为它的上拉电阻R很大,因此对于初学者来说,要它直接驱动发光管或其它的负载就要有一定的方法技巧了。

这里我再和大家一起分析一下IO口外接负载时的各种情况。

  我们先来看看接TTL器件的情况,当P1.0接到74HC373的一个输入脚上时,因为TTL器件的输入阻抗很高,大约几百K到M欧姆级。

这就相当于P1.0接了个500K(我们假设为500K)的电阻到地。

这样当三极管导通时,P1.0点为低电平,0.1mA的电流经Rc然后流过三极管一地,Ri上没有电流流过。

而当三极管截止后,电流就由Rc流过再通过Ri流到地。

由于电阻分压的作用,在Rc和Ri上各有部分电压,P1.0点的电压为Rc和Ri的分压。

总电流=5V÷(50K+500K)=0.009mA,则P1.0点的电压=0.009mA×500K=4.5V。

TTL规定输出2.4-5V为高电平;输出0.4-0为低电平。

因此这样接是正确的。

下面我们再来看看用S51来驱动发光管的情况。

  先来看看图7的情况,很显然,发光管的方向为上正下负,只有P1.0为高电位才能点亮发光管,要让S51的P1.0为高电位,就必须使三极管截止。

当三极管截止后,电流经Rc流到发光管再从发光管流到地。

要让发光管导通必须要在发光管两端有超过2.1V的门坎电压。

因此流过发光管的电流=(5V-2.1V)÷50K=0.058mA的电流,你们说发光管能亮吗?

  再来看图8。

由图可以看出,要想让发光管导通P1.0就必须为低电位。

那P1.0口的三极管必须得导通。

当三极管一导通后,电流一路流过Rc到三极管再从三极管流到地。

另一路在发光管上消耗掉2.1V的电压。

然后一路几乎没有阻力地流过三极管,而IO口的三极管最大电流不能超过15mA,超了就会烧坏三极管,因此这个接法不正确。

那么如何才能让这两种接法都可以驱动发光管呢。

见下图:

先看图9,在P1.0端和Vcc间接上个电阻Ri。

当三极管导通时有两路电流都要从它的CE极流过,一路是内部R上的0.1mA电流,另一路就是Ri上的电流,为了不让三极管过流而烧坏我们就要确定它的电阻值。

Ri=5V÷15mA=0.333K,就大约是330欧姆。

这时流过三极管的电流就大约为15mA,此时发光管是不亮的。

当三极管截止后,这两路电流就都要从发光管流过了,这时流过发光管的电流是多少呢。

S51的内部电阻上流过的电流为(5V-2.1V)÷50K=0.06mA,很小我们可以忽略不计了。

流过Ri上的电流为(5V-2.1V)÷330Ω=0.0087A,也就是8.7mA。

已经能让发光管比较亮了。

这样驱动是可以的,但发现没有,发光管不亮时所消耗的电流比发光管点亮时消耗的电流还要大。

如果用许多个IO口去点亮很多发光管的话这样的电路就不经济了。

好!

这就是P1.0高电平直接驱动发光管的状况。

  再来看图10,在和发光管串联一个电阻后接在Vcc和P1.0之间。

当三极管导通时,也是两路电流都汇合后从三极管的CE流过,内部电阻上的电流仍为0.1mA,发光管上的电流就要由电阻Ri和发光管共同来保证不让三极管的CE超过15mA,则电阻的确定为(5V-2.1V)÷15mA=0.193K,大约是200欧姆。

这样流过发光管的电流就约为15mA,发光管比较亮了。

当三极管截止后,就阻断了这两路电流的通路,因此不消耗电流。

这个电路是P1.0低电平直接驱动发光管的状况,可以看出这个电路当发光管被点亮时消耗15mA的电流,而熄灭时就不消耗电流,因此这个电路是最适合用的。

S51直接驱动数码管一般也都是采用这个电路原理。

  下面是数码管的原理图:

 

 下图是数码管的电路图。

(点击看大图)

  这些原理呢都非常基础的,也许我说的太罗嗦,但我想,对于初学者还是有帮助的。

不妥之处不要客气。

尽管拍砖,不过下手有点数,别让我进医院那么狠就行。

类别:

默认分类|

|添加到搜藏|分享到i贴吧|浏览(14260)|评论 (39)

 

上一篇:

22、时钟IC_DS1302应用之二……...    下一篇:

24、可串行驱动LCD12864的应用之...

 

已有16人分享了这篇文章:

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

uchara,c,led,sw,w,q,b,g;

longintnum;

voiddelayms(uintxms)

{

uinti,j;

for(i=xms;i>0;i--)

for(j=110;j>0;j--);

}

voidmain()

{num=7654321;

led=0xfe;

TMOD=0x11;

TH0=(65536-5000)/256;

TL0=(65536-5000)%256;

TH1=(65536-5000)/256;

TL1=(65536-5000)%256;

EA=1;

ET0=1;

ET1=1;

TR0=1;

TR1=1;

c=1000;

while(c--)

{

display(sw,w,q,bai,s,g);

}

}

voiddisplay(ucharsw,ucharw,uchar,uchar,uchars,uchar)

{

P2=table[w];

P0=0xfd;

delayms(5);

P2=table[q];

P0=0xfb;

delayms(5);

P2=table[b];

P0=0xf7;

delayms(5);

P2=table1[s];

P0=0xef;

delayms(5);

P2=table[g];

P0=0xdf;

delayms(5);

}

voidtimer0()interrupt1

{

TH0=(65536-5000)/256;

TL0=(65536-5000)%256;

a++;

if(a==100)

{

a=0;

P1=led;

led=_crol_(led,1);

}

}

voidtimer1()interrupt3

{

TH1=(65536-500)/256;

TL1=(65536-500)%256;

a++;

if(a==20)

a=0;

num--;

if(num==765398)

num=765398;

sw=num/1000000;

w=num%100000/100000;

q=num%100000%10000/1000;

b=num%100000%10000%1000/100;

s=num%100000%10000%1000%100/10;

g=num%10;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1