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 乘法
相关推荐
如雨随行20202 小时前
【Vim】学习笔记(11) 寄存器
笔记·学习·vim
Aliex_git2 小时前
前端监控笔记(二)
前端·笔记·学习
圣光SG2 小时前
面向对象编程(OOP)通用跨语言笔记
开发语言·笔记·oop
Shepherdppz2 小时前
【避坑指南】超级笔记 Supernote 私有云部署完整指南:从零到一在群晖Synology NAS上搭建私人同步服务器
运维·服务器·笔记
猹叉叉(学习版)2 小时前
【系统分析师_知识点整理】 13.软件实现与测试
软件测试·笔记·软考·系统分析师
小陈phd2 小时前
多模态大模型学习笔记(二十九)—— 生成对抗网络(GAN)从原理到实战:实现第一个生成模型
笔记·学习·生成对抗网络
Heartache boy2 小时前
野火STM32_HAL库版课程笔记-TB6612FNG驱动有刷电机
笔记·stm32·单片机
iiiiii112 小时前
【理论推导】指数族分布的核心性质:对数配分函数的梯度为什么是充分统计量的期望?
人工智能·笔记·深度学习·数学·机器学习·概率论·指数族分布
淬炼之火3 小时前
笔记:LoRA,一种针对大语言模型的参数高效微调方法
人工智能·笔记·语言模型