stm32等单片机的GPIO 最大可以输出8mA,灌入20mA,但要保证所有进入芯片VDD的电流不能超过150mA,同样所有从VSS流出的电流也不能超过150mA。参考:https://www.21ic.com/app/mcu/201809/783861.htm
1、负载 < 10ma电流
因此,灌电流 > 输出电流的。对于小功率led (< 10ma电流),有两种直接驱动方式:
- 高电平驱动(输出电流方式)(IO高电平亮灯)
IO串联限流电阻 -> led -> GND
- 低电平驱动(灌电流方式)(IO低电平亮灯)
VCC -> led -> IO串联限流电阻 -> GND
无论哪种方式,对于驱动小型贴片led(大概两三毫安就能正常亮度了),倒是可以直接驱动(从上面可知优先选择低电平驱动方式,因为IO能接受更大的灌电流的)。
2、负载 10ma - 200ma 电流
但是,对于大一点功率的led等负载 (10ma - 200ma),就得通过外接三极管或者mos管(本人手头三极管多且便宜且易用,因此本文不讨论mos管的使用(虽然mos管特性 一个mos管就能轻松解决))驱动了。
三极管分为NPN型和PNP型,B基极,C集电极,E发射极
- B→E 导通:VBE≈0.7V
- C→E 饱和完全导通:VCE(sat)≈0.2V
- E→B 反向:不导通、禁止长期加高压

三极管本身是一种电流放大型原理的器件,例如NPN三极管,CE = BE x β倍数,因此最开始是在模拟电路中用于放大电流的(例如音频功放模块)。如果 BE电流 x β倍数 (其中常见三极管β一般100左右) 远大于CE能提供的电流,那么该三极管就工作在了饱和区 。三极管用在数字电路中,往往就是当作开关用途,让其工作于饱和区,因此BE电流给的比较大即可,例如CE电流最大为200ma,此时B极用3.3v高电平输入,串联1K欧电阻,3.3ma电流,那么CE电流即可轻松达到最大200ma了,此时CE极就完全导通了,类似打开了一个开关效果(而且常见三极管的电流响应频率能达到百兆Hz以上,轻松实现各种高频开关场景)。
- 高电平驱动(输出电流方式)(IO高电平亮灯)

SS8050 是 NPN 型硅三极管(中功率、通用开关 / 放大管),它的标准互补对管是 SS8550(PNP),大概500ma电流没问题。
- 低电平驱动(灌电流方式)(IO低电平亮灯)
采用PNP管实现,但是有个使用限制:GPIO高电平电压得与发射极电压一致,否则EB电压大于0.7V,从而无法关断

3、负载 > 200ma 电流
(1)两级NPN三极管直接级连方式(达林顿管)

低电平关断led,高电平导通led
连接方式最为简单,原理非常容易理解,一级管的发射极电流直接输入给第二极管的基极进行进一步放大,使其非常容易进入饱和状态,参考 https://blog.csdn.net/m0_70691405/article/details/154956736
**核心:**第一级三极管电流直接灌入第二级三极管,直接进行放大倍数乘积模式,因此GPIO需求电流可以特别小 微安级别,电路简单
缺点:压降大一倍,功耗大一些,结电容叠加、存储电荷多所以开关速度较慢(PWM高频调光就会有拖影)
同理,两个PNP组成的达林顿管连接(同极性达林顿),低电平导通led,但是存在上面说的电压必须一致问题
如果是NPN+PNP级联形成的达林顿管,用于实现互补推挽输出(稍微难理解一点,因为电流值相互约束钳位不容易直观分析,网上了解了一下性能比同极性达林顿还要好一些,但是没有集成芯片需要自己搭建,具体就没有深究了),这样两对(即总共4个管子)就能实现高低电平都具有高驱动电流,例如电机正反转场景。

参考 https://blog.csdn.net/m0_70691405/article/details/154956736
(2)两级NPN三极管电阻连接方式 (不实用)

低电平导通led,高电平关断led
核心: 第二级三极管的B极 从第一级三极管的集电极取电压,即第一级三极管相当于电平转换功能
优点: 第一级三极管不导通情况下,第二级三极管就自动导通的,能减少静态功率消耗。适用于大部分时间都是负载需要上电情况。注:这里R23可以去掉的。
缺点: R25过小过大都不合适,因为需要为第二级三极管提供足够基极电流,同时又不能让第一级三极管导通电流太大导致功率浪费。同原理,两级PNP实现,存在同样问题。
(3)其它两级NPN三极管连接方式(稍微难理解)

低电平关断led,高电平导通led
这个稍微难理解一点,但是也是可以的,流过R19为0.33ma,则流过R20约为33ma(100被放大),则R20电压为300V,当然是不可能,因为集电极总共只能提供3.3V,所以为3.3-0.7V=2.6V左右,所以R18输入相当于直接接到Q11集电极的3.3V,因此Q9也是能饱和导通了 。 参考 https://baijiahao.baidu.com/s?id=1608338008942258444&wfr=spider&for=pc
核心: 第二级三极管的B极 从第一级三极管的发射极取电压,即第一级三极管相当于电平转换功能
**缺点:**没有方案2缺点,R20较大即可,防止功率浪费
同理,依据此原理,两个PNP应该就能实现 低电平导通led,高电平关断led
(4)两级NPN+PNP三极管电阻连接方式(实用 低断高通)

低电平关断led,高电平导通led
核心: 第二级三极管的B极 从第一级三极管的集电极取电压,即第一级三极管相当于电平转换功能。这里也可以将R30移动到第一级管Q15的发射极,取电压给第二级管Q14的B极,这样实现上面方案2的第一级管不导通仍然第二级管处于导通状态,从而降低静态功耗,从而满足大部分时间都是负载需要上电情况的应用场景。
**缺点:**没有方案2缺点,R30较大即可,防止功率浪费
(5)两级PNP+NPN三极管电阻连接方式(实用 低通高断,优先选择)

低电平导通led,高电平关断led (因为单片机上电后默认电平一般是高电平,所以本方案5最好)
核心: 第二级三极管的B极 从第一级三极管的集电极取电压,即第一级三极管相当于电平转换功能。同理可以用上面方案4的电阻移动方法,实现降低静态功耗,从而满足大部分时间都是负载需要上电情况的应用场景。
**缺点:**和方案4同原理,没有方案2缺点,R32较大即可,防止功率浪费
4、总结
- 小电流负载,直接一个三极管驱动即可,但是需低电平导通且电压不一致,则用方案5
- 大电流负载,方案4和5即可(而且能适应高频开关,电压不一致都可以)
- 简单粗暴低频开关,方案1达林顿管方式即可