
1. 恒流源的基本原理与方案选型1.1 恒流源到底是什么为什么不能直接串个电阻在聊三极管发烫之前先把一个底层问题说清楚恒流源和恒压源到底差在哪普通的直流电源是恒压源你设一个12V它就把输出端电压稳定在12V输出电流取决于负载。LED灯条、激光二极管、电池充电这类器件恰恰相反它们需要的是电流恒定而不是电压恒定。以LED为例它的正向压降会随温度变化同一个LED冷态和热态电压可能差出几百毫伏。如果你用稳压源去驱动电压稍微偏高一点电流可能就翻倍LED直接烧掉。而恒流源天生不管负载电压怎么变我只保证流过你的电流是设定值这就解决了LED驱动、电池充电、传感器激励等一系列问题。最偷懒的办法是串一个电阻限流比如12V驱动一个3V的LED想要350mA就串一个12-3/0.35 ≈ 26Ω的电阻。这个电路确实能工作但它的电流精度完全依赖电源电压和LED压降的稳定性。电源从12V飘到12.5V电流就变成12.5-3-0.35×26/26 ≈ 0.365A瞬间涨了4%以上。温度再一变化LED压降下降电流涨得更离谱。所以在电流精度要求稍高的场合单纯串电阻的方案直接出局。1.2 常见恒流方案的优缺点对比做一个真正“恒”的电流源业界有几种典型路线各有各的适用场景。第一个是分立三极管恒流源典型结构是两个三极管组成电流镜或者用一个稳压管配合三极管做简单恒流。优点是元件少、成本极低、没有运放也能干缺点是精度一般受三极管Vbe随温度变化的影响比较大设定电流也不方便调。第二个是集成恒流IC比如LM317的恒流接法、各种LED驱动芯片、开关模式恒流芯片。优点是外围简单、性能可靠缺点是固定芯片可选范围有限有些场合想实现一个“任意可调”的电流源反而被芯片规格绑死了。第三个就是LM358这类通用运放配上采样电阻、基准电压和功率三极管或者MOSFET构成闭环线性恒流源。这个方案的可调范围极大从毫安级到安培级都能做精度只取决于基准电压和采样电阻的精度而且原理直观、方便调试是很多工程师入门恒流源的第一课也是DIY圈子里出镜率最高的结构。这篇博文要聊的就是第三种方案里最常见的坑为什么电路功能明明正常三极管却烫得能摊鸡蛋。1.3 为什么LM358出场率这么高选LM358做恒流源不是因为它多先进而是因为便宜、皮实、随处能买到。一颗双运放才几毛钱单电源3V到30V都能工作静态电流也小输出能力在20mA左右驱动一个小功率三极管的基极绰绰有余。再加上它支持单电源供电在常见的12V、24V系统里可以直接用不需要额外搞一组负电源。但必须泼一盆冷水LM358的输入偏置电流在运放里算大的失调电压也比较高带宽更是只有1MHz左右。这些参数在恒流源这种用途上一般够用但如果你做的是高精度小电流恒流源比如设定1mA以下LM358的短板就会非常明显这个后面会展开细说。选型之前先认清它的能力和边界能帮你省掉很多排查问题的时间。2. 三极管发烫的根本原因分析2.1 发热的本质功耗都去哪儿了很多人在三极管发烫时第一反应是“电流太大了换个更大的管子”。这个思路对了一半但没说到根子上。真正让管子烫的不是电流本身而是功耗。功耗才是发热的唯一来源。在线性恒流源里三极管承载的功耗可以用一个非常简单的公式描述P Vce × Ic其中Vce是三极管集电极和发射极之间的电压差Ic是集电极电流。这还没算基极驱动那点功耗实际计算时通常忽略因为太小了。这个公式的内涵是电源送进来的总功率一部分给了负载剩下的全压在三极管上由它扛下来变成热量。你可以想象成一条水管水流是电流水压是电压。负载把一部分压力耗尽做有用功剩下的压力在阀门上全被憋掉了阀门就是那个三极管。举个例子12V电源驱动一串3V的LED灯设定电流350mA。如果采样电阻压降0.15V那么三极管上的Vce就是12 - 3 - 0.15 8.85V。此时三极管功耗P 8.85V × 0.35A ≈ 3.1W3W是什么概念一颗TO-92封装的9013也就是最常见的直插小管热阻约200°C/W无散热情况下温升就是3×200 600°C瞬间烧穿。就算你侥幸没烧摸一下也是烫到条件反射缩手。所以“三极管发烫”根本不是玄学也不是器件质量问题而是线性恒流源天生的物理代价。只要input电压高于负载电压高出来的那份压差注定要有人来扛选择了线性方案这个“人”就是调整管。2.2 三极管工作状态决定发热量别把放大区当饱和区想彻底理解三极管为什么发烫得先搞清楚它工作在哪个区。很多初学者在三极管的基础概念上栽了跟头。三极管有三个工作区截止区、饱和区、放大区。截止区里Ic基本为0功耗也接近0不发热饱和区里Vce很小通常只有0.1V到0.3V就算电流很大P Vce × Ic也非常小管子不热放大区最“要命”Ic大、Vce也大两者一乘大得惊人。普通三极管开关电路要求三极管工作在饱和区和截止区之间切换这就是“三极管开关电路”热词背后那一堆概念的核心。比如驱动继电器管子要么截止、要么饱和这样才能把发热降到最低。但恒流源电路恰恰相反它要求三极管稳定工作在放大区因为只有让三极管处于“半开不开”的状态它才能像可变电阻那样动态调节吸收电源和负载之间的电压差把电流稳定住。这就引出一个很多人想不通的问题为什么明明做了恒流源三极管却工作在放大区答案很简单恒流源的本质就是让调整管在线性区工作用改变管压降的方式来补偿负载变化。这不是设计失误而是工作原理本身带来的结果。你不可能让恒流源的三极管像开关电路那样只工作在饱和区如果那样电流会失控恒流功能直接失效。2.3 常见设计误区为什么你的三极管比我的热我见过太多三极管发烫的案例总结下来有四个高频误区。误区一是拿开关管的选型思路去挑恒流管。很多人习惯性用9013、8050这类TO-92小管去驱动LED在开关电路里它们能扛500mA因为它们饱和导通时Vce只有0.2V功耗才0.1W。但放进恒流源同样500mA的电流Vce可能高达好几伏功耗直接翻了几十倍小管子当然秒烫。选型时必须看功耗而不是只看电流。误区二是一味抬高电源电压。曾经有人问我为什么我的恒流源三极管烫到冒烟我看完电路图发现他的负载只要5V电源却用了24V“余量”拉得特别大结果剩余的19V全压在管子上功耗大得离谱。记住线性恒流源的效率约等于负载电压除电源电压压差越大效率越低三极管越烫。误区三是采样电阻取值太随意。有人习惯选1Ω、2Ω甚至10Ω的采样电阻觉得阻值越大采样信号越强。问题是采样电阻上的压降Rs×I不是免费的它直接吃掉一部分电源电压间接增大三极管Vce让管子白白多扛功耗。误区四是不加散热就上大电流。电源工程师之间有一句话“线性电路不发烫说明功率没到位。”如果预期功耗有1W以上却连一片小散热片都不加那就是在赌三极管的寿命。3. LM358恒流源电路设计与参数计算3.1 基本电路结构与反馈回路现在我们聚焦LM358恒流源的经典电路。它的结构如下电源正极接入负载比如LED灯串负载另一端接三极管的集电极三极管的发射极接采样电阻采样电阻另一端接地。LM358的输出脚通过一个基极电阻接到三极管的基极。LM358的反相输入端2脚接到采样电阻和发射极的连接点同相输入端3脚接基准电压。这个电路的反馈逻辑非常巧妙。当负载电流变大采样电阻上的压降跟着变大反相输入端电压升高。运放会努力让两个输入端的电压相等也就是“虚短”于是它降低输出电压三极管基极电流减小集电极电流回落。反之如果电流变小运放抬高输出基极电流增大电流回升。整个环路每秒都在纠正误差最终把电流稳定在I Vref / Rs其中Vref是同相输入端基准电压Rs是采样电阻。顺便一提“LM358电压跟随器”之所以在很多恒流源教程里被反复提起是因为这种虚短原理本质上就是电压跟随的延伸只不过LM358在这里把电压跟随变成了电流跟随。3.2 实战参数设计一个100mA恒流源的完整计算拿一个具体的例子来算一遍这次目标是设计一个12V输入、100mA恒流的单颗LED驱动。第一步选采样电阻。如果选Rs 1Ω那么基准电压需要设定为Vref I × Rs 0.1A × 1Ω 0.1V0.1V这个电压比较低用电阻分压方式来生成的话任何一点小噪声都会被放大。更稳妥的做法是用TL431做2.5V基准再用精密电阻分压到0.1V。但要注意LM358的输入失调电压典型值是2mV最差可能有5mV以上。对0.1V的基准来说2mV就是2%的电流误差这个精度还能接受但如果目标电流是10mA以下Vref只剩10mV甚至更低2mV就变成20%以上的误差了那时候你调电位器怎么调电流都不准别在电路其它地方瞎找原因先怀疑运放失调电压。第二步计算三极管功耗。LED压降按3V算采样电阻压降0.1V则三极管VceVce 12 - 3 - 0.1 8.9V功耗P 8.9V × 0.1A 0.89W0.89W对于TO-92封装来说还是太大了前面算过它无散热热阻约200°C/W温升将近178°C结温远超150°C上限。所以必须选用TO-220封装或者至少TO-126封装的管子比如常见型号SS8550是TO-92的不行换成TIP31C、BD139这类TO-220封装的无散热时热阻约60°C/W左右0.89W温升约53°C室温25°C时结温大约78°C虽然烫手但还在安全范围。如果想更凉快加一小片散热片热阻能降到15°C/W以内温升只有约13°C。第三步算基极驱动。假设三极管β为100那么确保饱和到放大区所需的基极电流为Ib Ic / β 100mA / 100 1mALM358输出能力是20mA左右驱动1mA完全没压力。基极串联电阻取1kΩ到4.7kΩ主要目的是防止运放自激振荡同时限制过冲电流。取值大一点会更稳定但太大可能压缩驱动能力我习惯取1kΩ在100mA级别很好用。3.3 毫安级恒流的精度坑如果你要做的不是100mA而是1mA级别的恒流源前面的计算方法依然正确但有几个额外的坑必须知道。第一采样电阻阻值必须大幅提高。想用1Ω电阻采样1mA电流Vref只有1mV运放根本没法精确控制。合理做法是Rs取100ΩVref取0.1V这时候采样电阻上的功耗是I²R 0.0001W微不足道。但要注意100Ω电阻上只有1mA电流普通贴片电阻的精度和温漂影响会被放大必须选精密度高的低温漂电阻。第二LM358的输入偏置电流会直接参与误差。LM358的输入偏置电流典型值45nA看起来不大但如果采样电阻取得特别大比如10kΩ那45nA在10kΩ上产生的电压是0.45mV和1mA经10kΩ采样产生的10V基准电压相比可以忽略但如果你用运放做的是超低电流源这个偏置电流就不再是零而会流进反馈网络引起误差。这种情况下应该换用FET输入的运放比如TL081系列。3.4 如何扩展到大电流恒流当恒流源要做到1A以上时LM358的20mA输出能力驱动三极管依然够用因为一只中功率管β值通常有50到150倍1A只需要约10mA到20mA基极电流刚好压线。如果你用的是大功率达林顿管比如TIP120其β能到1000以上驱动电流更不是问题。但这时候更大的敌人是功耗。假设要做1A负载还是3V输入12VVce 12 - 3 - 0.15 8.85VP 8.85W。8.85W几乎是任何无散热措施下TO-220封装的极限不加散热片的TO-220热阻约60°C/W温升531°C瞬间冒烟。必须加大尺寸的散热器同时用导热硅脂填充接触面甚至要考虑风扇。当功耗超过10W级别我的个人建议是放弃线性方案要么降低电源电压要么改用DC-DC开关恒流方案。线性恒流源的物理天花板摆在那里再纠结散热问题就有点本末倒置了。4. 散热设计与器件选型指南4.1 用热阻模型精准判断到底需要多大散热器很多人在“三极管烫不烫”这件事上没有量化概念总是凭手感。其实热设计和电路设计一样是可以精确计算的。核心就是欧姆定律的热学版ΔT P × Rth其中ΔT是温升单位°CP是功耗单位WRth是热阻单位°C/W。热阻越小散热能力越强。常见封装的热阻参考值如下封装/散热方式热阻 (°C/W)适合功耗范围TO-92无散热器约180~2200.1W以内TO-126无散热器约80~1000.5W以内TO-220无散热器约60~801W以内TO-220小型散热片约10~201~5WTO-220大散热片风扇约2~55~20W实际计算时结温公式为Tj Ta P × (RthJC RthCS RthSA)Ta是环境温度RthJC是管壳到结的热阻封装自带的RthCS是管壳到散热器的接触热阻具体取决于是否用导热硅脂RthSA是散热器对环境的热阻。初次做散热的工程师记简化版就够了用封装的热阻估算温升再留出余量。举例来说前面算出的0.89W功耗如果选择TO-220封装不带散热器按70°C/W热阻算温升0.89×70 62°C。夏天机箱内环境温度可能到45°C那结温就是45 62 107°C虽然没到150°C的极限但已经很危险了。如果环境温度更高或者在通风不良的密闭设备里这个余量会迅速耗尽。这时加一小片散热器把热阻压到15°C/W以内结温降到58°C左右手摸上去温热这才算真正安全。4.2 三极管选型建议别再用小管子扛大功率很多从单片机入门开始玩电子的朋友手边囤得最多的是9013、8050、8550这类小管养成了“什么电路都用它”的习惯。恒流源的选型逻辑和开关电路完全不同这里给出几条实用的选型经验。输出电流50mA以内功耗低于0.2WTO-92封装勉强能用但要注意通风。输出电流100mA到500mA功耗可能到1W以上老老实实上TO-220或TO-126封装。输出电流1A以上功耗几瓦到十几瓦必须选TO-220甚至TO-3P封装同时配散热器“三极管和MOS管的区别”在这里就体现实质了MOS管作为电压驱动型器件在大电流场合驱动更简单、热稳定性更好线性恒流源里拿MOS管做调整管同样可行且损耗更小。还有一个很多人没有注意过的细节Vce(sat)参数。三极管的饱和压降数据表上写得很清楚但线性恒流里的管子不工作在饱和区所以那个参数不适用。你需要关心的反而是在放大区时某个Vce下允许的最大电流和最大功耗这要看SOA安全工作区曲线。正规厂商的Datasheet上都有SOA图选型时务必要看一眼确保工作点落在安全区内。4.3 散热器和电路布局的关键细节散热器不是随便拧上去就完事的。首先是接触面TO-220凸出的金属面和三极管内部的晶片直接相连要想热量顺畅导出来必须保证接触面平整贴合中间涂匀导热硅脂不然热量卡在缝隙里散热器形同虚设。然后是电气隔离问题。TO-220的金属背板通常跟集电极同电位如果你的电路里集电极不是地螺装散热器时就必须加云母垫片和绝缘垫圈否则散热器一碰机壳直接短路。我见过不止一个初学者把散热器装上后电路冒烟最后发现是三极管的集电极通过散热器碰到了地上。PCB布局上采样电阻要离功率三极管远一点。采样电阻阻值小对温度敏感如果贴着热源放电阻阻值随温度漂移恒流值就会跟着飘导致一开机电流还在慢慢变这是我实测过的真实情况不是理论推测。基准电压的分压电阻也一样尽量远离发热源。另外LM358本身也要避开散热器的高温风道。运放的失调电压受温度影响热源在旁边烤基准电压也会缓慢漂移表现出来就是恒流值随设备运行时间慢慢变很多人查半天查不到原因其实是对流热风吹到了运放上。5. 常见问题与排查技巧实录5.1 一上电三极管就烧是怎么回事这是恒流源新手最容易碰到的事故。烧管的原因大多数不是电流设定太大而是上电瞬间的电流冲击。因为LM358的反馈环路建立需要时间上电瞬间运放输出可能立刻跳到最高基极电流猛灌三极管瞬间进入最大导通状态负载和采样电阻还没来得及建立起反馈电压电流就可能冲到好几倍额定值把管子当场击穿。解决方法是加软启动。最简单的做法是在基准电压脚和地之间并一个1uF到10uF的电容让基准电压在上电时缓慢爬升电流也随着基准爬升逐渐建立而不是瞬间冲顶。另一种更稳妥的做法规避风险但是占空间如果你空间允许可以在三极管基极串联一个10uF电容到地形成RC延迟限制基极电流的上升速率。还有一类烧管原因是把三极管管脚接反了。TO-220封装的引脚定义不同型号并不完全一样TIP31C的引脚排列和BD139可能就不同拿到手一定对着数据手册核实别想当然按上次用的接。这个低级错误我实习时也犯过上电就烧排查半天最后对着规格书一看顺序确实不对。5.2 输出电流稳定但LM358烫手正常吗三极管不烫了但LM358烫手这种问题我也遇到过。LM358自身功耗很低通常几十毫瓦正常工作时温升可以忽略。如果它烫手说明输出脚上有很大的电流。最大嫌疑是基极电阻被短路或者阻值太小LM358直接驱动一个近似大功率器件等于把十几毫安当负载灌运放内部输出管扛不住。另一个可能是电路发生了高频振荡。LM358这种运放带宽不高但如果走线特别长、基极串的电阻太大反馈环路相位裕度不足就会在几百kHz的频率上振荡。振荡期间运放输出管以高频状态不断开关等效功耗暴增芯片发热、电流表读数乱跳、三极管也会异常发烫。排查振荡的办法是用示波器看采样电阻上的波形如果看到几百kHz的等幅振荡十有八九就是自激。处理方式是基极电阻保持在1kΩ到10kΩ之间不要取得太大同时在反相输入端到地加一个几十pF到几百pF的电容削弱高频环路增益振荡就会压住。5.3 电流设置值调不准换了管子后漂得更厉害恒流值漂移的根源一般有三个采样电阻、基准电压、运放输入失调电压。采样电阻必须选温漂小的类型。普通碳膜电阻温漂可能到几百ppm/°C大电流流过去自身发热阻值慢慢变大恒流值就慢慢变小。我实测过普通1/4W碳膜电阻350mA电流下工作半小时恒流值能漂近3%很多人把这个罪状扣到三极管头上其实三极管很冤枉。正确选择是金属膜电阻精度1%温漂50ppm/°C以内或者直接上合金采样电阻。基准电压也一样。用TL431做基准的电路温漂远小于运放本身的漂移但如果只靠电阻分压从电源取基准而电源本身有纹波或者随温度变化恒流值就会跟着变。为了降低成本而砍掉基准芯片往往得不偿失。另外如果你的基准电压是电位器分压出来的一定要选多圈精密电位器普通单圈电位器稍微震动一下数值就变了而多圈电位器在振动环境里也能保持稳定这是我在振动测试设备上筛选出来的教训。三极管本身的Vbe随温度变化确实会影响恒流精度但LM358的环路会补偿大部分Vbe变化所以实际贡献不大真正限制精度的是采样电阻、基准和运放失调。5.4 如何验证恒流源是真的恒流最后送一个验证方法。恒流源接入负载时你用万用表测采样电阻上的电压算出电流。然后故意换一个不同压降的负载比如把单颗LED换成两颗串联正常情况下电流应该基本不变。如果电流变了说明环路有问题通常是反馈没接对或者运放输出饱和了。更严谨的测试是在采样电阻两端并联示波器观察瞬态响应。负载从轻载突变到重载时电流如果出现长时间振荡或者明显过冲说明环路余量不足这时调整基极电阻和补偿电容就会见效果。5.5 一个完整的实战案例24V驱动6颗串联LED这是我自己做的一个LED灯条驱动案例贴出来供你参考。负载是6颗串联LED总压降约18V设计恒流300mA输入电源24V选用TL431做2.5V基准用10kΩ多圈电位器和1kΩ固定电阻分压输出0.15V给LM358同相输入端。采样电阻Rs取0.5Ω恒流值I 0.15V / 0.5Ω 0.3A正常工作Vce 24 - 18 - 0.15 5.85V功耗P 5.85 × 0.3 ≈ 1.76W调整管选了TIP41CTO-220封装加了约8cm²的小散热片实测运行一小时外壳温度稳定在52°C左右恒流值从300mA漂到298mA按这个功耗和温升评估整个方案的余量设计是合格的。如果你抄这个电路作业最需要注意两个地方一是TL431的阴极和参考脚之间要接消振电容否则基准会轻微自激二是采样电阻要用5W以上的大功率类型0.3A流过0.5Ω电阻的功耗只有0.045W但留功率余量可以降低温漂我选的是5W绕线电阻温度系数很稳定。6. 一些测量与调试的技巧补充6.1 万用表、示波器、假负载的配合用法测量恒流源时万用表串联测电流是最直观的。但要注意万用表的电流档内阻会串进电路改变电路的工作点所以我更喜欢直接测采样电阻两端电压再换算成电流这样测量不影响原电路工作。采样电阻阻值精确的前提下这个方法比串联万用表更准。示波器主要用来观察振荡。测量时要配10x探头并尽量缩短地线夹的长度否则探头上捡的噪声会掩盖真实信号。如果你发现电流波形有高频毛刺先怀疑探头的接地方式再怀疑电路。假负载电子负载是好工具但DIY玩家不一定有。可以用大功率电阻串联LED、灯泡等方法代替。特别提醒调试恒流源时不要用一头直接接地的灯丝灯泡冷态电阻和热态电阻差异大冷态阻值低到接近短路可能触发保护。6.2 上电前的检查清单正式上电之前我习惯按这个顺序检查一遍先查基准电压是否正常通常在0.1V到2.5V之间再查采样电阻阻值是否符合设计然后查三极管引脚和散热器绝缘最后查看电源电压是否真的是设定的值电源电流是否预先限到低于设计值因为电源限流能避免很多灾难。第一次上电时永远把电源限流调到比目标电流小20%确认电流正常建立后再慢慢放开限流值这个习惯帮我省下了一堆替换料。直流稳压电源本身的限流功能是调试恒流源时最好的保护手段。恒流源没接负载时整个环路可能处于不可控状态输出端电压悬空很高而直流电源喂给恒流源的电流却被限住这样即使电路里有什么异常三极管能承受的损坏也有限。6.3 要不要换成MOS管做调整管很多人在三极管发烫问题上反复挣扎之后会问我一个问题能不能直接用MOS管替换三极管答案是完全可以而且大电流恒流源我非常推荐用MOS管。MOS管是电压驱动型器件栅极电流几乎为0LM358驱动起来非常轻松而且它的导通电阻很低在线性区工作时调整管上的压降和电流的乘积依然是功耗但它往往具备更好的SOA和更低的热阻。最核心的区别是三极管在线性区需要持续的基极电流MOS管只需要栅极电压这意味着同样的运放输出能力MOS管能控制更大的输出电流。替换电路只改栅极接法LM358输出脚串一个100Ω到1kΩ的电阻接MOS管栅极同时栅极到地加一个10kΩ的下拉电阻防止上电瞬间MOS管误导通。采样电阻和反馈接法完全不变。唯一要注意的是MOS管在线性区的稳定性和三极管不一样它的跨导高更容易振荡栅极串电阻这个位置非常关键别省。但MOS管也不是万能钥匙。如果你做的还是几百毫瓦级别的LED恒流三极管方案的成本优势依然明显。以我的经验1A以上优先MOS500mA以下用三极管更顺手中间地带看手头物料。