MSP430+LM2576开关电源并联均流系统设计与调试

发布时间:2026/11/6 2:25:36
MSP430+LM2576开关电源并联均流系统设计与调试

简介:这份文档是2011年全国大学生电子设计竞赛A题「开关电源模块并联供电系统」的完整设计论文,面向参加电子设计竞赛的高校学生,以及学习开关电源与并联均流技术的工程人员。论文以MSP430F149单片机为控制器、LM2576-ADJ为电源芯片,系统梳理了主从法、平均电流自动均流法、热应力自动均流法与最大电流均流法四种方案的优缺点与取舍依据,并给出两路电源在负载变化时自动按比例均流的实现细节、负载短路保护与自动恢复电路的设计,以及效率、均流相对误差等指标测试数据。资源包内共1个docx文件,约617KB,内容为论文正文,涵盖题目要求、方案论证与比较、模块选型、电路原理与测试分析等章节,结构完整,可直接用于赛题复盘与方案对照。该文档已有804人学习下载。读者可从中获取完整的赛题指标解读、均流方案论证思路与硬件参数选取依据,适合备赛入门与电源类项目方案设计参考。

1. 两路电源并起来,电流为什么自己跑偏

实验室里把两路开关电源模块并联带到 8V 负载上,空载电压对得很齐,一加上负载就现原形:总电流 1.5A,一路跑 1.0A,另一路只剩 0.5A,电感和续流二极管温度差出一大截。这就是开关电源模块并联供电系统最典型的开局——电压好并,电流难分。这份电子设计竞赛 A 题的完整论文,把 MSP430F149 主控、LM2576-ADJ 电源芯片、INA270 高侧检流、ADS1232 采样、DAC7811 反馈这条链路从方案论证一路写到测试数据表,还留下了四天三夜调试中的问题记录。准备电赛控制类题目的同学能拿它当方案骨架,手上要做多路并联均流、需要一份能照着搭的硬件与软件流程的工程师,也能从里面挖到不少细节。

2. 方案定型:四种均流法的取舍与 MSP430+LM2576 的选型账

一份竞赛论文最值钱的部分往往不是最后的测试数据,而是“为什么排除了另外三个方案”。这份材料在方案论证这一章写得比较实在,四种均流方法各自的失效模式、冗余能力和实现代价都摆出来了,主控和电源芯片也各有两套候选做对比。把这段读透,等于把并联供电系统最容易翻车的地方提前过了一遍。

2.1 四种均流法放进并联系统里怎么比

主从法的思路最直白:从两路模块里挑一路当主模块,工作在电压源模式,负责把母线稳在 8V;另一路当从模块,工作在电流源模式,电流值由主模块或上位给定。它的优点是控制逻辑简单、均流精度高,不需要额外的均流母线。它的致命伤也在结构上——主模块一挂,整个系统直接崩溃,没有冗余可言。竞赛题里要求“负载短路保护及自动恢复”,主从法在保护期间主模块一旦被关断,从模块就失去参考,恢复过程很难做干净。

平均电流自动均流法在所有模块之间拉一条公共均流母线 CSB,母线电压是所有模块输出电流采样值的平均,每个模块拿自己的采样值和母线比,误差经调整放大器去修正各自输出。它能做到比较精确的均流,也不需要额外的均流控制器。坑在母线本身:CSB 一旦短路,或者挂在母线上的某个模块不工作把母线拉低,所有模块都会跟着下调输出电压,最后可能一起掉到下限,把局部故障放大成系统故障。

热应力自动均流法测的是模块温度,让温度高的少出力、温度低的多出力。这个方法在功率模组里很常见,但它响应慢,温度是个惯性量,竞赛题要求负载电流在 1.5~3.5A 之间变化时比例误差不超过 2%,靠温度环根本追不上。而且温度传感器的一致性和安装位置对结果影响极大,两路模块的温度传感器贴的位置差 5mm,测出来的分配比例就不一样,这属于典型的不可复现。

最大电流均流法用一套最大值比较器,每一时刻把输出电流最大的那个模块选出来当主模块,它的电流采样电压送到均流母线 CSB 上,母线上的电压就代表所有模块里的最大电流。其余从模块拿自己的采样值和母线比,低了就往上加,自动向最大电流看齐。原文最终选了这一种,理由站得住:不需要指定固定的主模块,任何一路失效另一路自动接管,有天然冗余;母线反映的是最大值,即使某个模块掉线,母线电压只会被别人顶上去,不会被拉垮。

选它的代价是必须处理“谁当主”这件事的边界情况。两路电流几乎相等时,最大值比较器会在两路之间来回切换,母线电压抖动,从模块跟着抖,这就是后面第 5 章要讲的 1:2 均流调不准的直接源头。另外,最大电流法天然只能做“向最大值看齐”的均流,想做 1:2 这种非等比例分配,就不能只靠硬件母线,必须让每路的目标值由软件单独给定——这也是这份论文里 DAC7811 存在的意义。

提示:最大电流法解决的是“等比例均流”,题目要求的 1:1、1:2 以及 0.5~2.0 范围内任意比例,本质上是每路各自闭环到不同目标值,硬件的最大值母线只提供粗同步,精调必须落在软件里。

2.2 主控:为什么不用 51,MSP430F149 的账怎么算

原文给了两个候选:通用 51 系列和 MSP430。排除 51 的理由写得比较诚实——不是 51 算不动,而是精度不够,得外挂 10 位以上的高速 ADC 和 DAC,硬件复杂度上去了,器件成本也上去了,性价比反而低。这个判断在竞赛场景下是对的:四天三夜的时间里,多挂两颗外围芯片就多两处调试点,走线、时序、基准噪声全是时间成本。

MSP430F149 的优势在于片上资源把外围压缩了:最高 8MHz 时钟,一个时钟周期就是一个机器周期,中断响应快;内部集成 12 位 ADC,可以做辅助监测,比如输入电压、散热器温度这类不需要高精度的量;超低功耗在电池供电场景是加分项,在竞赛台架上倒不是关键。真正让它被选中的是 12 位 ADC 加上软件可以做测量误差补偿——同一批器件,校准做得好和做得糙,最后测出来的均流误差能差一个数量级。

需要说清楚的是,主控内部的 12 位 ADC 并没有用来做电流主采样。电流环要求的分辨率比 12 位高得多:3.5A 满量程下 12 位 ADC 的 1LSB 对应 0.85mA,看起来够,但实际有效位会被开关噪声吃掉三四位,折算下来 1LSB 变成十几毫安,2% 的相对误差在 0.5A 这一档就是 10mA,刚好卡在边缘上,没有余量。所以这份论文的电流主通道走的是外置 ADS1232,24 位 ΔΣ,实际有效位受噪声限制,能稳定拿到 14~16 位就足够把 0.5A 档的误差压到 1% 以内。

2.3 电源芯片:LM2576-ADJ 与 TPS5430 的对比

电源芯片这一层,原文在 LM2576-ADJ 和 TPS5430 之间选了前者。把两者的关键参数摆在一起,选择逻辑就清楚了。

参数LM2576-ADJTPS5430
输入电压范围最高 40V(HV 版本更高)5.5V ~ 36V
连续输出电流3A3A
开关频率52kHz 固定约 500kHz
内部基准1.23V1.221V
反馈方式FB 脚稳在 1.23V,外接分压FB 脚稳在 1.221V,外接分压
保护逐周期限流、热关断逐周期限流、热关断、使能端
外围电感、续流二极管、少量电容电感、续流二极管、补偿网络

LM2576 是异步降压,内部集成开关管,外部只需要一个电感、一个肖特基续流二极管和几个电容,52kHz 的频率让电感和布局都比较好伺候,缺点是电感和输出电容体积大、效率上限不如高频方案。TPS5430 开关频率高,电感和电容能小一圈,效率标称能到 95%,代价是要做补偿网络设计,环路不稳的时候输出会振,对竞赛这种时间紧的场景不友好。

选 LM2576 还有一个隐性理由:它的 5 脚 ON/OFF 是逻辑电平控制,拉高关断、拉低开启,正好可以拿来做短路保护的执行机构。过流时 MCU 直接把 ON/OFF 拉高,模块瞬间停止输出,不用去动反馈环,也不用额外加 MOS 开关。TPS5430 也有 EN 脚,功能类似,但它的软启动和使能时序更复杂,保护恢复的逻辑要处理得更小心。

LM2576-ADJ 的输出电压由 FB 脚的分压电阻决定,公式是Vout = 1.23 × (1 + R2/R1)。要出 8V,R2/R1 = 5.504,取 R1 = 1kΩ、R2 = 5.5kΩ(5.1k 固定电阻串一个 500Ω 可调),这样既有固定值保底,又留了微调余量。原文提到 FB 脚流入电流为零,实际器件有几十纳安的偏置电流,分压电阻取太小会白白耗电影响效率,取太大又容易被噪声干扰,1kΩ 量级是个常见折中。

3. 系统架构拆解:从 INA270 采样到 DAC7811 反馈的完整信号链

把这份论文的系统框图摊开看,它其实是一条很标准的数字闭环:功率级在左边,采样在中间,控制在右边,反馈从右边绕回左边。理解这条链路的每一段在干什么、接口电平是多少、噪声从哪里进来,比记住任何单个器件型号都重要。

3.1 总体框图与五个模块的职责边界

系统可以切成五块,职责边界划得很清楚:

  • DC/DC 功率模块:两路独立的 LM2576-ADJ 降压电路,输入共用一路直流母线,输出在负载端并联。每路有独立的电感、续流二极管和输出电容,两路的 FB 分压网络各自带一个 DAC 注入点。
  • 电流检测模块:每路串一个毫欧级采样电阻,用 INA270 做高侧检测,输出一个与电流成正比的电压。
  • AD 采集模块:ADS1232 双通道 ΔΣ ADC,两路电流采样同时进,参考电压由 MC1403 提供 2.5V。
  • DA 反馈模块:DAC7811 双路 12 位乘法 DAC,输出经 TL082 做 I/V 转换后,通过注入电阻接到各自 LM2576 的 FB 节点,实现数字微调输出电压。
  • 保护与人机:独立键盘设定目标电流和分配比例,液晶显示实时电流值,MCU 通过拉高 LM2576 的 ON/OFF 实现短路保护与自动恢复。

这个划分方式的好处是每一块都能单独验证。功率级先裸跑,用可调负载和万用表确认 8V 输出和效率;检流链路单独校准,给已知电流看 INA270 输出是否线性;AD 链路单独读码,短接输入看零点、给基准看满量程;最后才把闭环接起来。反过来,一上来就把五块焊在一起通电,出问题的时候你根本不知道是功率级振了、检流饱和了还是 DAC 打架了,这就是黑匣子。

3.2 电流检测链路:采样电阻、INA270 与 ADS1232 的匹配

这一段的每一个参数都是相互咬合的,改一个就得重算另外两个。

采样电阻选 20mΩ。3.5A 满载时压降 70mV,功耗3.5² × 0.02 = 0.245W,用 1W 的合金电阻留足余量。压降不能再大,因为这部分压降直接吃掉效率;也不能再小,太小了 INA270 的失调电压会淹没信号。原文提到 INA270 的 1 脚和 8 脚之间输入电压范围是 50mV 到 100mV,这正好对应 2.5A 到 5A 的工作区间,说明采样电阻是按满量程 5A 设计的。

INA270 的增益是 20V/V,共模输入范围 -16V 到 +80V,这个宽共模是它被选中的关键——采样电阻放在 8V 输出的高侧,共模电压就是 8V,普通运放做高侧检测要么超范围,要么需要精密匹配的电阻网络。70mV 差分压降乘 20 得到 1.4V 输出,落在 ADS1232 的输入范围内,配合 2.5V 参考电压,满量程利用率 56%,既留了过载余量,又没浪费动态范围。

ADS1232 这边要注意的地方有三处。第一是 PGA 档位,1/2/64/128 四档,电流信号已经放大过一轮,选 PGA=1 就行,再放大反而容易在短路瞬间饱和。第二是输出速率,10SPS 和 80SPS 两档,10SPS 时 50/60Hz 抑制最好但响应慢,均流环要在负载突变后几百毫秒内收敛,80SPS 更合适,噪声靠软件滑动平均补。第三是参考电压,MC1403 给 2.5V,ΔΣ ADC 的输出码值直接和参考挂钩,参考源的温漂就是整个电流测量的温漂,这颗器件别省。

换算关系可以写成一行:

I(A) = ADC_code / 2^23 × Vref / PGA / Gain_INA270 / R_shunt = ADC_code / 8388608 × 2.5 / 1 / 20 / 0.02

代入满载 3.5A,理论码值约 4.7M,距离 24 位满量程还有很大空间,说明这条链路的分辨率余量足够,实际能拿到的有效位取决于布线和滤波,而不是器件本身。

3.3 调压与保护链路:DAC7811 注入 FB 节点、ON/OFF 拉闸

DAC7811 是 12 位乘法型 DAC,串行接口,工作电压 2.7V 到 5.5V,输出的是电流,需要后级运放做 I/V 转换。原文用 TL082 搭了这一级,输出再经注入电阻接到 LM2576 的 FB 节点。

这里的调节原理值得说透。LM2576 的反馈环会不惜一切代价把 FB 脚稳在 1.23V,所以从 Vout 经 R2 流进 FB 节点的电流,必须等于从 FB 经 R1 流到地的电流。如果此时从 DAC 侧再往 FB 节点注入一股电流Iinj,反馈环为了维持 1.23V,只能把 Vout 抬上去或者压下来,具体方向取决于Iinj的正负:

Iinj > 0(向 FB 灌入)→ 反馈环降低 Vout Iinj < 0(从 FB 抽走)→ 反馈环升高 Vout

Iinj = (Vdac - 1.23) / Rinj,所以注入电阻 Rinj 同时决定了调节范围和对 DAC 分辨率的利用效率。想让 8V 输出有 ±0.4V 的调节余量,按ΔVout = R2 × ΔIinj反推,R2 取 5.5kΩ 时需要ΔIinj ≈ 73μA,DAC 输出摆幅按 2.5V 算,Rinj 取 33kΩ 左右刚好。这个阻值下,12 位 DAC 的 1LSB 对应 Vout 变化约 0.2mV,分辨率绰绰有余。

注意:注入方向和软件里的符号必须对一遍。硬件上反了不要紧,软件里把 DAC 码值取反就行,但一定要在第一次联调时确认清楚,否则均流环会变成正反馈,越调越偏。

过流保护这条链路反而是最简单的:MCU 的 GPIO 直接接 LM2576 的 5 脚 ON/OFF,正常时输出低电平让芯片工作,检测到任一路电流超过 4.5A 阈值(题目允许 ±0.2A 偏差)就拉高关断。自动恢复的逻辑在软件里,关断后延时一段时间再放开,如果电流仍然超限就继续关,形成打嗝式保护,直到负载恢复正常。

4. 软件实现:预设加步进的双环调压与均流收敛

硬件搭好只是把可能性摆在那里,真正决定均流误差能不能进 2% 的是软件。原文在这一章给的描述比较概括——“预设和步进两种方法改变控制电压,步进值可任意设置”,这句话背后其实藏着好几个需要定量决定的参数。

4.1 主循环状态机:从初始化到 DA 输出的五个阶段

按原文的流程图,主循环可以整理成五个阶段,顺序执行,每轮跑完再回到采集:

  1. 初始化:时钟、GPIO、ADS1232、DAC7811、液晶全部配好,DAC 输出置到使 Vout 接近 8V 的中间码值,两路 ON/OFF 拉低。
  2. AD 采集:读两路电流通道,各取 N 次做滑动平均,同时读一次输入电压做效率计算用。
  3. 判断电流大小:先比保护阈值 4.5A,超了立刻进保护分支;没超就继续算总电流和当前比例。
  4. 设置工作方式:根据键盘设定决定是 1:1、1:2 还是任意比例,算出每路的目标电流。
  5. 比较并输出 DA:拿实测值和目标值比,误差超过死区就按步进修正 DAC 码值,没超就保持。

下面这段是按这个流程整理的骨架,不是原文代码,但参数位置和判断顺序可以直接对着改:

/* 并联供电系统主循环骨架,参数按 8V/4A 档位设定 */ #define I_PROTECT_MA 4500 /* 短路保护阈值,题目要求 4.5A±0.2A */ #define DEADBAND_MA 12 /* 均流死区,小于此值不再调 DAC */ #define STEP_LSB 2 /* 每次修正的 DAC 码值步长 */ #define AVG_N 8 /* 采样滑动平均次数 */ static int16_t dac_code[2] = {2048, 2048}; /* 12 位 DAC 中间值起步 */ void main_loop(void) { uint16_t i_total, i_target[2], i_meas[2]; hw_init(); /* 时钟、外设、DAC 置中间值 */ while (1) { i_meas[0] = ad_read_avg(CH0, AVG_N); /* 各路电流,单位 mA */ i_meas[1] = ad_read_avg(CH1, AVG_N); /* 保护优先,任何一路超限立刻拉高 ON/OFF */ if (i_meas[0] > I_PROTECT_MA || i_meas[1] > I_PROTECT_MA) { protect_enter(); continue; } i_total = key_get_total(); /* 键盘设定的总电流 */ ratio_calc(i_total, i_target); /* 按 1:1 / 1:2 拆成两路目标 */ for (uint8_t ch = 0; ch < 2; ch++) { int16_t err = (int16_t)i_meas[ch] - (int16_t)i_target[ch]; if (err > DEADBAND_MA) dac_code[ch] -= STEP_LSB; /* 实测偏大,压低该路输出 */ else if (err < -DEADBAND_MA) dac_code[ch] += STEP_LSB; dac_write(ch, dac_code[ch]); } lcd_update(i_meas, i_target); } }

代码里几个参数都不是拍脑袋定的。I_PROTECT_MA直接对应题目的 4.5A 阈值,留了 ±0.2A 的器件偏差空间。DEADBAND_MA是防抖的关键,取 12mA 相当于 1.5A 档位的 0.8%、4A 档位的 0.3%,都在 2% 的要求之内,同时足够宽,能盖住采样噪声,不至于让 DAC 每轮都在动。STEP_LSB取 2,对应输出电压变化约 0.4mV,单步引起的电流变化远小于死区,保证收敛过程是单调逼近而不是来回跳。AVG_N取 8,在 80SPS 下相当于 100ms 的窗口,能压掉大半开关噪声,又不至于让响应慢到跟不上负载切换。

4.2 步进调压:预设值、步进值和死区怎么定

“预设”解决的是粗定位。上电时如果 DAC 从 0 开始爬,要爬几千个码值才能到 8V 附近,中间这段时间输出是垮的,负载侧可能已经复位了。常见做法是把中间码值 2048 作为预设,配合硬件分压让这个码值对应的输出落在 8V 附近,误差靠后面的步进环节收掉。这样上电后输出在几百毫秒内就稳定在目标附近,剩下的只是几十毫伏的精调。

“步进”解决的是精调。这里有个容易被忽略的细节:两路不能同时朝各自方向大步走。如果两路都按自己的误差独立调,一路加一路减,总电流不变但比例在振荡,母线电压跟着抖,测出来的误差反而更大。原文在调试记录里提到“实现 1:2 均流时不好调节”,本质就是这个耦合问题。

我一般会这么做:把总电流环和比例环分开。总电流由两路 DAC 同向调整,比例由两路 DAC 反向调整,两个环的步长和周期不同,总电流环快一点,比例环慢一点,避免相互打架。落到代码上就是先算err_total = i_meas[0] + i_meas[1] - i_total,同向修正;再算err_ratio = i_meas[0] × b - i_meas[1] × a(a:b 是设定比例),反向修正。这样两个自由度对应两个被控量,解耦之后收敛就干脆了。

步长还和负载大小有关。轻载时同样的 DAC 步长引起的电流变化小,重载时变化大,固定步长在轻载下收敛慢、重载下容易超调。简单有效的办法是分段:误差大于 100mA 时用大步长 8,误差在 20~100mA 之间用 2,进死区就停。这不算什么高深算法,但在竞赛台架上比硬套 PID 更可控,因为每一步的行为你都能预测。

4.3 采样校准:零点、增益与滑动平均

ADS1232 出来的码值不能直接当电流用,中间隔着一整套模拟链路,每一环都有失调和增益误差。校准分两步做,缺一不可。

零点校准在通电但功率级未开启时做。此时采样电阻上没有电流,INA270 的输出应该等于它的失调电压,读一批码值取平均,存成zero_offset。这一步能消掉 INA270 失调、ADS1232 失调和参考源偏差的直流部分。不做的后果是 0.5A 小电流档的相对误差特别难看——假定零点偏了 20mA,在 3.5A 档只占 0.6%,在 0.5A 档就是 4%,直接超标。

增益校准要一个已知负载。接一个精度够的功率电阻或者电子负载,设定 1.0A,读码值,算出实际比例系数存起来。有条件的话做两点校准(0.5A 和 3.5A 各一点),线性度问题也能一并修掉。

/* 两点校准 + 滑动平均,校准系数存在 Flash 里掉电不丢 */ typedef struct { int32_t zero; /* 零点码值 */ int32_t span; /* 满量程码值差 */ int32_t current_ma;/* 对应的满量程电流,mA */ } calib_t; int32_t ad_to_ma(int32_t raw, const calib_t *c) { int32_t diff = raw - c->zero; /* 去掉零点失调 */ return diff * c->current_ma / c->span; /* 按增益折算成 mA */ } int32_t ad_read_avg(uint8_t ch, uint8_t n) { int64_t sum = 0; for (uint8_t i = 0; i < n; i++) sum += ads1232_read(ch); /* 阻塞读,80SPS 下单次约 12.5ms */ return (int32_t)(sum / n); }

calib_t里三个字段就够了,zero和span在校准流程里写进去,正常运行时只做查表和一次乘除。用int64_t累加是为了防止 8 次 24 位码值相加溢出 32 位,这个坑在第一次写的时候很容易踩。ad_read_avg是阻塞的,8 次采样占 100ms,主循环的节拍就按这个来定,别在中断里调用。

5. 调试避坑:五条从实验室里换来的排查路径

硬件和代码都照图搭完,第一次上电大概率是不工作的,这不是能力问题,是必然过程。下面这五条是按“现象 → 原因 → 解决”整理的,都是这类并联供电系统里高频出现的,按顺序排查能省不少时间。

5.1 1:2 均流死活调不到 2% 以内,电流在目标值两侧来回摆

现象:设定 1:2,两路实测在 0.48A/1.04A 和 0.52A/0.98A 之间反复跳,液晶上数字每秒变好几次,怎么调步长都收不住。

原因有两个叠在一起。一是两路 DAC 独立闭环,各自追各自的目标,一路加的时候另一路在减,总电流不变但采样点错开,测量值永远在追一个移动的目标。二是死区设得太小,噪声幅度盖过了死区,每轮都在触发修正。

解决:把总电流环和比例环拆成两个不同周期的任务,总电流环 100ms 一次,比例环 300ms 一次,让快的先稳、慢的后调。死区按实测噪声的 2~3 倍来定,先测一段静态数据的峰峰值,再定DEADBAND_MA。改完之后误差能稳定在 1% 出头,剩下的靠校准收。

5.2 ADS1232 读数跳几十个码,短接输入也归不了零

现象:输入端短接,读出来不是 0,而是在 ±50 个码值之间游走,接上信号后噪声更大,小电流档完全没法用。

原因基本是接地和时序。LM2576 是 52kHz 开关,续流二极管的反向恢复会在功率地上打出尖峰,如果模拟地和功率地共用一段走线,这段压降直接被 ADS1232 当成信号采进去。另一个常见原因是 SCLK 走线太长,和电感靠得近,时钟线上串进噪声,ΔΣ 调制器对这种干扰特别敏感。

解决:模拟地和功率地单点连接,连接点选在采样电阻的地端;ADS1232 的电源脚就近加 0.1μF 和 10μF 并联去耦,参考脚单独加 RC;SCLK 和 DIN 走线远离电感和续流二极管,必要时串 33Ω 电阻做阻抗匹配。软件上把采样时刻对齐到开关管的关断窗口,虽然 LM2576 是固定频率不好同步,但把采样率设成 80SPS 并做 8 次平均,能压掉大部分工频和开关噪声。

5.3 效率卡在 55% 上下,怎么调都过不了 60%

现象:额定功率下测得输入功率和输出功率一比,效率只有 55%~58%,题目要求不低于 60%,差一口气。

原因要拆开算。LM2576 是异步降压,续流二极管的正向压降直接贡献损耗,用普通整流管时 3A 电流下 Vf 接近 0.8V,损耗就是 2.4W,这一项就吃掉好几个点。采样电阻 20mΩ 在 3.5A 下损耗 0.245W 看着不多,但它是串联在主回路里的,两路加起来接近 0.5W。再加上电感直流电阻、电容 ESR 和控制电路自身的功耗。

解决:续流二极管换成低 Vf 的肖特基,Vf 降到 0.4V 以下,这一项能省回 1W 以上;采样电阻在有分辨率余量的前提下减小到 10mΩ,配合把 INA270 后面的增益补回来;电感选直流电阻小的型号,别只看电感量;控制电路单独用一路小功率辅助电源,不要从主输出取电。这几项改完,效率通常能到 65%~70%。

5.4 短路保护动作后不自动恢复,得断电重来

现象:输出端短一下再松开,电压不回来,液晶显示 0,按复位也没用。

原因有两个。一是保护后 MCU 把 ON/OFF 拉高,但恢复逻辑里没有延时,一放开就立刻检测,输出电容还没充电,电流采样瞬间又超阈值,立刻再次关断,形成高频打嗝,看起来就像死机。二是恢复判断用的还是关断前的采样值,没有重新采集。

解决:保护后进入一个明确的状态机,先关断并锁存至少 200ms,等输出电容放电、采样链路稳定;然后拉低 ON/OFF 放开,再等软启动时间(按输出电容和负载算,一般 50~100ms)之后才开始判断电流;如果仍超限就重新进入关断,形成有节奏的打嗝而不是高频振荡。状态机里加一个重试计数,连续失败超过 10 次就锁定,需要人工按键复位,避免真短路时反复冲击功率器件。

5.5 空载电压准,一加负载就掉到 7.6V 以下

现象:空载测 8.02V,加 3A 负载掉到 7.6V,超出 ±0.4V 的要求。

原因通常是反馈走线和注入电阻取值。FB 是 высок 阻抗节点,走线稍长就会拾取开关噪声,反馈环误以为输出偏高而压低占空比;另一个原因是 DAC 注入电阻取得太小,注入电流过大,把反馈环的工作点推到了非线性区,负载变化时调节能力不足。

解决:FB 分压电阻靠近 LM2576 的 4 脚放置,走线尽量短,必要时在 FB 到地之间并 100pF 小电容滤高频;注入电阻按前面算的 33kΩ 量级取,别为了追求调节范围取到 10kΩ 以下;输出端加足够的电容,减小负载突变时的电压跌落。改完之后负载调整率通常能进 1%。

6. 二次开发:把定步进均流改成可编程数字均流

这套方案的骨架是通用的,限制它的主要是两处:定步长调节和两路固定。想把这份论文变成自己项目里的东西,改造方向基本围绕这两点。

第一步是把步进换成增量式 PI。定步长的好处是行为可预测,坏处是负载大范围变化时要么慢要么超调。增量式 PI 的写法很轻,不需要积分饱和处理:

/* 增量式 PI,输出直接叠加到 DAC 码值上 */ #define KP_Q8 24 /* 比例系数,Q8 定点 */ #define KI_Q8 3 /* 积分系数,Q8 定点 */ static int32_t dac_acc = 2048; int32_t pi_update(int32_t err_ma, int32_t last_err_ma) { int32_t delta = (KP_Q8 * (err_ma - last_err_ma) + KI_Q8 * err_ma) >> 8; dac_acc += delta; if (dac_acc < 0) dac_acc = 0; /* 限幅,防止积分跑飞 */ if (dac_acc > 4095) dac_acc = 4095; return dac_acc; }

KP_Q8和KI_Q8用 Q8 定点是为了避开浮点,MSP430F149 没有硬件 FPU,软浮点一次乘法几百个周期,放在 100ms 的环里勉强够用但没必要。整定顺序是先KI_Q8 = 0加KP_Q8到临界振荡再退一半,然后慢慢加积分消静差。这套参数在不同负载下要复核,重载时等效增益变大,需要按总电流做增益调度。

第二步是把两路扩成 N 路。硬件上每路一套 LM2576 + INA270 + 采样电阻,DAC 换成多通道或者用模拟开关切换,ADS1232 只有两个差分通道,通道数一多就得加多路复用器。这时候最大电流法的硬件母线就不合适了,改成软件广播更灵活:主控按周期采集所有通道,算出每路目标值再下发,均流精度只取决于采样和通信周期。代价是失去了硬件冗余,主控挂了全挂,需要额外的看门狗和失效安全输出。

第三步是换功率级。LM2576 的 52kHz 和异步整流限制了这个方案的效率天花板和体积,如果做产品级的东西,换成同步 Buck 加外部 MOS,或者直接用带 PMBus 的数字电源模块,把 DAC 注入这一整套模拟调节换成芯片内部的 VID 设定,能省掉大量校准工作。但要注意,换完之后均流环的采样链路仍然要自己做,芯片内部给的电流读数精度和带宽不一定够。

验证方法我一般按四组工况跑一遍:额定 8V/1.0A 看效率;8V/1.5A 设 1:1 和 1:2 各测一次误差;8V 下总电流从 1.5A 扫到 3.5A,每 0.5A 一档看比例误差是否始终在 2% 以内;最后做一次短路,看保护是否在阈值附近动作、松开后能否自动恢复。四组全过才算能用,少一组都可能在实际场景里翻车。

从那以后我每次做并联电源,都强制先在空载和满载两端各校准一次,中间段的线性度单独复测——早期偷懒只校准一个点,结果在 1.0A 附近测出来好好的,跑到 3.5A 误差就翻倍,查了半天才发现是 INA270 在大电流下的增益误差被零点的偏差掩盖了。这套习惯后来救过不止一次,也希望帮到你。

本文还有配套的精品资源,点击获取