04Park 变换
alpha-beta 到 dq 同步旋转坐标
本模块主旨
跳到转子上看 αβ → AC 变 DC:给 PI 创造工作前提的旋转变换,所有 dq 串扰、过零抖、低分编码器异响都在这里发生。学完应能回答
- 能口算 Id = Iα·cosθ + Iβ·sinθ、Iq = −Iα·sinθ + Iβ·cosθ 两条公式,并说明矩阵对应"αβ 顺时针旋转 −θ"
- 能解释 d 轴沿永磁体 N 极、q 轴领先 90°,为什么 Iq 才是"转矩电流"且 Id=0 时铜损最低
- 理解 θ 必须是电角度且与转子磁链方向对齐,Δθ 错 15° 会让纯 Iq 命令漏 26% 到 Id
- 能在 STM32 Q15 实现里避开 sin/cos 表插值、_smmla 累加、防溢出三个坑
- 能说出为什么压缩机 6000 rpm+ 必须叠加 dq 交叉解耦前馈 (ω·Lq·iq、ω·Ld·id+ω·ψf)
总览
Park 变换 = "与转子同步看世界"。它把交流控制变成直流控制,给 PI 创造工作前提。零基础速入
类比
Park 变换就是**站在旋转的木马上看周围**——你和木马一起转,木马上其他点对你看起来就**不动了**。Iαβ 在静止地面看是一个旋转的箭头,但你跳到转子上跟它一起转,那个箭头突然变成"指向固定方向、长度固定"的两根棍子(Id, Iq)。从此 PI 控制器只需控直流量,AC 难题瞬间消失。核心概念
同一个电流矢量,αβ 静止坐标系下是个高速正弦变化的 AC 量;dq 同步旋转坐标系下变成稳定的 DC 量。Park 是这两个视角的旋转变换。为什么要学
- 没有 Park,PI 必须追正弦——稳态相位/幅值误差大。Park 之后 PI 追直流值,零稳态误差。
- Id 控磁链、Iq 控转矩——这条解耦让"电流"和"转矩"建立 1:1 关系,是 FOC 精确转矩控制的根基。
- 编码器零位对齐 = 控制器认知的 d 轴和电机真实磁链方向对齐。零位错 X°,Iq 命令就有 sin(X°) 比例的部分跑到 Id 上,转矩损失 + 电流增大。
第一手操作
右侧把"电角度 θ"从 0 缓慢拖到 360°,看左侧 d/q 轴跟着转。同时观察 Id/Iq 的两条线段长度此消彼长——同一个 αβ 矢量,θ 不同投影出来 Id/Iq 完全不同。学习目标
- 理解 αβ 静止坐标和 dq 旋转坐标的关系
- 掌握 d 轴 / q 轴的物理意义
- 看懂"为什么 AC 量在同步坐标中变成 DC 量"
核心概念
- d 轴对准转子永磁体 N 极,q 轴领先 90°(电气角度),主要负责产生转矩。坐标系跟转子同步转。
- Id 控制磁链,Iq 控制转矩。表贴式 PMSM 默认 Id=0;弱磁时注入负 Id。
- θ 必须是电角度(机械×极对数),且零位与转子磁链方向严格对齐。
公式
Park 变换
Id = Iα·cos θ + Iβ·sin θ\nIq = −Iα·sin θ + Iβ·cos θ
θ 是电角度。本质是 αβ 平面绕原点旋转 −θ。
反 Park(FOC 输出端用)
Uα = Vd·cos θ − Vq·sin θ\nUβ = Vd·sin θ + Vq·cos θ
电流 PI 在 dq 域算出 Vd/Vq 后,旋转 +θ 回到 αβ 给 SVPWM。
PMSM 转矩
Te = 1.5·p·(ψf·Iq + (Ld−Lq)·Id·Iq)
表贴式 Ld=Lq → Te ≈ 1.5·p·ψf·Iq,Iq 直接决定转矩。
工程意义
- Park 让 PI 控直流量 → 零稳态误差、可严格整定。
- 角度错就 dq 串扰:表现为同样 Iq 命令转矩偏小、电流偏大、效率下降。
- 低分辨率编码器 + 高极对数 → 角度抖动直接转化成 dq 抖动 → 电流环噪声。
STM32 移植指南
- θ_e 来自编码器(机械×极对数)或观测器(无感);进 sin/cos 前归一化到 [0, 2π)。
- sincosf 单次调用同时算 sin/cos,比分别 sinf+cosf 快 ~30%。
- 查表 + 线性插值(256 表 + 8bit 插值)能把 sin/cos 压到 < 50ns,适合 < 100MHz MCU。
常见误区
- 角度方向(顺/逆时针)和电机相序不匹配,电机反转或转不动。
- 机械角度直接当电角度(漏乘极对数)。
- 编码器零位没对齐 → 启动一上电 Iq=0 也有转矩偏移。
- sin/cos 符号写错(反 Park 与 Park 必须用同一个 θ 同一种符号)。
调试方法
- 零速锁定(Vq=0、Vd=固定值)让转子停在 d 轴零位,再清编码器零点。
- 低速开环(开环 V/f)记录 Id/Iq;理想情况 Id ≈ 0、Iq 对应负载电流;偏离 → 角度方向或零位错。
- 阶跃测试:给 Iq=2A、Id=0;正常 Iq 跟踪、Id 接近 0。Id 飘 ±0.5A 以上 = 角度误差。
建议实验
- 拖电角度 θ,观察同一 αβ 在 dq 上投影变化。
- 设 Iα=5、Iβ=0、θ=0 → Id=5, Iq=0;θ=90° → Id=0, Iq=5。
- 故意改 θ 偏离 15°,观察 Id 漂移到 sin(15°)·5 ≈ 1.3A。
STM32 C 代码骨架
/* ============================================
* park.h — Park / 反 Park 变换
* STM32 FPU 直接算 sincosf;老芯片可换查表
* ============================================ */
typedef struct { float d; float q; } dq_t;
typedef struct { float alpha; float beta; } alpha_beta_t;
/* αβ → dq (Park) */
static inline dq_t park(float alpha, float beta, float theta_e) {
float s, c;
sincosf(theta_e, &s, &c); // 单次同时算
dq_t o;
o.d = alpha * c + beta * s;
o.q = -alpha * s + beta * c;
return o;
}
/* dq → αβ (反 Park)*/
static inline alpha_beta_t inv_park(float vd, float vq, float theta_e) {
float s, c;
sincosf(theta_e, &s, &c);
alpha_beta_t o;
o.alpha = vd * c - vq * s;
o.beta = vd * s + vq * c;
return o;
}
/* === 编码器零位对齐(启动时一次性执行)===
* 给定 Vd > 0、Vq = 0,转子被强制对齐到 d 轴零位。
* 然后清编码器计数器,记录这一刻为 encoder_zero。
*/
void align_encoder_zero(uint32_t *out_zero) {
/* 给 d 轴施加 1A 等效电流(开环电压模式) */
set_open_loop_voltage(2.0f /*Vd*/, 0.0f /*Vq*/, 0.0f /*theta_e*/);
HAL_Delay(800); // 等转子稳定
*out_zero = ENCODER->CNT; // 此刻 d 轴零位
set_open_loop_voltage(0, 0, 0); // 释放
}
/* 用法:
* align_encoder_zero(&calib.enc_zero); // 上电一次
* // 之后每 PWM 中断:
* theta_e = encoder_to_theta_e(ENCODER->CNT, calib.enc_zero, p);
* dq_t i = park(i_alpha, i_beta, theta_e);
*/下一步
- 进入 PID 模块,学习如何用 PI 闭环跟踪 Id/Iq 阶跃指令。
随堂题
同一个 Iα=5, Iβ=0,电角度 θ 从 0° 变到 90°,Id/Iq 怎么变?
- 始终 Id=5, Iq=0
- Id 从 5 变到 0、Iq 从 0 变到 5 (正确)
- Id/Iq 同时 5
- 不变
提示:Id = α cos θ + β sin θ,Iq = −α sin θ + β cos θ。θ=0 → (5,0),θ=90° → (0,5)。
编码器零位偏 10° 没校准,给 Iq=5、Id=0 命令,Id 实际值大约多少?
- 0
- 5
- 5·sin(10°) ≈ 0.87 (正确)
- 5·cos(10°) ≈ 4.92
提示:Park 角度误差 Δθ 让 Iq 命令"溢"到 Id 上一份 sin(Δθ) 比例。Iq 自己只剩 cos(Δθ)·5。
表贴式 PMSM (Ld=Lq),转矩主要由谁决定?
- Id
- Iq (正确)
- |αβ| 总幅值
- 电频率 ω
提示:Te = 1.5p(ψf·Iq + (Ld−Lq)·IdIq)。Ld=Lq 时第二项为 0,Iq 是唯一决定者。
弱磁控制中注入负 Id 的物理意义是?
- 增加转矩
- 减小等效磁链 → 降低反电动势 → 换取更高转速 (正确)
- 降低损耗
- 保护硬件
提示:负 Id 沿 −d 方向去减弱永磁磁链 ψf,让 BEMF = Ke·ω 减小,给逆变器输出腾出电压余量。
Park 和反 Park 在 FOC 链路上的作用顺序?
- 两个都在最前
- Park 先(采样侧),反 Park 后(输出侧) (正确)
- 反 Park 先
- 同时使用
提示:ADC → Clarke → Park → PI → 反 Park → SVPWM → 桥臂。Park 把"测量 αβ"变 dq;反 Park 把"PI 输出 Vdq"变回 αβ。
相关公式索引
Park 变换
Id = Iα cosθ + Iβ sinθ, Iq = -Iα sinθ + Iβ cosθ