【三相PMSM】的坐标变换

@

0. 引言

三相交流电机的定子电流是交流量,幅值和相位随时间变化,直接去"稳住"它非常困难。磁场定向控制(FOC)的核心思路,就是通过坐标变换把旋转的三相交流量,等效成一个静止的直流量,从而像控制直流电机一样,用 PI 调节器实现对磁链和转矩的解耦控制。

整个变换路径为:

\[ABC \xrightarrow{\text{Clarke}} \alpha\beta \xrightarrow{\text{Park}} dq \xrightarrow{\text{PI 控制}} \text{逆Park} \xrightarrow{\text{逆Clarke}} ABC \rightarrow \text{SVPWM} \]

本篇文章从几何意义出发,逐一对 Clarke 变换、逆 Clarke 变换、Park 变换、逆 Park 变换 进行推导,给出矩阵形式、代码实现和工程中容易踩的坑。

1. 三种坐标系与变换链路

1.1 三种坐标系

坐标系 名称 特点 常用符号
ABC 三相静止自然坐标系 三相绕组空间相差 120°,电流为交流量 \(i_A, i_B, i_C\)
α-β 两相静止坐标系 α 轴取 A 相轴线,β 轴逆时针超前 α 轴 90°,电流仍为交流量 \(i_\alpha, i_\beta\)
d-q 两相旋转坐标系 d 轴与转子磁链对齐,随转子以 \(\omega_e\) 同步旋转,电流为直流量 \(i_d, i_q\)

下面这张图直观展示了 α-β 静止坐标系、d-q 旋转坐标系以及三相绕组 B、C 之间的空间角度关系:

坐标系关系图

从图中可以读出关键角度信息:

  • α 轴:水平向右,作为角度基准(0°);
  • β 轴:竖直向上,与 α 轴垂直(90°);
  • B 相绕组轴线:与 α 轴夹角 120°;
  • C 相绕组轴线:与 α 轴夹角 240°(即 -120°),B、C 相差 120°;
  • d 轴:相对 α 轴偏转 \(\theta_e\)(电角度);
  • ωₑ:d-q 坐标系的同步旋转角速度,且 \(\theta_e = \omega_e t\);
  • q 轴:超前 d 轴 90°(图中未标出,垂直于 d 轴)。

1.2 整体变换链路

mermaid diagram

为什么 d-q 坐标下电流是直流量? 因为 d-q 坐标系与磁链同步旋转,d 轴始终对准磁链方向,于是 d 轴分量 \(i_d\)(励磁电流)和 q 轴分量 \(i_q\)(转矩电流)相对坐标系静止不变,PI 才能稳态无静差地调节。


2. Clarke 变换(3s/2s):三相 → 两相静止

2.1 变换思想

Clarke 变换把三相绕组(空间相差 120°)的电流,投影到两相正交的 α-β 轴上。结合上图:B 相在 120°、C 相在 240°,把它们分别向 α 轴(0°)和 β 轴(90°)做投影,再叠加,就得到等效的两相电流 \(i_\alpha\)、\(i_\beta\)。

投影关系(角度以 α 轴为基准,逆时针为正):

\[i_\alpha = i_A\cos 0^\circ + i_B\cos 120^\circ + i_C\cos 240^\circ \]

\[i_\beta = i_A\sin 0^\circ + i_B\sin 120^\circ + i_C\sin 240^\circ \]

2.2 等幅值 Clarke 变换(最常用)

为了让变换后的 α 分量幅值等于相电流幅值,取系数 \(\frac{2}{3}\) (第三行是零序分量)(原来\(A\)相的电流经过clark变化后再\(\alpha\)轴上被放大了 \(\frac{3}{2}\)倍,所以要使用 \(\frac{2}{3}\)放因子来进行等幅值缩放):

\[\begin{bmatrix} i_\alpha \\ i_\beta \\ i_0 \end{bmatrix}= \frac{2}{3} \begin{bmatrix} 1 & -\frac{1}{2} & -\frac{1}{2} \\[2pt] 0 & \frac{\sqrt{3}}{2} & -\frac{\sqrt{3}}{2} \\[2pt] \frac{1}{2} & \frac{1}{2} & \frac{1}{2} \end{bmatrix} \begin{bmatrix} i_A \\ i_B \\ i_C \end{bmatrix} \]

写成常用的两行形式(忽略零轴,或考虑三线制 \(i_A+i_B+i_C=0\)):

\[\boxed{ \begin{bmatrix} i_\alpha \\ i_\beta \end{bmatrix}= \frac{2}{3} \begin{bmatrix} 1 & -\frac{1}{2} & -\frac{1}{2} \\[2pt] 0 & \frac{\sqrt{3}}{2} & -\frac{\sqrt{3}}{2} \end{bmatrix} \begin{bmatrix} i_A \\ i_B \\ i_C \end{bmatrix} } \]

展开为标量形式:

\[i_\alpha = \frac{2}{3}\left(i_A - \frac{1}{2}i_B - \frac{1}{2}i_C\right) \]

\[i_\beta = \frac{2}{3}\cdot \frac{\sqrt{3}}{2}(i_B - i_C) = \frac{1}{\sqrt{3}}(i_B - i_C) \]

三相平衡简化:当 \(i_A+i_B+i_C=0\) 时,等幅值 Clarke 可进一步简化为:

\[i_\alpha = i_A, \qquad i_\beta = \frac{1}{\sqrt{3}}(i_B - i_C) \]

这一形式在嵌入式实现中非常常用(少一次乘法)。

2.3 等功率(正交)Clarke 变换

等功率变换保证变换前后功率不变,系数取 \(\sqrt{\frac{2}{3}}\):

\[\begin{bmatrix} i_\alpha \\ i_\beta \end{bmatrix}= \sqrt{\frac{2}{3}} \begin{bmatrix} 1 & -\frac{1}{2} & -\frac{1}{2} \\[2pt] 0 & \frac{\sqrt{3}}{2} & -\frac{\sqrt{3}}{2} \end{bmatrix} \begin{bmatrix} i_A \\ i_B \\ i_C \end{bmatrix} \]

两者关系:等幅值变换前后幅值不变但功率变了(功率为原来的 1.5 倍);等功率变换前后功率不变但幅值变为 \(\sqrt{\frac{3}{2}}\) 倍。工程上 STM32、TI 等平台驱动电机多用等幅值(和 SVPWM 的电压利用率配合更直观)。

2.4 零轴分量 \(i_0\)

三线制电机(星形/三角形,无中线)有 \(i_A+i_B+i_C=0\),零轴分量恒为零,可忽略。只有带中线的四线制系统才需要保留零轴。


3. 逆 Clarke 变换(2s/3s):两相静止 → 三相

由 Clarke 变换矩阵求逆(注意逆矩阵不再含 \(\frac{2}{3}\) 系数):

\[\boxed{ \begin{bmatrix} i_A \\ i_B \\ i_C \end{bmatrix}= \begin{bmatrix} 1 & 0 \\[2pt] -\frac{1}{2} & \frac{\sqrt{3}}{2} \\[2pt] -\frac{1}{2} & -\frac{\sqrt{3}}{2} \end{bmatrix} \begin{bmatrix} i_\alpha \\ i_\beta \end{bmatrix} } \]

标量形式:

\[i_A = i_\alpha \]

\[i_B = -\frac{1}{2}i_\alpha + \frac{\sqrt{3}}{2}i_\beta \]

\[i_C = -\frac{1}{2}i_\alpha - \frac{\sqrt{3}}{2}i_\beta \]

注意系数:等幅值 Clarke 的前向变换带 \(\frac{2}{3}\),但逆变换系数为 1(不需要 \(\frac{2}{3}\))。原因是正逆变换合起来要保证"先正后逆回到原三相"。而等功率 Clarke 正逆变换都带 \(\sqrt{\frac{2}{3}}\)。混用等幅值前向 + 等功率逆向会得到错误结果,这是最常见的坑。


4. Park 变换(2s/2r):两相静止 → 两相旋转

4.1 变换思想

Park 变换把静止的 α-β 坐标,旋转 \(\theta_e\) 角到与磁链同步的 d-q 坐标系。结合图:d 轴相对 α 轴偏转 \(\theta_e\),q 轴垂直 d 轴。把 \(\alpha\beta\) 分量向 d、q 轴投影即可。

\[\boxed{ \begin{bmatrix} i_d \\ i_q \end{bmatrix} = \begin{bmatrix} \cos\theta_e & \sin\theta_e \\[2pt] -\sin\theta_e & \cos\theta_e \end{bmatrix} \begin{bmatrix} i_\alpha \\ i_\beta \end{bmatrix} } \]

标量形式:

\[i_d = i_\alpha\cos\theta_e + i_\beta\sin\theta_e \]

\[i_q = -i_\alpha\sin\theta_e + i_\beta\cos\theta_e \]

相位约定:上式是"d 轴对齐磁链"的常用惯例(转子磁场定向)。d-q 旋转矩阵是一个正交矩阵,其行列式为 1,是纯旋转,不改变矢量幅值。


5. 逆 Park 变换(2r/2s):两相旋转 → 两相静止

由于旋转矩阵是正交矩阵(\(R^{-1} = R^T\)),求逆只需转置:

\[\boxed{ \begin{bmatrix} i_\alpha \\ i_\beta\end{bmatrix} = \begin{bmatrix} \cos\theta_e & -\sin\theta_e \\[2pt] \sin\theta_e & \cos\theta_e \end{bmatrix} \begin{bmatrix} i_d \\ i_q \end{bmatrix} } \]

标量形式:

\[i_\alpha = i_d\cos\theta_e - i_q\sin\theta_e \]

\[i_\beta = i_d\sin\theta_e + i_q\cos\theta_e \]

逆 Park 变换在 FOC 的电压重构阶段使用:PI 输出的 \(u_d, u_q\) 先逆 Park 得到 \(u_\alpha, u_\beta\),再逆 Clarke 得到三相电压参考,最后交给 SVPWM。


6. 四种变换汇总

变换 方向 变换矩阵 系数 说明
Clarke 正变换 ABC → αβ \(\begin{bmatrix}1&-\frac12&-\frac12\\0&\frac{\sqrt3}{2}&-\frac{\sqrt3}{2}\end{bmatrix}\) \(\frac{2}{3}\)(等幅值)
\(\sqrt{\frac{2}{3}}\)(等功率)
三相 → 两相静止
逆 Clarke αβ → ABC \(\begin{bmatrix}1&0\\-\frac12&\frac{\sqrt3}{2}\\-\frac12&-\frac{\sqrt3}{2}\end{bmatrix}\) \(1\)(等幅值)
\(\sqrt{\frac{2}{3}}\)(等功率)
两相静止 → 三相
Park 正变换 αβ → dq \(\begin{bmatrix}\cos\theta_e&\sin\theta_e\\-\sin\theta_e&\cos\theta_e\end{bmatrix}\) \(1\) 两相静止 → 两相旋转
逆 Park dq → αβ \(\begin{bmatrix}\cos\theta_e&-\sin\theta_e\\\sin\theta_e&\cos\theta_e\end{bmatrix}\) \(1\) 两相旋转 → 两相静止

记忆口诀:Clarke 管"三相↔两相"、系数 2/3;Park 管"静止↔旋转"、靠 θₑ 旋转、系数 1、逆变换就是转置。


7. FOC 信号流图

mermaid diagram

完整闭环中,θₑ(转子电角度)由编码器或无感观测器实时估计,d-q 坐标才跟得上磁链。


8. C 语言实现(等幅值,float)

8.1 Clarke 变换

#include <math.h>

// 等幅值 Clarke 变换:三相 ABC → αβ
// 输入: ia, ib, ic 三相电流
// 输出: *ialpha, *ibeta
void clarke(float ia, float ib, float ic, float *ialpha, float *ibeta)
{
    const float INV_SQRT3 = 1.0f / 1.7320508075688772f;  // 1/√3
    *ialpha = (2.0f / 3.0f) * (ia - 0.5f * ib - 0.5f * ic);
    *ibeta  = INV_SQRT3 * (ib - ic);                      // 简化形式
}

8.2 逆 Clarke 变换

// 等幅值逆 Clarke 变换:αβ → 三相 ABC
void inverse_clarke(float ialpha, float ibeta, float *ia, float *ib, float *ic)
{
    const float SQRT3 = 1.7320508075688772f;
    *ia = ialpha;
    *ib = -0.5f * ialpha + (SQRT3 / 2.0f) * ibeta;
    *ic = -0.5f * ialpha - (SQRT3 / 2.0f) * ibeta;
}

8.3 Park 变换

// Park 变换:αβ → dq(θe 为转子电角度,rad)
void park(float ialpha, float ibeta, float theta, float *id, float *iq)
{
    float c = cosf(theta);
    float s = sinf(theta);
    *id = ialpha * c + ibeta * s;
    *iq = -ialpha * s + ibeta * c;
}

8.4 逆 Park 变换

// 逆 Park 变换:dq → αβ
void inverse_park(float id, float iq, float theta, float *ialpha, float *ibeta)
{
    float c = cosf(theta);
    float s = sinf(theta);
    *ialpha = id * c - iq * s;
    *ibeta  = id * s + iq * c;
}

工程优化提示:

  • 若 θₑ 来自编码器,可用查表法(LUT)或 CORDIC 替代 cosf/sinf 提高实时性;
  • 多个变换可合并(如 Clarke+Park 合成一个矩阵),减少乘法;
  • 定点 DSP 上注意 Q 格式定标。

在这里插入图片描述

posted @ 2026-10-07 00:14  Zhaoguoguo  阅读(3)  评论(0)    收藏  举报