PMSM基于SMO反电动势的PLL位置与速度估计

文章目录

    • 一、背景:为什么不用反正切,要用PLL?
    • 二、PLL误差信号的构建------最核心的一步
      • [2.1 物理直觉(先理解本质)](#2.1 物理直觉(先理解本质))
      • [2.2 数学推导(从αβ到dq的误差信号)](#2.2 数学推导(从αβ到dq的误差信号))
      • [2.3 工程实现中的两种等价形式](#2.3 工程实现中的两种等价形式)
      • [2.4 幅值归一化(工程中非常重要!)](#2.4 幅值归一化(工程中非常重要!))
    • 三、PLL的完整工作原理
      • [3.1 整体框图](#3.1 整体框图)
      • [3.2 为什么PLL输出速度而非直接输出角度?](#3.2 为什么PLL输出速度而非直接输出角度?)
    • 四、PI参数整定------理论与工程结合
      • [4.1 理论推导:从传递函数到参数公式](#4.1 理论推导:从传递函数到参数公式)
      • [4.2 ω n \omega_n ωn(带宽)如何选取](#4.2 ω n \omega_n ωn(带宽)如何选取)
      • [4.3 ST/TI等厂商的工程简化公式](#4.3 ST/TI等厂商的工程简化公式)
      • [4.4 工程调试的实战方法](#4.4 工程调试的实战方法)
      • [4.5 一个重要陷阱:参数随转速变化](#4.5 一个重要陷阱:参数随转速变化)
    • 五、工程视角:完整实现与注意事项
      • [5.1 离散化实现(C代码模板)](#5.1 离散化实现(C代码模板))
      • [5.2 角度补偿问题](#5.2 角度补偿问题)
      • [5.3 反转工况的陷阱](#5.3 反转工况的陷阱)
      • [5.4 启动问题](#5.4 启动问题)
    • 六、总结:关键要点一览

一、背景:为什么不用反正切,要用PLL?

SMO估算出αβ轴反电动势后,最直观的做法是用反正切求角度:

θ ^ = − arctan ⁡ ( e α e β ) \hat{\theta} = -\arctan\left(\frac{e_\alpha}{e_\beta}\right) θ^=−arctan(eβeα)

但这个方法本质上是开环的,存在严重问题:

  • 除法运算会放大SMO高频抖振和噪声,尤其在反电动势过零时(分母接近0),误差被急剧放大
  • 角度求导得到转速时,微分环节会进一步放大噪声

而PLL本质上是一个带宽可控的跟踪滤波器,能有效抑制观测器抖振和测量噪声,输出平滑的角度和速度。因此工程上几乎全部采用PLL而非反正切。

二、PLL误差信号的构建------最核心的一步

2.1 物理直觉(先理解本质)

在dq旋转坐标系中,反电动势的表达式为:

e d e q \] = \[ 0 ω ψ f \] \\begin{bmatrix} e_d \\\\ e_q \\end{bmatrix} = \\begin{bmatrix} 0 \\\\ \\omega \\psi_f \\end{bmatrix} \[edeq\]=\[0ωψf

关键物理含义 :理想情况下,d轴反电动势应当为0

这意味着什么?如果我们用估计角度 θ ^ \hat{\theta} θ^ 对αβ反电动势做Park变换,得到的 e ^ d \hat{e}_d e^d 如果不为0,就说明估计角度不对------要么偏大、要么偏小。这个 e ^ d \hat{e}_d e^d 就是我们的误差信号

2.2 数学推导(从αβ到dq的误差信号)

假设真实角度为 θ \theta θ,估计角度为 θ ^ \hat{\theta} θ^,角度误差为 Δ θ = θ − θ ^ \Delta\theta = \theta - \hat{\theta} Δθ=θ−θ^。

真实反电动势为:

e α e β \] = ω ψ f \[ − sin ⁡ θ cos ⁡ θ \] \\begin{bmatrix} e_\\alpha \\\\ e_\\beta \\end{bmatrix} = \\omega \\psi_f \\begin{bmatrix} -\\sin\\theta \\\\ \\cos\\theta \\end{bmatrix} \[eαeβ\]=ωψf\[−sinθcosθ

用估计角度 θ ^ \hat{\theta} θ^ 做Park变换到dq轴:

e \^ d e \^ q \] = \[ cos ⁡ θ \^ sin ⁡ θ \^ − sin ⁡ θ \^ cos ⁡ θ \^ \] \[ e α e β \] \\begin{bmatrix} \\hat{e}_d \\\\ \\hat{e}_q \\end{bmatrix} = \\begin{bmatrix} \\cos\\hat{\\theta} \& \\sin\\hat{\\theta} \\\\ -\\sin\\hat{\\theta} \& \\cos\\hat{\\theta} \\end{bmatrix} \\begin{bmatrix} e_\\alpha \\\\ e_\\beta \\end{bmatrix} \[e\^de\^q\]=\[cosθ\^−sinθ\^sinθ\^cosθ\^\]\[eαeβ

代入 e α , e β e_\alpha, e_\beta eα,eβ 的表达式,展开 e ^ d \hat{e}_d e^d:

e ^ d = e α cos ⁡ θ ^ + e β sin ⁡ θ ^ \hat{e}d = e\alpha \cos\hat{\theta} + e_\beta \sin\hat{\theta} e^d=eαcosθ^+eβsinθ^

= ω ψ f ( − sin ⁡ θ cos ⁡ θ ^ + cos ⁡ θ sin ⁡ θ ^ ) = \omega\psi_f(-\sin\theta \cos\hat{\theta} + \cos\theta \sin\hat{\theta}) =ωψf(−sinθcosθ^+cosθsinθ^)

= ω ψ f sin ⁡ ( θ ^ − θ ) = − ω ψ f sin ⁡ ( θ − θ ^ ) = \omega\psi_f \sin(\hat{\theta} - \theta) = -\omega\psi_f \sin(\theta - \hat{\theta}) =ωψfsin(θ^−θ)=−ωψfsin(θ−θ^)

当角度误差 Δ θ = θ − θ ^ \Delta\theta = \theta - \hat{\theta} Δθ=θ−θ^ 很小时, sin ⁡ ( Δ θ ) ≈ Δ θ \sin(\Delta\theta) \approx \Delta\theta sin(Δθ)≈Δθ,因此:

e ^ d ≈ − ω ψ f ⋅ Δ θ \hat{e}_d \approx -\omega\psi_f \cdot \Delta\theta e^d≈−ωψf⋅Δθ

结论 : e ^ d \hat{e}_d e^d 与角度误差 Δ θ \Delta\theta Δθ 成正比。 e ^ d \hat{e}_d e^d 不为0 → 角度有误差 → 用PI调节器把 e ^ d \hat{e}_d e^d 调成0 → 角度就收敛到真实值。

2.3 工程实现中的两种等价形式

形式一:Park变换法(最常用)

直接用估计角度对 e α , e β e_\alpha, e_\beta eα,eβ 做Park变换:

e r r o r = e α ⋅ cos ⁡ θ ^ + e β ⋅ sin ⁡ θ ^ error = e_\alpha \cdot \cos\hat{\theta} + e_\beta \cdot \sin\hat{\theta} error=eα⋅cosθ^+eβ⋅sinθ^

这就是 e ^ d \hat{e}_d e^d。展示了C代码实现:

c 复制代码
float error = e_alpha * cos_theta - e_beta * sin_theta;  // 注意符号差异取决于反电动势定义

形式二:叉积法(等价)

e r r o r = e β cos ⁡ θ ^ − e α sin ⁡ θ ^ error = e_\beta \cos\hat{\theta} - e_\alpha \sin\hat{\theta} error=eβcosθ^−eαsinθ^

两种形式本质等价,符号差异取决于反电动势的正方向定义。

2.4 幅值归一化(工程中非常重要!)

上述误差表达式中含有 ω ψ f \omega\psi_f ωψf 项------这意味着误差信号的增益随转速变化!低速时误差很小,PI增益"不够用";高速时误差很大,PI增益"太猛"。

工程上的标准做法是幅值归一化

e r r o r n o r m = e α cos ⁡ θ ^ + e β sin ⁡ θ ^ e α 2 + e β 2 error_{norm} = \frac{e_\alpha \cos\hat{\theta} + e_\beta \sin\hat{\theta}}{\sqrt{e_\alpha^2 + e_\beta^2}} errornorm=eα2+eβ2 eαcosθ^+eβsinθ^

归一化后,误差信号不再随转速变化,PI参数可以在全速域保持一致。

三、PLL的完整工作原理

3.1 整体框图

复制代码
e_α, e_β ──► [Park变换] ──► error(≈-ωψf·Δθ) ──► [PI调节器] ──► ω̂ ──► [1/s积分] ──► θ̂
                    ↑                                                          │
                    └─────────────────────── θ̂ ───────────────────────────────┘

这就是一个闭环跟踪系统

  • 相位检测器(PD) :Park变换产生 e ^ d \hat{e}_d e^d 作为误差
  • 环路滤波器(LF):PI调节器
  • 压控振荡器(VCO):积分器(角度 = 速度积分)

3.2 为什么PLL输出速度而非直接输出角度?

你可能会想:误差代表角度不对,为什么不直接修正角度?

工程上输出速度再积分得到角度,有三个原因:

  1. 惯性效应:速度积分得到的角度自带惯性,抗噪性更好
  2. 避免微分噪声:如果只输出角度,要得到速度还得做微分------而微分会放大噪声
  3. 处理方便:角度是0~360°的周期量,处理边界麻烦;速度是线性量,适合PI输出

四、PI参数整定------理论与工程结合

4.1 理论推导:从传递函数到参数公式

PLL的小信号模型可以等效为:

G P L L ( s ) = K p s + K i s 2 + K p s + K i G_{PLL}(s) = \frac{K_p s + K_i}{s^2 + K_p s + K_i} GPLL(s)=s2+Kps+KiKps+Ki

这是一个典型的二阶系统 (注意:这里的 K p , K i K_p, K_i Kp,Ki 是归一化后的增益)。

与标准二阶系统 s 2 + 2 ζ ω n s + ω n 2 s^2 + 2\zeta\omega_n s + \omega_n^2 s2+2ζωns+ωn2 对比:

K p = 2 ζ ω n , K i = ω n 2 K_p = 2\zeta\omega_n, \quad K_i = \omega_n^2 Kp=2ζωn,Ki=ωn2

其中:

  • ω n \omega_n ωn 是自然振荡角频率
  • ζ \zeta ζ 是阻尼比

工程上通常取 ζ = 0.707 \zeta = 0.707 ζ=0.707(最佳阻尼比),此时:

K p = 2 × 0.707 × ω n = 1.414 ω n K_p = 2 \times 0.707 \times \omega_n = 1.414\omega_n Kp=2×0.707×ωn=1.414ωn

K i = ω n 2 K_i = \omega_n^2 Ki=ωn2

关键问题 : ω n \omega_n ωn 取多少?

4.2 ω n \omega_n ωn(带宽)如何选取

ω n \omega_n ωn 决定了PLL的跟踪带宽。选取原则:

  1. 必须大于最高电角速度:否则跟踪不上
  2. 不能太大:带宽越大,对噪声越敏感
  3. 工程经验 :取最高电角速度的 1.5~3倍

举例:4对极电机,最高机械转速1000rpm:

  • 最高电角速度 ω e , m a x = 1000 × 2 π 60 × 4 ≈ 418 \omega_{e,max} = 1000 \times \frac{2\pi}{60} \times 4 \approx 418 ωe,max=1000×602π×4≈418 rad/s
  • 取 ω n = 500 \omega_n = 500 ωn=500 rad/s
  • 则 K p = 2 × 0.707 × 500 ≈ 707 K_p = 2 \times 0.707 \times 500 \approx 707 Kp=2×0.707×500≈707, K i = 500 2 = 250000 K_i = 500^2 = 250000 Ki=5002=250000

4.3 ST/TI等厂商的工程简化公式

很多厂商给出简化公式:

K p = 2 ζ ω B W , K i = ω B W 2 K_p = 2\zeta\omega_{BW}, \quad K_i = \omega_{BW}^2 Kp=2ζωBW,Ki=ωBW2

其中 ω B W \omega_{BW} ωBW 是期望的闭环带宽,直接根据最高电角速度设定。

另一种表达:

K p = 2 ξ ω c , K i = ω c 2 K_p = 2\xi\omega_c, \quad K_i = \omega_c^2 Kp=2ξωc,Ki=ωc2

ω c \omega_c ωc 为截止频率, ξ \xi ξ 通常取0.707。

4.4 工程调试的实战方法

理论公式给出初始值,实际还需要微调:

步骤1 : K i K_i Ki 先设为0,逐渐增大 K p K_p Kp 直到系统开始震荡

步骤2 :记录临界震荡时的 K p , c r i t K_{p,crit} Kp,crit,取 K p = 0.8 × K p , c r i t K_p = 0.8 \times K_{p,crit} Kp=0.8×Kp,crit

步骤3 :逐渐增加 K i K_i Ki,观察稳态误差,直到误差可接受

步骤4 :如果出现超调或振荡,适当降低 K p K_p Kp 或 K i K_i Ki

这本质上是Ziegler-Nichols方法的变体。

4.5 一个重要陷阱:参数随转速变化

注意!如果没有做幅值归一化 ,误差信号中含有 ω ψ f \omega\psi_f ωψf 项,等效的 K p , K i K_p, K_i Kp,Ki 需要随转速自适应调整------转速越高,等效增益越大。

解决方案

  1. 幅值归一化 (推荐):归一化后 K p , K i K_p, K_i Kp,Ki 固定
  2. 自适应PI : K p = K p 0 / ω K_p = K_{p0}/\omega Kp=Kp0/ω, K i = K i 0 / ω K_i = K_{i0}/\omega Ki=Ki0/ω

五、工程视角:完整实现与注意事项

5.1 离散化实现(C代码模板)

c 复制代码
// PLL结构体
typedef struct {
    float theta;      // 估计电角度 [rad]
    float speed;      // 估计电角速度 [rad/s]
    float integral;   // 积分项累积
    float Kp;         // 比例增益
    float Ki;         // 积分增益
    float Ts;         // 控制周期 [s]
} PLL_Handle;

// PLL更新函数
void PLL_Update(PLL_Handle *pll, float e_alpha, float e_beta) {
    float sin_theta = arm_sin_f32(pll->theta);
    float cos_theta = arm_cos_f32(pll->theta);
    
    // 1. 相位检测:计算d轴反电动势作为误差
    float error = e_alpha * cos_theta + e_beta * sin_theta;
    
    // 2. 幅值归一化(可选但强烈推荐)
    float mag = sqrtf(e_alpha*e_alpha + e_beta*e_beta);
    if (mag > 1e-6) error = error / mag;
    
    // 3. PI调节器(增量式)
    pll->integral += error * pll->Ki * pll->Ts;
    float speed_out = error * pll->Kp + pll->integral;
    
    // 4. 积分得到角度
    pll->theta += speed_out * pll->Ts;
    pll->speed = speed_out;
    
    // 5. 角度归一化到 [0, 2π)
    if (pll->theta > 2*PI) pll->theta -= 2*PI;
    if (pll->theta < 0) pll->theta += 2*PI;
}

5.2 角度补偿问题

SMO通常使用低通滤波器(LPF) 来滤除高频抖振,但LPF会带来相位滞后。这个滞后在PLL中未被补偿,会导致稳态角度误差。

工程解决方案

  1. 补偿角 :根据LPF截止频率 ω c \omega_c ωc 和当前转速 ω e \omega_e ωe,计算 Δ θ = arctan ⁡ ( ω e / ω c ) \Delta\theta = \arctan(\omega_e/\omega_c) Δθ=arctan(ωe/ωc),加到PLL输出上
  2. 改用SOGI-FLL:用二阶广义积分器替代LPF,消除相位滞后
  3. 反正切+PLL混合:用反正切粗算角度作为PLL前馈

5.3 反转工况的陷阱

传统PLL在电机反转 时可能出现 180°相位偏差 ,导致电机失步。这是因为误差信号 e ^ d \hat{e}_d e^d 在正反转时符号变化规律不同。

工程对策

  1. 检测转速符号 :如果速度变为负值,对角度做 θ = θ + π \theta = \theta + \pi θ=θ+π 修正
  2. 使用改进型PLL:如IQPLL(Improved QPLL),专门解决反转问题

5.4 启动问题

PLL在零速或极低速 时无法工作------因为反电动势 E = ω ψ f E = \omega\psi_f E=ωψf 在低速时太小,信噪比极差。

工程实践

  • 低速用高频注入法(HFI)I/F开环启动
  • 达到一定转速(通常是额定转速的5~10%)后切到SMO+PLL

六、总结:关键要点一览

方面 核心要点
误差构建 e ^ d = e α cos ⁡ θ ^ + e β sin ⁡ θ ^ \hat{e}d = e\alpha\cos\hat{\theta} + e_\beta\sin\hat{\theta} e^d=eαcosθ^+eβsinθ^,物理意义是d轴反电动势偏离0的程度
数学本质 e ^ d ≈ − ω ψ f ⋅ Δ θ \hat{e}_d \approx -\omega\psi_f \cdot \Delta\theta e^d≈−ωψf⋅Δθ,误差正比于角度偏差
PI参数 K p = 2 ζ ω n K_p = 2\zeta\omega_n Kp=2ζωn, K i = ω n 2 K_i = \omega_n^2 Ki=ωn2, ζ = 0.707 \zeta=0.707 ζ=0.707, ω n \omega_n ωn取最高电角速度的1.5~3倍
工程调试 先调 K p K_p Kp 到临界震荡再退回80%,再加 K i K_i Ki 消除稳态误差
归一化 除以 e α 2 + e β 2 \sqrt{e_\alpha^2+e_\beta^2} eα2+eβ2 使增益与转速解耦
角度补偿 补偿LPF带来的相位滞后
反转处理 注意180°相位偏差问题

记住一句话:PLL就是把"d轴反电动势不为0"这个现象,通过闭环控制把它"调成0"------调成0了,角度就对了。

相关推荐
陕西企来客1 小时前
2026年9月西安生成式引擎优化是什么:概念与应用解析
人工智能·西安生成式引擎优化是什么
小王2041 小时前
Day 35:DETR与检测Transformer — 目标检测的范式革命
人工智能·深度学习·transformer
萧鼎1 小时前
2026新库实测:sbxloop 1.5.24 让 AI Agent 在 Docker 沙箱中安全自治,告别环境混乱
人工智能·python·开源·开发工具·ai agent
超级架构师1 小时前
【区块链技术】区块链101:比特币是什么?
人工智能·区块链·比特币
阿沐沐,1 小时前
Claude Code 首次连接:官方登录与第三方网关配置
人工智能·ai
Claire_881 小时前
AI 会议录音转写与纪要生成:3 款工具的功能记录与使用观察
人工智能
明志数科1 小时前
机器人训练数据质量评估体系:核心维度与全流程质控方法
人工智能·深度学习·机器学习
hhzz1 小时前
【OpenCV 入门到精通 02】环境安装与第一个程序:5 分钟跑通 Hello OpenCV
人工智能·opencv·yolo·计算机视觉·开源
hddata@1 小时前
让水印“追”着目标走——一种基于特定目标的视频水印嵌入方法
人工智能