
简介面向参加全国大学生电子设计竞赛及学习开关电源并联均流技术的读者这份2011年A题“开关电源模块并联供电系统”论文提供了较完整的赛题设计参考。文档围绕MSP430单片机与LM2576电源芯片展开论述主从法、平均电流自动均流、热应力均流和最大电流均流等方案的比较与取舍并涉及独立键盘调压、双模块自动均流、过流保护及自动恢复等实现细节。压缩包仅含1个docx文件约617KB篇幅集中便于按题目要求、方案论证、硬件选型、测试结果等章节梳理设计脉络。该资料已有804人学习适合备赛队伍对照指标理解均流控制思路、复盘论文结构与调试要点也可为电子类专业课程设计提供参考。1. 双模块并联的 2% 电流误差先想清楚这道题到底卡在哪手里拿着两片现成的降压开关电源模块把输出并在一起带同一个负载要求总电流 1A 时两路按 1:1 分、1.5A 时按 1:2 分、负载电流在 1.5~3.5A 之间任意变化时比例还能在 0.5~2.0 范围内指定每路电流相对误差绝对值不超过 2%同时输出电压死死钉在 8.0±0.4V效率不低于 60%短路到 4.5A 能保护还要能自己爬起来。这是电子设计竞赛里“开关电源模块并联供电系统”这道题的完整清单看着像电源题实际是控制题——难点从来不在做出一路能带 2A 的电源而在让两路电源“商量”着干活。这份资源是当年一套走完全流程的题解含方案论证、均流方法比选、硬件原理图、MSP430 程序框架、实测数据表和参考文献。它适合三类人正在备赛想抄一条完整链路的、做多模块并联均流想找数字实现方案的、以及想搞清楚“模拟均流母线”和“数字闭环”到底差在哪的。下面不吹它多完整只把它拆开把缺的参数补上把当年翻过车的地方标出来。2. 均流方案选型主从法、平均电流法与最大电流法的边界在哪2.1 三种经典均流法分别在哪儿翻车主从法的结构最直白挑一路当主模块工作在电压源模式把输出电压稳住其余模块当从模块工作在电流源模式电流设定值由主模块或单片机给定。它的均流精度可以做到很高因为从模块的电流是“被命令”的不是“被吸引”的。问题出在冗余上——主模块一挂整条母线失去电压基准从模块还在傻傻地灌电流输出直接失控。这道题的发挥部分明确要求“具有负载短路保护及自动恢复功能”一旦主模块在保护期间被关断主从结构就退化成单模块带载恢复逻辑会变得非常别扭。平均电流法走的是另一条路每个模块把自己输出电流转成电压 Ui通过一个电阻接到公共均流母线 CSB 上母线电压 Ub 就是所有 Ui 的平均值。每个模块拿自己的 Ui 和 Ub 比误差放大后微调自己的输出最终大家电流趋同。这套东西不需要额外的均流控制器成本低、精度好是工业界用得最多的一种。但它有一个要命的失效模式CSB 是一条物理母线一旦短路到地或者某个模块的射极跟随器坏掉把母线拉低所有模块都会认为“我电流偏大”于是一起下调输出电压最后整条母线跌到下限系统集体趴窝。单点故障扩散这在竞赛现场是灾难性的。热应力自动均流法测的是温度让温度高的模块少出力、温度低的模块多出力。它保证的是热平衡和寿命不是电流精度。题目要的是 2% 的电流误差热应力法给不了这个数——它本质上是个慢速的、非线性的功率分配策略响应时间以秒计负载一跳变就完全跟不上。2.2 最大电流法为什么成了这道题的终点最大电流法的核心是把平均换成取大CSB 上反映的不是平均值而是所有模块 Ui 中的最大值。每一时刻输出电流最大的那个模块自动成为“主”其余模块拿自己的 Ui 和 Ub 比只允许往上调不允许把母线往下拉。这一改前面说的两个坑同时被填上某个模块掉线它的 Ui 变成 0不影响 max 结果母线被拉低只会让其他模块判断为“我还不够”往增加输出的方向走不会集体下调。但最大电流法做不出 1:2。它的收敛条件是所有 Ui 相等天生只能均分。要在 1:2、1:2.5、0.5:1 这些比例之间自由切换只有两条路一是在采样通道上加不同的衰减系数让“1:2”在电路上变成“均分”二是干脆把 max 比较搬进单片机用软件算目标值。当年那支队伍选了后者硬件上是两片电流检测放大器进 24 位 ADC、单片机算完再出两路 DAC 去拨反馈节点等于用数字方式复现了最大电流法的思想——参考母线不再是硬件电压而是软件里按比例算出来的 I1*、I2*。这里要说清楚一个容易被忽略的点比例均流时误差判据的分母是各自的设定值不是总电流。总电流 1.5A、1:2 分配时I1* 0.5A、I2* 1.0A同样是 ±10mA 的绝对偏差在小电流那一路就是 2%在大电流那一路只有 1%。所以 1:2 模式下真正难达标的是小电流支路不是大电流支路。选型阶段如果没意识到这一点后面调参会被“明明 I2 很准为什么还是判不合格”折磨很久。均流方法均流精度冗余性比例可调主要失效模式主从法高差容易主模块失效整机崩溃平均电流法高中难CSB 短路导致全员下调热应力法低好难响应慢跟随不上负载跳变最大电流法高好需数字化改造轻载时母线电压过低、误差放大器饱和2.3 差模注入为什么两路不能各调各的电压这是整个方案里最容易被忽略、又最容易让样机“呼吸”的一处。两路模块的输出并在同一个节点上如果两路都去闭环调自己的绝对输出电压那么任何一点扰动都会让两路互相追A 发现电流小了就把电压抬高 5mVB 立刻发现自己的电流被抢走也抬 5mVA 再抬……表现出来就是电流表指针以零点几赫兹的频率来回摆示波器上看两路 DAC 输出是反相的慢漂移。这不是参数没调好是结构错了。正确的做法是把调节量拆成共模和差模两部分。共模负责那个 8.0V总输出电压的偏差只允许通过一个慢速外环去修正时间常数放在秒级。差模负责电流分配给两路的设定值施加一对大小相等、方向相反的增量。Vset1 V0 ΔVset2 V0 − ΔΔ 的符号由 (I1 − I1*) 决定大小由 PI 调节器输出。这样总输出近似不变只有分配比例在动两路之间不再存在“抢电压”的正反馈通道。后面第 4 章的软件实现、第 5 章的振荡排查根源都在这一条上。3. 硬件链路落地LM2576 反馈环、INA270 采流与 DAC 注入的三处参数3.1 LM2576-ADJ 的反馈电阻与纹波取舍LM2576-ADJ 的输出电压由反馈脚决定内部基准 1.23V反馈脚偏置电流在 50nA 量级基本可以当成理想比较器用。外部两个电阻分压公式是Vout 1.23 × (1 R2 / R1)要出 8.0VR2/R1 需要等于 5.504。这里有个取舍R1 取小了分压支路的静态电流大直接吃掉效率R1 取大了反馈脚的漏电流和 PCB 上的噪声耦合开始显形输出会随温度漂。我一般取 R1 在 1k~5k 之间本题取 R1 2kΩ、R2 11kΩ实际输出 7.995V落在 8.0±0.4V 的正中间分压电流 0.615mA损耗约 5mW相对 16W 的输出可以忽略。真正影响效率的是另外三样续流二极管、电感直流电阻、输出电容的等效串联电阻。52kHz 的工作频率下续流二极管在每个周期里导通 (1−D) 的时间8V 输出、24V 输入时占空比约 0.33二极管导通时间占 67%2A 电流下用普通肖特基 1N5822正向压降约 0.5V就是一个实打实的 0.67W 损耗占输出功率的 4%。这一项是效率从 85% 往上抬的第一刀。下面这段脚本用来把手算过程固定下来换输入电压、换输出电流时直接跑一遍避免每次重新按计算器。# LM2576 降压级关键参数估算 Vin, Vout, Iout 24.0, 8.0, 2.0 fsw 52e3 # LM2576 固定开关频率 52kHz Vf 0.5 # 续流二极管正向压降 Rdc 0.08 # 电感直流电阻100uH/3A 常见值 # 反馈电阻先定 R1再算 R2 R1 2e3 R2 R1 * (Vout / 1.23 - 1) print(fR2 理论值 {R2:.0f}Ω取 E24 标称 11kΩ 时输出 {1.23*(111e3/R1):.3f}V) # 电感纹波电流与峰值用于核对是否触发芯片限流 L 100e-6 dI (Vin - Vout) * Vout / (Vin * L * fsw) Ipk Iout dI / 2 print(f纹波电流 {dI:.2f}A峰值 {Ipk:.2f}ALM2576 限流点典型 3A) # 主要损耗拆分判断效率天花板在哪 P_diode Vf * Iout * (1 - Vout / Vin) P_inductor Rdc * Iout ** 2 P_esr 0.05 * dI ** 2 / 12 # 输出电容 ESR 取 50mΩ P_out Vout * Iout print(f输出 {P_out:.1f}W二极管 {P_diode:.2f}W电感 {P_inductor:.2f}W电容 ESR {P_esr:.3f}W) print(f仅这三项就吃掉 {100*(P_diodeP_inductorP_esr)/P_out:.1f}% 的效率)跑出来的结论很直接二极管一项就占 4% 左右电感占 2%ESR 占不到 0.5%。这就解释了为什么第 6 章要先把续流管换掉而不是去折腾电容。参数上需要注意的是电感峰值电流——24V 输入、100µH 时纹波约 1.03A峰值 2.5A离 3A 限流点只剩 0.5A 余量如果输入电压抬到 30V纹波会涨到 1.4A峰值逼近 2.7A重载时芯片就会频繁触发内部限流输出纹波突然变大。这种情况下要么把电感加到 150µH要么把最大输出电流压到 1.8A。3.2 INA270 的高边采样与分流电阻取值电流检测放在高边还是低边这个决定影响后面所有共地问题。低边采样便宜、共模电压低但会把地平面切断两路模块的地电位不再一致ADC 读数会随负载电流漂。本题用高边采样检测放大器选 INA270共模输入范围 −16V 到 80V增益固定 20V/V输出直接对地后面接 ADC 不需要再做电平搬移。分流电阻 Rsense 的取值要在“信噪比”和“损耗”之间找平衡。放大器的推荐差分输入区间是 50mV 到 100mV低于 50mV 时失调电压占比上升高于 100mV 时线性度开始变差、损耗也上去了。本题单模块最大工作电流 2.0A总 4A 均分短路保护阈值 4.5A 可能全部压到一路。取 Rsense 0.05Ω/1%/2W 时单路电流分流压降INA270 输出占 ADC 满量程2.5V0.5A1:2 小电流路25mV0.50V20%1.0A50mV1.00V40%2.0A100mV2.00V80%2.25A保护边缘112.5mV2.25V90%0.5A 时只有 25mV落在推荐区间下沿之外这时候失调电压的影响被放大。INA270 的输入失调在 100µV 量级折算到分流电阻上相当于 2mA 的电流误差相对 0.5A 是 0.4%——单看这一项还过得去但它会叠加到 2% 的总预算里所以第 6 章要用两点校准把它扣掉。分流电阻的功率要留足0.05Ω 通过 2.25A 时耗散 0.25W取 2W 的合金电阻温漂 50ppm/℃ 以内。这颗电阻本身就在吃掉 1.4% 的效率而且它的温漂会直接变成电流读数的漂移是整个系统里少数几个“贵一点就值”的器件。采样点必须放在输出电容之后、输出端子之前走线用开尔文四线接法检测放大器的两个输入脚从电阻焊盘内侧单独引出来否则 PCB 铜箔那几十微欧的电阻会串进采样回路2A 时就是 0.1mV 的额外压降看着不多但它随温度变。3.3 ADS1232 与 DAC781124 位采样和 12 位注入怎么接ADC 用 ADS1232双通道差分输入、内置 PGA、24 位 ΣΔ10SPS 输出速率下有效位数能到 21 位左右。本题用 PGA 1、参考电压 2.5V输入范围 ±2.5VINA270 输出的 0~2.25V 单端信号接 AINP、AINN 接地共模电压落在电源轨中间可以直接用。分辨率折算一下2.5V / 2^23 0.298µV除以放大器增益 20 再除以 0.05Ω等效电流分辨率约 0.3mA对付 2% 的判据1A 时 ±20mA绰绰有余。真正的瓶颈不在分辨率在失调和增益误差。DAC 用 DAC781112 位乘法型、串行接口电流输出需要外接运放做 I/V 转换。它在这里的作用不是直接给什么“电流设定”而是往 LM2576 的反馈节点注入一股小电流把反馈电压顶偏一点等效于微调输出电压。以 R1 2kΩ、R2 11kΩ 为例从 DAC 输出经 R3 15kΩ 接到 FB 脚节点方程解出来Vout 1.23 × (1 R1/R2) − Iinj × R1Iinj 从 −82µA 到 85µA 变化时Vout 的调节范围约 ±0.17V。这个范围刚好覆盖差模调节需要的 ±0.15V再大就会把输出顶出 8.0±0.4V 的窗口再小则 1:2 模式下小电流支路拉不回来。R3 的取值就是在这两个约束之间定的换 R1 的值要重新算一遍。注意MSP430F149 内部只有 12 位 ADC没有内置 DAC。当年那份题解正文里写的“内部集成了 12 位 A/D、D/A”是笔误照着这句话去省掉 DAC7811会在调试阶段卡很久——你会发现无论怎么改寄存器都没有模拟输出。4. 控制软件实现100ms 节拍下的差模均流与 4.5A 保护状态机4.1 采样节拍为什么定在 100ms而不是 10msADS1232 在 10SPS 模式下一次转换需要 100ms输出的数据本身就是 100ms 的平均值——这相当于白送了一个工频周期抑制。控制周期如果定得比 100ms 快读到的会是同一个码值PI 里积分项重复累加等于把增益凭空放大必然振荡定得比 100ms 慢太多负载阶跃时恢复时间又跟不上。折中取 200ms 一个控制周期每次取最近两次转换结果做滑动平均既压掉了 ΣΔ 输出的末位跳动又给 PI 留了足够的相位裕度。这里还有个硬件层面的约束LM2576 是 52kHz 的 PWM 变换器输出电容 1000µF负载阶跃时输出电压的恢复时间常数在几十毫秒量级。控制环的带宽必须明显低于这个时间常数否则就是拿软件去追一个追不上的对象。200ms 的周期对应 0.8Hz 的环宽对这道题的负载变化速率是合适的。4.2 差模均流的 PI 实现与积分分离主循环的顺序是固定的读两路电流 → 算总电流和目标分配 → 算差模误差 → PI 更新 → 写两路 DAC → 检查保护条件 → 刷新显示。顺序不能乱尤其是 DAC 的两次写必须连续完成中间不能插入别的耗时操作否则会出现“一路已经更新、另一路还是旧值”的瞬态这个瞬态在并联节点上就是一次电流冲击。/* 差模均流主循环节拍 200msMSP430F149 8MHz */ #define I_FULL 2.0f /* 单模块满量程电流 A */ #define KP 0.06f /* 比例系数单位 V/A */ #define KI 0.004f /* 积分系数每周期 */ #define D_MAX 0.15f /* 差模调节量限幅 V */ static float integ 0.0f; void current_share_step(float i1, float i2, float ratio) { float total, i1_ref, err, delta; total i1 i2; i1_ref total * ratio / (1.0f ratio); /* ratio I1:I2 中的 1 侧比例 */ err i1 - i1_ref; /* 正表示 1 路偏大 */ /* 积分分离偏差大时清积分避免退饱和太慢 */ if (err 0.15f || err -0.15f) { integ 0.0f; } else { integ KI * err; if (integ D_MAX) integ D_MAX; if (integ -D_MAX) integ -D_MAX; } delta KP * err integ; if (delta D_MAX) delta D_MAX; if (delta -D_MAX) delta -D_MAX; /* 差模注入一路加、一路减总输出近似不动 */ dac7811_write(VOUT_BASE_CODE (int16_t)(delta * DAC_GAIN)); dac7811_write(VOUT_BASE_CODE - (int16_t)(delta * DAC_GAIN)); }这段代码里几个参数值得说清楚。KP 0.06 的意思是1 路电流比目标大 1A 时差模调节量给到 0.06V靠这 0.06V 的输出压差把电流拉回来——这个值不能大大了就是两路互相顶。KI 取得很小是因为积分项的作用是消掉稳态误差而稳态误差主要来自两路模块本身的输出阻抗不一致需要的修正量本来就不大。D_MAX 0.15V 是硬限幅对应第 3 章算出来的 DAC 调节范围超过这个值说明分流电阻、放大器或者某一路模块已经出问题了继续加大调节量只会让输出跌出 8.0±0.4V 的窗口。ratio 这个参数在 1:1 模式下等于 1.01:2 模式下等于 0.5发挥部分要求在 0.5~2.0 之间可调直接改这个数即可不用动别的逻辑。target 是总电流由负载决定软件不设——这一点很关键很多方案会去“控制总电流”结果变成恒流源题目要的是稳压输出、电流自适应分配。4.3 4.5A 保护状态机与自动恢复保护逻辑用状态机写别用一堆 if 堆在中断里。四个状态NORMAL、LIMIT、TRIP、RECOVER。NORMAL 下正常闭环检测到总电流超过 4.3A 进入 LIMIT此时不再等 PI 慢慢收直接把两路 DAC 的设定值按固定斜率往下压每周期降 5%用软限流把电流顶住如果电流继续涨到 4.5A 并持续 5 个控制周期进入 TRIP拉高 LM2576 的 ON/OFF 脚关断输出。注意 LM2576 的 ON/OFF 是低电平开启、高电平关断MCU 复位期间引脚是高阻态必须加下拉电阻强制开启否则上电就没输出这个坑在第 5 章还会提。TRIP 之后不能一直锁死题目要求自动恢复。RECOVER 状态的做法是先等 300ms 让输出电容放完电再把两路 DAC 归零然后拉低 ON/OFF 重新上电之后用 500ms 的时间把 DAC 从零缓慢升到基准值——这个斜坡就是软启动没有它恢复瞬间的输出冲击会立刻再次触发保护形成“保护—恢复—再保护”的死循环表现出来就是输出一直在打嗝。typedef enum { ST_NORMAL, ST_LIMIT, ST_TRIP, ST_RECOVER } pwr_state_t; static pwr_state_t st ST_NORMAL; static uint16_t trip_cnt 0, rec_tick 0; void protect_task(float itotal) { switch (st) { case ST_NORMAL: if (itotal 4.5f) { if (trip_cnt 5) { st ST_TRIP; trip_cnt 0; } } else if (itotal 4.3f) { trip_cnt 0; st ST_LIMIT; } break; case ST_LIMIT: /* 软限流按斜率压设定值 */ vset_scale - 0.05f; if (vset_scale 0.3f) vset_scale 0.3f; if (itotal 4.0f) { st ST_NORMAL; vset_scale 1.0f; } break; case ST_TRIP: /* 关断并等待放电 */ dac7811_write(0); dac7811_write(0); P1OUT | BIT5; /* ON/OFF 拉高关断 */ if (rec_tick 2) { rec_tick 0; st ST_RECOVER; vset_scale 0.0f; } break; case ST_RECOVER: /* 软启动斜坡每周期 10% */ P1OUT ~BIT5; /* ON/OFF 拉低开启 */ vset_scale 0.10f; if (vset_scale 1.0f) { vset_scale 1.0f; st ST_NORMAL; } break; } }vset_scale 这个系数乘到两路 DAC 的基准码值上NORMAL 时是 1.0LIMIT 时逐步下调RECOVER 时从 0 爬回 1.0。这样一套系数就同时实现了软限流和软启动不用维护两套变量出错概率低很多。5. 避坑与排查五个让样机连炸两次的现场记录5.1 两路读数差 3%接的是同一个负载现象两路分流电阻串在同一回路里做对比测试电流表读数和软件读数都对不上软件里两路差了 3%换了三颗 INA270 结果一样。原因有两个叠在一起。一是分流电阻的焊接位置不对称一路从焊盘外侧引线另一路从内侧引线PCB 铜箔那几十微欧被算进了采样回路2A 时就是 0.1mV 的额外压降二是 ADS1232 切换通道后第一次转换的残留ΣΔ 调制器在通道切换后需要两个完整转换周期才能建立代码里只等了一个。解决分流电阻改成开尔文四线接法检测脚从电阻本体焊盘内侧单独引出走线等长对称软件里每次切换通道后丢弃第一个采样值取第二、第三个的平均。改完两路一致性回到 0.2% 以内。5.2 1:2 均流怎么调都是低频振荡现象切到 1:2 模式电流表指针以 0.5Hz 左右来回摆示波器看两路 DAC 输出是反相的慢漂移幅值能到 ±0.1V。改 KP、改 KI 都只能改变振荡频率消不掉。原因两路各自做绝对电压闭环共模增益大于 1形成了互相追的正反馈而且大偏差时积分项一直在累加等偏差反向后积分还在原方向退饱和慢加剧了过冲。解决按 2.3 节改成差模注入两路设定值一加一减共模不再参与电流分配加积分分离偏差超过 0.15A 时积分清零两路 DAC 的更新放在同一个函数里连续写完中间不插入任何耗时操作。改完振荡消失1:2 模式下稳态误差能压到 0.8%。5.3 短路保护断开后输出再也不起来现象输出端短接一下再松开电压一直是 0必须断电重上才行。原因TRIP 状态拉高 ON/OFF 关断了芯片但两路 DAC 还停在故障前的码值上。恢复时芯片一开反馈节点立刻被 DAC 拉到高位输出瞬间冲到限流点保护再次触发形成死循环。另外恢复时没有等输出电容放电残余电压叠加冲击电流更容易再触发。解决TRIP 时把两路 DAC 归零同时等 300ms 让输出电容放到安全电压恢复时先拉低 ON/OFF再用 500ms 的斜坡把 DAC 从零升到基准值。这一套软启动做完恢复成功率从“基本起不来”变成一次成功。5.4 轻载时效率跌破 60%现象满载效率 85% 以上负载降到 0.5A 时效率掉到 45%题目那条“额定输出功率工作状态下效率不低于 60%”差点没保住。原因固定损耗占比上来了。LM2576 自身静态电流 5~10mAINA270 静态 1mAADS1232 加基准源约 1.5mA再加上反馈分压支路的 0.6mA这些和负载无关的电流在 24V 输入下累计耗掉零点几瓦满载时占 2%轻载时占比就翻了好几倍。解决反馈分压电阻从 1k/5.5k 改到 2k/11k分压电流减半ADS1232 和运放加使能控制空闲时关断检测放大器的参考端用分压而不是直接接电源轨减少内部偏置电流。三项加起来把轻载效率抬了 8 个百分点。5.5 上电瞬间输出冲到 12V电容鼓了一次现象上电瞬间用示波器抓输出能看到一个 12V 左右的尖峰持续几毫秒才回落有一次直接把输出电容顶鼓了。原因MCU 复位期间引脚是高阻DAC 输出处于不确定状态可能直接给出高码值同时 LM2576 的 ON/OFF 脚如果被上拉芯片在 MCU 还没初始化完成时就已经开启反馈节点没人管输出按最大占空比冲上去。解决ON/OFF 脚加 10kΩ 下拉电阻本文还有配套的精品资源点击获取