1. 从一个经典电路说起:双NPN三极管恒流源到底解决什么问题
搞硬件的人大概都有过这样的经历:手头需要一个稳定的恒流源去驱动LED、给传感器做偏置、或者给电池做恒流充电,翻遍手头的恒流源芯片,要么贵得离谱,要么封装对不上,要么供货周期长到让人崩溃。这时候,用两颗最普通的NPN三极管搭一个恒流源,往往是最省事、最便宜、也最可靠的方案。
双NPN三极管恒流源电路,说白了就是用两只NPN三极管配合少量电阻,构成一个能输出恒定电流的电路。它的核心价值在于:用几毛钱的器件,实现毫安到几十毫安级别的稳定恒流输出,温度漂移可控,而且电路结构极其简单,随便一块洞洞板就能搭出来。这个电路特别适合以下几类人:一是刚学模电、想搞明白三极管到底怎么用的学生;二是做小功率LED驱动、传感器偏置的硬件工程师;三是需要快速验证某个恒流方案、不想等芯片到货的DIY爱好者。
我自己第一次接触这个电路,是在做一个多路LED指示灯的项目。当时需要每一路LED的电流保持一致,否则亮度参差不齐特别难看。用限流电阻吧,电源电压一波动亮度就跟着变;用恒流IC吧,成本又上去了。后来用两颗NPN三极管搭了个恒流源,实测电流波动控制在百分之几以内,成本不到五毛钱,从那以后这个电路就成了我工具箱里的常备方案。
这篇文章我会把这个电路从原理到实操完整拆一遍,包括为什么选双NPN而不是别的结构、电阻怎么算、三极管怎么选、实测中会遇到哪些坑、怎么优化性能。不管你是刚入门还是已经画过几版板子,应该都能从中找到有用的东西。
2. 电路整体设计与方案选型拆解
2.1 为什么是双NPN而不是单管或者运放方案
要理解双NPN恒流源的设计逻辑,得先想清楚一个问题:单只三极管能不能做恒流源?答案是能,但很不稳。单管恒流源的原理是用三极管基极-发射极电压(Vbe)近似恒定的特性,在发射极电阻上产生恒定电流。但问题在于,Vbe本身对温度非常敏感,大约每升高1摄氏度,Vbe就下降2mV左右。这意味着温度一变,电流就跟着漂,漂个百分之十几二十都很正常。
运放加MOS管的方案当然性能更好,但成本和复杂度上去了。一个运放芯片加上基准源、采样电阻、MOS管,PCB面积和物料成本至少是双NPN方案的五六倍。对于大多数不需要高精度的场合,这个代价不划算。
双NPN方案的精妙之处在于:它用第二只三极管做了一级电流负反馈。第一只三极管(我们叫它主管)负责输出电流,第二只三极管(叫它控制管)负责检测主管发射极电阻上的电压,一旦电流增大,控制管导通增强,把主管的基极电流分流走,从而把电流拉回来。这个负反馈环路把Vbe的温度漂移大部分抵消掉了,实测温度漂移可以做到单管方案的十分之一以下。
注意:这里说的“双NPN”是指两只极性相同的NPN三极管,不是指达林顿结构。达林顿管虽然也是两只三极管,但它是级联放大,没有负反馈机制,不能做恒流源。
2.2 核心电路拓扑与工作原理
标准双NPN恒流源的核心拓扑是这样的:主管的集电极接电源正极,发射极通过一个采样电阻接地(或接负载),基极通过一个偏置电阻接电源正极。控制管的集电极接主管的基极,发射极接主管的发射极,基极接一个参考电压。
等等,这个描述可能有点绕。让我用更直白的方式说:主管负责“出力”,控制管负责“监督”。控制管的基极接在一个稳定的参考电压上(通常用两只二极管串联或者一只LED来产生),它的发射极接在主管的发射极上。当主管电流增大时,采样电阻上的压降增大,控制管的发射极电压升高,而它的基极电压是固定的,所以Vbe增大,控制管导通增强,从主管基极抽走更多电流,主管电流就被拉回来了。
这个反馈过程是连续的、模拟的,不是开关式的。整个环路稳定下来后,输出电流就由参考电压和采样电阻决定,跟电源电压、三极管参数的关系都不大。
2.3 关键参数的计算逻辑
输出电流的近似公式是:Iout ≈ (Vref - Vbe) / Rsense。其中Vref是控制管基极的参考电压,Vbe是控制管的基极-发射极电压(约0.6到0.7V),Rsense是采样电阻。
举个例子:假设我用两只1N4148二极管串联做参考,Vref大约是1.2V。控制管的Vbe取0.65V,那么Rsense上的电压就是1.2 - 0.65 = 0.55V。如果我想要10mA的输出电流,Rsense = 0.55V / 10mA = 55欧姆。实际选56欧姆的标准值,输出电流大约是9.8mA,完全够用。
这里有个设计取舍:Rsense上的压降越大,电流精度越高,但功耗也越大。0.55V的压降在10mA下功耗只有5.5mW,可以忽略。但如果输出电流是100mA,功耗就是55mW,电阻会发热,需要考虑封装。一般来说,Rsense上的压降控制在0.3V到0.7V之间比较合适。
提示:参考电压也可以用一只红色LED来产生,大约是1.8V到2.0V。用LED的好处是温度系数比二极管更接近零,但离散性大,每只LED的压降都不一样,需要实测筛选。
3. 核心细节解析与实操要点
3.1 三极管选型的三个关键指标
选三极管不是随便抓两只9013就能用的。有三个指标必须看:第一是集电极最大电流(Ic_max),要留至少两倍余量。比如你要输出20mA,选Ic_max至少40mA的管子,9013的Ic_max是500mA,绰绰有余。第二是集电极-发射极击穿电压(Vceo),要高于电源电压。第三是电流放大倍数(hFE),这个指标很关键。
hFE为什么关键?因为控制管需要从主管的基极抽走足够的电流来调节。如果hFE太低,控制管抽不动,反馈环路就失效了。一般来说,两只管子的hFE都建议在100以上,最好在200左右。9013的hFE范围是64到300,离散性很大,买回来最好用万用表测一下,挑两只hFE接近的用。
我自己的经验是:主管选hFE稍大一点的,控制管选hFE稍小一点的,这样反馈环路更稳定。如果两只管子hFE差太多,环路增益过高,可能会产生振荡。实测中,hFE在150到250之间的管子表现最好。
3.2 采样电阻的选型与布局
采样电阻的精度直接决定输出电流的精度。如果你用5%精度的碳膜电阻,输出电流的初始误差就有5%。想要更好的一致性,至少用1%精度的金属膜电阻。我通常用1%精度的0805或1206贴片电阻,温漂在100ppm/摄氏度以内,对于大多数应用足够了。
布局上有个容易忽略的点:采样电阻的接地端一定要和控制管的发射极接在同一点,不能有公共阻抗。如果控制管的发射极和采样电阻之间有一段走线,这段走线的电阻就会串进采样回路,导致电流偏差。在洞洞板上搭电路时,我习惯把控制管的发射极直接焊在采样电阻的引脚上,中间不经过任何其他节点。
注意:采样电阻的功率要算够。P = I² × R。10mA下56欧姆的功耗是5.6mW,0402电阻都能扛。但如果是100mA下5.6欧姆,功耗就是56mW,至少要用0805封装。如果是500mA下1.1欧姆,功耗275mW,得用1206甚至更大了。
3.3 参考电压源的稳定性处理
参考电压的稳定性决定了电流的稳定性。用两只1N4148串联是最简单的方案,但1N4148的正向压降温度系数大约是-2mV/摄氏度,两只串联就是-4mV/摄氏度。在温度变化20摄氏度的环境下,参考电压会变化80mV,对应到输出电流上就是大约15%的漂移。这个漂移对于要求不高的场合可以接受,但如果要求高,就得换方案。
更好的方案是用一只低压差稳压器(比如TL431)产生2.5V参考,再用电阻分压得到需要的电压。TL431的温度系数可以做到50ppm/摄氏度以内,比二极管好两个数量级。但这样成本就上去了,电路也复杂了。我的建议是:如果环境温度变化不超过10摄氏度,用二极管就够了;如果超过,考虑用TL431或者带温度补偿的参考源。
还有一个折中方案:用一只绿色LED做参考。绿色LED的正向压降大约是2.0V,温度系数比红色LED更接近零,实测在-0.5mV/摄氏度左右。虽然离散性大,但温度稳定性比二极管好不少。我做过对比测试,用绿色LED的方案在10到40摄氏度范围内的电流漂移只有3%左右,比二极管的15%好太多了。
4. 实操过程与核心环节实现
4.1 完整电路搭建步骤
先说一下我最近一次搭这个电路的具体过程。需求是给一个传感器做恒流偏置,要求输出电流5mA,精度正负5%以内,工作温度范围10到40摄氏度。
第一步,确定电源电压。传感器的工作电压是12V,所以电源就用12V。主管的集电极接12V,发射极通过采样电阻接传感器,传感器另一端接地。等等,这里要说明一下:恒流源可以接在负载的高侧(负载在电源和恒流源之间)也可以接在低侧(恒流源在负载和地之间)。我这次用的是低侧方案,恒流源在负载和地之间,这样控制管的基极参考电压可以直接对地,电路更简单。
第二步,选参考电压。因为温度范围有30摄氏度,二极管方案漂移太大,我选了绿色LED。实测这只LED在5mA下的正向压降是1.95V,温度系数大约-0.4mV/摄氏度。
第三步,算采样电阻。Iout = (Vref - Vbe) / Rsense。Vref = 1.95V,Vbe取0.65V,Rsense = (1.95 - 0.65) / 5mA = 260欧姆。选270欧姆的1%精度电阻,实际电流 = 1.3V / 270 = 4.81mA,在5%误差范围内。
第四步,选三极管。手头有2N3904,hFE实测分别是180和210。主管用210的,控制管用180的。2N3904的Ic_max是200mA,Vceo是40V,都够用。
第五步,搭电路。在洞洞板上,先焊主管,再焊控制管,然后焊采样电阻和LED。LED的限流电阻用1k欧姆,从12V供电,电流大约是(12 - 1.95) / 1k = 10mA,LED亮度足够,也不会太热。
4.2 关键节点的实测数据
搭好之后,我用万用表测了几个关键点。电源电压12.0V,LED两端电压1.94V,主管基极电压1.94V(和LED正极一样),控制管基极电压1.94V,控制管发射极电压0.65V,采样电阻两端电压0.65V,输出电流 = 0.65V / 270 = 2.41mA。
等等,这个电流只有2.41mA,不是我要的5mA。问题出在哪里?我重新算了一下:控制管的基极接在LED正极,电压是1.94V。控制管的发射极接在主管的发射极,也就是采样电阻的上端。控制管要导通,Vbe需要大约0.65V,所以发射极电压应该是1.94 - 0.65 = 1.29V。但实测只有0.65V,说明控制管没有正常导通。
检查后发现,我把控制管的基极接错了,接在了LED的负极而不是正极。LED负极的电压是1.94 - 1.95 = -0.01V,接近零。控制管基极电压为零,发射极电压0.65V,Vbe是负的,控制管截止,整个反馈环路没工作。把基极改接到LED正极后,再测:控制管发射极电压1.29V,采样电阻两端电压1.29V,输出电流 = 1.29 / 270 = 4.78mA。和计算值4.81mA非常接近,误差不到1%。
这个坑很典型:参考电压的接点一定要接对。LED正极是参考电压输出点,负极是接地(通过限流电阻接电源正极,等等,这里LED的接法也要说一下)。LED的接法是:正极接控制管基极,负极通过1k电阻接电源正极?不对,这样LED不会亮。
正确的接法是:LED正极通过1k电阻接电源正极,负极接控制管基极。这样LED的电流从电源正极经过电阻、LED、控制管基极-发射极-采样电阻到地。LED正向导通,正极电压比负极高大致的正向压降。控制管基极接在LED负极,电压等于电源电压减去电阻压降再减去LED压降。实际上,控制管基极电压就是LED负极电压,大约是电源电压减去LED压降再减去电阻压降。
我重新理一下:电源12V,电阻1k,LED压降1.95V,控制管Vbe 0.65V,采样电阻压降1.29V。总压降 = 1.95 + 0.65 + 1.29 = 3.89V。电阻上的压降 = 12 - 3.89 = 8.11V,电阻电流 = 8.11mA。这个电流就是LED电流,也是控制管基极电流。控制管基极电流8.11mA,集电极电流需要从主管基极抽走。主管输出5mA,假设hFE是200,基极电流需要25uA。控制管抽走8.11mA,远远大于25uA,所以控制管处于深度导通状态,反馈环路工作正常。
提示:控制管基极电流不宜过大,否则LED功耗和电阻功耗都上去了。一般来说,控制管基极电流取输出电流的1到2倍就够了。如果输出电流是5mA,控制管基极电流取5到10mA比较合适。我这次取8.11mA,正好在范围内。
4.3 性能实测与温度漂移测试
电路搭好后,我做了一组温度测试。用热风枪给三极管加热,同时用万用表监测输出电流。室温25摄氏度时,输出电流4.78mA。加热到40摄氏度时,输出电流4.72mA,变化了1.3%。加热到60摄氏度时,输出电流4.65mA,变化了2.7%。这个漂移主要来自LED的温度系数和采样电阻的温度系数。
对比之前用两只1N4148做参考的版本,同样从25摄氏度加热到60摄氏度,输出电流从4.82mA变到4.15mA,变化了14%。绿色LED方案的漂移只有二极管方案的五分之一,效果非常明显。
电源电压调整率也测了一下。电源从10V变到15V,输出电流从4.76mA变到4.79mA,变化了0.6%。这个变化主要来自三极管的厄利效应(Early Effect),即集电极-发射极电压变化导致集电极电流变化。对于大多数应用,0.6%的电源调整率完全够用。
5. 常见问题与排查技巧实录
5.1 输出电流偏差大的排查思路
输出电流和计算值偏差大,是最常见的问题。排查顺序是这样的:先测参考电压,再测采样电阻,最后测三极管。
参考电压偏差是最常见的原因。如果用二极管做参考,正向压降的离散性很大,同一批1N4148的压降可能从0.6V到0.75V不等。两只串联就是1.2V到1.5V,差了25%。解决方法是实测筛选,或者改用LED加实测校准。
采样电阻偏差是第二常见的原因。5%精度的电阻,阻值偏差就有5%,输出电流偏差也有5%。如果电阻还发热,阻值会进一步漂移。解决方法是换1%精度电阻,功率留足余量。
三极管hFE偏差也会影响输出电流,但影响相对小。因为反馈环路的作用,hFE变化对输出电流的影响被大大削弱了。实测hFE从150变到250,输出电流只变化了2%左右。但如果hFE太低(比如低于50),反馈环路增益不够,输出电流就会明显偏大。
5.2 电路振荡的抑制方法
有些情况下,这个电路会振荡,表现为输出电流不稳定,用示波器看能看到周期性波动。振荡的原因是反馈环路相位裕度不够。解决方法有三个:第一,在主管基极和集电极之间加一个小电容(100pF到1nF),降低高频增益。第二,在控制管基极和发射极之间加一个小电容(100pF到1nF),同样降低高频增益。第三,增大控制管基极的限流电阻,降低环路增益。
我遇到过最严重的一次振荡,频率大约200kHz,幅度大约10%的输出电流。加了1nF的补偿电容后,振荡完全消失。补偿电容的位置很关键,加在主管基极和集电极之间效果最好,因为这里阻抗最高,电容的米勒效应最明显。
注意:补偿电容不宜过大,否则会降低环路的响应速度。如果负载是动态变化的,响应速度太慢会导致电流跟不上。一般来说,100pF到1nF是比较合适的范围。
5.3 常见问题速查表
| 问题现象 | 可能原因 | 排查方法 | 解决方案 |
|---|---|---|---|
| 输出电流为零 | 控制管基极接错 | 测控制管基极电压 | 改接到参考电压正端 |
| 输出电流偏大 | 采样电阻偏小 | 测采样电阻阻值 | 换精度更高的电阻 |
| 输出电流偏小 | 参考电压偏低 | 测参考电压 | 换压降更高的参考源 |
| 电流随温度漂移大 | 参考源温度系数大 | 加热测试 | 换LED或TL431参考 |
| 电流振荡 | 环路相位裕度不足 | 示波器看波形 | 加补偿电容 |
| 电流随电源电压变化 | 厄利效应 | 调电源电压测试 | 加 cascode 结构 |
| 三极管发热严重 | 功耗过大 | 测Vce和Ic | 换功率更大的管子 |
5.4 几个容易被忽略的实操细节
第一个细节:控制管的集电极电流不能太大。控制管集电极接主管基极,主管基极电压大约是0.65V(对发射极)。控制管集电极-发射极电压 = 主管基极电压 - 控制管发射极电压 = 0.65 - 1.29 = -0.64V。等等,这个电压是负的?说明控制管集电极电位低于发射极电位,控制管处于饱和状态。饱和状态下,控制管集电极电流由外部电路决定,不受hFE控制。这其实是正常的工作状态,控制管就是要在饱和区工作,才能有效分流主管基极电流。
第二个细节:主管的集电极-发射极电压不能太低。如果电源电压太低,主管进入饱和区,恒流特性就失效了。主管正常工作时,Vce至少要有1V以上。如果电源电压是5V,负载压降是3V,采样电阻压降是1.3V,主管Vce只有0.7V,就接近饱和了。这种情况下,恒流精度会明显下降。解决方法是提高电源电压,或者降低采样电阻压降。
第三个细节:两只三极管的温度要尽量一致。如果一只热一只冷,Vbe的差异会导致电流偏差。在PCB布局时,把两只三极管放近一点,最好贴在一起,用热缩管套住,这样温度一致性最好。我实测过,两只管子温差5摄氏度时,输出电流偏差大约1%。温差20摄氏度时,偏差大约4%。
6. 性能优化的几个进阶方向
6.1 用 cascode 结构提高电源调整率
如果对电源调整率要求高,可以在主管上面再串一只三极管,构成cascode结构。cascode结构能大大削弱厄利效应的影响,电源调整率可以从0.6%降到0.05%以下。代价是多一只三极管和一只偏置电阻,成本增加不到一毛钱。
cascode的接法是:主管的集电极接cascode管的发射极,cascode管的集电极接电源正极,cascode管的基极接一个固定偏置电压(比如用两只二极管串联产生1.2V)。这样主管的集电极-发射极电压被固定在1.2 - 0.65 = 0.55V左右,不随电源电压变化,厄利效应就被抑制了。
6.2 用运放做误差放大器进一步提升精度
如果对精度要求极高(比如0.1%级别),可以用一只运放替代控制管。运放的同相输入端接参考电压,反相输入端接采样电阻上端,输出端接主管基极。运放的高增益把采样电阻上的电压精确钳位到参考电压,输出电流精度可以做到0.1%以内。当然,成本从几毛钱变成了几块钱,电路也复杂了不少。这个方案适合对精度有极致要求的场合,比如精密仪器。
6.3 用 PWM 调制实现可调恒流
如果需要输出电流可调,可以用PWM信号控制参考电压。具体做法是:用PWM信号驱动一只MOS管,MOS管的漏极通过RC滤波器产生可调的直流电压,这个电压作为参考电压。PWM占空比从0%变到100%,参考电压从0V变到最大值,输出电流也跟着变。这个方案的好处是可以用单片机直接控制,不需要DAC。PWM频率建议在10kHz以上,RC滤波器的截止频率在100Hz以下,这样纹波可以控制在1%以内。
我自己用这个方案做过一个可调恒流LED驱动器,PWM频率20kHz,RC滤波器用10k电阻和1uF电容,截止频率16Hz。实测输出电流纹波小于0.5%,肉眼完全看不出LED闪烁。这个方案的成本比专用恒流IC低很多,而且灵活性更高,想改电流曲线改程序就行。
6.4 用热敏电阻做温度补偿
如果环境温度变化范围很大(比如户外应用,-20到60摄氏度),即使用LED做参考,电流漂移也可能超过5%。这时候可以用一只热敏电阻做温度补偿。具体做法是:在控制管基极的参考电压分压电路中,把下分压电阻换成NTC热敏电阻。温度升高时,NTC阻值减小,分压点电压升高,补偿参考电压的下降。选对NTC的B值和分压电阻,可以把温度漂移补偿到1%以内。
这个方案需要一些调试,因为NTC的B值离散性也很大。我的经验是:先用可调电阻代替NTC,在高温和低温下分别调整到电流一致,然后测出可调电阻的阻值,再选相近的NTC。这样一次就能选对,不用反复试。
7. 我踩过的坑和最后分享几个小技巧
第一个坑:一开始我用的是9013,hFE离散性太大,同一批管子从80到280都有。搭出来的电路,换一只管子电流就变一次。后来改用2N3904,hFE集中在150到250之间,一致性好很多。如果你要用9013,一定要先测hFE,挑两只接近的用。
第二个坑:采样电阻我用过碳膜电阻,5%精度,而且温漂大。夏天室温35摄氏度时,输出电流比冬天5摄氏度时大了8%。后来换成1%精度的金属膜电阻,温漂降到1%以内。这个钱不能省,一毛钱的电阻和两毛钱的电阻,性能差好几倍。
第三个坑:PCB布局时,我把采样电阻的地线和控制管发射极的地线分开走了,结果两段地线之间有10毫欧的公共阻抗。10mA电流下,10毫欧产生0.1mV压降,看起来很小,但采样电阻上的电压只有0.65V,0.1mV就是0.015%的误差。虽然不大,但对于要求1%精度的场合,这个误差已经不能忽略了。后来我把两根地线合并,单点接地,问题解决。
最后分享一个小技巧:如果你手头没有合适的采样电阻,可以用两只电阻并联来凑。比如需要56欧姆,手头只有100欧姆和120欧姆,并联是54.5欧姆,接近56欧姆。并联后的精度取决于两只电阻的精度,如果两只都是1%,并联后还是1%。但要注意功率分配,并联后总功率是两只电阻功率之和,但每只电阻的电流不是均分的,阻值小的分到的电流大,功耗也大。算功耗时要按阻值小的那只算。
还有一个技巧:调试时如果发现电流不对,先别急着换电阻,先测一下参考电压。参考电压对了,再测采样电阻。这两个都对了,再查三极管。我遇到过好几次,折腾半天换电阻换三极管,最后发现是参考电压的接点虚焊了。所以排查顺序很重要,从简单到复杂,从外部到内部。
这个电路我用了好几年,搭过至少几十次,每次都能稳定工作。它的魅力就在于简单、便宜、可靠。两颗三极管、三只电阻、一只LED,成本不到一块钱,性能却能满足大多数场合的需求。如果你还没试过这个电路,强烈建议搭一个试试,花不了半小时,但学到的东西比看十页教材都多。