基于TMS320F28335 DSP的单相并网逆变器
一、系统架构与硬件配置
- 主控芯片
- TMS320F28335:32位浮点DSP,主频150MHz,集成ePWM、ADC、CAP等外设。
- 功率拓扑
- DC-DC级:Boost升压电路(输入48V光伏模拟,输出400V DC)。
- DC-AC级:单相全桥逆变电路,双极性SPWM调制。
- 关键外设
- ADC采样:12位精度,采集光伏电压/电流、电网电压、直流母线电压。
- ePWM模块:生成SPWM波,驱动H桥IGBT(死区时间通过DB模块配置)。
- eCAP模块:捕获电网电压过零点,实现软件锁相环(SPLL)。
二、核心算法实现
1. 最大功率点跟踪(MPPT)
采用扰动观察法(P&O),每100ms更新占空比:
// MPPT核心逻辑(perturb_and_observe.c)
void MPPT_Update(float V_pv, float I_pv) {
static float P_prev = 0, D_prev = 0.5;
float P_new = V_pv * I_pv;
float delta_D = 0.01; // 扰动步长
if (P_new > P_prev) {
// 功率增加则保持扰动方向
g_DutyCycle = (V_pv < V_ref) ? D_prev + delta_D : D_prev - delta_D;
} else {
// 功率减少则反转方向
g_DutyCycle = (V_pv < V_ref) ? D_prev - delta_D : D_prev + delta_D;
}
D_prev = g_DutyCycle;
P_prev = P_new;
EPwm_setDuty(EPWM1_BASE, g_DutyCycle * 100); // 更新Boost占空比
}
参数说明:
V_ref:MPPT目标电压(默认400V)- 保护机制:输入欠压(<30V)时暂停MPPT
2. 软件锁相环(SPLL)
实现电网同步,控制并网电流同频同相:
// SPLL实现(spll.c)
void SPLL_Run(float V_grid) {
static float theta = 0, error_prev = 0;
float error = (V_grid > 0) ? 0 : 1; // 过零检测
// PI调节器更新频率
float Kp = 0.1, Ki = 0.01;
float delta_theta = Kp * (error - error_prev) + Ki * error;
theta += delta_theta;
// 生成单位正弦表
g_SinTable[g_index] = sinf(theta);
g_index = (g_index + 1) % TABLE_SIZE;
error_prev = error;
}
3. 电流环控制(重复控制器)
抑制周期性谐波,提升THD性能:
// 重复控制器(repetitive_control.c)
void RC_Update(float I_grid, float I_ref) {
static float error_buf[RC_BUF_SIZE] = {0};
static int ptr = 0;
float error = I_ref - I_grid;
error_buf[ptr] = error; // 存储误差
// 累加历史周期误差
float sum = 0;
for (int i = 0; i < RC_BUF_SIZE; i++) {
sum += error_buf[i];
}
g_I_control_out = K_rc * sum; // 重复控制输出
ptr = (ptr + 1) % RC_BUF_SIZE;
}
参考 基于2833的单相并网逆变器源程序 www.youwenfan/contentcna/70772.html
三、关键外设驱动配置
1. ePWM生成SPWM
配置步骤:
// ePWM初始化(epwm_config.c)
void EPWM_Init() {
EPwm_setTimeBase(EPWM1_BASE, 0, 3000); // 载波频率10kHz (150MHz/3000)
EPwm_setActionQualifier(EPWM1_BASE,
EPWM_AQ_OUTPUT_HIGH, // 计数增时高电平
EPWM_AQ_OUTPUT_LOW, // 计数减时低电平
EPWM_AQ_OUTPUT_TOGGLE // 对称模式
);
EPwm_enableDeadBand(EPWM1_BASE, 100); // 死区时间100ns
}
2. ADC采样优化
-
电路设计:霍尔传感器 → 二阶滤波 → 电平抬升(-1.5V~1.5V → 0~3V)。
-
软件校准:采用FFT算法消除直流偏置及谐波干扰:
float FFT_Calibrate(float adc_raw) { arm_cfft_radix4_instance_f32 fft_inst; arm_cfft_radix4_init_f32(&fft_inst, FFT_SIZE, 0, 1); arm_cfft_radix4_f32(&fft_inst, fft_input); // 执行FFT fft_input[0] = 0; // 清除直流分量 arm_cfft_radix4_f32(&fft_inst, fft_input, 1); // 逆变换 return fft_input[0]; }
四、保护机制与故障处理
- 硬件保护
- 过流保护:电流>20A时触发PWM刹车(ePWM的TZ模块)。
- 过温保护:NTC测温 >85℃时关闭驱动。
- 软件容错
- 电网掉电检测:连续5周期无过零信号 → 切换至离网模式。
- 自恢复逻辑:故障清除后自动复位PWM输出。
五、人机交互与监控
1. TFT液晶显示
CPLD驱动4.3寸屏,实时显示参数:
- 波形:电网电压/电流波形、频谱。
- 参数:输入/输出功率、效率、THD、相位差。
2. 上位机通信
基于VB开发的上位机,通过SCI接收数据:
// 数据帧格式(0xAA起始,0x55结束)
#pragma pack(1)
typedef struct {
uint16_t header;
float V_pv, I_pv, P_out;
uint8_t status; // 故障标志
uint16_t checksum;
uint8_t footer;
} Telemetry_Frame;
六、工程资源与调试建议
-
源码结构
DSP2833x_Project/ ├── Libraries/ # DSP2833x外设库 ├── MPPT/ # MPPT算法 ├── SPLL/ # 锁相环实现 ├── Inverter_Control/ # 电流环控制器 ├── Drivers/ # ePWM/ADC驱动 ├── Display/ # TFT液晶驱动 └── main.c # 主状态机 -
关键调试技巧
- SPWM波形验证:用示波器测量EPWM1A/1B引脚,确保死区时间无重叠。
- 锁相精度测试:对比电网电压过零与CAP捕获中断时间差(应<50μs)。

浙公网安备 33010602011771号