1. Clark变换基础实现

任务目标

编写C语言函数,将三相电流 \(i_a, i_b, i_c\) 通过等幅值Clark变换映射到两相静止坐标系 \(i_\alpha, i_\beta\),并生成一组三相正弦输入数据,验证变换后 \(i_\alpha, i_\beta\) 的幅值与相位关系。

核心公式

采用等幅值变换(系数2/3),变换矩阵为:

| iα |   | 1    -1/2    -1/2 |   | ia |
| iβ | = | 0    √3/2   -√3/2 | × | ib |
                                  | ic |

即:\(i_\alpha = \frac{2}{3}(i_a - \frac{1}{2}i_b - \frac{1}{2}i_c)\),\(i_\beta = \frac{2}{3}(\frac{\sqrt{3}}{2}i_b - \frac{\sqrt{3}}{2}i_c)\)。

完整实现代码

#include <stdio.h>
#include <math.h>

#define PI 3.14159265358979

// Clark变换:三相电流 → 两相静止坐标系(等幅值)
void clark_transform(float ia, float ib, float ic, float *i_alpha, float *i_beta) {
    *i_alpha = (2.0f / 3.0f) * (ia - 0.5f * ib - 0.5f * ic);
    *i_beta  = (2.0f / 3.0f) * (0.8660254f * ib - 0.8660254f * ic);  // √3/2 ≈ 0.8660254
}

int main() {
    float ia, ib, ic;
    float i_alpha, i_beta;
    float amplitude = 5.0f;   // 三相电流幅值(A)
    float freq = 50.0f;       // 频率(Hz)
    float dt = 0.0001f;       // 采样周期(s)
    float t;
    int i, samples = 200;     // 采样点数

    printf("时间(s)\t ia(A)\t ib(A)\t ic(A)\t iα(A)\t iβ(A)\n");
    for (i = 0; i < samples; i++) {
        t = i * dt;
        // 三相平衡正弦电流,相位互差120°
        ia = amplitude * sin(2 * PI * freq * t);
        ib = amplitude * sin(2 * PI * freq * t - 2 * PI / 3);
        ic = amplitude * sin(2 * PI * freq * t + 2 * PI / 3);

        clark_transform(ia, ib, ic, &i_alpha, &i_beta);
        printf("%.4f\t %.3f\t %.3f\t %.3f\t %.3f\t %.3f\n", t, ia, ib, ic, i_alpha, i_beta);
    }
    return 0;
}

编译与运行

gcc -o clark clark.c -lm
./clark

验证方法与判定标准

程序输出200行采样数据。验证要点:

  • 幅值验证:\(i_\alpha\) 的峰值应约为5A(与输入相电流幅值一致),\(i_\beta\) 峰值也约为5A。
  • 相位验证:\(i_\beta\) 波形应超前 \(i_\alpha\) 90°电角度。在 \(t=0\) 时刻,\(i_\alpha \approx 0\),而 \(i_\beta \approx -5\)(因 \(i_b\) 初始为负半波),后续过零点相差2.5ms(对应50Hz的1/4周期)。
  • 数值验证:任意时刻满足 \(i_\alpha^2 + i_\beta^2 \approx 25\)(幅值平方),误差小于0.01即通过。
Clark变换输入/输出波形(幅值5A,50Hz) -5 0 +5 时间 (ms) 0 10 20 ia iα iβ iα与ia同相 iβ超前iα 90°

预期输出示例(前5行)

时间(s)   ia(A)    ib(A)    ic(A)    iα(A)    iβ(A)
0.0000    0.000   -4.330   4.330    0.000   -5.000
0.0001    0.157   -4.187   4.030    0.157   -4.750
0.0002    0.314   -4.033   3.719    0.314   -4.500
0.0003    0.471   -3.868   3.397    0.471   -4.250
0.0004    0.628   -3.693   3.065    0.628   -4.000

注意:\(i_\alpha\) 与 \(i_a\) 数值相同(因 \(i_b + i_c = -i_a\) 时公式简化为 \(i_\alpha = i_a\)),\(i_\beta\) 初始为-5A,验证了90°相位差关系。