☰
LM317变恒流源:一颗电阻实现精密电流输出的完整指南
2026/10/7 16:00:45 网站建设 项目流程

一说到LM317,十个玩过电源的人里,有九个第一反应是“三端可调稳压器”,也就是典型的电压源芯片。但我要先抛一个反直觉的结论:这颗被当成电压源用了四十多年的老芯片,只需要在OUT和ADJ之间跨一颗电阻,就能变成一台性能相当不错的恒流源,电流精度能做到百分之几以内,最大到1A以上也不稀奇。

这不是什么隐藏功能,也不是玄学,而是LM317骨子里的工作方式决定的。LM317内部始终在维持1.25V基准电压,基于这个特性,做电流源只需要“借”一个电阻而已。这篇文章我会把LM317从电压源改造成电流源的原理、标准接法、参数计算、仿真验证和实作中会踩的坑一次讲透。内容适合刚入门的电子爱好者,也适合实验室里急需一个临时恒流源的工程师参考。

1. 明明是颗电压源芯片,为什么能输出恒定电流?

1.1 关键在稳定于OUT和ADJ之间的1.25V基准

先把LM317的脾气摸清楚。它是一颗线性可调稳压器,内部有一个精密的1.25V基准电压,还有一个误差放大器。误差放大器时刻盯着OUT脚和ADJ脚之间的电压差,目标就是把这个差值稳定在1.25V。

这句话听起来简单,但它的含义很特别:LM317并不直接“规定”OUT脚对地是多少伏,它只规定OUT脚比ADJ脚高1.25V。ADJ脚本身几乎不取电流,典型只有50µA左右的调整端电流。所以在标准可调电源电路里,把ADJ接到两个电阻的分压点上,输出就是:

Vout = 1.25 × (1 + R2 / R1) + Iadj × R2

很多资料直接给公式,不解释来源。这里需要记住的只有一件事:LM317真正控制住的,不是绝对电压,而是一个“OUT对ADJ的差值”。

为了好记,我习惯把它想成电梯司机。LM317就像一位电梯司机,他根本不关心乘客在哪一层,他只保证自己永远比乘客高1.25层。如果乘客在5楼,他就在6.25楼;如果乘客在10楼,他就在11.25楼。乘客楼层怎么变,这个高度差雷打不动。

1.2 把负载放进“1.25V闭环回路”里,电流就稳住了

前面说的“乘客”就是ADJ端所连的电位。那么,能不能让“司机和乘客之间的高度差”变成一个固定电流?当然可以——在OUT和ADJ之间焊一个电阻Rset。

因为这两个脚之间的电压被死死稳定在1.25V,所以流过Rset的电流必然是:

I = 1.25V / Rset

这个电流从OUT脚出来,经过Rset到达ADJ节点。ADJ脚本身只抽走几十微安,剩下绝大部分电流只能往ADJ节点外面走。这时候如果我们在ADJ节点和地之间接上负载,电流就会全部流过负载。于是负载上的电流就等于1.25V除以Rset。

关键点来了:当负载阻抗变大时,ADJ端电压会跟着升高,OUT端电压也同步升高,但Rset两端的电压始终是1.25V,所以流过负载的电流纹丝不动。这就是恒流源的本质——电流固定,电压随负载变。

还有一个容易踩的误区必须说:负载不能接在OUT脚和地之间。如果把负载挂在OUT对地,那流过Rset的电流和流过负载的电流是两条路,根本形不成恒流关系。正确接法是把负载串在ADJ脚到地这条回路里,让“Rset电流”和“负载电流”走同一路径,恒流才成立。

2. 最小恒流电路:一颗电阻的接法与三个计算实例

2.1 引脚定义和标准接法

先确认引脚,LM317常见的TO-220封装,丝印面对自己、引脚朝下时,从左到右一般是ADJ、OUT、IN。但不同品牌和封装略有差异,实作前最好拿万用表查一下数据手册,别凭着印象直接焊。

标准恒流源接法如下:

  1. 电源正极接LM317的IN脚,电源负极接GND;
  2. OUT脚接设定电阻Rset的一端;
  3. Rset的另一端接ADJ脚;
  4. ADJ节点同时接负载正端,负载负端接GND。

电气回路是这样的:输入电流从IN进去,从OUT出来,流过Rset到ADJ节点,再流过负载回到地。这个链路里所有电流是串联关系,所以只要Rset电流恒定,负载电流就恒定。

输入端建议加一个0.1µF到0.33µF的瓷片电容,放在靠近IN脚的地方,用于抑制长电源线带来的高频噪声。负载端不建议加太大的电容,尤其是容性负载,上电瞬间会有一个很大的充电电流冲击,可能超过LM317的限流范围。

2.2 三个典型恒流值计算

实际使用中,大家问得最多的就是“我想要XX毫安,Rset该用多大”。这个计算非常简单:Rset = 1.25V / I,但要注意E24标准阻值不一定有你算出来的值,需要就近选择。

先说最常用的100mA LED驱动场景。Rset = 1.25 / 0.1 = 12.5Ω。标准电阻没有12.5Ω,用12Ω时电流是1.25 / 12 ≈ 104mA,偏差约4%;用13Ω时电流约96mA。如果要求精确,可以用两个24Ω并联得到12Ω,或者用12Ω和0.5Ω串联,但一般LED应用没必要纠结4%以内偏差。100mA时电阻功耗只有0.125W,0.25W电阻足够,但我建议直接上0.5W,温度更低更稳。

再算350mA大功率LED的场景。Rset = 1.25 / 0.35 ≈ 3.57Ω,取3.6Ω就是347mA,基本满足要求。电阻功耗P = 1.25 × 0.35 ≈ 0.44W,用1W电阻比较稳妥,余量超过两倍。

最后看1A大电流场景。Rset = 1.25 / 1 = 1.25Ω,这个阻值在E24系列里没有。用1.2Ω则电流1.04A,用1.3Ω则电流0.96A。想要精确到1A,可以用两个2.5Ω精密电阻并联,或者用1.2Ω固定电阻串一个0.05Ω的毫欧级电阻微调。这时候电阻功耗约1.25W,绝对不能用0.5W电阻,至少用3W到5W的铝壳电阻。

我整理了一个常用对照表,方便直接抄:

目标电流计算电阻Rset常用取值实际电流电阻功耗建议功率
10mA125Ω120Ω10.4mA0.0125W0.25W
20mA62.5Ω62Ω20.2mA0.025W0.25W
100mA12.5Ω12Ω104mA0.125W0.5W
350mA3.57Ω3.6Ω347mA0.44W1W
500mA2.5Ω2.4Ω520mA0.625W2W
1A1.25Ω1.2Ω1.04A1.25W3W到5W

3. 精度、压差与散热:决定恒流源能不能长期干活的三个指标

3.1 设定电阻的精度、温漂和功率一个都不能少

很多初学者把恒流源搭起来后,发现电流值跟计算值差不少,第一个怀疑对象往往是LM317,其实大部分时候背锅的是那颗电阻。因为恒流公式I = 1.25 / R里,电阻的误差直接变成电流的误差。你用5%精度的碳膜电阻,电流误差就是5%起步,再加上温度变化,误差会更大。

所以做恒流源时,Rset最好选金属膜电阻,精度1%起步,要求高就上0.1%。温漂同样关键,普通碳膜电阻温漂可能在几百ppm/°C,金属膜一般50ppm/°C以下,对多数场景够用。大电流场景建议用铝壳线绕电阻或金属氧化膜电阻,但要注意线绕电阻有电感,做高频脉冲场景时要避开。

电阻的功率问题在上一节提过,这里再强调一次:电阻功耗约等于1.25V乘以电流,也就是P ≈ 1.25 × I。1A恒流时,光电阻就要吃掉1.25W。如果这个电阻体积很小,表面温度会非常高,阻值跟着漂移,电流自然就漂了。正确做法是留2到3倍余量,并且让功率电阻离LM317远一点,别把芯片烤热。

如果需要的阻值不是标准值,可以用串联或并联方式组合。串联直接相加,并联用倒数和公式。比如需要1.25Ω,可以用两个2.5Ω精密电阻并联,这样每个电阻只分到一半功耗,散热也更好。

3.2 输入输出压差预算和芯片功耗

LM317毕竟是线性器件,正常工作必须满足一个压差条件:

Vin ≥ Vload + 1.25 + dropout

我来拆一下这个公式。恒流源正常工作时,ADJ端电压就等于负载电压Vload,而OUT端比ADJ端高固定1.25V,所以OUT端电压是Vload + 1.25。LM317要维持调整管工作,IN端又要比OUT端高出约3V左右,这是它的最小压差要求。所以整个预算就是Vload + 1.25 + 3。

举个实际例子。驱动一颗3.3V的LED,负载电流100mA,那么最低输入电压是3.3 + 1.25 + 3 = 7.55V。很多人想用5V USB电源去驱动,结果是电流根本上不去,因为压差不够。换成9V适配器就稳了。

但压差富裕太多也有代价,多出来的电压全部变成热量消耗在LM317上。继续上面的例子,9V输入、LED压降3.3V、100mA时,LM317上的功耗是:

(Vin - Vout) × I = (9 - (3.3 + 1.25)) × 0.1 ≈ 0.445W

0.445W对于TO-220封装来说不算大,加个小散热片就压得住。但如果输入24V、输出给12V负载、电流1A,功耗接近11W,这种情况必须上大散热器,否则LM317热保护马上触发,你会观察到电流“莫名其妙”往下跌。

还有一点要注意,LM317最大输入电压是40V,别一激动接到高压上去。持续大电流工作时,建议把电流降额到1.2A以下,别顶在1.5A极限上。

3.3 电流调节范围与Iadj带来的误差

LM317恒流源的电流上限主要由芯片的1.5A最大输出电流和散热条件决定。下限则受到两个因素制约。

第一个是LM317的最小负载电流要求。为了保证内部误差放大器和调整管正常工作,OUT端需要维持一个最小电流,典型值在3.5mA左右,最差条件可能到10mA。所以设计恒流值低于5mA时,LM317就不太合适了,可以换LM334这类专做小电流恒流的芯片。

第二个是ADJ脚的调整端电流Iadj。这个电流典型值约50µA,它在恒流电路里会叠加到负载电流上,更精确的公式是:

Iout = 1.25 / Rset + Iadj

100mA时,50µA只占0.05%,完全可以忽略。但如果你把恒流值做到5mA,50µA就占了1%,就需要把Iadj算进去,或者通过实测校准。小电流应用我会把Rset稍微取大一点,再并一个精密微调电阻来修。

如果想让恒流值连续可调,常见做法是固定电阻串一个多圈电位器。但要注意,电位器的最小阻值必须用一个固定电阻兜底,否则调小阻值时电流可能瞬间增大很多。大电流场景不建议用电位器直接当Rset,电位器触点承载不了那么大电流,容易烧出接触不良。

4. 从恒流到恒流恒压可调电源:别把两个LM317随手一串

4.1 先把概念理清:恒压源、恒流源与镜像电流源

热词里经常同时出现“恒压源”“恒流源”“镜像电流源”,这三个东西很容易混。简单说,理想恒压源是电压固定、电流由负载决定;理想恒流源是电流固定、电压由负载决定。LM317做稳压器时是前者,做电流源时是后者。

镜像电流源则是另一回事。它是集成电路内部常用的一种电流源结构,用两个同规格晶体管把基极连在一起,让输出晶体管复制参考电流。这种结构精度高、面积小,但只能工作在毫安甚至微安级别,主要用于差分放大器、运放内部的偏置电路,不适合直接驱动LED或电池。你可以把镜像电流源理解为芯片内部的一种“微缩电流源”,和LM317这种功率级恒流源完全不是一个应用层次。

4.2 为什么两颗LM317简单串联不等于恒压恒流可调电源

很多资料提到“LM317恒流恒压可调电源制作”,有人就直接在前级放一个LM317稳压器,后级再串一个LM317恒流源。这个做法能不能工作?能,但非常容易误解。

关键问题在于:恒流源是“强制”输出设定电流,不是“超过设定值才限流”。如果你把恒流值设成500mA,那么无论负载多轻,它都会试图往负载里灌500mA。如果负载本来只需要100mA,恒流源会把输出电压强行拉高,结果不是稳压限流,而是过压。这在实验台上是个危险行为,可能直接烧掉负载。

所以真正意义的“恒流恒压CV/CC电源”,需要同时采集输出电压和输出电流,用运放分别做电压环和电流环,两个环路通过某种“或”的关系去控制调整管。LM317单独做不了这种双闭环,常见方案是LM358加外部功率管,或者用专用恒压恒流芯片。网上搜“LM358 LM317可调电源”能找到完整原理图,这里不贴复杂电路误人,先把这个概念讲清楚比给一个似是而非的图更重要。

4.3 什么时候可以放心用双LM317串联方案

双LM317串联方案并非一无是处,用在对的地方就很顺手。比如给LED灯串供电,本来就要恒流驱动;给镍氢电池小电流充电,只需要恒流;给加热电阻丝供电,也是恒流更稳定。这些场景可以直接用前级稳压器设置一个最大安全电压,后级恒流源设定工作电流,形成一个“带电压上限的恒流源”。

但如果负载是锂电池,我不会推荐这种简单方案。锂电池充电需要一个完整的CC-CV曲线,到截止电压后必须转入恒压并逐步减流。LM317恒流源没有这个逻辑,直接拿来充锂电有安全隐患。安全第一,这点必须说清楚。

5. 先用Multisim把恒流源跑一遍,接线零失误再焊板

5.1 Multisim中的仿真电路搭建步骤

动手焊板之前,我习惯先在Multisim里把电路跑通一遍,尤其是电源类电路,仿真能帮你快速发现原理性错误,比如负载放错位置、压差预算不够这类问题。

搭建步骤如下:

  1. 在Multisim组件库里搜索“LM317H”或“LM317”,不同版本所在的库名有差异,一般在Power或Mixed组里。找不到LM317时可以用LM117替代,两者核心参数一致;
  2. 放置直流电源V1,设成12V;
  3. 放置设定电阻R1,比如12.5Ω;
  4. 放置负载电阻RL,先用10Ω模拟一个低压负载;
  5. 按标准接法连线:V1正极接IN,OUT接R1,R1另一端接ADJ,ADJ接RL,RL回GND,V1负极接GND;
  6. 在负载回路里串一只电流表,或者在RL上并联一只电压表;
  7. 点运行按钮,读电流和电压数值。

如果仿真报不收敛,先检查LM317的模型引脚顺序是不是和你理解的物理引脚一致。Multisim里的符号引脚顺序和数据手册的引脚序号可能是两套体系,按原理图连线就行,别按物理封装顺序硬套。

5.2 改变负载看电流,验证“恒流”的本质

接下来做最有说服力的验证:把负载电阻从5Ω逐步改到20Ω、50Ω,观察电流表和电压表读数。

负载电阻RL负载电压负载电流现象
5Ω约0.5V约100mA恒流正常
20Ω约2.0V约100mA恒流正常
50Ω约5.0V约100mA恒流正常
80Ω以上接近输入极限明显回落压差不够,进入饱和

仿真的意义就在这里:你会亲眼看到“负载电压随电阻变化,但电流保持不动”这个恒流源核心特质。继续增大负载电阻,直到ADJ端电压逼近输入电压上限,恒流关系就会被打破,电流开始下跌。这个临界点就是恒流源的“顺应电压范围”,实际使用时要确保负载最大电压落在这个范围之内。

Multisim仿真和实物之间肯定有差异,模型里的Iadj、dropout参数和实际芯片不完全一致,但验证电路结构和计算压差预算已经非常够用。至少能帮你把最常见的接反负载、电源电压选错这两类低级错误挡在焊板之前。

6. 实作中的几个异常现象与排查思路

6.1 现象一:电流随着负载变化漂移

如果发现恒流值在变,但LM317温度并不高,先怀疑设定电阻。大电流时电阻发热会导致阻值漂移,电流跟着漂。用万用表直接测Rset两端电压,应该稳定在1.25V附近。如果这个电压稳而电流不稳,基本就是电阻温漂;如果这个电压本身在漂,问题在LM317基准或输入端波动。

还有一种容易被忽略的情况是接触电阻。尤其用面包板搭电路时,长引脚和弹簧片的接触电阻可能达到零点几欧,对于1Ω级别的Rset来说,这个误差相当可观。做精确恒流时建议直接焊板,或者用接线端子压接。

6.2 现象二:小电流档误差偏大

做10mA以下的小电流恒流时,如果实测电流比计算值大几十微安,别慌,这是Iadj在起作用。前面说过,ADJ脚向外流出约50µA电流,会叠加到负载电流上。这时候修正公式Iout = 1.25 / Rset + Iadj,把Rset稍微取大一点,就能把电流校回来。

如果要做1mA级别的精密恒流,建议直接换LM334这类专用恒流芯片,它的最小工作电流更低,而且可以用一个电阻设定电流,精度比LM317小电流模式好得多。

6.3 现象三:芯片烫手、电流掉下来

LM317有内部热保护,结温过高时输出电流会被主动拉低。如果你发现恒流源一开始正常,十几秒后电流慢慢往下掉,八成是过热保护。这时候用公式估算一下芯片功耗:

P = (Vin - (Vload + 1.25)) × I

前面的3.2节讲过具体计算。解决方向无非三条:降低输入电压、加大散热器、减小设定电流。选开关电源做输入时,别一上来就选24V,够用就好;多出来的电压全变成热量,又费电又难散热。如果实在需要高压差大电流,可以用降压模块先把电压降到合适区间,再接LM317恒流,效率会好很多。

6.4 现象四:上电瞬间冲击和振荡

LM317做稳压器时比较容易因为输出端电容不合适产生振荡,做恒流源时振荡概率低,但也不是没有,尤其负载是长导线或感性负载时。输入端那颗0.1µF到0.33µF电容要放在离IN脚最近的位置,不能省。

如果发现电流表读数在微小范围内快速抖动,或者电路工作状态不稳定,在负载端并联一个0.1µF瓷片电容通常能改善。注意负载端电容别太大,否则上电瞬间电容充电电流会冲击LM317,甚至触发内部限流。对感性负载,比如继电器线圈或电机,要在负载两端反向并联一个二极管,吸收关断时的反电动势,否则容易打坏芯片。

6.5 现象五:负载开路时输出过压

恒流源最怕的一件事就是负载开路。因为整个恒流环路依赖负载提供电流回路,一旦负载断开,ADJ端处于悬空状态,LM317为了维持OUT和ADJ之间的1.25V,会把输出电压往输入电压方向推,输出端可能瞬间出现接近输入电压的高压。LED、精密传感器这类负载最怕这种过压。

我给经常调流调负载的朋友一个实用建议:在ADJ端到地之间反向并联一只稳压管,比如18V或者24V,再留一个1kΩ左右的假负载焊盘。上电调流之前先把假负载挂上,调完再取下来。这个小动作成本不到一块钱,但是能避免很多“啪一下负载就没了”的尴尬。我自己习惯更简单,只要LM317恒流源旁边有昂贵负载,输出端必挂稳压管钳位,不管负载是不是可能开路。

最后一个个人习惯也分享给你:我做样板时会把Rset焊成“固定电阻+可调电阻”的并联组合,先调好电流,再把可调电阻拆下来量出实际阻值,用精密电阻替换。这样既拿到了可调范围,又保证了长期稳定,焊完不管它也能一直跑。恒流源这个东西,原理不复杂,但真正决定它好不好用的,往往就是电阻、散热、压差这三个容易被低估的细节。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询