LM317+运放+MOSFET可调恒流源设计:从原理到实战
恒流源这个东西很多刚入行的朋友第一反应就是三极管加两个电阻搭出来一测电流随温度飘得厉害负载一变电流就跟着变。我早年做LED驱动和传感器激励源的时候在这上面栽过不少跟头。后来慢慢摸清楚一个道理想要一个真正稳得住的可调恒流源靠单个三极管是撑不住的得把基准、比较、调整这三件事拆开分别交给合适的器件去做。LM317负责提供稳定的基准电压运放负责高增益的比较和反馈MOSFET负责扛电流和散热这套组合下来几十毫安到几安培的恒流输出都能做得相当扎实。这篇内容我打算把LM317加运放搭可调恒流源这件事从头到尾讲透。不管你是刚学模电的学生还是工作中需要给LED、激光管、电化学传感器做恒流供电的工程师都能从里面找到能直接抄作业的东西。我会把电路图、参数计算、选型逻辑、实测踩坑全部摊开讲尤其是那些教科书上不会写、但一上手就会遇到的问题比如运放自激、MOSFET发热、采样电阻怎么选、地线怎么走。看完你至少能做到两件事一是明白每个元件为什么在那儿二是自己动手搭一个能用的可调恒流源。1. 为什么单靠三极管做恒流源总是不靠谱1.1 三极管恒流源的先天缺陷先说说为什么很多人一开始会用三极管。最经典的三极管恒流源就是两个三极管加一个采样电阻利用Vbe的稳定性来做电流镜或者电流源。这个电路在实验室里做演示没问题但真要用到产品上问题就来了。三极管的Vbe有大约**-2mV/℃**的温度系数这意味着温度每升高10℃Vbe就下降20mV。如果你的采样电阻上只建立了几百毫伏的压降那这20mV的漂移直接就让电流变化好几个百分点。我实测过一个最基础的两管恒流源室温25℃调到100mA用热风枪吹到60℃电流直接掉到85mA左右飘了15%。这种精度拿去做LED驱动亮度肉眼可见地变化拿去做传感器激励测量结果根本没法信。除了温漂三极管还有基极电流的问题。三极管的集电极电流和发射极电流之间差着一个基极电流而基极电流又随温度和β值变化。β值本身离散性就大同一型号不同批次能差一倍。你按β100算的电阻换一批管子β200电流就偏了。这就是为什么三极管恒流源换个管子就得重新调。1.2 把基准和调整分开的思路真正靠谱的做法是把恒流源拆成三个独立的功能块电压基准、误差比较、电流调整。基准负责提供一个不随温度和时间变化的参考电压比较环节负责把采样电阻上的电压和基准做差并放大调整环节负责根据误差信号改变输出电流。这三块各司其职每一块都可以用最合适的器件来做。LM317在这里的角色就是电压基准。它内部有一个1.25V的带隙基准温漂很小而且它本身是个线性稳压器输出能力强、噪声低。运放的角色是误差放大器它的开环增益能做到10万倍以上意味着采样电阻上哪怕只有几十微伏的偏差运放也能把它放大到足以驱动MOSFET的程度。MOSFET的角色是功率调整管它由电压驱动不像三极管需要基极电流而且导通电阻可以做得很小大电流下发热可控。提示这套架构的核心思想是负反馈。采样电阻把电流转换成电压运放把这个电压和基准比较差值经过放大后去控制MOSFET的栅极MOSFET再调整流过负载的电流。整个环路是负反馈所以能自动稳定。1.3 这套方案能覆盖哪些应用场景搭好之后这个可调恒流源的适用范围其实很广。LED恒流驱动是最常见的尤其是大功率LED必须恒流否则会热失控烧掉。激光二极管驱动对电流精度要求更高通常要求优于1%。电化学传感器比如pH电极、溶解氧电极需要微安级的稳定激励电流。电池充放电测试里也常用恒流源做恒流放电。热电制冷片的驱动同样需要恒流因为它的制冷量和电流直接相关。不同场景对电流范围、精度、带宽的要求不一样但底层架构是通用的。你只要把采样电阻、MOSFET、运放这几个关键器件按需求换掉就能覆盖从几毫安到几安培的宽范围。这也是我愿意花时间把这套东西讲透的原因——它是个一次学会、到处能用的基础模块。2. 电路架构拆解LM317、运放、MOSFET各自干什么活2.1 整体框图与信号流向先把整个电路的骨架说清楚。电路分三部分左边是LM317构成的基准电压源中间是运放构成的误差放大器右边是MOSFET和采样电阻构成的电流调整级。负载接在电源正极和MOSFET漏极之间采样电阻接在MOSFET源极和地之间。信号流向是这样的负载电流从电源正极出发经过负载、经过MOSFET的漏源、经过采样电阻最后回到地。采样电阻上的压降等于电流乘以阻值这个电压被送到运放的一个输入端。运放的另一个输入端接LM317产生的基准电压。运放比较这两个电压差值放大后驱动MOSFET的栅极。如果电流偏大采样电压升高运放输出降低MOSFET栅压降低电流回落反之亦然。这就是负反馈的调节过程。这里有个关键点采样电阻必须放在MOSFET源极和地之间也就是所谓的低边采样。这样采样电压是以地为参考的运放可以直接处理不需要额外的差分电路。如果放在高边采样电压浮在电源电压附近运放就得用高共模电压的差分放大器成本和复杂度都上去了。2.2 LM317做基准的两种接法LM317做基准有两种常见接法。第一种是标准稳压接法LM317的输出端和调整端之间接一个电阻R1调整端对地接一个电阻R2输出电压等于1.25V乘以(1R2/R1)。这样可以得到任意高于1.25V的基准电压。第二种是恒流接法LM317的输出端和调整端之间接一个电阻R调整端接负载这样流过负载的电流恒定为1.25V/R。在这个恒流源电路里我推荐用第一种接法把LM317当成一个可调的电压基准来用。因为我们需要的是一个稳定的参考电压送给运放而不是让LM317直接去驱动负载。LM317的输出电压可以设成比如2.5V或者5V具体取决于你想要的采样电压范围。为什么不用LM317的恒流接法直接做恒流源呢因为LM317的恒流精度受它自身调整端电流的影响而且它的带宽有限动态响应慢。对于要求不高的场合LM317恒流接法确实简单够用但要做精密可调、快速响应的恒流源还是得靠运放加MOSFET。2.3 运放选型不是随便一个运放都能用运放的选择直接决定恒流源的精度和稳定性。这里有几个参数必须关注。**输入失调电压Vos**是最关键的。运放的失调电压会直接叠加到采样电压上造成电流误差。比如采样电阻是1Ω你想要1A电流采样电压是1V。如果运放失调电压是5mV那电流误差就是5mA相对误差0.5%。如果失调是50μV的精密运放误差就只有0.005%。所以做精密恒流源必须选低失调运放比如OPA333、OPA2188这类。**增益带宽积GBW**决定了环路的响应速度。GBW太低环路带宽就窄负载突变时恢复慢甚至可能不稳定。一般建议GBW至少在1MHz以上做快速响应的场合要10MHz以上。共模输入范围要包含地电位。因为采样电压可能很低接近0V运放的输入级必须能处理到负电源轨附近。轨到轨输入输出的运放比较保险。**压摆率SR**影响大信号响应。如果负载电流需要快速变化SR不够会导致输出跟不上产生过冲或者延迟。下面这个表格对比几种常用运放在恒流源里的适用性运放型号失调电压GBW压摆率适用场景LM3582mV1MHz0.3V/μs低成本、精度要求不高的场合NE55320.5mV10MHz9V/μs音频、中等精度恒流OPA218825μV2MHz0.8V/μs精密恒流、传感器激励OPA33310μV350kHz0.16V/μs微功耗、低速精密场合TL0723mV3MHz13V/μs通用、JFET输入我个人的经验是做LED驱动用LM358或者NE5532就够了做传感器激励一定要上OPA2188这个级别。别在运放上省钱失调电压带来的误差是后面怎么调都补不回来的。2.4 MOSFET还是三极管做调整管调整管的选择上MOSFET比三极管有明显优势。三极管是电流驱动基极需要持续的驱动电流这个电流本身就会带来误差而且驱动电路的功耗也不小。MOSFET是电压驱动栅极电流几乎为零不会引入额外误差。MOSFET的另一个优势是**导通电阻Rds(on)**可以做得很低。比如IRF540的Rds(on)只有44mΩ通过5A电流时压降只有0.22V功耗1.1W。如果用三极管饱和压降至少0.3V起步大电流下功耗更大。选MOSFET要注意几点Vds耐压要高于电源电压并留余量一般取1.5倍以上。**Rds(on)**要小减少发热。**栅极阈值电压Vgs(th)**要低确保运放输出的电压范围能把它完全打开。栅极电荷Qg要小否则运放驱动能力不够时开关速度慢。热阻要关注决定散热片怎么选。常用的MOSFET里IRF540、IRFZ44N适合几安培的场合AO3400适合小电流IRFP250适合大电流。如果电源电压低比如5V要选逻辑电平MOSFET比如IRLZ44N它的Vgs(th)只有2V左右3.3V或5V就能驱动。3. 手把手搭电路从原理图到实际焊接3.1 完整原理图与元件清单先把完整电路画出来。电源正极接负载的一端负载另一端接MOSFET的漏极。MOSFET的源极接采样电阻Rs的一端Rs的另一端接地。运放的同相输入端接LM317输出的基准电压反相输入端接MOSFET源极也就是采样电阻上端。运放输出接MOSFET栅极。LM317的输入接电源正极输出经过分压电阻R1、R2得到基准电压调整端接R1和R2的连接点。元件清单大致如下LM317一个运放一个比如OPA2188MOSFET一个比如IRF540采样电阻一个根据电流范围选基准分压电阻两个运放供电去耦电容两个栅极串联电阻一个电源滤波电容若干。采样电阻的选择很关键。假设你想要的最大电流是1A采样电压设为1V那Rs就是1Ω。但1Ω电阻通过1A电流会消耗1W功率得选至少2W的功率电阻。如果最大电流是100mARs可以选10Ω功耗只有0.1W用普通1/4W电阻就行。采样电阻的精度直接影响电流精度建议用1%或更高精度的金属膜电阻有条件用康铜丝或者四端子电阻更好。3.2 基准电压和采样电阻的计算基准电压和采样电阻是配套设计的。设你想要的满量程电流为Imax采样电阻为Rs那满量程时采样电压就是Imax乘以Rs。这个电压就是运放同相端需要的基准电压Vref。举个例子Imax500mA选Rs2Ω那Vref1V。LM317的输出电压要设成1V但LM317的最低输出是1.25V所以不能直接输出1V。这时候有两个办法一是用电阻分压把1.25V分到1V二是把Rs改成2.5Ω让Vref1.25V。我一般推荐第二种直接用LM317的1.25V基准省掉分压电阻带来的误差。如果Imax2A选Rs0.5ΩVref1V同样可以用1.25V基准配0.625Ω采样电阻。但0.625Ω不是标准值可以用两个1.25Ω并联得到0.625Ω。或者干脆用1.25V基准配0.625Ω实际电流就是2A。这里有个权衡采样电阻越大采样电压越高抗噪声能力越强但功耗也越大。采样电阻越小功耗小但采样电压低对运放失调电压更敏感。一般建议采样电压在0.5V到2V之间兼顾功耗和精度。3.3 焊接布局与地线处理电路搭起来之后布局和地线处理往往比原理图更影响性能。我见过太多人原理图画得没问题一上电就自激振荡问题全出在布局上。采样电阻的地线必须单独走直接连到电源的滤波电容地端不要和运放的地、LM317的地混在一起走。这叫开尔文连接或者星形接地。采样电阻上的电压很小如果地线上有别的电流流过产生的压降会叠加到采样电压上造成误差。运放的供电去耦电容要靠近运放电源引脚一般用0.1μF陶瓷电容并联10μF电解电容。去耦电容的作用是给运放提供本地的高频电流回路避免电源线上的噪声影响运放。MOSFET的栅极要串一个电阻一般10Ω到100Ω作用是抑制栅极振荡。MOSFET的栅极电容和驱动线路的电感容易形成LC振荡串电阻可以阻尼掉。这个电阻不能太大否则开关速度变慢。大电流路径要短而粗。负载电流流过的路径包括电源到负载、负载到MOSFET、MOSFET到采样电阻、采样电阻到地这些走线要尽量短、尽量宽减少寄生电阻和电感。注意如果你用面包板搭这个电路大概率会振荡或者精度很差。面包板的接触电阻和寄生电容都很大做恒流源一定要用洞洞板或者PCB焊接。我早期用面包板搭电流怎么调都不对换成洞洞板立马就好了。3.4 上电调试的步骤第一次上电不要直接接负载按下面的步骤来。第一步不接负载不接MOSFET先测LM317的输出电压。用万用表量LM317输出端对地电压应该是你设计的基准电压。如果不对检查R1、R2的阻值。第二步接上运放给运放供电测运放输出。此时MOSFET还没接运放的同相端是基准电压反相端通过采样电阻接地0V所以运放输出应该饱和到正电源轨附近。如果运放输出是负电源轨或者中间值说明运放接反了或者坏了。第三步接上MOSFET和采样电阻但不接负载用万用表电流档串在负载位置。慢慢调基准电压或者调采样电阻看电流是否跟着变。如果电流不可控检查MOSFET的引脚有没有接错运放的同相反相有没有接反。第四步接上实际负载观察电流是否稳定。用手摸MOSFET和采样电阻看发热是否正常。如果MOSFET很烫检查Rds(on)和散热。4. 实测中一定会遇到的几个坑4.1 运放自激振荡现象、原因和解决自激振荡是这套电路最常见的坑。现象是电流表读数抖动示波器看MOSFET栅极有高频正弦波频率从几百kHz到几MHz不等。严重的时候MOSFET会发热甚至烧掉。振荡的根源是环路相位裕度不够。运放本身有相位延迟MOSFET的栅极电容又引入一个极点采样电阻和线路电感引入另一个极点几个极点叠加在某个频率上总相移达到180度负反馈就变成了正反馈。解决办法有几个。第一在运放输出和反相输入之间加一个补偿电容一般几十皮法到几百皮法给环路引入一个零点提升相位裕度。第二在MOSFET栅极串电阻减小栅极电容的影响。第三降低运放的带宽选GBW低一点的运放或者直接在运放输出加RC低通。我实测下来最有效的组合是栅极串100Ω电阻运放输出到反相输入加100pF电容采样电阻两端并联一个0.1μF电容滤高频。这三个措施加上去基本就不会振荡了。4.2 MOSFET发热与散热计算MOSFET发热主要来自导通损耗和开关损耗。恒流源里MOSFET工作在线性区不是开关状态所以主要是导通损耗等于电流平方乘以Rds(on)。但要注意MOSFET工作在线性区时Rds(on)不是数据手册里那个值而是随Vgs变化的。如果Vgs不够大MOSFET工作在线性区压降大发热就严重。比如IRF540Vgs10V时Rds(on)44mΩ但Vgs4V时可能就到几百毫欧了。所以运放输出的栅极电压一定要足够高确保MOSFET完全导通。如果运放供电是5VIRF540可能打不开得换逻辑电平MOSFET。散热计算假设电流2ARds(on)0.1Ω功耗就是0.4W。TO-220封装的热阻大约62℃/W不加散热片温升就是25℃加上环境温度25℃结温50℃还能接受。但如果电流5A功耗2.5W温升155℃结温180℃直接烧了。这时候必须加散热片散热片热阻要小于(150-25)/2.550℃/W选个小铝片就够了。4.3 采样电阻的功率与温漂采样电阻的功率前面提过这里重点说温漂。普通金属膜电阻的温漂是50ppm/℃到100ppm/℃意味着温度变化50℃阻值变化0.25%到0.5%。对于1%精度的恒流源这个温漂已经不可忽略了。解决办法是选低温漂电阻比如25ppm/℃的精密电阻或者用康铜丝、锰铜丝自己绕。康铜的温漂只有20ppm/℃左右而且功率大。我做过一个5A的恒流源采样电阻用0.1Ω的康铜丝温漂带来的误差在0.1%以内。另外采样电阻的寄生电感也要注意。绕线电阻有电感高频下阻抗会变。如果恒流源需要快速响应采样电阻要用无感绕法或者贴片电阻。贴片电阻的寄生电感小但功率有限大电流场合还是得用康铜丝。4.4 负载变化时的动态响应恒流源的动态响应是指负载突变时电流恢复稳定的速度。比如LED驱动里如果负载断开再接通电流会有过冲。过冲太大可能烧LED。动态响应取决于环路带宽。带宽越宽响应越快但稳定性越难保证。这是个权衡。一般恒流源的环路带宽在10kHz到100kHz之间对应的恢复时间在几十微秒到几百微秒。改善动态响应的办法提高运放GBW减小栅极电阻减小采样电阻的寄生电感。但要注意带宽提高后相位裕度会下降容易振荡。所以调动态响应的时候一定要同时看阶跃响应和稳定性用示波器观察负载突变时的电流波形调到既快又稳。5. 从能用到好用进阶优化与扩展5.1 用DAC实现程控恒流手动调电位器太麻烦用DAC加单片机就能做程控恒流源。DAC的输出代替LM317的基准电压送到运放同相端。单片机通过SPI或者I2C控制DAC输出就能设定任意电流值。DAC的选型要注意分辨率和精度。12位DAC在5V满量程下分辨率是1.22mV对应采样电阻1Ω时电流分辨率1.22mA。如果要做微安级得用16位甚至更高。DAC的积分非线性INL和微分非线性DNL也要关注直接影响设定精度。用DAC的时候DAC的输出阻抗和运放的输入阻抗要匹配。有些DAC输出需要加缓冲运放否则带载能力不够。另外DAC的参考电压要稳定最好用专门的基准芯片比如REF5025温漂只有3ppm/℃。5.2 加入电流检测和显示做产品的话通常需要显示当前电流。可以在采样电阻上并联一个高输入阻抗的运放做缓冲然后送ADC或者万用表芯片。也可以直接用带电流显示的电源模块。如果要自己做显示用STM32或者Arduino的ADC读采样电压换算成电流显示在OLED上。ADC的参考电压同样要稳可以用内部基准或者外部基准。采样的时候要注意ADC的输入范围加个分压或者运放缓冲。5.3 多路恒流源的并联与均流有时候需要更大的电流单个MOSFET扛不住就得多路并联。但MOSFET并联有个问题Rds(on)有正温度系数温度高的管子电流会减小自动均流。但如果是三极管并联Vbe有负温度系数温度高的管子电流更大会热失控。所以并联一定要用MOSFET不要用三极管。并联的时候每个MOSFET的源极都要单独接采样电阻然后所有采样电阻的上端连在一起接运放反相端。这样每个MOSFET的电流都被独立采样运放统一调节。如果共用采样电阻电流分配就不均了。5.4 保护电路过流、过温、反接实际产品里保护电路不能省。过流保护可以在采样电阻上取电压超过阈值就关断MOSFET。过温保护用NTC热敏电阻贴在MOSFET散热片上温度过高就降电流或者关断。反接保护在电源输入端串一个二极管或者用PMOS做理想二极管。保护电路的设计原则是失效安全也就是保护电路本身出故障时主电路要能安全关断。比如过流保护的比较器如果比较器坏了输出高电平MOSFET应该关断而不是导通。这需要在电路设计时考虑逻辑极性。6. 几个常见问题的快问快答6.1 为什么我的恒流源电流调不到零电流调不到零通常是运放的失调电压或者输入共模范围的问题。运放反相端接采样电阻当电流接近零时采样电压接近0V。如果运放的输入级不能处理到0V输出就会出错。解决办法是选轨到轨输入的运放或者给运放加一个小的负电源让输入范围覆盖到0V以下。另一个原因是MOSFET的漏电流。MOSFET关断时不是完全绝缘的有微安级的漏电流。如果负载阻抗高这点漏电流就会产生电压。要完全关断可以在负载两端加一个开关或者继电器。6.2 LM317发热严重怎么办LM317的功耗等于输入输出压差乘以输出电流。如果输入12V输出1.25V电流100mA功耗就是(12-1.25)×0.11.075W。TO-220封装的LM317热阻大约50℃/W温升54℃加上环境温度25℃结温79℃还能接受。但如果输入24V功耗就翻倍必须加散热片。降低LM317功耗的办法是降低输入电压或者用开关电源预稳压。如果系统里有5V电源直接用5V给LM317供电功耗就小多了。另外LM317的调整端电流很小基准部分的分压电阻可以取大一点减少额外功耗。6.3 能不能用LM317直接做恒流源能但精度和动态响应都不如运放方案。LM317恒流接法的电流等于1.25V/R精度取决于内部基准的精度和调整端电流。LM317的基准精度典型值是1%调整端电流典型值50μA这个电流流过采样电阻会带来误差。如果采样电阻是12.5Ω对应100mA50μA带来的误差是0.625mV相对误差0.05%还能接受。但如果采样电阻是1.25Ω对应1A误差就只有0.005%更小。所以LM317直接做恒流源在小电流时精度还行大电流时精度更好。但它的动态响应慢负载突变时恢复时间长。如果负载是LED这种对动态响应要求不高的LM317直接做也够用。但如果负载是激光管或者需要快速调制的还是得用运放方案。6.4 采样电阻能不能放在高端能但电路复杂。高边采样时采样电阻在电源正极和负载之间采样电压浮在电源电压附近。运放需要处理高共模电压普通运放不行得用高共模电压的电流检测放大器比如INA138、INA168。这些芯片内部有精密电阻网络能把高边采样电压转换成对地的电压输出。高边采样的好处是负载的地和电源的地是同一个地没有地线干扰问题。低边采样虽然简单但采样电阻在地线上负载的地和电源的地之间有个采样电阻的压降如果负载对地有要求可能会有问题。一般电池供电的设备用低边采样市电供电的设备用高边采样。6.5 怎么测恒流源的精度和稳定性测精度用高精度万用表串在负载回路里和设定值比较。测稳定性要记录长时间比如1小时的电流变化看漂移。测动态响应用电子负载做阶跃变化示波器看电流波形。测试的时候要注意温度。恒流源的精度受温度影响很大测的时候要记录环境温度。如果要做温度系数测试把整个电路放进温箱从0℃到50℃扫一遍记录每个温度点的电流。这个数据比单点精度更有说服力。我自己做恒流源测试的时候习惯用六位半万用表加电子负载先测静态精度再测1小时漂移最后测阶跃响应。这三个数据出来这个恒流源能不能用就心里有数了。很多时候静态精度很好但漂移大或者响应慢实际用起来还是不行。所以测试一定要全面不能只看一个指标。最后分享一个我踩过的坑有一次做LED恒流源静态测试完美精度0.1%但装到灯具里之后LED一亮就闪。查了半天发现是LED的散热片和恒流源的地线共用了LED的开关噪声通过地线串到采样电阻上导致振荡。后来把地线分开走问题就解决了。所以地线处理这件事怎么强调都不为过。