一个数码管的驱动电路
这是我的51板子上的一个数码管的驱动电路。
是个四位数码管,8个段码直接接IO口,四个共阳极各自通过一个9012扩流驱动。
先上图:
这个电路的工作原理很容易理解:
三极管工作在 开关状态。
(个人感觉那个4.7K电阻有点多余,要限制B-E级电流,那个100欧姆的发射级电阻已经够了。)
简单地说一下工作原理:
当基级为高电平(由单片机IO口提供),B,E级均为高电平,这个时候三极管截止,C、E两级之间有压降,所以,C级为低电平,不能点亮数码管;
当基级电流为低电平时,三极管导通,此时,C、E两级接近导通,于是C级为高电平,能点亮数码管。(只要8个段位相应为低电平)。
PART 2
这个电路本身没什么复杂的。开始我也没留意,但是在做实验的时候,我意识到一个有点奇怪的现象:
当时我是用四位数码管显示“8051”这四个数字。我发现,“1”字特别亮,很明显亮于另外三个数字。
一开始我以为是 点亮的时间 不均匀,特别是它出现在最后一位,在循环的程序里,最容易出问题的就是 最后一个或者第一个,所以我又仔细看了一下流程图,但看来看去,始终觉得,不会啊,虽然点亮最后一个位以后,有几条指令多出来要执行,但是,相比于延时的十几几十毫秒而言,那也太微不足道了。
我还试过调长调短 延时时间(以增大或者减小 这多出来的时间的影响)。但是都没用。
后来,第二天我忽然想到,也许问题不是出在软件上,而是出在硬件上。因为我记得它的电路图。
现在回头看看这个电路图,你会发现,如果把数码管拆成8个发光二极管,你可以看到,它相当于是8个发光二极管并联接在 C级和地之间(如果8个都点亮,要是点亮的段位少,那就相当于并联的发光二极管少了。)
而这恰恰是问题所在。
在相同的软件下,我们看看。
上面那个电路图,我们可以初步估算,三极管导通时的集电极电流。
IC=IE=(5V-0.7V)/100欧姆=28mA.
而问题却是,在显示不同的段位的情况下,由于点亮的发光二极管数目不一样,所以平均分摊的电流也就不一样。
说得具体点,可以这么想。
由于N个(N<=8),发光二极管各自并联再 在 C级和地之间。
首先,它们并联,所以它们的两端电压必定一致,故而流过的电流也必定一致,最终结果是N家平摊总电流,总电流就是C级电流。
稍微想一想,就会发现,在0到9这10个数字里,大多数数字的段位在5到6左右,除了1,4,7少,特别是1和7,只有2和3 段,所以,当显示这两个数字的时候(特别是1),会感到明显亮。
这个,至少在这个地方,跟程序无关,而是硬件决定。
PART 3
要解决这个问题也不难。
无论是PNP管还是NPN管,都一样的思路。
那就是不要把数码管的8个段串联在三极管的C级和地之间(NPN的话应该是和电源之间)。把恒电流分配改成 恒电压 驱动。
但是这样,每个段位多要加一个大小适当的限流电阻。废话少说,先上图。
如图所示,因为没装什么仿真软件,直接用画图画,画得有点恶心。
那两个圈圈表示发光二极管(数码管里的几个段位),地表示相应段码被置零时,(如果都为高,这个时候,它有等于没有,因为几乎没有消耗电流,准确来说,根本不形成回路。)
这个电路图跟前面的电路图是完全两回事的思路:
这个电路的思路是,三极管导通后,共阳极的公共级直接被置高,但是,每个发光二极管取多少电流,那只跟它有没和地形成回路,大小取决于限流电阻。
这样一来,三极管本身的工作电流可以设得很小,然后,发光二极管的亮度恒定。
只不过,在心里嘀咕这个人的水平不高的同时,又在想另一个问题(因为我打算自己买数码管自己做一个小模块。)
它为什么要这么做——我们要试着从另一个角度去看问题。
我想到了一个理由如下,不知道对不对,也或许还有,请大家指教。
第一个电路的设计很简单,所需器件少,PCB的设计也简单,这样就减轻了设计的难度,节省了不少成本(从论坛里某篇文章的角度看,这绝对不只是那8个电阻的成本,至少包括了PCB增加的线路带来的困难,板子的设计成本,什么的诸如此类)。
而它这么做,虽然明显有一个缺点,那就是我所说的,在显示某些数字时,亮度有偏颇。
但是我们考虑这样一个问题,10个数字里只有一个“1”,(7相对来说,其实已经不太明显,至于4 就基本没差别了。)
也就是说,仅仅是一个“1”有差别而已。
关于这个1出现的概率有多大,额,这个,具体问题具体分析,不好说,但是,至少它只占十分之一。
所以在一般的场合,其实这么干也不失为一件很精明的事情。
说了这么多,当然还是要实际动手试一下。
由于时间关系,加上手上没 四位数码管,我也懒得费那个劲,把板子上的拆下来。
但是我用了另一种方法。
我把显示的数字改成“1051”,这时,很明显看到,头尾就是要亮一点;
我再把数字改成“8052”,这个时候大家都一样,相对比较暗一点。
可见,至少,在这个问题里,亮度与延时长度无关。
当然,我现在就遇到了延时长短造成的亮度问题,也已经搞定了。
其实关于这个 数码管 的驱动,特别是动态驱动,就算只是普通的显示场合,如果想要结果稍微让人满意一些,加上配合在单片机程序里,还有不少的细节问题值得探讨。比如我昨晚在做的事。但是限于时间和主攻方向,我会有所取舍。但是不管如何,一有什么情况,定会随时上报给组织滴!!
一个简单问题了,限流不能限在共公端.
一个简单问题了,限流不能限在共公端.你可以把abcdfg这样的IO口变成扫描的,用三极管做选择亮与不亮.用占空比去调整亮度.我试过,LED的过流能力不差,其主要限定在平均电流上,这样做在时间上是无问题的.
回复 5楼 qushaobo 的帖子
额,我觉得公共端那个位置,它并不是限流,那里只是提供必要的电流。
我的意思是,它的段位没有限流而已;
至于调占空比这个,,额,这个应该是延时的问题,还没来得及仔细修改程序。
但是我是弄了一下,的确可以提高亮度
本来就是:公共端不应该有电阻,而8位笔段必须要电阻。这是你的错。
如果俺是老师做评分的话,这篇绝对是高分的。因为LZ通过实验观察和较深的思考,注意到了下面两点:
①.基极电阻4.7k是否必要?
②.限流电阻可不可共用?
②道出了LED亮度不均的原因,①再延伸讨论就会涉及到三极管共射放大器和共集放大器的区别。网上常见有毛病电路在流传,甚至包括有些“学习板”也经不起细评,这是最容易误人子弟的。
这个电路原理很普通,而对于貌似简单之处做深入理解,则是难能可贵的。
回复 7楼 zwq2 的帖子
额,这个,其实我想说,这个板子是买的,不是我做的,呵呵。
电路太复杂了,做不了,买现成的。;P
回复 9楼 仙猫 的帖子
谢谢大叔这么高的评价哈,嘻嘻~~
顺带回答一下大叔LX的SJL2000,关于这个问题,额......
这个,其实,主要是偶比较死脑筋,老在一些细节枝末上 纠结。
偶尔感觉这样速度太慢了,不过,没办法的事,天性是这样。
那个4.7K电阻要吧,我试过没要数码管亮不起来,但没想LZ那么深入探讨了,惭愧惭愧
引用: 原帖由 仙猫 于 2010-6-22 15:27 发表 如果俺是老师做评分的话,这篇绝对是高分的。因为LZ通过实验观察和较深的思考,注意到了下面两点: ①.基极电阻4.7k是否必要? ②.限流电阻可不可共用? ②道出了LED亮度不均的原因,①再延伸讨论就会涉 ...
请教一下仙猫老师:
1、管子做开关用,基极4.7k电阻在L高电平时可以限流,去掉会有什么影响么?
2、三极管共射放大器和共集相比,输出阻抗小带负载能量好,但是如果用作开关还有很大区别么,我个人赞同辛昕所言“无论是PNP管还是NPN管,都一样的思路”。呵呵是不是我没有理解您的深刻含义?
另外,提个思路:在1和7的灯上并联一个较大的电阻,这样可以分担一定的电流,使其看起来不是很亮。当然了,这样会造成显示8等数字时并联电阻的灯较暗,不过随着点亮灯的增加,串联主干道上电流减小,并联电阻上分得的电流减小,对亮度的影响也会减小。具体的还需要根据实际感受来调整。
呵呵,在没有办法从根本上解决问题时,想点歪歪路调整折中还是比较常用的啦,之前遇到过一排指示灯中有个别很亮的现象,在不换灯的情况下就是并联个变阻器调整其亮度和其他灯一样的,楼主还有兴趣可以试试啦。
在网上找了一篇相关的文献,
文章中提到了一个简单的LED亮度不一致的解决办法,就是通过编程调整流过LED的电流I和控制时间T的乘积是一定的,,这样所有的管子亮度就一样了。
发出来大家看看。FYI
回复 12楼 虚V界 的帖子
不需要。
你可以按照这个思路分析一下这个电路。
输入回路,从输入端到(如果有的话),4.7K电阻到B级到E级,到E级电阻到地。
这是输入回路,这一条回路,我们只关心 基级电流。
按照KVL,可以这么算,输入电压,减掉0.7V,然后另外两部分电压耗在两个电阻上
这里是关键。因为两个电流是不一样的,而且,相差至少几十倍(像8050这种,一般4,50),而如果是90系列的话,至少上百,更经常去到200到300多。
这样一来,基级电流就会显得很小,它分到的电压也会小的可以忽略。
比如说,如果是100倍,那那个100欧姆的E级电阻起到的作用就相当于 100倍的100欧电阻,就是10K(以计算基级电流的话),与之相比,那个4.7K的电阻相比就显得无足轻重了(这里两个数值显得差别不很大)但你想想,如果我需要那4.7K,我何不把100欧电阻变成147?
我的解释可能有点罗嗦。
简单地说就一句话:
因为 基级电流 和 E级电流相差上百倍,所以,基级电阻的作用无足轻重,干脆不用更好。
另外,三极管的放大倍数离散性很大,实际计算时不好算。通常来说,都直接用E级电阻,这样可以使计算简便,并且可以随意用任何型号的三极管,也不怕参数离散性带来的麻烦。
回复 13楼 zwq2 的帖子
不奇怪,只是让我知道了那个 小店主 的本事不过如此而已。
也或者是,人家在这方面没花太多心思,都做生意了,还管那么多干嘛?
估计他的图是网上找的
回复 15楼 huayang1118 的帖子
这个我也想过。(但是没实际做过还)
但是我想,那也太耗费 软件资源了。
真要做到亮度均匀,还真不如加多8个电阻呢?
回复 14楼 huayang1118 的帖子
关于第一个问题。
我的意见是:
4.7K是可以用来限流的(不过它是限制输入电流),但是,100欧电阻也可以啊?
而且100欧电阻起到的作用会更大——具体解释详见我16L的解释。
至于第二个问题。
额,这里,PNP还是NPN都是共射极,没有共集电极。
至于最后一个思路。
这个,你说的 1 和 7,是不是指它相关的段码?
那个,至少不是个通用的方法,制造上估计也挺麻烦,还得分辨不同位置不同阻值。
另外就是你自己也提到了,在显示别的数字时,会有问题。
回复 14楼 huayang1118 的帖子
1、试算一下:如果短路基极的4.7k,那么拉低基极驱动三极管时,发射极电位只比基极高一个b-e结压降,电流就都跑基极去点不亮灯了。
找不到7段码LED的资料,按通常的正向压降为2V左右计算,且点灯时三极管c-e饱和,那么发射极电压应为2.3V左右,基极电压约1.6V。设控制三极管导通的电压为0.4V(如图),那么加在4.7k两端有1.2V,基极电流为1.2/4.7=0.25mA。查9012手册可知hFE≧64,只要VCC电压够,LED至少可获得16.3mA。要静态点亮LED的话一般有10mA已足够,所以可以说4.7k这个电阻值是取得恰到好处的。
2、通常开关电路用共射电路驱动好过共集,不像共集电路的三极管会饱和不了,损失掉本该加在负载上的电压。本帖的楼顶电路是共射形式,但100Ω限流电阻串在发射极而不是集电极也许设计者是有ta的考虑的,即怕驱动L1的电路的输出高电平不够,导致灭灯时LED也会微亮(这里因看不到前面的电路只好猜测)。但正像前面几位指出的那样,限流电阻不放在“段”而放在“组”上是错误的,正是各段亮度不匀的原因。
(把数码管接地是简化的示意图,实际底下还有个阴极驱动器件。)
[
本帖最后由 仙猫 于 2010-6-28 07:04 编辑 ]