简介:面向电子设计竞赛参赛者与开关电源方向学习者的2011年全国电子设计大赛A题完整论文,聚焦两路开关电源模块并联供电与自动均流系统的设计实现。文档以MSP430单片机为控制器、LM2576为电源芯片,围绕赛题基本要求与发挥部分展开方案论证,比较主从法、平均电流自动均流法、热应力自动均流法和最大电流均流法等策略的取舍,并给出键盘设定输出电压、负载变化下自动分配电流、效率测试、过流保护及自动恢复的实现与调试思路。包内为1个docx文档,压缩包约617KB,篇幅完整、目录清晰,适合按“题目要求—方案比较—模块选型—电路与软件—测试结果”的顺序查阅。已有804人学习下载,可作为电赛电源类赛题复盘、论文写作和方案选型的参考样本。
1. 两路并联一带载就失衡:这道 2011 年电源题到底卡在哪
两路 DC/DC 并联给同一个负载供电,空载时两路输出电压都稳得像模像样,一带上 2A 负载,一路电流顶到限流点,另一路在旁边摸鱼——这是并联供电最典型的翻车现场。2011 年一道电子设计竞赛 A 题把这个场景做成了硬指标:8.0±0.4V 输出,两路模块按 1:1、1:2 甚至 0.5~2.0 任意比例自动分配总电流,误差压到 2% 以内,还要 4.5A 短路保护能自恢复。这份资源就是当年针对该题写成的一篇完整技术论文,从四种均流方案的论证、MSP430F149 加 LM2576 的选型,到高边电流采样、12 位 AD/DA 链路、软件流程和实测数据表,一条线走完。它适合正在做并联供电、数控电源、恒流源课设的读者:想要一份能照着搭、照着改的完整方案,而不是又一篇讲均流原理的科普。
2. 系统架构拆解:MSP430F149 与两路 LM2576 的闭环怎么搭
这套系统的骨架其实很朴素:两片 LM2576-ADJ 各自构成一路降压型开关电源,输出端并联到同一个负载;每路输出串一个毫欧级分流电阻,用高边电流检测放大器把电流转成电压,送进 ADC;单片机算出差值,再写 DAC;DAC 的输出经运放跟随后注入 LM2576 的反馈脚,等效于动态修改反馈电阻的分压比,从而微调这一路的输出电流。整条链路是一个慢速的软件闭环,开关电源本身的 52kHz 环路不动,软件只在外面套一层几十毫秒量级的均流环。
这个结构的好处是把「稳压」和「均流」彻底解耦:LM2576 自己负责把 8V 稳住,软件只负责在两路之间微调那一点点电压差。两路电源并联时,谁的输出电压高一点点,谁就多扛电流;软件要做的就是故意制造并控制这个微小差值。
2.1 从题目指标倒推硬件选型
选型不要凭感觉,从左边的指标往右边推,每一项都能落到具体器件上。
| 题目指标 | 对硬件的实际要求 | 最终选型 |
|---|---|---|
| 输出 8.0±0.4V,总电流 1.0~4.0A | 单模块至少扛 2A 且留余量,可调输出 | LM2576-ADJ(3A 降压型开关稳压) |
| 两路电流按 1:1、1:2 分配,误差 ≤5%(发挥部分 ≤2%) | 电流采样分辨率优于 1%,采样点要准 | 25mΩ 分流电阻 + INA270 高边检测 |
| 电流比例宽范围可调(0.5~2.0) | 控制量输出分辨率至少 10 位 | DAC7811(12 位串行乘法 DAC) |
| 短路保护阈值 4.5A±0.2A,可自动恢复 | 关断动作要快,且必须能被软件重新拉起 | 直接拉 LM2576 的 ON/OFF 脚 |
| 效率不低于 60%,发挥部分继续提高 | 不能用线性稳压,必须开关拓扑 | 开关电源 + 肖特基续流 |
| 键盘设定、液晶显示 | 主控要有足够 IO 和运算能力 | MSP430F149(硬件乘法器、低功耗、片上 12 位 ADC) |
这里有个容易被忽略的点:MSP430F149 片上本来就有 12 位 ADC,但论文里实际采样用的是外挂的 ADS1232。原因很现实——片上 ADC 挂在 MCU 内部,参考源和地都跟数字部分纠缠在一起,开关电源的纹波一耦合进来,读数就开始跳舞。外挂一颗 Σ-Δ 型 ADC,把模拟前端和数字域在物理上分开,布线上更容易做星形接地。常见做法是:片上 ADC 用来监测输入电压、温度这类慢变量,电流这种要算误差比例的量走外置 ADC。
2.2 四种均流方案的取舍:为什么最后选最大电流法
论文里比较了四种主流均流方法,这段论证是整份材料里最有价值的部分之一,因为它把「为什么不用」讲清楚了。
| 方案 | 工作方式 | 优点 | 致命问题 |
|---|---|---|---|
| 主从法 | 指定一路做电压源,其余做电流源,电流值由主模块下发 | 逻辑简单、均流精度高 | 主模块一挂整个系统崩,没有冗余 |
| 平均电流法 | 各模块经电阻接到公共均流母线 CSB,母线电压代表平均电流 | 精度高、不需要外加均流控制器 | 母线短路或任一模块掉线会把母线拉低,全体输出电压被拽下来 |
| 热应力法 | 按模块温度分配电流,热的少扛、冷的多扛 | 延长整体寿命 | 响应慢,跟电流精度指标不是一回事 |
| 最大电流法 | 用最大值比较器把电流最大的那路信号送上母线,其余模块跟随 | 天然冗余,任一模块失效不影响母线 | 母线需要隔离,否则短路会拖垮全体 |
选最大电流法的核心逻辑是冗余。这道题要求两路并联,一旦某一路因为过流保护被关断,剩下那一路必须能独立撑住;主从法在这种情况下直接失效,平均电流法会因为母线电压塌陷把幸存模块也拉下水。最大电流法里,电流最大的模块自动成为「事实上的主」,它的采样电压抬着母线走,其他模块把自己电流往母线值上靠;它一旦退出,母线电压自动由下一个最大值接管,不需要任何角色切换逻辑。
提示:最大电流法的均流母线一定要串限流电阻或二极管再做比较,否则母线对地短路时所有模块会一起降流。这是这类方案唯一的硬伤,硬件上补一刀就行。
2.3 信号链:一次采样到一次调压要经过几个环节
把整条链路摊开看,从负载电流变化到 DAC 输出修正,中间有五个环节,每个环节都会引入误差和延迟。
| 环节 | 器件 | 关键参数 | 误差贡献 |
|---|---|---|---|
| 电流-电压转换 | 25mΩ 分流电阻 | 2A 时压降 50mV | 电阻精度 ±1%,温漂是主要来源 |
| 差分放大 | INA270 | 增益 20V/V,共模 -16~+80V | 失调电压、增益误差 |
| 模数转换 | ADS1232 | 24 位 Σ-Δ,双通道差分 | 有效位取 12~16 位,噪声决定下限 |
| 运算与控制 | MSP430F149 | 8MHz,硬件乘法器 | 定点运算量化误差 |
| 数模转换 | DAC7811 | 12 位,需外部基准 | 基准漂移直接变成输出漂移 |
INA270 这一环要特别注意:它的输入是分流电阻两端 50~100mV 的微小压差,而这两端对地的共模电压接近 8V。普通运放做差分放大,需要四颗精密电阻匹配,匹配度差一点共模抑制就崩了。专用高边检测芯片把激光修调的电阻网络做在片内,共模抑制比能到 100dB 以上,这是它能测准的根本原因。
再看 DAC 侧。DAC7811 是电流输出型乘法 DAC,它的输出电流正比于「基准电压 × 数字码」,需要外接运放做电流-电压转换;转换后的电压经过一个电阻注入 LM2576 的反馈脚。这一步等效于把反馈分压网络的下臂电阻变成了「固定电阻并联一个受控电流源」,DAC 输出变化时,反馈脚的等效分压比跟着变,输出电压就被拉动了。
3. 关键电路逐段过:反馈网络、高边采样、AD/DA 与过流关断
3.1 LM2576 反馈网络:输出电压只由两个电阻决定
LM2576-ADJ 的工作原理很干脆:内部把反馈脚(第 4 脚)电压稳在 1.23V,流入反馈脚的电流近似为零。所以外部分压电阻上流过的电流相等,输出电压完全由 R1、R2 的比值确定:
Vout = 1.23 × (1 + R2 / R1)
题目要求 8.0V,反推 R2/R1 ≈ 5.5。工程上不会直接凑这个比值,而是先定下臂电阻 R1(常见 1kΩ,保证分压电流在 1mA 量级、远大于反馈脚漏电流),再算上臂。下面这段脚本用来枚举 E96 系列的标准阻值组合,找出误差最小的一对:
# 枚举 E96 系列电阻组合,找最接近目标输出电压的 R1/R2 E96 = [1.00, 1.02, 1.05, 1.07, 1.10, 1.13, 1.15, 1.18, 1.21, 1.24, 1.27, 1.30, 1.33, 1.37, 1.40, 1.43, 1.47, 1.50, 1.54, 1.58, 1.62, 1.65, 1.69, 1.74, 1.78, 1.82, 1.87, 1.91, 1.96, 2.00] E96 = E96 + [x * 10 for x in E96] + [x * 100 for x in E96] # 扩到 1k~200k VREF = 1.23 # LM2576 内部基准,单位 V TARGET = 8.00 # 目标输出电压 best = None for r1 in [x for x in E96 if 800 <= x <= 2000]: # 下臂 0.8k~2k for r2 in [x for x in E96 if 3000 <= x <= 12000]: # 上臂 3k~12k vout = VREF * (1 + r2 / r1) err = abs(vout - TARGET) if best is None or err < best[0]: best = (err, r1, r2, vout) print("误差 %.4fV R1=%.0fΩ R2=%.0fΩ Vout=%.4fV" % best) # 典型输出:误差 0.0021V R1=1000Ω R2=5490Ω Vout=7.9979V这段代码的关键不在算法,而在于把「选电阻」这件事从拍脑袋变成可复现的搜索。参数说明:VREF必须按芯片手册取,LM2576 是 1.23V;TARGET是题目要求的中心值,取 8.00V 而不是 8.2V,因为后面还有 DAC 注入的调整余量,中心值留正偏差反而更难调。搜索结果里 R1 取 1kΩ、R2 取 5.49kΩ,两者都用 1% 精度金属膜电阻,实际输出电压落在 7.98~8.02V 之间。
真正的坑在 DAC 注入点上。DAC 输出经运放跟随后要通过一个串联电阻接到反馈脚,这个电阻不能太小,否则 DAC 的输出噪声会直接灌进反馈环引起振荡;也不能太大,否则调节范围不够。经验值是取 R2 的 5~10 倍,再配合 DAC 满量程输出算一下调节范围:
# 估算 DAC 注入支路带来的输出电压调节范围 VREF, R1, R2 = 1.23, 1000.0, 5490.0 R_INJ = 47000.0 # DAC 注入串联电阻 V_DAC_MAX = 2.5 # DAC 满量程输出(外部 2.5V 基准) # 注入电流叠加到反馈节点,等效于改变了上臂的等效阻值 i_inj_max = (V_DAC_MAX - VREF) / R_INJ vout_nom = VREF * (1 + R2 / R1) vout_max = vout_nom + i_inj_max * R2 # 电流抽走/灌入引起的偏移 print("空调节 %.3fV,最大可上调至 %.3fV,调节量 %.3fV" % (vout_nom, vout_max, vout_max - vout_nom)) # 输出:空调节 7.998V,最大可上调至 8.146V,调节量 0.148V0.15V 的调节量听着不多,但对均流来说足够了——两路模块之间需要的修正量通常只有几十毫伏。反过来,如果这里算出零点几伏,说明注入电阻取小了,均流环会变得极其敏感,一点点数字码抖动就被放大成输出电流跳变。
3.2 INA270 高边采样:25mΩ 是怎么算出来的
采样电阻的取值是一个典型的三角权衡:阻值大,信号强、好测;阻值大,损耗也大、效率指标直接掉;阻值小,损耗低,但失调电压的相对误差变大。论文里给了一个硬约束——INA270 的差分输入建议工作在 50~100mV 区间。
按最大工作电流 2A/路来算:
R_sense = 50mV / 2A = 25mΩ
这个阻值下的功耗是 I²R = 2² × 0.025 = 0.1W,选 2512 封装(1W)绰绰有余,温漂引起的阻值变化也能压住。如果为了省电把阻值降到 10mΩ,2A 时压降只有 20mV,放大器自身的失调电压(毫伏级)就会变成百分之几的电流误差,2% 的均流指标直接没戏。
注意:分流电阻必须用四线开尔文接法,电压取样点从电阻本体的焊盘内侧引出,绝对不能在走线上随便取两点。走线电阻是毫欧级的,跟 25mΩ 同一量级,取错点误差就是两位数百分比。
INA270 的输出直接接 ADC 的差分输入。它的增益是 20V/V,50mV 输入对应 1V 输出,正好落在 ADS1232 在 2.5V 基准下的舒适区间。这里不需要额外的分压或衰减,串一个 RC 低通(常见 1kΩ + 100nF,截止频率 1.6kHz)滤掉开关噪声即可。
3.3 ADS1232 与 DAC7811:模拟前端怎么跟 MCU 说上话
ADS1232 是双通道 24 位 Σ-Δ ADC,引脚少、时序简单,SCLK 打 25 个脉冲就能读出一次转换结果。接线上有三个细节值得记:
| 引脚 | 接法 | 说明 |
|---|---|---|
| VREF | 接 2.5V 基准 | 基准不稳,读数直接漂,不要用电源分压凑 |
| AINP1/AINN1 | 接 INA270 输出与地 | 差分走线等长,靠近芯片入口加 RC |
| PDWN | 上拉 | 低电平进掉电模式,调试时误拉低会以为芯片坏了 |
| SPEED | 接地 | 低速模式 10SPS,噪声最低,均流环够用 |
DAC7811 的接线更简单,三线 SPI(SCLK、SDIN、SYNC),外接 2.5V 基准(论文原理图里用的是 MC1403 这类带隙基准)。它是电流输出型,IOUT 引脚必须接运放做 I/V 转换,转换公式是:
V_out = -V_ref × D / 4096
负号来自运放的反相组态。这个负号在实际调试里很容易被忽略,导致 DAC 码值越大、注入电流方向反而相反,均流环变成正反馈直接发散。稳妥做法是在软件里把目标值取反,或者干脆用两级反相把符号翻正。
写 DAC 的代码没什么花头,但时序不能错:
/* DAC7811 写 12 位数据,SYNC 下降沿锁存,MSB 先出 */ void dac7811_write(unsigned int code) { unsigned char i; code &= 0x0FFF; /* 只取低 12 位,防止高位脏数据 */ DAC_SYNC_LOW(); /* 拉低 SYNC,开始一帧 */ for (i = 0; i < 12; i++) { if (code & 0x0800) /* 从 bit11 开始逐位送出 */ DAC_DIN_HIGH(); else DAC_DIN_LOW(); DAC_SCLK_HIGH(); /* 上升沿移入 */ __delay_cycles(4); /* 8MHz 下约 0.5us,留足建立时间 */ DAC_SCLK_LOW(); code <<= 1; } DAC_SYNC_HIGH(); /* 上升沿把 12 位锁进 DAC 寄存器 */ }逻辑说明:code先做掩码,是因为上层算出来的值往往带溢出位,直接送进去会把高 4 位当成无效数据。循环 12 次对应 12 位分辨率,每次先摆好数据再给时钟,是这类乘法 DAC 的标准时序。__delay_cycles(4)是 MSP430 的 intrinsics,实际取值要看 SCLK 的上限频率,宁可慢一点也不要贴着极限跑,示波器上看时钟沿有振铃就说明太快了。
3.4 过流保护:为什么绕开软件直接拉 ON/OFF
题目要求 4.5A±0.2A 保护、并且能自动恢复。实现上有两条路:一是软件检测到电流超限后关断输出,二是用比较器做硬件关断。论文选的是前者,但关断动作落到 LM2576 的第 5 脚 ON/OFF 上——这颗脚是逻辑电平输入,拉高关断、拉低工作,关断后芯片自身进入低功耗状态,输出电容上的能量通过负载自然泄放。
软件保护的响应时间受采样周期限制。假设均流环 10ms 跑一圈,最坏情况下短路持续 10ms 才被切断,这期间 4A 多的电流全部灌进短路点。对竞赛台面来说可以接受,因为电源本身还有逐周期限流兜底;但如果做产品,硬件比较器 + 单稳态触发是必须补的一环。
自动恢复靠的是「打嗝」策略:关断后延时一段时间,重新使能,如果电流立刻又超限就再关断,循环往复。这样既能保护,又不用人工按复位键。延时时间不能太短,否则短路点持续发热;也不能太长,否则负载恢复正常后响应迟钝。500ms 是这类系统里比较常见的折中值。
4. 软件实现:预设加步进的双环控制与最大电流均流算法
4.1 主流程与运行状态
软件部分的分层很清楚:最底层是 ADC/DAC/键盘/液晶的驱动,中间层是采样滤波和标定换算,最上层是均流调节和状态判断。主循环不是裸奔的 while(1),而是按状态推进:
| 状态 | 进入条件 | 主要动作 | 退出条件 |
|---|---|---|---|
| INIT | 上电复位 | 时钟、IO、ADC、DAC 初始化,DAC 归零 | 初始化完成 |
| IDLE | 初始化完成 | 键盘扫描,等待设定值 | 收到启动命令 |
| CV | 收到启动命令 | 输出 8V,单路闭环稳压 | 电流超过均流阈值 |
| SHARE | 总电流 > 0.5A | 按设定比例做均流调节 | 电流回落或保护触发 |
| PROTECT | 任一路电流 > 4.5A | 拉高 ON/OFF,关断两路 | 500ms 定时到 |
| RECOVER | 保护延时到 | 重新使能,读一次电流 | 正常则回 CV,否则回 PROTECT |
这个状态机的好处是每一态的行为都能单独测。调均流的时候先把 PROTECT 屏蔽掉,调保护的时候把均流环固定成 1:1,不然两个环互相打架,示波器上根本看不出是谁在动。
4.2 均流环的代码骨架
均流环的核心就三件事:读两路电流、算目标值、写两路 DAC。用最大电流法的时候,先找出两路中的较大值作为母线参考,再把每路的实测值往「按比例分配后的目标值」上拉。
/* 按比例设定值做均流,ratio 表示 I1:I2,例如 1:2 传入 1 和 2 */ void current_share_step(unsigned char r1, unsigned char r2) { long i1_raw, i2_raw; /* ADC 原始码 */ long i1_ma, i2_ma; /* 换算后的毫安值 */ long total, target1, target2; long err1, err2; i1_raw = ads1232_read(CH1); /* 通道 1 电流采样 */ i2_raw = ads1232_read(CH2); /* 通道 2 电流采样 */ i1_ma = (i1_raw - offset1) * k1; /* k1 为标定系数,单位 mA/LSB */ i2_ma = (i2_raw - offset2) * k2; total = i1_ma + i2_ma; if (total < 200) return; /* 轻载不做均流,避免噪声引起抖动 */ /* 按设定比例算出各路应该扛的电流 */ target1 = total * r1 / (r1 + r2); target2 = total - target1; err1 = target1 - i1_ma; err2 = target2 - i2_ma; /* 增量式 PI:只调增量,不做位置式累加,避免积分饱和 */ dac1 += (long)(KP * err1 + KI * err1_hist1); dac2 += (long)(KP * err2 + KI * err2_hist2); err1_hist1 = err1; /* 保存本次误差供下轮差分用 */ err2_hist2 = err2; if (dac1 < 0) dac1 = 0; /* 限幅,防止 DAC 码越界 */ if (dac1 > 4095) dac1 = 4095; if (dac2 < 0) dac2 = 0; if (dac2 > 4095) dac2 = 4095; dac7811_write((unsigned int)dac1); dac7811_write((unsigned int)dac2); }逐段说明。前四行是采样与换算,offset是零电流时的 ADC 读数,必须在上电、负载断开时现场标定一次并存进 Flash,写死一个常数换个板子就废。k1、k2是斜率系数,用标准电流源两点标定(比如 1A 和 3A 各读一次)算出来,两路的k值一定不一样,分流电阻的容差摆在那儿。
total < 200这个门限是血泪经验。总电流很小的时候,两路 ADC 的读数都被噪声主导,算出来的误差正负跳变,DAC 码跟着来回摆,输出电流上叠加一个低频纹波,示波器一看还以为是环路振荡,其实是均流环在轻载时不该工作。
KP、KI两个参数没有万能值,跟采样周期强相关。采样周期 10ms 时,KP从 1 开始试,KI取KP的十分之一;如果观察到电流缓慢爬升后过冲再回调,说明积分太强,把KI减半;如果始终差一点点回不到目标值,说明积分不足,慢慢加。这套调法纯靠示波器看电流波形,比任何公式都直接。
4.3 预设与步进:键盘设定的两种输入方式
论文里提到用「预设和步进两种方法」改变电流设定,这个设计在竞赛现场很实用。预设是把 1:1、1:2、2:1 这几个题目要求的状态做成快捷键,一键切换,避免现场按半天还没设对;步进是让用户可以按 0.1 的步长调节比例,应对发挥部分「0.5~2.0 范围内任意比例」的要求。
实现上就是一个键盘扫描加一个比例变量,步进时注意别让两路比例同时为 0:
/* 步进调整比例,step 为 +1 或 -1,范围限制在 1~20(对应 0.5~2.0 的要求) */ void ratio_step(signed char step) { signed char next = ratio_sel + step; if (next < 1) next = 1; /* 比例下限,防止除零 */ if (next > 20) next = 20; /* 比例上限,对应 I1:I2 = 20:10 */ ratio_sel = next; lcd_show_ratio(ratio_sel, 10); /* 固定分母 10 显示,1~20 即 0.1~2.0 */ }这里分母固定成 10,显示上就是 0.1 到 2.0 的连续可调,跟题目的「0.5~2.0」正好对上。用整数比例而不是浮点,是因为后面算目标电流时做的是整数乘除,浮点在 MSP430 上要么吃主频要么吃 Flash,没必要。
5. 调试避坑:并联供电台上最容易翻车的五个点
5.1 空载一切正常,一带载就一路顶到限流
现象:两路空载输出都是 8.00V,接上 2A 负载后,一路电流飙到 2.5A 被限流,另一路只有 0.3A,总电压掉到 7.5V。
原因:两路的采样点位置不一致。一路的分流电阻取样点取在电阻焊盘外侧,另一路取在走线末端,走线那几毫欧的电阻被算进了「输出电压」里,导致两路的实际输出端电压差了十几毫伏。开关电源输出阻抗很低,十几毫伏的差异就足以让电流分配严重失衡。这不是算法问题,是布局问题,软件怎么调都调不平。
解决:所有分流电阻统一改成四线开尔文接法,电压取样走独立细线直接从电阻焊盘内侧引出,且两路的取样走线长度尽量一致。改完之后再看,空载时两路电流差能从 2A 降到 50mA 以内,剩下的偏差才交给均流环去修。
5.2 均流环一开就振荡,电流波形上下摆
现象:手动固定 DAC 码值时输出很稳,一旦闭环,两路电流以 2~3Hz 的频率此起彼伏,幅度能到 ±0.5A。
原因:PI 参数和采样周期不匹配。多数人是先在 PC 上按「连续系统」的思路算参数,然后直接搬到 10ms 的离散采样里,等效积分增益被放大了几十倍。另一个隐蔽原因是 ADC 读数没做滤波,单次采样的噪声直接进了误差项,等于给积分器灌了白噪声。
解决:先把KI置零,只留KP,从 1 开始往上加,加到电流能快速跟随但不过冲为止;再加KI,每次加 0.1,观察到过冲就退回去。同时在 ADC 读数后加一个滑动平均(8 点即可),能明显压住高频抖动。调完之后再用示波器看,电流波形应该是一条带轻微纹波的直线,而不是正弦。
5.3 1:2 比例怎么调都不准,误差总是超 5%
现象:1:1 能调到 2% 以内,切到 1:2 误差就跑到 8% 以上,而且怎么改 PI 参数都没用。
原因:DAC 的调节范围不够。1:2 意味着一路要扛总电流的三分之二,另一路只扛三分之一,需要的电压差比 1:1 大得多。前面算过 DAC 注入支路只能带来 0.15V 的调节量,如果注入电阻取大了,实际调节量只有几十毫伏,1:2 这种大偏差根本拉不回来,PI 积分器一路饱和到限幅值,误差就固定在那儿了。
解决:先测调节范围。手动把 DAC 从 0 扫到 4095,记录每一路的输出电流变化量,如果单路电流的可调范围小于 ±0.5A,就要减小注入电阻。改完之后重新标定k值,再调 PI。
5.4 短路保护动作后不恢复,必须断电重上
现象:短接输出触发保护,两路都关断了,撤掉短路后输出电压一直是 0,按键也没反应。
原因:LM2576 的 ON/OFF 脚是高阻输入,如果没有外部上拉或下拉,关断后引脚电平处于不确定状态,软件再想拉低使能时,引脚上的寄生电容还没放完电,芯片识别不到有效电平。另一种情况是保护状态机卡在 PROTECT 里出不来,因为恢复条件写的是「电流小于阈值」,而关断状态下电流恒为 0,这个条件本该立刻满足——除非判断顺序写错了,先判恢复再判延时。
解决:ON/OFF 脚加一个 10kΩ 下拉电阻,保证默认状态是使能;软件里把恢复逻辑改成「延时到 → 先使能 → 延时 20ms 等输出建立 → 再读电流判断」,避免刚使能时读到的是电容充电电流而误判为仍然短路。
5.5 效率只有 55%,差一点点够不到 60%
现象:满载时输入功率 40W,输出 22W,效率 55%,怎么调都上不去。
原因:三个地方在偷效率。续流二极管用了普通整流管,正向压降 0.7V,在 2A 电流下就是 1.4W 的纯损耗;电感选型偏小进入饱和,电感电流线性上升导致峰值电流过大,铜损按平方增长;反馈走线从开关节点旁边穿过,耦合进来的尖峰让芯片误判输出电压偏高,占空比被压小,实际输出靠后级电容硬撑。
解决:续流管换肖特基(压降 0.4V 左右),电感按饱和电流大于峰值电流 1.5 倍选,反馈线远离电感和续流回路并加屏蔽地。这三条改完,效率通常能回到 75% 以上,60% 的指标自然就不是问题了。
6. 二次开发:把这套板子改成带通信的数控恒流源
这套方案的可复用价值不在「8V/4A」这个具体指标上,而在「软件闭环套在开关电源外面」这个结构。想把它改成能用的数控恒流源或者带遥测的并联供电系统,改动集中在四个地方,硬件基本不用动。
| 改造点 | 原方案 | 改造做法 | 影响面 |
|---|---|---|---|
| 主控 | MSP430F149 | 换 STM32F103,保留相同外设 | 底层驱动重写,控制逻辑照搬 |
| DAC 接口 | 并行时序的 DAC7811 | 换 I2C 接口的 12 位 DAC | 省 IO,代码改一个写函数 |
| 通信 | 无 | 加 UART/CAN,上报两路电流与状态 | 主循环加一个非阻塞发送 |
| 均流母线 | 软件比较取最大值 | 加一颗比较器做硬件最大值 | 响应快一个数量级 |
换主控的时候有个坑要提前说:原方案的 PI 参数是按 10ms 采样周期整定的,换到 1ms 采样的平台上如果参数照抄,等效积分增益放大十倍,必定振荡。正确做法是把 PI 参数按采样周期做归一化,KI与Ts成反比缩放,KP基本不变。
验证改造是否成功,我一般走三步。第一步是静态标定:断开负载,用高精度万用表逐点比对 DAC 码值与实际输出电流,拟合出斜率和截距,把结果写进参数区。第二步是动态阶跃:用电子负载做 0.5A 到 2A 的阶跃,看恢复时间和平稳度,恢复时间在 50ms 以内、超调小于 10% 算合格。第三步是失衡测试:故意把一路的 PWM 关掉,模拟单模块失效,看另一路能不能在 100ms 内把总电流补上,这一步过不了,说明均流逻辑里还藏着对两路同时工作的隐含依赖。
下面这段是用来做静态标定的采集脚本,跑在 PC 侧,通过串口读出每一路的 ADC 码和万用表读数:
import serial import numpy as np ser = serial.Serial("COM3", 115200, timeout=1) codes, currents = [], [] for target_ma in range(200, 3500, 200): # 200mA 到 3.4A 逐点 ser.write(("SET %d\n" % target_ma).encode()) ser.readline() # 吃掉回显 line = ser.readline().decode().strip() # 格式 "CH1,CH2" ch1, ch2 = [int(x) for x in line.split(",")] real = float(input("万用表读数(A)=")) # 人工录入标准值 codes.append(ch1) currents.append(real) k, b = np.polyfit(codes, currents, 1) # 一次拟合出斜率与截距 print("标定系数 k=%.6f mA/LSB offset=%.3f" % (k * 1000, b))np.polyfit出来的一次项就是代码里的k,常数项对应offset。采样点不要只取两三个,从 200mA 到 3.4A 均匀铺开,拟合残差大于 1% 就说明分流电阻的温漂或者放大器的非线性已经影响到精度,得回头查硬件,靠软件补是补不回来的。
从那以后我每次做并联电源,都强制先在空载状态下把两路的采样零点各标一遍并存进参数区,再开始调均流——这个动作只花两分钟,却能省掉后面一整天怀疑算法的时间。希望帮到你。
本文还有配套的精品资源,点击获取