学过单片机应该都知道。单片机的IO口可以输出三种状态:高电平、低电平、高阻。一般不同封装和颜色的驱动电压和电流都有些许差异,具体要参照使用LED的规格书。这里演示为2V/20mA就可额定工作条件的LED。
那么利用IO口的低电平状态可以设计如图方式1的驱动LED方法(这个也是不用三极管情况下常用的方式),利用IO口的高电平状态可以设计如图方式2的驱动LED方式。
那么大家实际搭好电路和载入驱动程序后,方式1可以完美运行,但是方式2的灯却不能亮。为什么呢?这就要引入灌电流和拉电流的概念来解释了。
1、灌电流:图中第(1)个连接方式中,单片机输出低电平时,电流方向由外部进入单片机,称为灌电流,电流由外部电源提供。
2、拉电流:图中第(2)个连接方式中,单片机输出高电平时,电流方向由单片机输出到外部,称为拉电流,电流由单片机提供,可理解为“外部元件从单片机取电”。
如果你查看单片机的规格书,你会发现IO口允许外部灌入电流可以达到几十mA,但是对所有IO口合计的总灌入电流是有限制的,所以你需要同时驱动几个LED亮,可能是行不通的。而再来看单片机的拉电流是uA级别的,根本无法驱动外部LED。那么为什么高电平状态,驱动能力这么弱呢?原因是IO口内部集成了较大的上拉电阻,而到GND是有一个开关管(阻抗非常低、可以忽略)控制的。
上面仅仅讲述了单片机IO口的情况,那么举一反三,很多IC的GPIO口都会有灌入电流和拉电流的限制,所以在使用的时候要注意这个电流的限制。
可以知道使用方式1驱动LED对LED数量是有限制的。另外如果LED发生损坏短路,也会有电流直接流入IO口,可能造成单片机损坏。就有人引入了三极管来解决这些问题,IO口只负责控制三极管通断即可。应尽可能选三极管饱和后Vce压降小的。这里饱和后Vce=0.1V。LED 2V/20mA驱动,那么三极管Ic=20mA。限流电阻R1=(5-2-0.1)V/20mA=145Ω,145不是标称值,那么实际选择150Ω的电阻,实际Ic=(5-2-0.1)V/20mA=19mA。
然后确认三极管的放大倍数Hfe,假设是100,那么三极管B极电流是19mA/100=0.19mA。
也就是说如果IO口需要驱动这个LED,必须支持的最小输出电流至少为0.19mA。这个电流非常小,多个串口同时驱动多个LED,压力也没那么大。
但是假如你用的这个ICIO口最大输出电流只有0.1mA,还是无法满足怎么办,那么就需要NPN+PNP两个三极管组合来解决了。
参照上图,如果只用一个NPN管来驱动LED,那么Ic电流=25mA,那么KRC103S 基极电流Ib=Ic/Hfe=25mA/150=0.167mA,很明显驱动不了。那么再加入一个PNP管KRA102S,PNP管基极电流Ib=Ic/Hfe=25mA/100=0.25mA,然后NPN管导通其Ic=0.25mA,那么IO口的电流就只有0.25mA/150=0.002mA。这样一来控制IC就能驱动LED了。