1. 项目概述:三相PFC数字控制的核心价值
在工业电源和新能源发电领域,三相功率因数校正(PFC)技术是提升电能质量的关键手段。传统模拟控制方案存在参数调整困难、抗干扰能力弱等缺陷,而基于TMS320F28335的数字控制方案通过软件算法实现了高精度、高灵活性的控制。这款TI的32位浮点DSP芯片,凭借150MHz主频和硬件PWM/ADC外设,为实时控制提供了理想的硬件平台。
实际工程中,我们常遇到电网谐波超标、动态响应慢等问题。通过本文介绍的代码框架,开发者可以快速实现THD<5%、功率因数>0.99的高性能PFC系统。方案特别适用于电动汽车充电桩、工业变频器等对电能质量要求严格的场景。
2. 硬件平台搭建与初始化
2.1 TMS320F28335最小系统设计
硬件设计需重点关注电源、时钟和信号链三大子系统:
- 电源电路:采用TPS767D301双路LDO,分别提供3.3V(数字)和1.9V(内核)电压。注意在每路电源引脚放置10μF+0.1μF去耦电容组合
- 时钟电路:外部30MHz晶振配合内部PLL倍频至150MHz。建议在OSCIN/OSCOUT引脚串联22Ω电阻抑制振铃
- 信号调理:电流采样推荐使用LEM公司的LAH-50P霍尔传感器,输出电压经RC滤波(R=1kΩ, C=100nF)后接入ADC
关键提示:GPIO复用配置必须在EALLOW/EDIS指令对之间完成,否则寄存器保护机制会导致配置失效
2.2 外设初始化代码详解
系统时钟配置需要计算PLL参数:
c复制// PLL配置公式:SYSCLK = (XTAL_OSC × PLLCR.DIV) / (PLLSTS.DIVSEL × 2)
InitPllSys(150, 10, 1, 0); // 目标150MHz,输入30MHz
其中参数对应:
- 150:期望系统频率(MHz)
- 10:PLL倍频系数(实际写入PLLCR寄存器)
- 1:分频选择(PLLSTS.DIVSEL)
- 0:保留参数
ePWM模块的死区时间计算示例:
c复制// 死区时间 = DBFED值 × TBCLK周期
// 假设TBCLK=150MHz/1=150MHz → 周期6.67ns
EPwm1Regs.DBCTL.bit.DBFED = 150; // 150×6.67ns≈1μs
3. 关键算法实现与优化
3.1 双闭环控制策略解析
电压外环采用增量式PI算法,避免积分饱和:
c复制float Voltage_PI_Control(PI_Controller *pi, float Vref, float Vdc) {
float error = Vref - Vdc;
float delta = pi->Kp*(error - pi->last_error) + pi->Ki*error;
pi->last_error = error;
// 输出限幅
if(pi->output + delta > pi->output_max)
return pi->output_max;
if(pi->output + delta < -pi->output_max)
return -pi->output_max;
pi->output += delta;
return pi->output;
}
参数整定经验:
- Kp初始值取0.1×(输出最大值/误差最大值)
- Ki取Kp值的1/10~1/5
- 采样周期建议1ms(对应10kHz PWM)
3.2 改进型PR控制器设计
传统PR控制器在电网频率偏移时性能下降,建议采用准PR结构:
c复制float K = 2*Kr*alpha*omega_c;
float den = s*s + 2*alpha*omega_c*s + omega0*omega0;
Gpr(s) = Kp + K*s / den; // 离散化后实现
其中:
- ωc:截止频率(取5~10rad/s)
- α:阻尼系数(0.5~1)
- ω0:电网角频率(314rad/s @50Hz)
实测表明,该方法在±2Hz频率波动时仍能保持>30dB的增益。
4. 实时中断处理优化
4.1 ADC采样同步机制
为消除通道间采样延迟,需配置同步采样模式:
c复制AdcRegs.ADCCTL1.bit.SIMULEN = 1; // 同步采样使能
AdcRegs.ADCSOC0CTL.bit.TRIGSEL = 5; // 全部通道由ePWM1触发
关键时序参数:
- ACQPS=14对应采样时间:(14+1)×ADCCLK=1.25μs @12MHz
- 建议在PWM周期中点触发采样,避开开关噪声
4.2 中断服务程序(ISR)优化技巧
为缩短中断响应时间,推荐采用以下方法:
- 将ISR代码定位到RAM执行(默认在Flash会引入等待周期)
c复制#pragma CODE_SECTION(Adc_isr, "ramfuncs");
- 使用编译器优化选项:
makefile复制CFLAGS += -O2 --opt_for_speed=5
- 关键变量声明为volatile防止被优化:
c复制volatile uint16_t *AdcResult = (uint16_t *)&AdcRegs.ADCRESULT0;
5. 保护机制与故障处理
5.1 三级保护系统设计
| 保护级别 | 触发条件 | 响应时间 | 恢复方式 |
|---|---|---|---|
| 软件保护 | 电流>120% | <100μs | 自动复位 |
| 硬件比较器 | 电流>150% | <500ns | 手动复位 |
| 熔断器 | 电流>300% | <10ms | 更换器件 |
TZ模块配置要点:
c复制EPwm1Regs.TZSEL.bit.OSHT1 = 1; // 单次触发模式
EPwm1Regs.TZCTL.bit.TZA = TZ_FORCE_HI; // 故障时强制高电平
EPwm1Regs.TZFRC.bit.OST = 1; // 手动触发测试
5.2 故障录波实现
在TZ中断中保存关键变量有助于故障分析:
c复制__interrupt void EPwm_TZ_ISR(void) {
fault_log.voltage = AdcResult.ADCRESULT0;
fault_log.current = AdcResult.ADCRESULT1;
fault_log.timestamp = EPwm1Regs.TBCTR;
...
}
建议使用非易失性存储器(如FRAM)存储最后10次故障记录。
6. 系统调试与性能优化
6.1 关键测试点与波形分析
调试阶段建议监测以下信号:
- PWM驱动波形(测试点:MOSFET栅极)
- 上升时间:<100ns
- 振铃幅度:<20%Vgs
- 电流采样波形(测试点:ADC输入)
- THD:<3%
- 相位延迟:<5°
使用CCS的Graph工具实时显示变量:
c复制#pragma DATA_SECTION(Ia_wave, "IQmathTables")
float Ia_wave[256]; // 用于存储电流波形
6.2 效率优化措施
通过以下方法可提升0.5%~1%效率:
- 死区时间动态调整:
c复制if(Irms < 0.2*Inominal)
deadtime = 1μs;
else
deadtime = 0.5μs;
- 开关频率自适应:
c复制if(Vin < 100V)
fsw = 20kHz; // 轻载时降低损耗
else
fsw = 10kHz;
7. 工程实践经验分享
7.1 常见问题排查指南
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 电流波形畸变 | 采样不同步 | 检查ADC触发信号与PWM对齐 |
| 直流电压振荡 | PI参数不当 | 减小Ki或增加电压环带宽 |
| 启动冲击电流 | 软启动未启用 | 添加5ms线性递增的Vref |
7.2 电磁兼容(EMC)设计要点
-
PCB布局规范:
- 功率地与信号地单点连接
- 电流采样走线采用差分对
- PWM输出串联10Ω电阻+铁氧体磁珠
-
软件滤波技术:
c复制// 滑动平均滤波
float filtered = 0.9f*filtered + 0.1f*raw_adc;
在最近某充电桩项目中,通过上述方法顺利通过EN 61000-4-5浪涌测试(4kV组合波)。