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 乘法
相关推荐
The Chosen One9855 小时前
计算机知识点的理解开悟后的分享(一)
笔记
独孤九剑打醒他5 小时前
#原创声明 #拒绝白嫖 #技术立场 #创作者保护
笔记
avocado_green5 小时前
【考驾照】科目一备考笔记(个人手工整理,非AI生成)
笔记
雾岛听蓝6 小时前
Qt操作指南:状态栏、浮动窗口与对话框使用
开发语言·经验分享·笔记·qt
APIshop6 小时前
小红书笔记视频详情接口深度解析:smallredbook.item_get_video_pro
数据库·笔记·音视频
y = xⁿ6 小时前
MySQL学习笔记:乐观锁VS悲观锁/八股总结
笔记·学习·mysql
d111111111d7 小时前
STM32-UART抽象层封装
笔记·stm32·单片机·嵌入式硬件·学习
chushiyunen7 小时前
notion(模块化数字工作台)笔记
笔记·notion
三品吉他手会点灯8 小时前
C语言学习笔记 - 12.C语言简介 - 一元二次方程详解
c语言·笔记·学习
Cathy Bryant9 小时前
微分几何:度规(度量)metric
笔记·线性代数·矩阵·高等数学·物理