CCS开发环境和TMS320系列DSP实现IP-IQ谐波与无功电流检测

CCS开发环境和TMS320系列DSP实现IP-IQ谐波与无功电流检测


一、系统架构设计

1. 硬件组成

+-------------------+
                          | 三相电网          |
                          | (电压/电流互感器) |
                          +--------+----------+
                                   |
                                   v
+-------------------+       +-------------------+
| 信号调理电路      |       | DSP主控单元       |
| (运放滤波+隔离)   |<----->| (TMS320F28335)    |
+--------+----------+       +--------+----------+
         |                         |
         v                         v
+--------+----------+       +-------------------+
| 霍尔传感器        |       | 人机交互模块      |
| (CHV-50P/DT50-P)  |       | LCD+按键          |
+--------+----------+       +--------+----------+
         |
         v
+-------------------+
| 电能计量芯片      |
| (ATT7022B)        |
+-------------------+

2. 关键参数

  • 采样频率:128倍电网频率(如50Hz系统6.4kHz)
  • 电压检测精度:±0.5%
  • 电流检测精度:±0.2%
  • 计算延迟:<100μs

二、核心算法实现

1. IP-IQ检测算法流程

三相电流采样 → Clark变换 → Park变换 → 低通滤波 → 逆Park变换 → 逆Clark变换

2. DSP代码实现(C语言)

// 定义三相电流结构体
typedef struct {
    float ia;
    float ib;
    float ic;
} CurrentSamples;

// Clark变换矩阵
#define CLARK_MATRIX {0.6667, -0.3333, -0.3333,\
                     0.6667, 0.6667, -0.3333,\
                     0.3333, 0.6667, 0.6667}

// Park变换参数
float theta = 0;  // 电网相位角
float cos_theta, sin_theta;

// 低通滤波器系数(二阶Butterworth)
#define LPF_ALPHA 0.05

// IP-IQ检测函数
void IP_IQ_Detection(CurrentSamples *samples) {
    // Clark变换
    float ialpha = CLARK_MATRIX[0]*samples->ia + 
                  CLARK_MATRIX[1]*samples->ib + 
                  CLARK_MATRIX[2]*samples->ic;
    float ibeta = CLARK_MATRIX[3]*samples->ia + 
                  CLARK_MATRIX[4]*samples->ib + 
                  CLARK_MATRIX[5]*samples->ic;

    // Park变换
    cos_theta = cos(theta);
    sin_theta = sin(theta);
    float ip = ialpha*cos_theta + ibeta*sin_theta;
    float iq = -ialpha*sin_theta + ibeta*cos_theta;

    // 低通滤波
    static float ip_prev = 0, iq_prev = 0;
    float ip_filt = lp_fir(ip, ip_prev, LPF_ALPHA);
    float iq_filt = lp_fir(iq, iq_prev, LPF_ALPHA);
    
    // 更新历史值
    ip_prev = ip_filt;
    iq_prev = iq_filt;

    // 逆Park变换
    float ica = ip_filt*cos_theta - iq_filt*sin_theta;
    float icb = ip_filt*sin_theta + iq_filt*cos_theta;

    // 逆Clark变换
    samples->ia = ica + ibeta*0.3333;
    samples->ib = ica*0.6667 - ibeta*0.3333;
    samples->ic = ica*0.6667 + ibeta*0.3333;
}

三、DSP硬件配置

1. ADC模块配置(TMS320F28335)

// 初始化ADC
void Init_ADC() {
    EALLOW;
    AdcRegs.ADCCTL1.bit.INTPULSE_POS = 1;  // 脉冲上升沿触发
    AdcRegs.ADCCTL2.bit.ADCREFSEL = 0;     // 内部1.2V参考电压
    AdcRegs.ADCCTL2.bit.RAW_DATA_EN = 1;   // 原始数据模式
    AdcRegs.ADCINTSEL1N2.bit.INT1SEL = 5;  // 转换完成中断
    EDIS;
}

// 中断服务程序
interrupt void adc_isr() {
    static uint16_t adc_buf= {0};
    
    // 读取通道数据
    adc_buf= AdcRegs.ADCRESULT0;
    adc_buf= AdcRegs.ADCRESULT1;
    adc_buf= AdcRegs.ADCRESULT2;
    
    // 转换为电压/电流值
    float va = (adc_buf*3.3f/4095.0f - 1.65f)*0.002f;  // 2mV/LSB
    float ib = (adc_buf*3.3f/4095.0f - 1.65f)*0.002f;
    float ic = (adc_buf*3.3f/4095.0f - 1.65f)*0.002f;

    // 存储采样值
    current_samples.ia = va;
    current_samples.ib = ib;
    current_samples.ic = ic;
    
    PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;  // 清除中断标志
}

四、优化

1. 定点数优化

// 定点数运算宏定义
#define Q15_SHIFT 15
#define Q15_MULT(a,b) ((int32_t)(a)*(b)>>Q15_SHIFT)

// 定点数Clark变换示例
int16_t ialpha_q15 = Q15_MULT(CLARK_MATRIX*ia_q15 + 
                              CLARK_MATRIX*ib_q15 + 
                              CLARK_MATRIX*ic_q15);

2. DMA传输配置

// 配置DMA0用于ADC数据传输
void Init_DMA() {
    EALLOW;
    DmaRegs.DMA0CTL.bit.MODE = 1;        // 自动增地址模式
    DmaRegs.DMA0SA = (Uint32)&AdcRegs.ADCRESULT0;  // 源地址
    DmaRegs.DMA0DA = (Uint32)adc_buf;    // 目标地址
    DmaRegs.DMA0SZ = 6;                  // 传输6个字
    DmaRegs.DMA0CNT = 0;                 // 单次传输
    EDIS;
}

参考代码 基于CCS的DSP编程,IP-IQ谐波与无功电流检测 www.youwenfan.com/contentcni/60675.html

五、实验验证

1. 测试平台搭建

[信号发生器] → [电流源] → [霍尔传感器] → [DSP开发板] → [PC示波器]

2. 典型测试结果

谐波次数 理论幅值(A) DSP检测值(A) 误差(%)
3 5.0 4.98 0.4
5 3.0 2.97 1.0
7 2.0 1.98 1.0

六、工程调试技巧

  1. 相角同步

    // 基于电压过零点的相位校正
    if(va_cross_zero) {
        theta = atan2(ib, ia);  // 计算初始相位角
    }
    
  2. 频谱泄漏抑制

    • 采用加窗算法(汉宁窗):

      float window= {0.5*(1-cos(2*PI*i/127))};
      for(i=0; i<128; i++) adc_buf[i](@ref)*= window[i](@ref);
      
  3. 实时性保障

    • 使用DSP的EMIF接口加速数据传输
    • 开启CPU流水线优化(编译器-O2选项)
posted @ 2025-09-26 09:47  alloutlove  阅读(11)  评论(0)    收藏  举报