• 注册 / 登录
  • 切换到窄版
  • 查看: 3114|回复: 0

    提高单片机IO口驱动能力的设计

    [复制链接]

    676

    主题

    690

    帖子

    6808

    积分

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    6808
    发表于 2022-4-2 15:55:02 | 显示全部楼层 |阅读模式

    路线栈欢迎您!

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    学过单片机应该都知道。单片机的IO口可以输出三种状态:高电平、低电平、高阻。一般不同封装和颜色的驱动电压和电流都有些许差异,具体要参照使用LED的规格书。这里演示为2V/20mA就可额定工作条件的LED。

    那么利用IO口的低电平状态可以设计如图方式1的驱动LED方法(这个也是不用三极管情况下常用的方式),利用IO口的高电平状态可以设计如图方式2的驱动LED方式。

    1.jpg

    那么大家实际搭好电路和载入驱动程序后,方式1可以完美运行,但是方式2的灯却不能亮。为什么呢?这就要引入灌电流和拉电流的概念来解释了。

    1、灌电流:图中第(1)个连接方式中,单片机输出低电平时,电流方向由外部进入单片机,称为灌电流,电流由外部电源提供。
    2、拉电流:图中第(2)个连接方式中,单片机输出高电平时,电流方向由单片机输出到外部,称为拉电流,电流由单片机提供,可理解为“外部元件从单片机取电”。
    如果你查看单片机的规格书,你会发现IO口允许外部灌入电流可以达到几十mA,但是对所有IO口合计的总灌入电流是有限制的,所以你需要同时驱动几个LED亮,可能是行不通的。而再来看单片机的拉电流是uA级别的,根本无法驱动外部LED。那么为什么高电平状态,驱动能力这么弱呢?原因是IO口内部集成了较大的上拉电阻,而到GND是有一个开关管(阻抗非常低、可以忽略)控制的。

    2.jpg

    上面仅仅讲述了单片机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。

    3.jpg

    然后确认三极管的放大倍数Hfe,假设是100,那么三极管B极电流是19mA/100=0.19mA。

    4.jpg

    也就是说如果IO口需要驱动这个LED,必须支持的最小输出电流至少为0.19mA。这个电流非常小,多个串口同时驱动多个LED,压力也没那么大。

    但是假如你用的这个ICIO口最大输出电流只有0.1mA,还是无法满足怎么办,那么就需要NPN+PNP两个三极管组合来解决了。

    5.jpg

    参照上图,如果只用一个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了。

    作者:刘涛

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    小黑屋|路丝栈 ( 粤ICP备2021053448号 )

    GMT+8, 2024-12-22 15:29 , Processed in 0.047065 second(s), 21 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表