
1. 恒流源到底是干什么的什么场景会用到它恒流源说白了就是一个电流恒定、电压跟随负载变化的电源。很多刚接触电子的朋友会把恒压源和恒流源混为一谈其实两者的工作逻辑完全相反恒压源是把输出电压稳住电流由负载说了算恒流源是把输出电流稳住电压由负载阻抗自动决定。这个区别非常重要因为LED驱动、锂电池充电、传感器激励供电、电化学检测这类场景本质上都需要电流恒定而不是电压恒定。我举个例子你就明白了。LED灯珠的导通压降会随温度漂移同一颗LED冷态3.0V热态可能变成2.8V。如果直接用恒压源供电电流随压降变化亮度会明显波动严重时直接烧灯珠。但用恒流源就完全没有这个困扰——电流锁定在设定值不管LED压降怎么变亮度都纹丝不动。锂电池充电也是同理恒流阶段要求电流稳在比如0.5C电压会随着电池电压上升而自然爬升这时候就必须用恒流源来扛电压。那为什么不直接用电阻限流完事电阻限流在输入电压和负载阻抗都稳定的前提下还能凑合一旦负载阻抗变化限流效果就大打折扣。恒流源的核心价值在于它通过闭环反馈自动调节功率管的导通状态让电流对负载变化免疫。而OPA运算放大器加MOS管这套组合就是性价比最高、性能最稳、最容易调试的恒流方案之一。这套方案适合谁来参考我建议这几类朋友重点看看做LED驱动和照明电源的、搞电池充放电管理的、做精密传感器供电的、以及在实验室想搭一个可调恒流源做测试的。准备工作不用太多一块面包板或洞洞板、几个常用元件、一块万用表就能开干门槛比很多人想象的低得多。2. 认识主角OPA和MOS管的关键工作特性2.1 运放在恒流源里的角色误差放大器先聊OPA。恒流源电路里的运放干的其实是误差放大器的活儿它不断比较设定电压Vs加在同相输入端和采样电压Vf加在反相输入端把两者的差值放大后去驱动MOS管。如果采样电压比设定电压低说明电流偏小运放输出就升高把MOS管开大一点电流往上拉如果采样电压比设定电压高说明电流偏大运放输出就降低把MOS管关小一点电流往下压。整个过程在毫秒级甚至微秒级内反复进行最终电流被钉在设定值附近。运放选型有几个关键指标要盯住。第一是输入失调电压它直接影响恒流精度普通LM358的失调电压典型值在2mV左右换算到1A全量程大概影响0.2%到0.4%一般够用如果要做精密恒流可以选OP07、OPA2277这类低失调运放。第二是供电电压和输出摆幅最好选轨到轨输出的运放因为当负载阻抗很大时MOS管需要比较高的栅极电压才能维持电流这时候如果运放输出够不到电源轨电流就会hold不住。第三是带宽和压摆率恒流源是直流负反馈应用不需要太高的带宽但带宽太低的运放配合大电容负载容易引发自激振荡后面我会专门讲这个坑。2.2 MOS管的三个极与导通条件别记反了MOS管这边先过一遍基础。MOS管三个极分别是栅极GGate、漏极DDrain、源极SSource。电流方向是从D流向SN沟道MOS管G极是电压控制端理论上几乎不取电流。这个和三级管很不一样——三极管是电流控制电流基极需要持续灌电流MOS管是电压控制电流栅极只需要给电压静态时栅极电流是nA级这对运放输出来说简直是零负担。导通条件一句话就能讲清对于N沟道增强型MOS管必须满足Vgs大于阈值电压Vth典型2~4V才开始导通。但要注意这里的导通是个渐变过程。Vgs刚超过Vth时MOS管处于线性放大区可变电阻区——电流还不大D和S之间还有很大的压降随着Vgs继续升高D-S等效电阻才逐渐减小最终进入深度导通区欧姆区。恒流源电路恰恰就是让MOS管工作在半导通的线性区靠运放动态调节Vgs来控制电流。很多新手不理解MOS管为什么会发热其实就是因为在这种工况下MOS管两端承受了不小的压降功率P I × Vds全部变成热散掉了。MOS管选型方面我建议优先选逻辑电平MOS管比如IRLZ44N、AOD4184、AO3400这种阈值电压低单电源运放输出5V或8V就能完全驱开。如果用IRF540N这种标准栅极电压MOS管Vgs要达到10V左右才能充分导通在低压系统里就有点勉强。耐压值至少要留1.5到2倍余量比如输入12V系统就选40V以上器件24V系统选60V以上。2.3 米勒效应和寄生电容对恒流源有什么影响热词里很多人搜mos管米勒效应和mos管寄生电容这在开关电源里是大问题但在恒流源里也要留意。MOS管栅极和漏极之间存在寄生电容Cgd它的特殊之处在于具有米勒倍增效应——当漏极电压发生变化时Cgd会把漏极的变化耦合回栅极等效栅极电容变大很多。在恒流源里这个效应主要体现在小信号环路上运放输出经过Cgd和Cgs构成的分压网络再叠加漏极路径的负载变化可能会让环路产生额外的相位延迟一旦相位裕度不够电路就会自激振荡表现为电流高频抖动、示波器上看到正弦波或三角波。解决米勒效应引起振荡的办法有三个一是在运放输出和MOS管栅极之间串一个几十欧姆的电阻比如47Ω或100Ω把栅极驱动点的阻抗抬高降低Q值二是在运放反相输入端到地并一个小电容如100pF到1nF把高频增益压下来三是合理走线采样反馈线离功率走线远一点避免寄生耦合。这部分我会在第5章展开讲到底怎么定位和解决。3. 核心电路原理透彻解析闭环负反馈怎么工作3.1 电路结构与连接关系一张图说清楚现在我给出一个最经典的低边恒流源电路结构。如下电源正极VIN接入负载RL的一端负载RL的另一端接MOS管N沟道的漏极DMOS管的源极S接采样电阻Rsense采样电阻另一端接系统地GND运放同相输入端接设定电压Vref运放反相输入端−接MOS管的S极也就是采样电阻的上端运放输出端接MOS管的栅极G这个结构的特点是采样电阻放在低边接地端负载不接地而是接在电源和MOS管之间。低边方案的优点是简单可靠、采样电压方便测量缺点是负载两端都不接地在某些需要负载一端接地的应用场合不适用。高边恒流源要用PMOS电路稍复杂步骤上只是把对称翻转一下原理完全一样后文我会给扩展思路。话不多说直接上连接路径VIN ── RL负载── MOS管D ── MOS管S ── Rsense ── GND │ │ │ └── 运放反相输入端- │ 运放输出 ──────────────── MOS管G —— 栅极串Rg47Ω 运放同相输入端── Vref3.2 电流公式推导Iout Vref / Rsense接下来是这个电路最核心的公式也是整个恒流源的灵魂。运放在负反馈闭环状态下满足虚短特性同相输入端电压等于反相输入端电压。不用被虚短这个词吓到它的意思是运放会把输出调到能让两个输入端电压几乎相等为止因为只有两边相等误差才为零系统才稳定。由此可得反相输入端电压Vin- 采样电阻上端电压Vf Iout × Rsense同相输入端电压Vin 设定电压Vref虚短条件Vref Vf Iout × Rsense整理之后Iout Vref / Rsense这个公式就是整个恒流源的游戏规则。你只要把Vref调稳定把Rsense选精确输出电流就是它们的比值跟负载RL、跟输入电压VIN的变化统统没有关系。这也是为什么恒流源能做到负载变化时电流不变的根本原因。至于MOS管在这里承担什么角色它是被运放指令控制的可变电阻调节自身导通程度来吸收多出来的电压保证电流恒定。一个让人记忆深刻的例子如果把Vref设定为1V、采样电阻取1Ω那么输出电流就是1A。此时如果负载电阻从2Ω变成8Ω负载两端电压会从2V爬到8VMOS管上的压降会自动从VIN−2V−1V调整到VIN−8V−1V把电压差额全部吃掉。电流呢依然是1A分毫不差。这里面MOS管承担了全部多余电压的消耗所以恒流源发热大户往往不是负载而是MOS管本身。3.3 为什么这套方案优于三极管方案既然提到MOS管方案就顺手对比一下三极管方案。很多老电路用运放加三极管BJT做恒流源其实也能工作但有几个明显的短板第一三极管是电流驱动器件基极需要持续电流运放驱动起来更吃力而且基极电流会直接叠加到输出电流里造成额外的精度损失第二三极管的Vbe温度漂移比较大约−2mV/℃采样基准容易随温度跑第三大电流三极管常常放大倍数有限需要达林顿结构压降大、发热也大。MOS管方案刚好把这些痛点都绕开了栅极几乎不取电流运放驱动无压力Vgs阈值虽然也有温漂但运放闭环系统会自动补偿影响被压到极低同一电流等级下低压MOS管的导通电阻和饱和压降通常更小散热更好处理。所以我现在的恒流源设计除非是极高电压或者极低成本场景一般都直接上MOS管。4. 手把手实操从零搭一个1A恒流源4.1 器件选型清单与成本预算下面我用一个具体的实例带大家完整走一遍设计目标是一台输入12V、恒流1A的通用恒流源可用于LED灯珠驱动或电池充电模拟。元件清单如下表全部按常用料来选成本不高编号器件型号/参数数量说明U1运放LM358单电源5~12V1也可用OPA340或LMV321Q1N-MOS管IRLZ44N逻辑电平1Vgs阈值低至1~2VR1采样电阻0.5Ω / 1% / 2W低感1可用两个1Ω并联替代R2栅极电阻47Ω / 0.25W1防振用R3 / R4分压电阻10kΩ / 1kΩ2用于产生VrefD1稳压基准TL4311提供2.5V基准C1缓启动电容10μF / 16V1并联在Vref对地C2电源滤波100μF / 25V1输入侧选型的几个关键考量说清楚LM358价格便宜、单电源友好、市场上到处都能买到缺点是失调电压略大、带宽偏低但对1A级恒流完全够用IRLZ44N是逻辑电平MOS管Vgs在4~5V时就已经完全导通运放输出5V左右就能驱动不需要额外的高压栅极驱动。采样电阻是整个电路的标尺一定要用低感低温漂的型号普通水泥电阻在1A下会发热导致阻值漂移电流精度受影响我用的是金属膜无感功率电阻有条件用锰铜电阻更好。4.2 参数计算全过程从目标电流倒推现在做计算。核心公式就是Iout Vref / Rsense设计次序是从后往前推确定输出电流目标Iout 1A。确定采样电阻的功耗假设采样电阻两端电压选0.5V那么Rsense 0.5V / 1A 0.5Ω采样电阻上的功耗P 0.5V × 1A 0.5W。用额定2W的电阻就有4倍余量温度不至于太高。确定Vref既然采样电阻压降选了0.5V运放输入端就需要一个0.5V的设定电压。我用TL431产生2.5V基准再用R310kΩ和R41kΩ分压Vref 2.5V × 1/(101) 0.227V。这个值太低而且R4并联R3的负载会带来精度问题我调整一下分压比用R34.7kΩ、R41.2kΩVref 2.5 × 1.2/(4.71.2) ≈ 0.508V更接近0.5V。校核最终输出电流Iout 0.508V / 0.5Ω ≈ 1.016A。误差在2%以内符合一般工程要求如果追求更高精度可以加一只精密可调电阻微调Vref或者把Rsense改成0.5%精度的1Ω并联。这里我要专门强调一个新手容易犯的错误把Vref取太低比如直接用1.25V基准却配1.25Ω采样电阻采样电阻功耗会高达1.56W发热明显阻值漂移后电流跟着跑。反过来Vref取得太高也不行如果Vref2.5V而采样电阻只有0.1Ω虽然电阻功耗小但采样电阻两端的电压噪声、运放失调电压占的比重变大恒流精度同样受影响。我的经验是采样电压落在0.3V到1V之间比较合适兼顾功耗和精度。4.3 焊接与连接步骤按顺序来不踩坑接下来是实操步骤。无论你用洞洞板还是面包板按下面顺序接线最顺手先把TL431基准电路搭起来确认TL431的K端阴极对地电压是2.5VTL431要正常工作需要在阴极和地之间接一个分压网络并且给它提供一定的阴极电流大于1mA。用R3、R4分压得到Vref并接上缓启动电容C1到地。这样上电时Vref是缓慢爬升而不是瞬间跳变可以有效防止上电瞬间电流过冲。接运放LM358。注意LM358的电源引脚正电源接系统VIN12V负电源接地。检查数据手册的管脚定义LM358的1脚是输出A、2脚是反相输入A、3脚是同相输入A别插反。运放输出串R247Ω接到MOS管栅极G。接功率回路VIN接到负载RL和运放供电RL另一端接MOS管D极S极接RsenseRsense另一端接GND。然后把S极的采样点引回到运放反相输入端。注意采样线要用较细的独立导线不要跟功率回流线走在一起否则功率线上的压降会被误采样进去。接线顺序的原则是先小信号后大功率先基准后反馈。这样可以分模块排查问题比如运放供电和基准没接好之前不要上主电源不然MOS管可能会完全失控导通直接过流。4.4 上电调试流程与关键测量点全部接好后上电调试不要跳着来按照下面的步骤走先不接负载RL只给VIN供电。用万用表量TL431阴极电压应该在2.5V±1%。再量Vref分压点电压应该在0.5V左右。量运放第3脚同相输入和2脚反相输入它们应该非常接近说明运放已经在尝试平衡了。断开VIN把负载RL接上去。我建议先用一个功率电阻比如12V/12W的灯泡作为负载不要先接灯珠因为灯珠的伏安特性非线性调试时不好判断。重新上电用万用表电流档串入回路测输出电流应该接近1A。同时用电压档测MOS管S极对地电压如果Vref是0.508VS极电压应该也稳定在0.508V左右两者一致性越好说明运放工作越正常。微调Vref如果电流偏小适当调大Vref偏大就把分压比调小一点。串联一个100Ω电位器到分压下位电阻可以做到连续可调。带载稳定后用手轻触MOS管散热片确认温度可控。如果烫得缩手基本已经过温要立即断电检查功耗分配别硬扛。调试时我习惯用万用表优先测采样电阻压降而不是电流档串测。因为串电流档需要断开回路麻烦而用电压档量Rsense两端电压再除以阻值立刻得到电流不破坏回路还能实时监控。量Vgs也有用正常工作时Vgs应该在5~8V区间如果异常偏高且输出电流不稳说明运放饱和输出、反馈环路有问题如果Vgs接近0说明MOS管完全没导通大概率是运放供电或者基准接错了。5. 常见问题与排查技巧实录5.1 输出电流偏差大的原因排查如果实测电流和计算值对不上比如目标1A实测只有0.8A优先查这几个点采样电阻阻值是否准确电阻标称0.5Ω实际可能是0.45Ω或者0.55Ω一律用万用表实测阻值再算预期电流。Vref是否偏低TL431基准要用电压档实测分压电阻也有误差。我用10k和1.2k按计算是0.508V实际可能因为电阻精度在0.47~0.55V之间波动相应地电流就会偏。运放失调电压LM358失调电压最大可以到7mV虽然对0.5V采样电压影响只有1.4%但如果你把Vref做得更小比如0.1V影响就会放大到7%这时候就该换低失调运放或抬高Vref。反馈线引入压降如果采样线太粗太长、走线路径和功率回流线重合大电流下功率线上的铜箔压降会被叠加到运放反相输入端导致实际采样电压偏高、电流偏低。解决办法是让采样线单独从Rsense端子直接引到运放形成开尔文连接。如果电流时大时小不稳定不要第一反应换元件先用万用表看Vref稳不稳。很多Vref不稳是因为TL431阴极电流不足TL431最低工作电流是1mA我在上面只挂了分压电阻可能电流不够要保证整个偏置回路的电流大于2mA才安全。5.2 电路自激振荡怎么办自激振荡是OPA加MOS管恒流源里最让人抓狂的问题。症状表现为电流表读数乱跳、LED亮度闪烁、用示波器看MOS管S极电压有高频纹波几十kHz到几MHz都有可能。我排查自激的标准流程是这样的先看是不是栅极驱动电阻R2被短路了。如果没接或者阻值太小运放输出直接驱动MOS管的Cgs和Cgd相位裕度不足的概率很大。给运放输出和栅极之间加一个1kΩ左右的电阻是最有效的退烧药。再看采样线是否引入了寄生电感。Rsense到运放的走线如果很长并绕成圈在高频下会形成LC谐振点。把采样线缩短、采用双绞线方式拉到运放能有效降低这个风险。在运放的反相输入端到地并一个100pF到1nF的积分电容可以有效压低高频增益多数振荡都能压下去。但容量不能太大太大会拖慢环路响应让恒流源对负载突变的恢复时间变长。强力的终极手段在输出端MOS管D极那一路到地并联一个100nF高频电容给负载突变提供低阻抗通路降低环路负担。这个电容在普通阻性负载上可加可不加但若下游设备有容性负载就非常必要。遇到过最邪门的振荡是运放供电问题LM358用12V单电源供电但12V纹波很大纹波通过运放电源引脚耦合到输出再叠加到MOS管栅极形成电源纹波→运放→MOS管→电流→采样→运放的多重反馈。最终的解决办法是在运放电源引脚就地加一个10μF100nF的去耦电容立刻见效。5.3 MOS管发热严重要不要加散热片恒流源里MOS管发热几乎是必然的关键看发热量能不能接受。以我的1A/12V例子如果负载是8Ω电阻负载压降8VVref采样压降0.5VMOS管D-S压降 12V − 8V − 0.5V 3.5V功耗P 1A × 3.5V 3.5W。IRLZ44N的结到环境热阻大约62℃/W裸奔时温升就有217℃——根本扛不住。所以3W以上功耗必须加散热片。更彻底的思路是合理分配功耗如果恒流源输入电压太高比如24V输入却只需要12V供给负载多出来的十几伏电压全压在MOS管上发热极其恐怖。遇到这种情况要么降低输入电压到贴近负载需求要么用DC-DC降压后再进恒流源别让恒流源白白吃大压降。这也是很多工程新人容易忽略的点恒流源是线性调整器输入输出电压差越大效率越低MOS管越烫。判断MOS管温度是否正常的土办法手背贴上散热片可以坚持3秒说明温度在60℃左右坚持不了1秒基本已经超过80℃要降功率或加主动散热。有条件用热成像仪更好一眼就能看到发热分布。5.4 低边恒流源的局限性和高边方案怎么扩展低边恒流源最大的局限就是负载不接地。我在给一个电化学传感器供电时就踩过这个坑——传感器要求负载一端接地低边方案根本没法接。解决办法是改成高边恒流源把PMOS放在高端负载一端接地采样电阻也放在高端运放输出驱动PMOS的栅极。电路结构看似差不多但要注意PMOS的导通条件是Vgs为负运放输出需要拉到比源极电压更低才能导通所以常常需要额外的电平移位或者用N沟道MOS管加自举电路复杂度会上来不少。如果在低边和高边之间可以自由选择我建议先想清楚负载的接地需求再决定用哪种。多数LED驱动、通用测试负载场景低边方案完全够用也更好调。需要负载接地再咬牙上高边或改用集成恒流芯片例如PT4115、LM3404这类专用LED驱动IC外围更简单功能也更强。6. 实测数据与进一步扩展思路6.1 负载调整率实测记录最后分享一下我测试这台1A恒流源的数据。输入电压12VVref 0.508VRsense 0.5Ω负载在1Ω到10Ω之间变化用四线法实测电流如下负载电阻实测电流采样电压MOS管压降MOS管功耗1Ω1.01A0.505V10.5V10.6W3Ω1.00A0.500V8.5V8.5W5Ω0.98A0.490V6.5V6.4W8Ω0.97A0.485V3.5V3.4W10Ω0.96A0.480V1.5V1.4W可以看到负载从1Ω跑到10Ω最大电流偏差约5%主要来源是LM358的失调电压温漂和采样电阻的自热温漂。这个精度在通用LED驱动和电池模拟测试里完全够用但如果你要千分之一精度的恒流源就需要把Rsense升级成低温漂锰铜电阻、把运放换成OPA2277这类低失调器件同时把采样电压抬高到1V以上以摊薄噪声影响。实测中发现一个小细节电流在1Ω负载时偏低是因为MOS管压降达到10.5V接近运放驱动能力极限Vgs被拉到接近电源轨环路增益下降导致的。解决办法是把输入电压提高到14V以上留足余量。这也是为什么设计恒流源时输入电压最好比最大负载压降采样压降3V还要高一些省得极限工况下恒流维持不住。6.2 从恒定恒流到可编程恒流改动并不大如果你不想局限于固定电流想做一个可调恒流源最简单的方式就是把Vref从分压电阻改成电位器或者用一个DAC输出接入运放同相输入端。我之前做过一个USB程控恒流源用STM32的DAC输出0~1.2V配合0.25Ω采样电阻实现了0~4.8A连续可调精度在1%以内。控制代码就那么几行先初始化DAC每100ms从串口接收目标电流值换算成DAC寄存器值写进去即可。再往深做还可以给电路加上软启动、限流保护、过温保护。软启动就是给Vref做RC缓启我在前面已经加了这个电容C1限流保护可以加一个比较器监测采样电压超过阈值就关断MOS管过温保护可以用NTC贴在MOS管散热片上温度信号送到比较器或者单片机超限就切断驱动。这些扩展改动不大但能让一个简单恒流源模块变成可以交付的量产级方案。6.3 送给新手的最后几个建议搭这套电路时我踩过最蠢的坑是把LM358的电源接反了芯片瞬间冒烟。所以动手前一定先核一遍芯片手册的管脚排列尤其是运放的电源脚和输出脚。再有就是采样电阻不要用那种又粗又长的水泥电阻引脚电感太大容易制造振荡实在只有水泥电阻也要把引脚尽量剪短紧贴PCB布线。如果用洞洞板搭建议把功率回路大电流路径和小信号回路运放反馈路径在空间上尽量分开最好功率回路走一面小信号走另一面。大电流线路的压降用万用表量不出来但反馈线一旦和它绞在一起高次谐波就会通过寄生电容灌进运放轻则电流抖动重则直接自激。到时候查起问题来不是能力问题是布线思路问题。这块想明白了以后再搭任何线性电源电路都会顺手很多。