简介:这份资源面向电力电子、光伏逆变器方向的工程师与高校学生,提供一套基于TMS320F28335的光伏离网并网逆变器完整设计参考,涵盖硬件原理图、PCB印制板图与DSP软件源码,适合作为产品开发或课题设计的实战模板。压缩包共79个文件,约6.66MB,以C与H源码文件为主,配合汇编启动代码、库文件、工程配置及PDF原理说明、Excel物料清单和Protel 99se工程文件,可用Protel或Altium Designer打开修改。源码部分包含SPWM生成、ADC采样、EPWM、ECap、SCI、GPIO等驱动模块,并附软件锁相环实现、并网锁相技术、开发板连接说明与使用注意事项等文档,便于理解并网控制与锁相算法。目前已有3340人学习下载,适合需要快速搭建逆变器软硬件框架、对照原理图与代码进行调试的读者参考借鉴。
1. 拿到 TMS320F28335 光伏逆变器全套资料,先搞清楚它能跑通什么
一套标着「原理图+PCB+DSP软件源码」的 TMS320F28335 光伏离网并网逆变器资料,最容易让人上头的地方,是它看起来把硬件和软件都给你了。但真正决定你能不能跑通的,不是文件数量,而是三件事:功率拓扑选了什么、DSP 里跑了哪些控制环、离网和并网两种模式怎么切换。我见过太多人拿到压缩包,先翻原理图,再打开 PCB,最后对着源码发呆——因为不知道从哪下手验证。
这套资料适合两类人:一类是想学 DSP 数字电源控制的学生或转行工程师,另一类是想做小型光伏逆变器样机的硬件开发者。它能解决的核心问题是:给你一个完整的、基于 TMS320F28335 的逆变器控制框架,包括 PWM 生成、ADC 采样、锁相环、SPWM 调制和模式切换逻辑。但前提是,你得先理解它的控制架构,而不是直接烧录。
2. 从原理图到功率级:先看懂拓扑再动手焊板
2.1 光伏离网并网逆变器的典型功率拓扑
拿到原理图,第一件事不是看 DSP 引脚,而是看功率级。常见的小功率光伏逆变器拓扑分两级:前级 Boost 升压,后级全桥逆变。前级负责把光伏板波动的直流电压升到稳定的母线电压,后级负责把直流逆变成交流。离网模式下,后级输出接负载,电压和频率由逆变器自己定;并网模式下,后级输出要跟踪电网的电压相位和频率。
TMS320F28335 在这套方案里的角色,是同时控制前级 Boost 的 PWM 和后级全桥的 SPWM。它的 ePWM 模块可以生成带死区的互补 PWM,ADC 模块同步采样直流母线电压、光伏电压、输出电流和电网电压。原理图上你要重点确认几个点:电流采样用的是霍尔还是采样电阻,电压采样用的是分压电阻还是隔离放大器,驱动芯片是 IR2110 还是隔离驱动。这些决定了你后面调 ADC 采样时的偏置和增益。
提示:如果原理图里没有标注采样电路的偏置电压,先别急着焊板。用万用表测一下采样电阻两端的静态电压,确认没有直流偏置再上电。
2.2 原理图里必须核对的 5 个关键网络
| 网络名称 | 作用 | 常见问题 |
|---|---|---|
| PV+ / PV- | 光伏输入 | 反接保护缺失 |
| BUS+ / BUS- | 直流母线 | 电容耐压不足 |
| AC_L / AC_N | 交流输出 | 采样点位置错误 |
| PWM_H / PWM_L | 驱动信号 | 死区时间未设置 |
| ADC_IN | 采样输入 | 偏置电压漂移 |
核对完这 5 个网络,再去看 DSP 的引脚分配。TMS320F28335 的 GPIO 复用功能很多,原理图上如果标了 EPWM1A、EPWM1B、ADCINA0 这些,说明作者已经做了引脚规划。你要做的是确认这些引脚在 PCB 上确实连到了对应的驱动和采样电路,而不是只看原理图符号。
2.3 从原理图到 PCB:布局布线的三个硬约束
原理图对了,PCB 不一定能跑。逆变器的 PCB 布局有三个硬约束:功率回路面积要小、采样信号要远离功率走线、地平面要分割合理。我一般会先看 PCB 的功率级布局:Boost 电感和全桥 MOS 管是否靠近,母线电容是否紧贴功率管,驱动电阻是否靠近 MOS 管栅极。如果这些器件离得很远,开关噪声会直接耦合到采样信号里,ADC 读出来的值会跳得你怀疑人生。
采样信号的走线要尽量短,并且用地线包起来。如果采样电阻的走线经过功率管下方,那基本可以判定这块板子需要改。地平面分割上,功率地和信号地要在单点连接,通常在母线电容的负极附近。如果 PCB 上把数字地和功率地混在一起,DSP 的 ADC 基准会被开关噪声拉偏,锁相环会失锁。
注意:拿到 PCB 文件后,先用设计规则检查一遍线宽和间距。功率走线至少 2mm 以上,采样走线 0.3mm 左右,驱动走线 0.5mm 左右。
3. DSP 软件源码怎么读:从 main 函数到中断服务程序
3.1 源码目录结构与初始化流程
TMS320F28335 的软件源码通常包含这几个部分:系统初始化、外设初始化、中断服务程序、控制算法和通信接口。打开源码先找 main 函数,看它调用了哪些初始化函数。常见的初始化顺序是:关中断、初始化 PLL、初始化 GPIO、初始化 ePWM、初始化 ADC、初始化定时器、开中断、进入主循环。
// main.c 典型初始化流程 void main(void) { InitSysCtrl(); // 系统时钟和 PLL 配置 DINT; // 关全局中断 InitGpio(); // GPIO 复用配置 InitEPwm(); // ePWM 模块初始化 InitAdc(); // ADC 模块初始化 InitCpuTimers(); // CPU 定时器初始化 InitInterrupts(); // 中断向量表配置 EINT; // 开全局中断 ERTM; // 开实时中断 while(1) { // 主循环:通信、状态机、保护逻辑 } }这段代码的关键在 InitEPwm 和 InitAdc。ePWM 的初始化决定了 PWM 频率和死区时间,ADC 的初始化决定了采样触发源和采样窗口。如果 ePWM 的周期寄存器设错,PWM 频率会偏;如果 ADC 的触发源选错,采样时刻会错过电流峰值。我一般会先确认 ePWM 的 TBCLK 分频和周期值,再确认 ADC 的 SOC 触发源是不是 ePWM 的 CTR_ZERO 或 CTR_PRD。
3.2 ePWM 模块配置:频率、死区和同步
TMS320F28335 的 ePWM 模块有 6 个通道,每个通道可以独立配置。逆变器控制里,通常用 EPWM1 和 EPWM2 生成全桥的 4 路 PWM,用 EPWM3 生成 Boost 的 PWM。配置 ePWM 时要设置这几个参数:时基周期、计数模式、比较值、死区时间、触发 ADC 的时刻。
// ePWM1 配置示例:20kHz PWM,死区 1us void InitEPwm1(void) { EPwm1Regs.TBPRD = 3750; // 150MHz / (2 * 3750) = 20kHz EPwm1Regs.TBPHS.half.TBPHS = 0; // 相位清零 EPwm1Regs.TBCTR = 0; // 计数器清零 EPwm1Regs.TBCTL.bit.CTRMODE = 2; // 增减计数模式 EPwm1Regs.TBCTL.bit.HSPCLKDIV = 0; EPwm1Regs.TBCTL.bit.CLKDIV = 0; EPwm1Regs.CMPA.half.CMPA = 1875; // 50% 占空比 EPwm1Regs.AQCTLA.bit.ZRO = 2; // 零点是置高 EPwm1Regs.AQCTLA.bit.PRD = 1; // 周期点是置低 EPwm1Regs.DBCTL.bit.OUT_MODE = 3; // 使能上升沿和下降沿延时 EPwm1Regs.DBRED = 150; // 上升沿死区 1us EPwm1Regs.DBFED = 150; // 下降沿死区 1us }TBPRD 的计算公式是:PWM 频率 = SYSCLKOUT / (2 * TBPRD)。如果 SYSCLKOUT 是 150MHz,要得到 20kHz,TBPRD 就是 3750。死区时间 DBRED 和 DBFED 的单位是 TBCLK 周期,150 对应 1us。死区时间设太小会直通炸管,设太大会畸变输出波形。我一般会先用示波器看驱动波形,确认死区在 1us 左右再上功率。
3.3 ADC 采样与中断服务程序
ADC 采样是逆变器控制的核心。TMS320F28335 的 ADC 有 16 个通道,可以配置成同步采样或顺序采样。逆变器里通常用两个 ADC 同时采样输出电压和输出电流,用 ePWM 的 CTR_ZERO 触发。中断服务程序里要做的事:读 ADC 结果、执行控制算法、更新 ePWM 比较值。
// ADC 中断服务程序示例 __interrupt void adc_isr(void) { float Vout, Iout, duty; Vout = AdcRegs.ADCRESULT0 * 3.0 / 4096.0; // 转换为电压 Iout = AdcRegs.ADCRESULT1 * 3.0 / 4096.0; // 转换为电流 duty = PI_Controller(Vout_ref, Vout); // PI 调节 EPwm1Regs.CMPA.half.CMPA = duty * EPwm1Regs.TBPRD; AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1; // 清除中断标志 PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; // 应答中断 }这段代码里,ADCRESULT0 和 ADCRESULT1 是 ADC 的结果寄存器,12 位精度对应 0 到 4095。转换成电压时要乘以参考电压 3.0V 再除以 4096。PI 控制器的输出是占空比,乘以 TBPRD 后写入 CMPA。中断标志清除和 PIE 应答缺一不可,否则中断只会进一次。
提示:如果 ADC 采样值跳动很大,先检查采样窗口时间是否足够。TMS320F28335 的 ADC 采样窗口至少需要 7 个 ADCCLK 周期。
4. 离网与并网模式切换:锁相环和继电器控制的避坑清单
4.1 并网锁相环的实现与调试
并网模式的核心是锁相环。逆变器输出的电流必须和电网电压同相位,否则会产生无功环流。TMS320F28335 里通常用软件锁相环,通过采样电网电压的过零点来计算相位。常见做法是:用 ADC 采样电网电压,经过数字滤波器后,用二阶广义积分器生成正交信号,再通过 Park 变换得到相位误差,最后用 PI 调节器锁定相位。
调试锁相环时,先不要接功率级,只给 DSP 供电,用信号发生器模拟电网电压。观察锁相环输出的相位和频率是否稳定。如果相位抖动超过 5 度,检查 ADC 采样是否同步,或者数字滤波器的截止频率是否太低。我一般会把锁相环的 PI 参数先设小一点,等相位稳定后再慢慢加大。
4.2 离网模式下的电压闭环控制
离网模式下,逆变器要自己建立电压和频率。控制策略是电压外环加电流内环。电压外环的输出作为电流内环的参考,电流内环的输出作为 SPWM 的调制波。TMS320F28335 的 ADC 采样输出电压,和参考正弦波比较后经过 PI 调节器,再和电感电流比较,最后生成 PWM。
离网模式最容易翻车的地方是空载和突加负载。空载时电压容易过冲,突加负载时电压容易跌落。解决方法是加前馈补偿,或者在 PI 调节器里加积分分离。我一般会在电压环里加一个负载电流前馈,这样突加负载时电压跌落会小很多。
4.3 模式切换的继电器时序与保护逻辑
离网和并网的切换靠继电器。并网前,逆变器要跟踪电网电压的相位和幅值,确认一致后才能闭合继电器。断开时,要先封 PWM 再断继电器,否则继电器触点会拉弧。TMS320F28335 的 GPIO 控制继电器,软件里要加延时和状态确认。
保护逻辑包括:过压保护、欠压保护、过流保护、孤岛保护。过流保护要最快,通常在 ADC 中断里直接比较,超过阈值立刻封 PWM。孤岛保护在并网模式下检测电网是否断电,常用主动移频法或被动检测法。如果保护逻辑没写好,并网时电网断电,逆变器会继续输出,这是很危险的。
5. 从源码到样机:上电调试的排查顺序与常见故障
5.1 上电前必须做的 3 项检查
上电前先做三项检查:电源短路检查、驱动波形检查、ADC 偏置检查。电源短路检查用万用表测 PV+ 和 PV- 之间的电阻,确认没有短路。驱动波形检查用示波器看 ePWM 输出,确认死区时间正确。ADC 偏置检查给 DSP 供电但不给功率级供电,读 ADC 值,确认在零附近。
// ADC 偏置检查代码 void CheckAdcOffset(void) { int i; float sum = 0; for(i = 0; i < 100; i++) { sum += AdcRegs.ADCRESULT0; DELAY_US(100); } float offset = sum / 100.0; if(offset > 50 || offset < -50) { // 偏置过大,检查采样电路 } }这段代码读 100 次 ADC 结果求平均,如果偏置超过 50 个码值,说明采样电路有问题。常见原因是运放偏置电压不对,或者采样电阻阻值偏差。
5.2 上电后先看什么:母线电压、驱动波形、输出波形
上电后先看母线电压。如果母线电压上不来,检查 Boost 电路和 PWM 驱动。母线正常后,看全桥输出波形。离网模式下,输出应该是正弦波;并网模式下,输出应该是和电网同相位的电流波形。如果波形畸变,检查死区时间和 PI 参数。
注意:第一次上电一定要用隔离变压器,不要直接接电网。隔离变压器可以限制短路电流,保护设备和人身安全。
5.3 常见故障排查表
| 现象 | 可能原因 | 解决方法 |
|---|---|---|
| 母线电压上不来 | Boost PWM 没输出 | 检查 ePWM 配置和驱动供电 |
| 输出波形畸变 | 死区时间过大 | 减小 DBRED 和 DBFED |
| ADC 采样跳动 | 采样窗口太短 | 增加 ADC 采样窗口时间 |
| 锁相环失锁 | 电网电压采样偏置 | 重新校准 ADC 偏置 |
| 继电器不吸合 | GPIO 配置错误 | 检查 GPIO 方向和驱动电路 |
这张表是我调试时最常用的。每次遇到问题,先对照这张表排查,能省很多时间。
6. 进阶技巧:用 ePWM 同步触发 ADC 和示波器抓波形
6.1 ePWM 同步触发 ADC 的配置细节
TMS320F28335 的 ePWM 可以触发 ADC 采样,触发源可以选 CTR_ZERO、CTR_PRD 或 CTR_CMPA。逆变器控制里,通常选 CTR_ZERO,这样采样时刻在 PWM 周期的开始,避开开关噪声。配置时要注意 ADC 的 SOC 触发源要和 ePWM 的触发输出对应。
// ePWM 触发 ADC 配置 EPwm1Regs.ETSEL.bit.SOCAEN = 1; // 使能 SOCA EPwm1Regs.ETSEL.bit.SOCASEL = 1; // CTR_ZERO 触发 EPwm1Regs.ETPS.bit.SOCAPRD = 1; // 每个周期触发一次 AdcRegs.ADCTRL2.bit.EPWM_SOCA_SEQ1 = 1; // 使能 ePWM SOCA 触发ETSEL 的 SOCASEL 设为 1 表示 CTR_ZERO 触发,ETPS 的 SOCAPRD 设为 1 表示每个周期触发一次。ADC 的 ADCTRL2 里要使能 EPWM_SOCA_SEQ1,这样 ePWM 的 SOCA 信号才能触发 ADC 序列。
6.2 用示波器抓 PWM 和 ADC 采样时刻
调试时,我习惯用示波器同时抓 PWM 驱动波形和 ADC 采样触发信号。把 ePWM 的 SOCA 输出映射到一个 GPIO,用示波器看这个 GPIO 和驱动波形的关系。如果 SOCA 在开关瞬间触发,采样值会包含开关噪声。调整 SOCASEL 到 CTR_ZERO 后,采样时刻会移到开关管关断期间,噪声会小很多。
6.3 一个我踩过的坑:ADC 采样窗口和 ePWM 死区的冲突
有一次调试,发现 ADC 采样值在死区期间跳动很大。后来发现是 ADC 采样窗口和 ePWM 死区重叠了。死区期间,上下管都关断,母线电压通过体二极管续流,采样电阻上的电压会突变。解决方法很简单:把 ADC 触发时刻从 CTR_ZERO 改到 CTR_PRD,或者增加采样窗口的延时。
这个坑我踩了两次才记住。后来我养成了一个习惯:每次改 ePWM 配置,先用示波器确认 ADC 采样时刻在开关管稳定导通或关断期间,再上功率。希望帮到你。
本文还有配套的精品资源,点击获取