拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

LM2596 PWM调压实战:反馈脚电流注入与纹波优化指南

LM2596 PWM调压实战:反馈脚电流注入与纹波优化指南 说实话这个标题背后是我连续折腾了三个周末才趟平的路。项目本身不复杂要给一套舵机测试工装做一路“能用STM32动态调整”的供电电压手里正好有LM2596模块于是想当然地认为“用PWM控制输出电压调节”是件顺手的事——结果从波形崩坏到芯片冒烟把常见坑踩了个遍最后才把纹波优化到能看。这篇把整个过程、参数计算和避坑结论都写出来给准备拿LM2596做PWM调压的朋友做个参考。先说清楚这套方案适合谁你有一个LM2596降压模块想用单片机PWM去动态改变输出电压用于舵机供电、电机驱动、加热功率控制这类场景并且你能接受自己动手改模块上的反馈电阻。如果完全不想碰硬件、只想买现成的数控电源模块那这篇可能帮不上忙。但如果你愿意搞明白LM2596反馈脚的脾气这套经验能让你少走至少一星期的弯路。1. 先搞明白LM2596的反馈脚为什么能调压1.1 常规稳压是“电阻分压骗FB脚”的结果LM2596是一颗固定频率150kHz的降压开关稳压器ADJ版本内部有一个1.23V基准。稳态时误差放大器会把FB脚的电压维持在1.23V附近然后不断调整内部开关管的占空比直到FB脚恰好等于1.23V。反馈脚外部通常接两个电阻构成分压网络R1接在输出VOUT和FB之间R2接在FB和GND之间因为FB被内部环路“锁”在1.23V流过R2的电流就是固定的I2 1.23V / R2。FB脚输入阻抗极高所以这个电流只能从R1流过来于是R1两端电压就是I2 × R1。输出表达式为VOUT 1.23V × (1 R1 / R2)比如R13.6kΩ、R21.2kΩ输出就是1.23 × 4 4.92V和5V标称只差一点点。这块内容不难但它是后面所有调压方案的地基。1.2 PWM调压本质是在FB节点加“外部电流干预”分压电阻确定了输出电压后如果我想让电压变高或变低逻辑上有两条路改变R1或R2的阻值在FB节点上额外灌入或抽出电流PWM调压走的就是第二条路。把PWM信号经过RC低通滤波后变成平滑的直流电压再通过一只电阻R3接到FB节点相当于往FB节点注入或拉出一个额外电流。内部环路为了维持FB1.23V必须自动调整输出电压让R1提供的电流和外部注入电流重新达成平衡。很多人一开始会以为“PWM占空比大输出电压就大”实际完全不是这样甚至方向经常是反的这一点后面会展开说。但无论如何核心思路都是在FB节点上做电流叠加让环路自己去适配输出电压。1.3 动手前确认四件事第一确认手里的LM2596是ADJ可调版本。成品模块如果丝印是LM2596S-5.0或者-12内部基准和反馈网络已经固定没法直接改。必须买LM2596S-ADJ或板子上带有ADJ丝印和可调电阻脚位的模块。第二确认模块反馈网络是否方便飞线。很多模块上有一颗蓝色多圈电位器它就是反馈分压的一部分。如果你要把自己的PWM注入电阻接到FB脚最好先把电位器调整到一个固定值再并上你的注入支路否则分压关系会乱。第三确认输入输出压差。LM2596是Buck降压压差太小会进入饱和区导致输出纹波迅速恶化。12V输入调到5~9V没问题但如果输入只比输出高0.5V建议换LDO方案或者重新考虑电源架构。第四确认负载电流大小。我下面的方案针对0.5~1.5A负载如果你的负载到3A反馈网络的注入电阻和RC滤波参数需要重新核算同时输出电容和电感也要按数据手册加大余量。2. 直接PWM怼FB脚翻车实录我踩过的四个坑2.1 坑一PWM直接接FBFB波形过山车输出纹波爆表最开始我图省事把STM32的PWM输出3.3V2kHz经过一个1kΩ电阻直接连到FB脚。上电后输出电压确实变了但示波器一接差点没把我送走VOUT上面叠了将近300~400mVpp的锯齿状纹波同时LM2596电感还发出“吱吱”的啸叫声。我用示波器同时勾住FB脚和VOUT才发现问题所在。PWM为高时FB被外部电平强行拉高PWM为低时FB又回落到内部分压点。FB脚在1.23V附近以2kHz频率大幅波动等效于给误差放大器一个方波扰动内部环路拼命修正但修正速度跟不上PWM周期输出电压自然变成了一团浆糊。这一波排查的结论特别简单PWM不能直接进FB脚必须先滤波成平滑直流再参与反馈。后来我把PWM经过RC低通滤波后再接到FB脚啸叫立刻消失纹波降到百毫伏级别。这也是后续所有方案的基本前提。2.2 坑二RC滤波截止频率选错调压要么抖要么慢滤波看似简单其实坑在截止频率的选取上。我先用了一个比较小的RC参数10kΩ电阻加10nF电容截止频率约1.6kHz想着“滤掉2kHz的PWM应该够了”。结果输出纹波只降到120mV左右仍然能看到明显的PWM周期性毛刺因为截止频率和PWM频率同一量级平均电压根本没滤干净。后来我换成100nF截止频率160Hz左右。纹波确实干净了但新的问题来了调节占空比后输出电压要几百毫秒甚至更久才能稳定下来。如果只是手动旋钮调电压还好一旦接到PID闭环里这种滞后会让系统频繁超调、来回震荡。最终的经验公式是RC低通截止频率取PWM频率的1/100到1/1000同时时间常数要小于系统响应要求的10%~20%。我用20kHz PWM截止频率定在160~200HzRC用10kΩ100nF或47kΩ22nF效果比较平衡。调压稳定时间大约几毫秒对舵机供电、电机转速控制完全够用。2.3 坑三方向反了——占空比越大输出电压反而越低这个坑让我一度怀疑自己是不是拿错了芯片。搭好RC滤波后我用程序把PWM从0%逐步加到100%预期输出电压上升结果输出电压从5.86V一路掉到5.10V完全反向。画一下电路就明白了。R3把FB接到一个经过分压的PWM平均电压VA。VA低于1.23V时FB节点会通过R3向外“漏电流”等效于给FB加了一个额外的下拉路径。内部环路为了维持FB1.23V必须让R1流过更大的电流于是输出电压被迫升高。PWM占空比越大VA越接近1.23V下拉电流越小输出电压越接近默认分压值。所以整体趋势确实反了。这一现象的内在逻辑用一个简单表达式描述VOUT 1.23 R1 × [1.23 / R2 (1.23 - VA) / R3]当VA上升(1.23 - VA)变小方括号里的值变小VOUT就降。解决办法也很直接软件里做反向映射。比如需求电压是V_REQ实际输出PWM占空比写成 100% - D_REQ。或者PID控制时把误差取反。从功能角度来看只要系统能收敛反向并不影响最终效果。2.4 坑四上电瞬间电压冲高差点打坏负载在所有调压参数都正常以后我发现每次给系统上电输出电压都会先冲到一个比较高的位置再缓缓回落到目标值。原因是RC滤波电容在上电瞬间没有电荷VA接近0VR3的下拉电流最大输出自然冲高。如果这时候负载已经接入比如精密舵机或者一块价格不低的驱动板一次上电就可能留下隐患。解决方案分两层。第一层利用LM2596的EN脚ON/OFF脚。MCU启动后先输出目标PWM再延时几十毫秒等RC电压稳定最后把EN脚拉高使能输出。这样上电过程完全可控。第二层如果不想用EN脚就在FB脚对地并联一只2.2uF到4.7uF的软启动电容让输出电压爬升速率降下来。注意电容不能太大否则会影响环路稳定性后面会细说。3. 最终采用的注入电路完整参数设计与计算3.1 电路结构与元件清单折腾完四个坑后我最终采用的电路拓扑如下STM32定时器输出20kHz PWM幅值3.3V10kΩ R_rc 100nF C_rc构成低通滤波得到VAVA经过47kΩ和10kΩ分压得到可调控制电压VAVA通过R34.7kΩ接到FB节点FB对地并联1nF电容C_FB用于滤除高频开关噪声这里分压的目的是把最大控制电压限制在1.0V左右保证R3始终处于“从FB向下拉电流”的工作状态避免进入1.23V以上的非线性区。元件推荐值作用R_rc10kΩRC滤波电阻C_rc100nFRC滤波电容截止频率约160Hz分压上电阻47kΩ限制VA最大值分压下电阻10kΩ设定分压比约0.175R34.7kΩ注入FB节点的限流电阻C_FB1nF滤除FB脚高频噪声输出电容560uF电解10uF MLCC降低输出纹波续流二极管1N5822或SS34必须用肖特基这套电路的默认输出电压建立在R13.6kΩ、R21.2kΩ的基础上目标标称5V实际可调范围约5.1V到5.86V。如果你希望调压范围更大可以把R3减小到2.2kΩ但那会让FB节点的额外电流变大对反馈环路影响也更明显需要配合示波器仔细验证稳定性。3.2 从需求反推电阻值的设计方法设计这套电路时不要先记参数关键是理解这个公式的用法。以我的电路为例无注入时输出约4.92V。加入R3后当PWM占空比为0%VA≈0VR3上的电流为1.23V/4.7kΩ≈0.26mA。FB节点KCLI_R1 I_R2 I_R3算出来输出约5.86V。当PWM占空比100%VA被分压限制在约0.175×3.3V≈0.58VR3电流约0.14mA输出约5.39V。如果再考虑实际RC非理想特性最终范围大概5.2到5.8V之间。设计步骤总结如下先按目标固定输出电压选择R1和R2让无注入时输出比你想要的下限略低确定允许的最大输出电压算出需要的额外下拉电流I_extra根据VA的最大值和I_extra确定R3R3 (1.23 - VA_max) / I_extra用示波器测量实际输出电压与PWM占空比的对应关系做标定表这里要特别提醒R3不能取得太小否则额外的分流会削弱反馈环路的调节能力。一般建议R3上的电流小于R2电流的1/3即小于0.3mA左右。超过这个值瞬态响应会变差负载一变电压就容易飘。3.3 软件标定与控制示例因为方向是反向的STM32侧需要做一个简单的映射。最稳妥的方式是先把不同占空比对应的实际输出电压测出来做成标定表再让控制逻辑查表输出。比如// 反向映射实际输出越高需要的PWM占空比越低 // calibration_table[0] 存储PWM0%时电压calibration_table[100] 存PWM100%时电压 uint32_t voltage_to_pwm(float target_voltage) { float v_min calibration_table[100]; // 占空比100%对应低压 float v_max calibration_table[0]; // 占空比0%对应高压 if (target_voltage v_max) return 0; if (target_voltage v_min) return 65535; // 占空比100% // 线性插值 float ratio (target_voltage - v_min) / (v_max - v_min); return (uint32_t)((1.0f - ratio) * 65535.0f); }实际使用中发现线性插值已经能有比较好的精度毕竟LM2596在这种小范围调压下的曲线还是接近线性的。如果做宽范围调压建议改成查表插值因为三极管或分压网络带来的非线性会逐渐明显。PID控制时也一样。以DS18B20温度闭环输出PWM为例计算得到的PID输出越大说明需要加热功耗越大但映射到硬件PWM时要做一次反向。我习惯把PID输出语义定义为“目标电压”再调用voltage_to_pwm函数把目标电压映射成实际输出占空比这样代码可读性和逻辑方向都清晰。4. 纹波优化的三个着力点4.1 先分清纹波从哪来输出纹波不是单一来源至少有三类开关纹波由LM2596的150kHz开关动作产生幅度和输出电容ESR、电感值直接相关PWM平均电压纹波因为RC滤波不可能把PWM纹波完全滤干净最后会耦合到输出电压上负载瞬态跌落负载电流突变时环路响应需要时间输出电压会有短暂跌落或过冲排查时用示波器的AC耦合分别观察。先固定一个占空比看稳态纹波频率和幅度。如果看到150kHz附近的周期性尖峰优先处理输出电容和布局如果看到和PWM频率一致的低频波动优先处理RC参数如果纹波是随负载变化出现的宽带波动重点检查环路稳定性和输出电容总容量。4.2 输出电容与续流二极管的选择早期我犯过一个低级错误输出端只用了一个100uF普通铝电解电容结果纹波居高不下。LM2596是Buck拓扑输出电容的ESR直接决定纹波电压大小。换成低ESR的560uF/16V电解电容后纹波立刻下降一半以上再并联一只10uF MLCC和一只100nF高频陶瓷电容效果非常明显。实测对比输出电容组合稳态纹波1A负载高频尖峰100uF普通电解85mVpp明显560uF低ESR电解42mVpp中等560uF低ESR电解 10uF MLCC25mVpp轻微560uF低ESR电解 10uF 100nF18mVpp几乎看不到续流二极管同样关键。用1N4007这种普通整流管开关节点在反向恢复时会产生严重的尖峰发热也大。换成1N5822或SS34肖特基二极管后开关尖峰明显被削平电感上的损耗也降下来了。4.3 FB脚滤波电容与反馈走线FB脚是环路的核心敏感点。为了防止高频开关噪声干扰反馈可以在FB脚对地并联一个小电容推荐1nF到10nF。但一定要小心电容超过47nF后会在反馈环路里引入低频极点导致LM2596出现次谐波振荡输出电压产生周期性的低频波动动静比短路的二极管还吓人。PCB布局上反馈分压电阻要尽量靠近FB脚。R1、R2、R3的接地点应该单独汇聚到输出电容的GND端不要和其他功率地混在一起。我曾经因为飞线过长纹波和PWM噪声耦合进反馈路径怎么改参数都压不下去。后来把飞线改成短粗的屏蔽线并让信号地就近回到输出电容地端问题才消失。4.4 示波器探头的假纹波问题优化纹波过程中有一个极大的干扰项示波器探头本身的测量方式。如果你用普通探头的地线夹鳄鱼夹去测输出纹波地线夹会形成一个很大的环路天线把开关节点的高频辐射串扰进测量回路。看起来纹波可能有几百毫伏实际上芯片输出可能只有几十毫伏。正确做法是使用示波器探头自带的弹簧地针或者用铜箔做一个短接地环把探头尖端和地针直接压在输出电容两端测量。同样一块板子用接地夹测是220mVpp换成弹簧地针后只剩下25mVpp差距极其夸张。调纹波之前一定要先排除测量假象否则会走很多弯路。5. 布局与调试流程从PCB到底层代码一次通过5.1 功率回路的布线优先级如果你要自己画板子而不是用成品模块飞线功率回路的布局顺序很重要。第一步输入电容靠近VIN引脚。LM2596的输入电流是断续的输入电容离VIN越远输入电压尖峰越大反馈也会被污染。第二步让电感、续流二极管、输出电容形成最小功率回路面积。开关节点的铜皮面积必须尽量小因为它是高频辐射源但同时又要能承受电流所以用一段短粗走线而不是大面积铺铜。第三步反馈采样点要单独走线。从输出电容正极拉一根细线到反馈分压电阻不要直接从电感端节点采样否则开关节点的纹波会直接串进FB。第四步地线采用单点汇接。功率地输入电容地、输出电容地、续流二极管地、电感地集中在同一区域铺铜连接信号地RC滤波地、FB分压地单独接到输出电容地端避免功率地电流流过信号地造成干扰。5.2 上电调试五个步骤我每次拿到新板子都会按固定顺序调试这样可以快速定位问题不接负载也不接PWM输入先用固定占空比程序写死50%给EN脚信号。这时观察输出电压是否在预期范围内。如果电压偏高或偏低说明R1/R2分压不对先修正基础分压。接上PWM输入把占空比调到0%用示波器看VOUT是否有冲高回落同时记录稳态电压。再调到100%记录另一个端点电压。用示波器AC耦合看纹波重点区分150kHz开关纹波和PWM频率纹波。如果PWM频率纹波明显回去调RC截止频率。接上轻负载100Ω功率电阻观察输出电压是否稳定。如果电压波动检查FB脚电容是否偏大或R3是否过小。最后接上真实负载接入PID闭环观察系统是否震荡。震荡的话先降低PID的P值再检查调压响应速度是否跟得上控制周期。5.3 STM32侧PWM参数与控制节奏PWM频率我最终固定在20kHz。一个原因是RC低通更容易滤干净截止频率能做到160Hz左右残余纹波很小另一个原因是20kHz超过了人耳听域即使电感有轻微啸叫也听不见。如果你用的是一般MCU定时器20kHz、10bit分辨率对大多数应用足够。控制节奏上要做斜率限制。让Duty一次从0跳到50%RC电压会快速上升输出电压可能产生一个不小的过冲。建议每10ms最多调整1%占空比也就是全范围调整大约需要1秒对舵机供电和温度控制都足够平滑。实测下来加了斜率限制后上电过冲几乎消失闭环也更稳定。EN脚的时序也很关键。完整的上电顺序应该是MCU初始化PWM先让输出脚保持固定占空比比如目标占空比延时50ms让RC电压建立再把EN脚拉高使能LM2596。这样负载在上电瞬间看到的就是一个已经稳定的电压不会先冲到高位再回落。写在最后的一点经验这套电路我改了三版PCB才算稳定。第一版死在PWM直接怼FB第二版死在RC截止频率太高加坐标写反第三版才把反向调压、纹波、上电时序全部理顺。现在这块板子已经在我工装里稳定跑了三个月过程中又顺手把输出端并联了一个LED假负载是为了避免空载时输出电压漂移的毛病。如果你也要做类似的事我的建议是不要一上来追求宽范围调压先在小范围标称电压上下15%跑通整个链路再逐步扩展。毕竟LM2596的本质是一颗固定逻辑的开关电源芯片我们只是用外部电流干预了它的反馈节点稳定性和可靠性始终要靠实测量出来而不是靠理论推出来。
返回列表