4. Clark变换实现

任务目标

本案例实现FOC算法中的Clark变换,将三相静止坐标系下的电流 \(i_a, i_b, i_c\) 变换到两相静止坐标系 \(\alpha\beta\) 轴。要求代码可直接运行,并通过给定输入验证变换公式的正确性。

变换公式

等幅值Clark变换(系数2/3)定义如下:

\[ 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) \]

对于平衡三相系统(\(i_a + i_b + i_c = 0\)),可简化为 \(i_\alpha = i_a\),但本实现保留通用形式以处理非平衡情况。

代码实现

import math

def clark_transform(ia, ib, ic):
    """
    等幅值Clark变换:三相电流 -> αβ轴电流
    参数: ia, ib, ic — 三相电流值(A)
    返回: (i_alpha, i_beta)
    """
    i_alpha = (2.0 / 3.0) * (ia - 0.5 * ib - 0.5 * ic)
    i_beta = (2.0 / 3.0) * (math.sqrt(3) / 2.0 * ib - math.sqrt(3) / 2.0 * ic)
    return i_alpha, i_beta

# 验证用例:三相对称电流,幅值1A,相位0°
# 此时 ia=1, ib=-0.5, ic=-0.5
ia, ib, ic = 1.0, -0.5, -0.5
alpha, beta = clark_transform(ia, ib, ic)

print(f"输入: ia={ia:.3f}, ib={ib:.3f}, ic={ic:.3f}")
print(f"输出: i_alpha={alpha:.4f}, i_beta={beta:.4f}")

# 验证:反变换回三相(仅用于自检)
def inverse_clark(alpha, beta):
    ia_inv = alpha
    ib_inv = -0.5 * alpha + (math.sqrt(3) / 2.0) * beta
    ic_inv = -0.5 * alpha - (math.sqrt(3) / 2.0) * beta
    return ia_inv, ib_inv, ic_inv

ia_r, ib_r, ic_r = inverse_clark(alpha, beta)
print(f"反变换验证: ia={ia_r:.4f}, ib={ib_r:.4f}, ic={ic_r:.4f}")

运行方式

将上述代码保存为 clark_transform.py,在Python 3环境中执行:

python clark_transform.py

验证方法与判定标准

本案例使用三相对称电流 \(i_a=1, i_b=-0.5, i_c=-0.5\)(幅值1A,相位0°)作为输入。根据Clark变换公式,预期输出为:

  • i_alpha = 1.0000(与 \(i_a\) 相同,符合平衡系统特性)
  • i_beta = 0.0000(因为 \(i_b = i_c\),β轴分量为零)

程序同时执行反变换,将 \(\alpha\beta\) 结果还原为三相电流。若反变换结果与原始输入一致(误差在浮点精度范围内),则证明正变换公式实现正确。

通过条件:程序输出中 i_alpha≈1.0000、i_beta≈0.0000,且反变换后的 ia, ib, ic 与输入值误差小于1e-6。

预期输出

输入: ia=1.000, ib=-0.500, ic=-0.500
输出: i_alpha=1.0000, i_beta=0.0000
反变换验证: ia=1.0000, ib=-0.5000, ic=-0.5000

该输出由代码逻辑直接唯一推出,可用于核对运行结果是否正确。