Clark 变换与反 Clark 变换

Clark 变换(又称为 3/2 变换)是电机控制(尤其是 FOC 磁场定向控制)中的基础数学工具,用于将三相静止坐标系(A-B-C)中的变量变换到两相静止坐标系(α-β)中。


一、Clark 变换(3相 → 2相)

1. 变换目的

将三相电流/电压 (i_a, i_b, i_c) 分解为两个垂直分量:

  • i_α:与 A 轴对齐

  • i_β:超前 i_α 90°

2. 变换公式

前提条件 :三相平衡系统满足 i_a + i_b + i_c = 0

标准形式

复制代码
i_α = i_a
i_β = (i_a + 2i_b) / √3

或写成矩阵形式:

复制代码
[ i_α ]   [ 1      -1/2    -1/2  ] [ i_a ]
[ i_β ] = [ 0      √3/2   -√3/2 ] [ i_b ]
[ i_0 ]   [ 1/2    1/2     1/2  ] [ i_c ]

功率不变形式(常用):

复制代码
i_α = (2/3) * (i_a - 0.5*i_b - 0.5*i_c)
i_β = (2/3) * ( (√3/2)*i_b - (√3/2)*i_c )
3. 代码实现(浮点)
复制代码
void clark_transform(float i_a, float i_b, float i_c, float *i_alpha, float *i_beta)
{
    // 功率不变形式
    *i_alpha = (2.0f/3.0f) * (i_a - 0.5f*i_b - 0.5f*i_c);
    *i_beta  = (2.0f/3.0f) * ((SQRT3_2)*i_b - (SQRT3_2)*i_c);
    
    // 或简化形式(需要 i_a + i_b + i_c = 0)
    // *i_alpha = i_a;
    // *i_beta  = (i_a + 2.0f*i_b) / SQRT3;
}

二、反 Clark 变换(2相 → 3相)

1. 变换目的

将两相静止坐标系(α-β)中的变量还原为三相变量。

2. 变换公式
复制代码
i_a = i_α
i_b = -0.5 * i_α + (√3/2) * i_β
i_c = -0.5 * i_α - (√3/2) * i_β
3. 代码实现
复制代码
void inverse_clark_transform(float i_alpha, float i_beta, float *i_a, float *i_b, float *i_c)
{
    *i_a = i_alpha;
    *i_b = -0.5f * i_alpha + SQRT3_2 * i_beta;
    *i_c = -0.5f * i_alpha - SQRT3_2 * i_beta;
}

三、Clark 与 Park 的关系

在 FOC 控制中,Clark 和 Park 变换通常串联使用:

复制代码
三相电流 (A,B,C)
    ↓ Clark 变换
两相静止 (α, β)
    ↓ Park 变换 (需要转子角度 θ)
两相旋转 (d, q)  ← 用于 PI 控制
  • Clark:消除三相的冗余,减少一维

  • Park:将交流量变为直流量,便于控制


四、常规定义常量

复制代码
#define SQRT3       1.73205080757f   // √3
#define SQRT3_2     0.86602540378f   // √3/2
#define INV_SQRT3   0.57735026919f   // 1/√3
#define TWO_THIRD   0.66666666667f   // 2/3

五、完整示例(FOC 电流采样处理)

复制代码
// ADC 采样得到的三相电流
float ia = read_current_A();
float ib = read_current_B();
float ic = read_current_C();

// Step 1: Clark 变换 → αβ 坐标系
float i_alpha, i_beta;
clark_transform(ia, ib, ic, &i_alpha, &i_beta);

// Step 2: Park 变换 → dq 坐标系(需要角度 theta)
float id, iq;
park_transform(i_alpha, i_beta, theta, &id, &iq);

// Step 3: PI 控制
vd = pi_id_control(id_ref, id);
vq = pi_iq_control(iq_ref, iq);

// Step 4: 反 Park 变换
float v_alpha, v_beta;
inverse_park_transform(vd, vq, theta, &v_alpha, &v_beta);

// Step 5: 反 Clark 变换 → 三相电压
float va, vb, vc;
inverse_clark_transform(v_alpha, v_beta, &va, &vb, &vc);

// Step 6: 输出到 PWM 模块
set_pwm_duty(va, vb, vc);

六、注意事项

要点 说明
三相平衡假设 Clark 变换要求 i_a + i_b + i_c = 0,否则需要计算零序分量 i_0
功率不变 vs 幅值不变 注意区分两种变换系数(2/3 还是 1),与 Park 变换保持一致
浮点精度 电机控制建议使用 floatdouble 可能过慢
快速实现 可查表或使用定点数优化 SQRT3_2 乘法
相关推荐
sakiko_1 天前
Swift学习笔记42-SwiftUI的属性包装器(讲解+面试)
笔记·学习·ios·swiftui·swift
自小吃多1 天前
器件移动、旋转、镜像、对齐、等间距操作笔记
笔记·嵌入式硬件
存在morning1 天前
【Paimon 学习笔记 三】工作流程:Paimon 的批写、流写、批读与流读
笔记·学习
老当益壮梁奶奶1 天前
Linux软件编程学习笔记(八):进程间通信详解(1)
linux·c语言·笔记·学习·算法
weixin_466068111 天前
《十分钟冥想》精读笔记(上):每天10分钟,给大脑做一次“系统减负”
笔记
凯尔萨厮1 天前
Java学习笔记十(注解)
java·笔记·学习
一条破秋裤1 天前
STM32 学习笔记:GPIO 输出实验——LED 闪烁、流水灯与蜂鸣器
笔记·stm32·学习
存在morning1 天前
【Paimon 学习笔记 二】存储架构:快照、manifest、LSM 树、bucket
笔记·学习·架构
双眼鈹1 天前
周报8.31
笔记·学习
打团从来人不齐1 天前
Linux服务器搭建笔记-008:台式机共享WIFI
linux·服务器·笔记