文章目录
-
- 一、背景:为什么不用反正切,要用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输出速度而非直接输出角度?
你可能会想:误差代表角度不对,为什么不直接修正角度?
工程上输出速度再积分得到角度,有三个原因:
- 惯性效应:速度积分得到的角度自带惯性,抗噪性更好
- 避免微分噪声:如果只输出角度,要得到速度还得做微分------而微分会放大噪声
- 处理方便:角度是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.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 需要随转速自适应调整------转速越高,等效增益越大。
解决方案:
- 幅值归一化 (推荐):归一化后 K p , K i K_p, K_i Kp,Ki 固定
- 自适应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中未被补偿,会导致稳态角度误差。
工程解决方案:
- 补偿角 :根据LPF截止频率 ω c \omega_c ωc 和当前转速 ω e \omega_e ωe,计算 Δ θ = arctan ( ω e / ω c ) \Delta\theta = \arctan(\omega_e/\omega_c) Δθ=arctan(ωe/ωc),加到PLL输出上
- 改用SOGI-FLL:用二阶广义积分器替代LPF,消除相位滞后
- 反正切+PLL混合:用反正切粗算角度作为PLL前馈
5.3 反转工况的陷阱
传统PLL在电机反转 时可能出现 180°相位偏差 ,导致电机失步。这是因为误差信号 e ^ d \hat{e}_d e^d 在正反转时符号变化规律不同。
工程对策:
- 检测转速符号 :如果速度变为负值,对角度做 θ = θ + π \theta = \theta + \pi θ=θ+π 修正
- 使用改进型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了,角度就对了。