4. 移植Park变换

任务目标

在FOC控制中,Park变换将两相静止坐标系(α/β轴)的电流转换为随转子磁场同步旋转的d/q轴电流,是实现电流解耦控制的核心步骤。本案例要求实现Park变换的C语言函数,并通过给定输入验证角度对齐关系:当输入角度θ=0时,d/q轴输出应与α/β轴输入一致;当θ=90°时,d轴输出应等于原β轴输入取负,q轴输出应等于原α轴输入。

核心实现

// park_transform.h
#ifndef PARK_TRANSFORM_H
#define PARK_TRANSFORM_H

#include <math.h>

typedef struct {
    float alpha;  // α轴电流 (A)
    float beta;   // β轴电流 (A)
} ClarkeOutput_t;

typedef struct {
    float d;      // d轴电流 (A)
    float q;      // q轴电流 (A)
} ParkOutput_t;

/**
 * @brief Park变换:静止α/β坐标系 → 旋转d/q坐标系
 * @param clarke  输入:Clarke变换后的α/β电流
 * @param theta   转子电角度 (rad)
 * @return ParkOutput_t 输出:d/q轴电流
 */
static inline ParkOutput_t Park_Transform(ClarkeOutput_t clarke, float theta) {
    ParkOutput_t result;
    float sin_theta = sinf(theta);
    float cos_theta = cosf(theta);
    
    result.d =  cos_theta * clarke.alpha + sin_theta * clarke.beta;
    result.q = -sin_theta * clarke.alpha + cos_theta * clarke.beta;
    return result;
}

#endif // PARK_TRANSFORM_H

验证代码

// test_park.c
#include <stdio.h>
#include <math.h>
#include "park_transform.h"

int main() {
    // 测试用例1:θ=0,d/q应等于α/β
    ClarkeOutput_t input1 = {3.0f, 4.0f};
    ParkOutput_t out1 = Park_Transform(input1, 0.0f);
    printf("θ=0°:  d=%.2f (期望3.00), q=%.2f (期望4.00)\n", out1.d, out1.q);
    
    // 测试用例2:θ=90°(π/2),d=-β, q=α
    ClarkeOutput_t input2 = {3.0f, 4.0f};
    ParkOutput_t out2 = Park_Transform(input2, M_PI/2.0f);
    printf("θ=90°: d=%.2f (期望-4.00), q=%.2f (期望3.00)\n", out2.d, out2.q);
    
    // 测试用例3:θ=45°,验证功率守恒(d²+q² = α²+β²)
    ClarkeOutput_t input3 = {1.0f, 2.0f};
    ParkOutput_t out3 = Park_Transform(input3, M_PI/4.0f);
    float input_mag2 = input3.alpha*input3.alpha + input3.beta*input3.beta;
    float output_mag2 = out3.d*out3.d + out3.q*out3.q;
    printf("θ=45°: d=%.2f, q=%.2f, 幅值平方=%.2f (期望%.2f)\n", 
           out3.d, out3.q, output_mag2, input_mag2);
    
    return 0;
}

编译与运行

gcc -o test_park test_park.c -lm
./test_park

验证方法

运行测试程序后,观察输出是否满足以下判定条件:

  • 角度对齐验证:θ=0°时,d=α且q=β,说明坐标系完全对齐;θ=90°时,d=-β且q=α,符合旋转坐标系的数学关系。
  • 幅值不变性:θ=45°时,输出d²+q²应等于输入α²+β²(误差在浮点精度范围内),证明变换保持矢量幅值。

若上述条件均满足,则Park变换实现正确,可用于后续FOC电流环的PI调节器输入。

α β d q θ i i·sinθ i·cosθ d轴 q轴 α/β轴

上图展示了Park变换的几何意义:电流矢量在静止α/β坐标系与旋转d/q坐标系之间的投影关系。d轴与转子磁链方向对齐,q轴超前d轴90°电角度。变换矩阵中的正弦/余弦项实现了坐标系的旋转对齐。