简介:本资源面向电子设计竞赛参赛者、电源方向学生及DSP开发者,提供一套完整的基于TMS320F28335的开关电源模块并联供电系统设计方案。系统以单端反激电路为功率级主回路,通过DSP采集两路DC模块输出电流并分别控制PWM,实现0~4A范围内A、B两路电流比例0.5~2.0之间步进0.1可调,覆盖题目基本要求与扩展要求。包内共37个文件,包括22个C源码和6个汇编文件构成的DSP工程、4个SchDoc原理图、4个PcbDoc PCB设计以及1个Word论文文档,合计约1.35MB。资源从主回路拓扑论证、控制方案比选到采样检测、主回路、辅助电源、加法器各模块原理图与PCB一应俱全,并附软件源码,便于读者对照论文理解软硬件协同实现。已有686人学习下载,适合需要完整参考项目以快速上手并联均流控制与F28335电源系统设计的读者。
1. 为什么并联供电系统要用TMS320F28335做数字控制
在开关电源模块并联供电的场景里,真正麻烦的不是“把电供出来”,而是“让每个模块都干活”。两个模块的输出电压只要差几十毫伏,负载电流就会明显偏向电压高的那一路,轻则发热不均、重则一个模块过流保护、另一个空载运行。TMS320F28335在这个项目里的角色,就是把这套“电压基准—电流均衡—PWM驱动”的模拟控制回路搬进数字域:用它的ADC采集输出电压和各模块电流,用浮点运算做均流算法和数字补偿,再用ePWM模块输出可调占空比。相比纯模拟方案,这种做法的优势是参数可在线调整、均流策略可以换、调试时可以直接在CCS里看波形和变量。这篇内容围绕该项目的三块内容展开:硬件上基于Altium Designer完成DSP最小系统与电源功率部分的原理图、PCB设计,软件上实现ADC采样、数字PID/补偿器和PWM输出的完整闭环,最后落到并联均流的调试顺序和验证手段。
2. F28335在并联供电系统中的角色与数字均流方案选型
2.1 并联模块“抢电流”的机理与均流目标
两个Buck型开关电源模块并联时,理想情况是各自输出一半负载电流。实际由于采样电阻误差、MOS管导通压降、电感绕线差异和PCB走线阻抗不完全一致,两个模块的开环输出特性曲线不会重合。在同一个输出电压点上,特性曲线更“硬”的模块会承担更多电流;如果直接把两个模块的输出端接在一起,模块之间还会形成环流,表现为主功率器件温度不均、输入侧纹波加大、甚至触发过流保护。
均流控制的本质是给每个模块额外引入一条“电流反馈修正通道”,让模块的输出特性从硬电压源变成“电压源+电流下垂”或“电压源+电流矫正”的形式,最终在某个稳态工作点上让各模块的输出电流相等。对这个项目来说,F28335的内部ADC采集每路输出电流后,软件通过均流算法得到修正量,再叠加到电压环的误差信号或直接调整PWM占空比。这样无论负载怎么变化,各模块的电流分配都能被拉回平衡。
2.2 TMS320F28335的外设资源盘点:做数字电源够不够用
数字电源控制环路对MCU/DSP的硬性要求有两个:一是ADC的采样速度和精度要能跟上开关频率,二是PWM的占空比分辨率要足够细,否则输出电压会出现肉眼可见的阶梯跳动。F28335在这两点上都留足了余量。
| 外设资源 | 关键参数 | 在本项目中的用途 |
|---|---|---|
| CPU与浮点单元 | 150MHz主频,FPU硬件浮点 | 运行均流算法和2P2Z补偿器,浮点PID无压力 |
| ADC模块 | 12位精度,双采样保持,最快80ns转换 | 采集输出电压、两路模块电流、输入电压 |
| ePWM模块 | 6组ePWM,16位时基,支持HRPWM扩展 | 输出两路带死区的互补PWM驱动同步Buck |
| 触发机制 | ePWM可配置为ADC的SOC触发源 | 在特定相位点启动采样,避开开关噪声 |
| 通信接口 | SCI、SPI、CAN、I2C | 可选作为模块间均流母线,传输平均电流 |
实际设计中要注意两个容易被忽略的点。第一,F28335的ADC是12位的,但它的线性度和温漂不能和专用ADC芯片比,采样调理电路的精度决定了整个环路的稳态精度,后续要方案去校正零点。第二,ePWM模块的PWM频率由TBPRD寄存器决定,例如150MHz时基下TBPRD设为600,开关频率就是250kHz。如果项目把开关频率定在100kHz以下,占空比分辨率会更高,ADC的采样时间也更充裕,适合入门。
2.3 均流方案选型:下垂法、主从法还是平均电流法
数字控制的优势是均流策略可以沉淀为代码,不同方案之间切换只需要改算法逻辑,不用动功率板。本项目最常见的做法是“平均电流法”或“主从均流法”,下面从实现成本和均流精度两个维度做比较。
| 均流方案 | 硬件成本 | 均流精度 | 数字实现方式 |
|---|---|---|---|
| 下垂法 | 最低,无需互联线 | 一般,满载偏差较大 | 软件按输出电流抬高或压低电压基准 |
| 主从均流法 | 需一根使能/同步线 | 较高,依赖主模块可靠性 | 主模块输出电流基准,从模块跟随 |
| 平均电流法 | 需均流母线互联 | 高,动态响应好 | 每模块采样自身电流,与母线平均值比较做PI校正 |
对于两模块并联的毕设或工程样机,“平均电流法”是一个稳妥的选择:硬件上只需要一根均流母线,软件上每个模块把自己的输出电流转换成电压信号送到母线,母线电压代表两个模块电流的平均值,F28335读取自身电流和母线电压后,通过PI调节器修正各自的PWM占空比。下垂法虽然最简单,但在满载和半载切换时均流误差会明显增大,适合对均流精度要求不高的场景。
3. Altium Designer原理图与PCB设计:数字电源的硬件落地要点
3.1 原理图分区:DSP最小系统与功率电路必须分开画
拿到项目里的ALTIUM工程文件后,第一件事不是看具体某个网络怎么连,而是确认原理图的分层结构。常见做法是分成三张子图:DSP最小系统、采样与信号调理、主功率变换与驱动。F28335最小系统包含30MHz晶振与PLL倍频电路、内核1.9V和IO 3.3V两路电源、JTAG仿真接口、boot模式选择引脚。boot模式引脚容易被忽略,F28335的GPIO84~GPIO87在上电时的电平状态决定程序从Flash还是从SCI/SPI引导,建议用排针引出四个GPIO,方便烧录后切换启动模式。
功率部分如果是同步Buck拓扑,原理图设计要特别关注驱动器自举电容的位置和MOSFET栅极驱动回路的面积,这两个元件的摆放直接决定PCB能否正常工作。电流采样部分一般用合金采样电阻配合差分放大器,采样电阻放在电感后面、输出电容之前,这样采样到的电感电流纹波小,均流环的滤波压力也小。
3.2 PCB层叠与关键布局:大电流回路和采样回路要分开
双面板就可以完成这个项目,但层叠策略要提前定好。顶层走功率路径和驱动信号,底层铺完整地平面,功率地与信号地之间通过一个0欧电阻或磁珠单点连接。注意F28335的ADC参考地AGND和功率地PGND不能直接大面积连通,否则开关节点的高dv/dt会通过地平面耦合进ADC采样值,造成均流环震荡。
大电流回路的布局优先级最高。同步Buck的功率回路是从输入电容正极到高边MOSFET、到电感、到输出电容、再回到输入电容负极,这个回路的面积要尽量小,因为回路面积越大,寄生电感越大,开关尖峰越严重。我一般会在布局阶段先把输入电容、MOSFET、电感、输出电容这四个核心器件放好,再围绕它们排布驱动芯片和采样网络。采样电阻的差分走线要严格按照开尔文接法,从采样电阻两端单独拉两根细线到差分放大器输入,不能在采样电阻的焊盘上直接打过孔连接功率层。
3.3 布线规则设置与覆铜处理:从线宽规则到DRC检查
Altium Designer里的规则设置会影响布线效率和最终性能。针对该项目,建议在PCB Rules and Constraints Editor里建立以下规则:
| 规则对象 | 推荐设置 | 说明 |
|---|---|---|
| 电源网络线宽 | 40~60mil | 输入、输出、电感连接等大电流路径 |
| 普通信号线宽 | 10mil | ADC采样、数字IO、驱动信号 |
| 安全间距 | 10mil | 兼顾加工能力和抗爬电能力 |
| 过孔内径/外径 | 0.3mm / 0.6mm | 大电流路径可放多个过孔并联 |
| 差分对规则 | 等长、间距10mil | 用于电流采样差分信号 |
布线完成后必须跑一次DRC检查。这里特别说下“铜皮挖空”的操作:如果功率开关节点下方正好有模拟采样电路,可以在规则里给开关节点网络添加一个Clearance规则,或手动在开关节点下用“Polygon Pour Cutout”挖空顶层铜皮,减少开关噪声通过平面耦合干扰采样信号。另一个常见做法是在ADC采样电路周围布置Guard Ring,即一圈连接到模拟地的细铜皮环路,这能明显降低来自功率部分的共模干扰。
4. 软件源码实现:从ADC采样到PWM占空比更新的完整闭环
4.1 软件框架:中断里跑环路,主循环做保护
F28335项目的常见软件架构是“主循环+ADC中断”两层结构。主循环里处理按键、数码管显示、过压过流保护阈值设置这类低速任务;ADC采样完成中断里执行核心控制算法。控制频率建议与开关频率一致或为其整数分之一,例如250kHz的PWM频率下,ADC中断频率可以设为50kHz,即每5个PWM周期执行一次闭环计算,这样既有足够带宽,又给CPU留出裕量。
// 主循环:初始化外设后进入死循环,执行低速任务 void main(void) { InitSysCtrl(); // 初始化系统时钟,PLL倍频到150MHz InitGpio(); // 配置GPIO复用功能 InitAdc(); // 配置ADC模块 InitEPwm(); // 配置ePWM模块 DINT; // 注册ADC中断服务函数并向PIE使能中断 EALLOW; PieVectTable.ADCINT1 = &adc_isr; EDIS; PieCtrlRegs.PIECTRL.bit.ENPIE = 1; IER |= M_INT1; EINT; for(;;) { // 低速任务:显示更新、按键扫描、故障状态上报 update_display(); check_fault_flags(); } }代码里的关键点是中断服务函数的注册方式。F28335的中断向量表在PIE模块里,必须先通过EALLOW/EDIS保护指令修改向量表地址,再把对应的PIE中断使能位置1,否则ADC中断永远不会触发。如果烧录后发现ADC中断进不去,优先检查PIE向量表中ADCINT1对应的IER位和PIEIER1位有没有同时打开。
4.2 ADC采样与校准:零点偏移和增益误差要软件修正
F28335的ADC虽然内置了16通道,但实际项目中多半只用其中几路:输出电压、两路输出电流、输入电压。采样调理电路会先把实际电压按比例降到0~3V范围,再送入ADC引脚。软件侧需要做的第一件事是采样校准,因为12位ADC存在约±2LSB的零点偏移,这个偏移在闭环中会被积分器放大成静态误差。
// ADC采样校准:使用参考电压通道计算零点偏移 #define ADC_RES 4095 #define VREF 3.0f float adc_read_calibrated(Uint16 channel) { Uint16 raw = AdcResult.ADCRESULT[channel]; float volt = (raw * VREF) / ADC_RES; // 减去软件校准的零点偏移,零点在断电状态采样得到 return volt - zero_offset[channel]; }校准逻辑比较简单:每次开机时,如果检测到功率级未使能,采样10次该通道的ADC值取平均,作为零点偏移保存到全局数组里。正常工作后,每次读取ADC结果先减去零点偏移再乘标度系数。要注意的是,标度系数的计算必须代入实际电阻分压比或互感器变比,不能拿空载电压反推,否则满载工况下均流误差会被放大。
4.3 均流算法与数字补偿器:用2P2Z实现电压电流双环
电压外环和均流内环在数字域的落法有很多种,常见做法是在同一个中断里先后执行:先采输出电压和本模块电流,通过均流母线获取平均电流,计算电流偏差,经均流PI调节器得到一个修正量,叠加到电压基准上,再进行电压环补偿,最终输出到PWM占空比寄存器。
typedef struct { float b0, b1, b2; // 零点系数 float a1, a2; // 极点系数 float x1, x2; // 误差历史值 float y1, y2; // 输出历史值 } dcomp_2p2z_t; float dcomp_2p2z_calc(dcomp_2p2z_t *c, float err) { float y = c->b0 * err + c->b1 * c->x1 + c->b2 * c->x2 - c->a1 * c->y1 - c->a2 * c->y2; // 历史值移位,为下一拍计算做准备 c->x2 = c->x1; c->x1 = err; c->y2 = c->y1; c->y1 = y; return y; }2P2Z补偿器是数字电源里用得比较多的二阶补偿结构,它和模拟域的Type-II补偿器对应,低频有积分作用消除稳态误差,中频提供相位裕度。系数b0~b2、a1、a2的确定方法一般是在Matlab里根据功率级的控制到输出传递函数计算,也可以用零极点配置的经验值,频率环的穿越频率取开关频率的十分之一到五分之一,相位裕度定在45~60度。对于并联均流环,调节带宽要明显低于电压环,否则两个环之间会出现频率耦合,表现为输出电流来回摆动。
4.4 ePWM配置与占空比更新时机:CMPA值的写入时机很关键
ePWM模块的配置决定了开关频率、死区时间和PWM波形的输出模式。F28335每个ePWM模块内部有两个输出EPWMxA和EPWMxB,可以配成互补输出并插入死区,这正好适用于同步Buck的高低边MOSFET驱动。
// ePWM1配置:250kHz开关频率,互补输出带100ns死区 void InitEPwm(void) { EPwm1Regs.TBPRD = 600; // 150MHz / 600 = 250kHz EPwm1Regs.TBCTL.bit.CTRMODE = 0; // 向上计数模式 EPwm1Regs.TBCTL.bit.HSPCLKDIV = 0; // 时基时钟不分频 EPwm1Regs.TBCTL.bit.CLKDIV = 0; EPwm1Regs.CMPCTL.bit.SHDWAMODE = 0; // CMPA立即加载 EPwm1Regs.CMPCTL.bit.SHDWBMODE = 0; EPwm1Regs.CMPA.half.CMPA = 300; // 初始占空比50% // 死区配置:上升沿延迟100ns,高电平有效互补模式 EPwm1Regs.DBCTL.bit.OUT_MODE = 2; // EPWMxA和EPWMxB均为死区输出 EPwm1Regs.DBRED = 15; // 上升沿延迟,15个时基周期 EPwm1Regs.DBFED = 15; // 下降沿延迟 EPwm1Regs.AQCTLA.bit.CAU = 2; // 计数到CMPA时输出置低 EPwm1Regs.AQCTLA.bit.PRD = 1; // 计数到周期值时输出置高 EPwm1Regs.AQCTLB.bit.CAU = 2; EPwm1Regs.AQCTLB.bit.PRD = 1; }实际的占空比更新不支持在中断里随意写CMPA,因为ePWM模块默认带影子寄存器机制,CMPA的值只在特定事件(如周期匹配、零匹配)时从影子寄存器装入工作寄存器。如果关闭影子加载,中断里写入的值会立即生效,这会导致PWM波形在一个周期内出现跳变。建议保持影子模式,并在配置里设置成周期事件加载,也就是TBCTL的PRDLD位保持默认值1。这样每次PWM计数到零时,新的占空比值才真正生效,避免驱动波形出现毛刺。
5. 上电调试顺序与均流验证的实用技巧
并联供电系统的调试不能直接带满载上电,要按“控制电—开环—闭环—并机”的顺序来做。第一次上电只给F28335的3.3V和1.9V供电,用CCS的View菜单打开寄存器窗口,确认PLL锁定标志位和ADC转换结果能正常刷新。这个阶段如果ADC读数跳动较大,多半是PCB布局里模拟地和功率地没有分开,或屏蔽措施不够,先解决硬件再往后面走。
第二步是开环测试。在CCS里给CMPA寄存器写一个固定值,比如50%占空比,用示波器探头观察开关节点波形,确认上升沿、下降沿、死区时间是否符合预期。如果开关节点波形有严重的振铃,优先检查驱动电阻和MOSFET栅极回路面积,而不是去调整软件参数。确认单模块运行正常后,加载闭环代码,先带25%负载,观察输出电压是否稳定、电流采样值是否和万用表一致。采样值偏差超过5%时不要急着调均流参数,回到ADC标度系数上排查。
并机调试阶段不要一次加满负载,建议从空载开始,逐步加到半载,观察两个模块的电流分配情况。
| 现象 | 可能原因 | 排查顺序 |
|---|---|---|
| 两模块电流差固定不变 | 采样零点或标度不一致 | 断电采样零点,重新校准 |
| 电流差随负载增大而增大 | 均流环增益不够 | 加大均流PI的比例系数 |
| 输出电流周期性波动 | 电压环和均流环带宽重叠 | 降低均流环带宽 |
| 切换负载瞬间电流失衡 | 均流环响应慢 | 适当提高均流环穿越频率 |
最后一招是“波形对比法”:把两个模块的电感电流波形放在示波器同一时间轴上,稳定工况下两个波形的平均值应该一致,纹波包络应重合。如果两个波形的相位相差明显,检查两个ePWM模块的时基是否同步。F28335通过SYNCOUT和SYNCIN引脚可以实现多个ePWM模块的相位同步,软件里需要把EPwm1Regs.TBCTL.bit.SYNCSEL设为0,即主模块作为同步源,从模块的TBCTL配置为同步输入模式。没有同步的并机系统,动态均流性能会差很多,这一点在双模块并联架构里尤其重要。
本文还有配套的精品资源,点击获取