SVG 静止无功发生器 DSP 程序代码解析与核心模块功能详解
详细解析了基于 TI C28335 DSP 芯片的 SVG 静止无功发生器控制程序。内容涵盖 FPU 快速运算、PWM 波形生成、ADC 数据采集、DMA 传输及中断控制等核心模块。文章阐述了系统初始化流程、实时控制逻辑及数据传输机制,强调了高实时性与可靠性设计,适用于电网无功补偿及谐波治理场景。

详细解析了基于 TI C28335 DSP 芯片的 SVG 静止无功发生器控制程序。内容涵盖 FPU 快速运算、PWM 波形生成、ADC 数据采集、DMA 传输及中断控制等核心模块。文章阐述了系统初始化流程、实时控制逻辑及数据传输机制,强调了高实时性与可靠性设计,适用于电网无功补偿及谐波治理场景。

本文档基于 SVG(静止无功发生器)的 DSP 程序代码,对其核心功能、模块架构、关键流程及技术细节进行全面解析。该代码基于 TI C28335 DSP 芯片开发,涵盖了 FPU 快速运算、PWM 生成、ADC 采集、DMA 数据传输、中断控制等核心功能模块,是 SVG 设备实现无功补偿、谐波治理的核心控制软件基础。
代码包包含 119 个文件,核心代码集中在 SVG_DSP0109 目录下,其中 INCLUDE 文件夹中的头文件定义了底层硬件抽象、寄存器映射、函数原型等关键接口,为上层控制算法提供了稳定、高效的硬件操作支撑。本文将重点围绕核心头文件展开,解析各模块的功能定位、接口设计及协同工作机制。
该文件定义了 C28x DSP 的标准数据类型,确保跨文件数据类型一致性,适配 FPU(浮点运算单元)的运算需求:
typedef int int16; // 16 位有符号整数
typedef long int32; // 32 位有符号整数
typedef long long int64; // 64 位有符号整数
typedef unsigned int Uint16; // 16 位无符号整数
typedef unsigned long Uint32; // 32 位无符号整数
typedef unsigned long long Uint64; // 64 位无符号整数
typedef float float32; // 32 位浮点数(FPU 核心运算类型)
typedef long double float64; // 64 位浮点数
提供了 FPU 优化的核心数学函数,相比标准 RTS 库运算速度提升 30% 以上,适用于 SVG 实时控制场景:
float32 isqrt(float32 X):快速平方根运算,用于电压、电流幅值计算等场景。void sincos(float32 radian, float32 *PtrSin, float32* PtrCos):同步计算正弦和余弦值,核心用于 ABC-DQ 坐标变换、SVPWM(空间矢量脉宽调制)算法实现。PWM 模块是 SVG 的核心输出单元,负责生成驱动功率器件(如 IGBT)的 PWM 波形,实现无功电流的精确控制。
#define CON_PWM_PERIOD 0x927 // PWM 周期配置(十进制 2343),对应 SVG 典型开关频率需求
| 函数名 | 功能描述 | 应用场景 |
|---|---|---|
InitePWM(void) | 初始化 PWM 模块,包括周期、死区、触发方式配置 | 系统启动时初始化 |
EPwm_Start(void) | 启动 PWM 输出 | 系统就绪后启动功率输出 |
EPwm_Stop(void) | 停止 PWM 输出 | 故障保护或停机时 |
EPwm_Sync(void) | 多通道 PWM 同步 | 三相桥臂 PWM 相位同步 |
DSP2833x_EPwm.h 定义了 PWM 模块的完整寄存器映射,核心配置包括:
DSP2833x_EPwm_defines.h 提供了配置宏定义,简化开发:
#define TB_COUNT_UPDOWN 0x2 // 增减计数模式(适用于对称 PWM 波形)
#define AQ_SET 0x2 // 输出置 1
#define AQ_CLEAR 0x1 // 输出清 0
#define DB_FULL_ENABLE 0x3 // 使能完整死区控制
ADC 模块负责采集 SVG 系统的关键模拟信号,包括电网电压、负载电流、直流母线电压等,为控制算法提供反馈数据。
采用'结构体 + 联合体'设计,支持位操作和整体操作:
// ADC 控制寄存器 1 位定义
struct ADCTRL1_BITS {
Uint16 rsvd1:4; // 保留
Uint16 SEQ_CASC:1; // 级联序列器模式(SEQ1 和 SEQ2 级联为 16 通道)
Uint16 SEQ_OVRD:1; // 序列器覆盖模式
Uint16 CONT_RUN:1; // 连续运行模式
Uint16 CPS:1; // ADC 核心时钟分频
Uint16 ACQ_PS:4; // 采样窗口大小(1-16 个 ADC 时钟周期)
Uint16 SUSMOD:2; // 仿真挂起模式
Uint16 RESET:1; // ADC 复位
Uint16 rsvd2:1; // 保留
};
union ADCTRL1_REG {
Uint16 all; // 整体操作
struct ADCTRL1_BITS bit; // 位操作
};
DMA(直接内存访问)模块用于 ADC 采集数据的高速传输,避免 CPU 干预,提升系统实时性。
#define DMA_SEQ1INT 1 // ADC 序列 1 完成触发 DMA
#define CONT_ENABLE 0x1 // 连续传输模式
#define THIRTYTWO_BIT 0x1 // 32 位数据传输
#define CHINT_END 0x1 // 传输结束触发中断
以通道 1 为例:
// 配置 DMA 通道 1 地址(源:ADC 结果寄存器,目的:数据缓冲区)
void DMACH1AddrConfig(volatile Uint16 *DMA_Dest, volatile Uint16 *DMA_Source);
// 配置 burst 传输参数(burst 大小、源/目的步长)
void DMACH1BurstConfig(Uint16 bsize, int16 srcbstep, int16 desbstep);
// 配置传输模式(触发源、中断使能等)
void DMACH1ModeConfig(Uint16 persel, Uint16 perinte, Uint16 oneshot, Uint16 cont, Uint16 synce, Uint16 syncsel, Uint16 ovrinte, Uint16 datasize, Uint16 chintmode, Uint16 chinte);
// 启动 DMA 通道 1
void StartDMACH1(void);
中断模块负责处理系统各类中断事件,确保实时响应,包括 ADC 采集完成、PWM 周期中断、故障保护中断等。
| 中断函数 | 触发源 | 功能描述 |
|---|---|---|
SEQ1INT_ISR(void) | ADC 序列 1 采集完成 | 处理 ADC 采集数据,如滤波、标幺化 |
EPWM1_INT_ISR(void) | EPWM1 周期结束 | 执行控制算法,更新 PWM 比较值 |
TINT0_ISR(void) | 定时器 0 溢出 | 系统定时任务,如状态监测、通信周期 |
XINT1_ISR(void) | 外部中断 1 | 故障输入中断(如过流、过压) |
InitPieCtrl(void))。InitPieVectTable(void))。EINT)和 PIE 全局中断(EnableInterrupts(void))。系统控制模块负责 DSP 的核心配置,包括时钟、电源管理、外设使能等。
#define DSP28_28335 TARGET // 目标芯片为 TMS320F28335
#define DSP28_28334 0
#define DSP28_28332 0
#define EINT asm(" clrc INTM") // 使能 CPU 全局中断
#define DINT asm(" setc INTM") // 禁止 CPU 全局中断
#define EALLOW asm(" EALLOW") // 允许修改受保护寄存器
#define EDIS asm(" EDIS") // 禁止修改受保护寄存器
#define ESTOP0 asm(" ESTOP0") // 仿真停止
通过 InitSysCtrl(void) 初始化系统时钟,C28335 支持最高 150MHz 核心时钟,SVG 系统中通常配置为 150MHz,确保控制算法实时性。
graph TD
A[系统上电] --> B[初始化系统控制(InitSysCtrl)]
B --> C[初始化 GPIO(InitGpio)]
C --> D[初始化 PWM 模块(InitePWM)]
D --> E[初始化 ADC 模块(InitAdc)]
E --> F[初始化 DMA 模块(DMAInitialize)]
F --> G[初始化中断控制器(InitPieCtrl+InitPieVectTable)]
G --> H[使能中断(EnableInterrupts)]
H --> I[启动 PWM(EPwm_Start)]
I --> J[系统进入运行状态]
graph TD
A[PWM 周期中断触发] --> B[读取 DMA 传输的 ADC 数据]
B --> C[数据预处理(滤波、标幺化、坐标变换)]
C --> D[执行控制算法(无功电流计算、PI 调节)]
D --> E[更新 PWM 比较值]
E --> F[故障检测(过流、过压、过温)]
F -->|无故障 | A
F -->|有故障 | G[执行保护逻辑(EPwm_Stop)]
ADC 采集数据通过 DMA 直接传输至数据缓冲区,无需 CPU 干预,流程如下:
EALLOW/EDIS 宏控制受保护寄存器访问,防止误操作。该代码适用于中低压 SVG 静止无功发生器,核心适配场景:
适配功率等级:100kVA~10MVA(通过调整 PWM 周期、电流采样范围可灵活配置)。
本 SVG DSP 程序代码基于 TI TMS320F28335 芯片,通过模块化设计实现了 PWM 波形生成、ADC 数据采集、DMA 高速传输、中断实时控制等核心功能,具备高实时性、高可靠性和良好的可扩展性。代码严格遵循工业级嵌入式开发规范,通过硬件加速和并行处理确保 SVG 系统的动态响应性能,可作为中低压 SVG 设备的核心控制软件基础,也可根据具体应用场景进行二次开发和优化。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML 转 Markdown 互为补充。 在线工具,Markdown 转 HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML 转 Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online