ARTICLE DETAIL

资讯详情

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

基于PWM的LM2596可调电源改造:0-9.9V连续调节

基于PWM的LM2596可调电源改造:0-9.9V连续调节 1. 为什么我要折腾LM2596这块老芯片LM2596这颗芯片在电子圈里的地位大概相当于厨房里的老抽——便宜、好买、几乎人人都用过但真要把它的潜力榨干很多人其实只停留在“输入12V输出5V”这种最基础的玩法上。我手上攒了十几片LM2596的模块有国产的也有原厂TI的之前一直拿它做固定的降压供电直到有一次想给一个传感器做0到10V的线性标定才发现手头没有合适的可调电源。买一台成品可调电源要几百块而LM2596模块才几块钱于是我就动了改造它的念头。这个改造的核心思路其实不复杂LM2596本身是一个固定频率的降压开关稳压器它的输出电压由反馈引脚上的分压电阻决定。原厂数据手册里给的参考电路是用两个电阻分压把输出电压反馈到FB脚芯片内部把FB脚电压稳定在1.23V左右。所以只要改变分压比就能改变输出电压。但问题在于如果直接用普通电位器去调会碰到几个麻烦一是调节范围有限二是低频噪声大三是当电位器接触不良时输出会直接飙到输入电压烧掉后级负载。我最终采用的方案是用100kHz的PWM信号去控制反馈网络实现0到9.9V的连续可调。为什么是100kHz为什么是9.9V而不是10V这些细节后面会展开讲。先说说这个方案适合谁如果你手头有LM2596模块、一块能输出PWM的单片机比如STM32或者Arduino、几个阻容元件并且需要一个低成本的可调电源来做实验那这套方案可以直接抄作业。如果你只是想要一个固定的5V输出那没必要折腾直接用原厂电路就行。注意LM2596有多个版本国产仿制品和原厂TI的电气特性有差异尤其是反馈电压和开关频率。改造前建议先确认手头模块的实际芯片型号用示波器看一下开关波形。2. 改造方案的整体设计与选型考量2.1 为什么不用电位器直接调反馈最直观的改造方式是把LM2596反馈网络里的下分压电阻换成电位器。原厂典型电路里输出端到FB脚接一个电阻R1FB脚到地接一个电阻R2输出电压公式是Vout 1.23 × (1 R1/R2)假设R1固定为10kΩR2用10kΩ电位器那么当R2从10kΩ调到1kΩ时Vout从2.46V变到13.5V。看起来能调但实际用起来有几个坑。第一电位器的机械寿命有限拧几千次之后碳膜磨损接触电阻变大输出会跳变。第二电位器在调节过程中如果出现瞬间开路R2相当于无穷大Vout会直接冲到输入电压后级电路大概率烧毁。第三普通碳膜电位器的温度稳定性差手一摸阻值就变输出跟着漂。我试过用多圈精密电位器情况好一些但成本上去了而且仍然没有解决开路失控的问题。所以用电位器直接调反馈只适合对可靠性要求不高的场合比如临时搭个电路验证一下。2.2 PWM控制反馈的原理PWM控制反馈的思路是用一个方波信号经过RC低通滤波后得到一个与占空比成正比的直流电压再用这个电压去叠加到反馈网络上从而改变FB脚的有效分压比。具体来说我把PWM信号经过两级RC滤波得到一个0到3.3V或者0到5V取决于单片机电平的模拟电压然后通过一个电阻注入到FB节点。这里的关键是FB脚是一个高阻抗的反馈输入端芯片内部会把它稳定在1.23V。如果我通过一个电阻Rpwm把PWM滤波后的电压Vpwm注入FB节点那么根据基尔霍夫电流定律流过R1的电流等于流过R2的电流加上流过Rpwm的电流。整理后可以得到新的输出电压表达式Vout 1.23 × (1 R1/R2) - (Vpwm - 1.23) × R1/Rpwm从这个公式可以看出当Vpwm升高时Vout会下降。也就是说PWM占空比越大输出电压越低。这个关系是线性的但斜率取决于R1和Rpwm的比值。为了让0到9.9V的调节范围落在PWM的0到100%占空比之内需要合理选择R1、R2和Rpwm的值。2.3 为什么选100kHz的PWM频率PWM频率的选择需要权衡两个因素滤波效果和响应速度。频率太低RC滤波后的纹波会很大导致输出电压抖动频率太高单片机定时器的分辨率可能不够而且开关噪声容易耦合到反馈回路。我一开始试了10kHz用10kΩ和0.1μF做一级RC滤波截止频率约160Hz理论上能把10kHz的纹波衰减大约36dB。但实测下来输出端仍然能看到几十毫伏的纹波因为LM2596的开关频率是150kHz和PWM频率的谐波可能产生拍频。后来我把PWM频率提到100kHz用两级RC滤波第一级10kΩ0.1μF第二级10kΩ0.1μF截止频率还是160Hz左右但对100kHz的衰减达到了约56dB。实测输出纹波降到了10mV以内效果明显好很多。另外100kHz对于常见的单片机来说很容易实现。以STM32F103为例主频72MHz定时器预分频设为0自动重装载值设为719就能得到100kHz的PWM分辨率有720级足够实现0.01V级别的调节精度。如果用Arduino Uno主频16MHz定时器1设置成相位修正模式也能输出100kHz左右的PWM但分辨率会降到160级左右调节步进会大一些。2.4 为什么上限是9.9V而不是10V这个问题的答案其实很简单留一点余量。LM2596的输入电压范围是4.5V到40V但它的输出电压上限受限于输入电压和芯片的最小压差。如果输入是12V理论上输出可以到11V左右但考虑到开关管的饱和压降和电感的内阻实际能稳定输出的最高电压大概在10.5V左右。我把上限设在9.9V是为了保证在整个调节范围内芯片都工作在稳定的降压模式下不会因为压差不够而进入异常状态。另外9.9V这个值在数字上也很方便用PWM的0到100%对应0到9.9V每1%的占空比对应0.099V接近0.1V。这样在写代码的时候可以直接用占空比乘以99来得到目标电压的毫伏值计算很简单。3. 核心元件选型与参数计算3.1 LM2596模块的挑选与鉴别市面上的LM2596模块大致分三类原厂TI芯片、国产仿制芯片、以及打磨翻新芯片。原厂芯片的开关频率是150kHz反馈电压是1.23V±2%效率在80%左右。国产仿制芯片的开关频率可能只有50kHz到100kHz反馈电压也有偏差效率低一些。打磨翻新芯片最坑性能不稳定有的甚至把LM2576的芯片重新打标成LM2596。我手头有几个不同渠道买的模块用示波器测开关波形发现有的模块开关频率确实是150kHz有的只有52kHz。频率低的模块电感需要更大否则纹波会很大。所以改造前最好先测一下手头模块的实际开关频率。如果没有示波器可以看模块上的电感值原厂方案通常用33μH仿制方案有的用47μH甚至68μH。实操心得买LM2596模块时优先选电感是33μH、输出电容是220μF以上的版本。如果电感是47μH以上大概率是仿制芯片改造时PWM滤波参数需要重新调整。3.2 反馈电阻网络的计算原厂典型电路里R110kΩR23.3kΩ输出电压是5V。我要实现0到9.9V可调需要重新计算R1和R2。根据公式Vout_max 1.23 × (1 R1/R2) - (Vpwm_min - 1.23) × R1/Rpwm当PWM占空比为0时Vpwm0V此时Vout应该等于9.9V。当PWM占空比为100%时Vpwm3.3V此时Vout应该等于0V。把这两个条件代入可以得到两个方程9.9 1.23 × (1 R1/R2) - (0 - 1.23) × R1/Rpwm 0 1.23 × (1 R1/R2) - (3.3 - 1.23) × R1/Rpwm从第二个方程可以得到1.23 × (1 R1/R2) 2.07 × R1/Rpwm代入第一个方程9.9 2.07 × R1/Rpwm 1.23 × R1/Rpwm 3.3 × R1/Rpwm所以R1/Rpwm 3即Rpwm R1/3。再回代到第二个方程1.23 × (1 R1/R2) 2.07 × 3 6.211 R1/R2 5.05R1/R2 4.05如果取R110kΩ那么R22.47kΩRpwm3.33kΩ。实际选型时R2用2.4kΩ或2.5kΩRpwm用3.3kΩ。这样计算出来的理论值是Vout_max 3.3 × 10/3.3 10VVout_min 0V。考虑到电阻的容差和PWM电平的偏差实际输出范围大概是0.1V到9.9V正好满足需求。3.3 PWM滤波电路的设计PWM滤波电路的作用是把方波变成平滑的直流电压。我采用两级RC低通滤波每级的截止频率设为160Hz左右。第一级用10kΩ电阻和0.1μF电容第二级同样用10kΩ和0.1μF。这样对100kHz的PWM信号第一级衰减约56dB第二级再衰减56dB总共112dB理论上纹波可以忽略不计。但实际电路中第二级滤波的输入阻抗会受到第一级输出阻抗的影响。第一级的输出阻抗是10kΩ第二级的输入阻抗也是10kΩ相当于信号被分压了一半。所以实际得到的Vpwm最大值不是3.3V而是1.65V左右。这会导致调节范围不够。解决办法是把第二级的电阻减小到1kΩ电容增大到1μF这样第二级的输入阻抗远大于第一级的输出阻抗分压效应可以忽略。最终的滤波参数是第一级10kΩ0.1μF第二级1kΩ1μF。截止频率分别是160Hz和160Hz对100kHz的衰减分别是56dB和76dB总衰减132dB。实测PWM占空比从0变到100%时滤波后的电压从0V平滑变到3.28V线性度很好。3.4 输出电容和电感的匹配LM2596的数据手册推荐输出电容用220μF以上的低ESR电解电容电感用33μH。我实测发现如果输出电容小于100μF在输出9.9V、负载电流1A的时候纹波会超过100mV。换成470μF的低ESR电容后纹波降到30mV左右。如果再并联一个100nF的陶瓷电容高频噪声也能明显改善。电感的选择也很关键。原厂推荐33μH但如果你手头的模块是仿制芯片开关频率只有50kHz那么33μH的电感会导致纹波电流过大可能触发芯片的过流保护。这时候需要换成68μH或100μH的电感。判断方法很简单在满载情况下用手摸电感如果烫得厉害说明电感值偏小或者饱和电流不够。4. 完整电路图与接线说明4.1 电路整体框图整个改造电路可以分成三部分LM2596降压主电路、PWM滤波电路、反馈注入电路。LM2596主电路保持原样输入接12V输出接负载。PWM信号从单片机引脚出来经过两级RC滤波后通过一个3.3kΩ的电阻连接到LM2596的FB脚。原来的反馈电阻R1保持10kΩ不变R2从原来的3.3kΩ换成2.4kΩ。这里有一个细节需要注意LM2596的FB脚在正常工作时的电压是1.23V而PWM滤波后的电压范围是0到3.3V。当PWM占空比很高时Vpwm可能超过1.23V这时候电流会从PWM滤波电路流向FB脚相当于抬高了FB脚的电压芯片会降低输出电压来维持FB脚在1.23V。这就是PWM控制输出电压的原理。4.2 关键节点的电压和电流在PWM占空比为50%时Vpwm大约是1.65V。此时流过Rpwm的电流是(1.65-1.23)/3.3kΩ0.127mA。流过R1的电流是(9.9-1.23)/10kΩ0.867mA。流过R2的电流是1.23/2.4kΩ0.512mA。根据基尔霍夫电流定律流入FB节点的电流等于流出FB节点的电流0.867mA 0.512mA 0.127mA基本吻合。这说明计算是正确的。在实际焊接时Rpwm的电阻要选精度1%的金属膜电阻R1和R2也要用1%精度的。因为反馈网络的精度直接决定了输出电压的精度。如果用5%精度的碳膜电阻输出电压误差可能超过0.5V。4.3 单片机的PWM配置以STM32F103为例我用TIM3的通道1输出PWM引脚是PA6。配置步骤如下// 使能TIM3时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); // 配置PA6为复用推挽输出 GPIO_InitStructure.GPIO_Pin GPIO_Pin_6; GPIO_InitStructure.GPIO_Mode GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; GPIO_Init(GPIOA, GPIO_InitStructure); // 定时器基础配置 TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_TimeBaseStructure.TIM_Period 719; // 自动重装载值 TIM_TimeBaseStructure.TIM_Prescaler 0; // 预分频 TIM_TimeBaseStructure.TIM_ClockDivision 0; TIM_TimeBaseStructure.TIM_CounterMode TIM_CounterMode_Up; TIM_TimeBaseInit(TIM3, TIM_TimeBaseStructure); // PWM输出配置 TIM_OCInitTypeDef TIM_OCInitStructure; TIM_OCInitStructure.TIM_OCMode TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse 0; // 初始占空比0 TIM_OCInitStructure.TIM_OCPolarity TIM_OCPolarity_High; TIM_OC1Init(TIM3, TIM_OCInitStructure); // 使能定时器 TIM_Cmd(TIM3, ENABLE);这段代码把TIM3配置成100kHz的PWM分辨率是720级。设置占空比的函数是void SetVoltage(float voltage) { // voltage范围0到9.9V uint16_t compare (uint16_t)((9.9 - voltage) / 9.9 * 720); TIM_SetCompare1(TIM3, compare); }注意这里的逻辑电压越高占空比越小。因为PWM占空比越大Vpwm越高输出电压越低。所以计算compare值时要用(9.9 - voltage)。4.4 实际焊接与布局注意事项焊接的时候PWM滤波电路要尽量靠近LM2596的FB脚走线要短避免引入噪声。滤波电容的接地端要直接连到LM2596的GND引脚不要绕远路。Rpwm的电阻一端接滤波电容的正极另一端直接焊到FB脚上。如果用的是现成的LM2596模块FB脚通常引出了一个焊盘或者通孔。你可以把原来的R2电阻拆掉换成2.4kΩ然后把Rpwm电阻焊到FB脚和滤波电路之间。注意不要破坏原来的PCB走线可以用细导线飞线连接。注意焊接前一定要断开输入电源并且用万用表确认输入电容已经放电完毕。LM2596的输入电容在断电后可能仍然存有电荷直接用手摸会有触电风险。5. 调试过程与实测数据5.1 上电前的静态检查焊完电路后先不要接负载也不要接单片机。用万用表测一下FB脚对地的电阻正常应该是R2的阻值也就是2.4kΩ左右。如果测出来是0Ω或者无穷大说明有短路或开路。然后测一下Rpwm电阻两端应该是3.3kΩ。确认无误后给LM2596输入接12V输出端接一个1kΩ的假负载电阻。此时PWM信号还没有接FB脚的电压由R1和R2分压决定。根据公式Vout 1.23 × (1 10/2.4) 6.35V。用万用表测输出应该在6.3V左右。如果偏差超过0.2V说明电阻精度不够或者芯片的反馈电压有偏差。5.2 PWM信号的接入与调节把单片机的PWM输出接到滤波电路的输入端然后写一个简单的程序让占空比从0慢慢增加到100%。每增加10%用万用表记录一次输出电压。我实测的数据如下占空比理论Vpwm实测Vpwm理论Vout实测Vout0%0V0.02V10.0V9.92V20%0.66V0.65V7.9V7.85V40%1.32V1.30V5.8V5.76V60%1.98V1.96V3.7V3.68V80%2.64V2.62V1.6V1.59V100%3.30V3.28V0V0.08V从数据可以看出实测值和理论值非常接近最大偏差在0.08V左右。这个偏差主要来自电阻的容差和PWM电平的微小波动。对于大多数实验用途来说这个精度已经足够了。5.3 负载调整率和纹波测试接上1A的负载电阻重新测一遍输出电压。在输出9.9V时空载和满载的电压差大约是0.15V负载调整率约1.5%。在输出5V时负载调整率约1%。这个表现对于LM2596来说属于正常水平。纹波方面用示波器交流耦合测量输出9.9V、1A负载时纹波峰峰值约25mV。输出5V时纹波约15mV。如果在输出端并联一个100μF的低ESR电容和一个100nF的陶瓷电容纹波可以降到10mV以下。5.4 动态响应测试用单片机快速改变PWM占空比模拟输出电压从5V跳到9V再用示波器观察输出波形。实测发现输出电压从5V上升到9V大约需要2ms有过冲但不超过0.3V。这个响应速度对于大多数应用来说够用了。如果负载电流变化剧烈比如从0.1A跳到1A输出电压会有约0.2V的跌落恢复时间约1ms。实操心得如果发现动态响应太慢可以把输出电容从470μF减小到220μF但纹波会增大。这是一个权衡根据实际负载特性来选。6. 常见问题与排查技巧实录6.1 输出电压不随PWM变化这是最常见的问题。首先检查PWM信号是否真的到了滤波电路输入端用示波器看单片机引脚有没有波形。如果没有波形检查单片机配置是否正确定时器是否使能。如果有波形但滤波后电压不变检查滤波电容是否焊反或者损坏。如果滤波后电压正常但输出不变检查Rpwm电阻是否虚焊或者FB脚是否被其他电路拉死。还有一种可能是LM2596的FB脚内部有保护电路当注入电流过大时会钳位。如果Rpwm电阻太小比如只有100Ω注入电流可能超过1mA芯片会进入异常状态。这时候需要增大Rpwm电阻或者减小PWM滤波后的电压范围。6.2 输出纹波过大纹波过大通常有三个原因输出电容容量不够、电感值不匹配、PWM滤波不干净。先检查输出电容如果小于220μF换大的。再检查电感如果开关频率是150kHz电感应该是33μH如果是50kHz电感应该是68μH以上。最后检查PWM滤波用示波器看FB脚的电压波形如果有明显的100kHz纹波说明滤波不够需要增加一级RC或者增大电容。6.3 输出电压跳变或失控如果输出电压突然跳到输入电压说明反馈回路断了。重点检查R2电阻和Rpwm电阻的焊接以及FB脚的走线。如果输出电压在某个点跳变可能是电位器如果用了接触不良或者PWM占空比在临界点附近抖动。可以在PWM输出端加一个小的RC滤波或者在代码里加迟滞避免占空比在临界点反复变化。6.4 芯片发热严重LM2596在满载时的效率大约是80%也就是说如果输出5V、1A输入12V那么输入功率是6.25W输出功率是5W有1.25W变成热量。如果芯片没有散热片温度会升到60度以上。这是正常的但如果烫到手不能摸说明效率太低或者负载太重。可以降低输入电压比如用9V输入代替12V减少压差发热会明显改善。问题现象可能原因排查方法解决方案输出不随PWM变化PWM信号未到达示波器测单片机引脚检查定时器配置输出不随PWM变化Rpwm虚焊万用表测通断重新焊接纹波过大输出电容小并联电容测试换470μF低ESR纹波过大PWM滤波不足示波器测FB脚增加RC级数输出跳变反馈回路开路测FB脚电阻补焊R2或Rpwm芯片发热压差大测输入输出电压降低输入电压6.5 独家避坑技巧第一个坑不要用杜邦线连接PWM信号。杜邦线的接触电阻不稳定而且容易引入噪声。我一开始用杜邦线输出总是有几十毫伏的跳动后来改成直接焊接问题消失。第二个坑LM2596的FB脚非常敏感不要在上面接示波器探头。探头的输入电容有十几皮法会改变反馈网络的频率特性导致输出自激。如果要测FB脚波形用高阻抗探头并且设置成10:1衰减。第三个坑如果手头的LM2596模块是仿制芯片反馈电压可能不是1.23V而是1.25V或者1.2V。这时候需要重新计算R2和Rpwm的值。方法是先不接PWM只接R1和R2测出实际输出电压反推反馈电压再重新计算。7. 这个改造还能怎么玩这套PWM控制反馈的思路其实不局限于LM2596。任何带有FB脚的开关稳压芯片比如LM317、XL6009、甚至一些DC-DC控制器都可以用类似的方法改造。区别只在于反馈电压不同需要重新计算电阻值。另外如果你用STM32的DAC代替PWM可以省掉RC滤波电路直接输出模拟电压。但DAC的输出阻抗比较高需要加一个运放做缓冲。我试过用STM32F103的DAC输出经过一个LM358跟随器再通过3.3kΩ电阻注入FB脚效果比PWM更好纹波更低响应更快。但成本也高一些适合对精度要求高的场合。最后分享一个小技巧如果你想让输出电压的调节更平滑可以在代码里做软件滤波比如每次改变占空比时不要一步到位而是分10步逐渐变化每步间隔1ms。这样输出电压的变化会更柔和对负载的冲击也更小。我在驱动一个电机负载时用了这个方法电机启动时的电流冲击明显减小。
返回列表