1 引言

Odrive无感磁链观测器出自Junggi Lee等人2010年发表论文《Sensorless Control of Surface-Mount Permanent-Magnet Synchronous Motors Based on a Nonlinear Observer》。

Sensorless Control of Surface-Mount Permanent-Magnet Synchronous Motors Based on a Nonlinear Observe

2 非线性观测器理论推导

2.1 SPMSM静止α-β坐标系基础电压模型

表贴式永磁同步电机定子电压方程在两相静止$\alpha-\beta$坐标系下表达式:

式中变量定义:

符号 物理含义
$\boldsymbol{i}_{\alpha\beta} = \begin{bmatrix}i_\alpha & i_\beta\end{bmatrix}^T$ $\alpha\beta$轴定子实测电流向量
$\boldsymbol{v}_{\alpha\beta} = \begin{bmatrix}v_\alpha & v_\beta\end{bmatrix}^T$ $\alpha\beta$轴PWM输出定子电压向量
$\theta$ 电机转子电角度
$\omega$ 电机电角速度
$R_s$ 定子相绕组电阻
$L$ SPMSM定子等效电感($L_d=L_q=L$)
$\psi_m$ 永磁体励磁磁链

方程核心痛点:$\omega$(转速)与$\theta$(角度)强耦合且均为待观测量,直接构造Luenberger线性观测器会引入转速闭环,误差极易逐级放大,无法实现纯开环观测。

2.2 状态变量替换,解耦未知项

定义全新复合状态向量$\boldsymbol{x}$,将电感压降与永磁磁链项合并:

对等式两侧做一阶微分,代入式(1)电压方程化简:

将$L\dot{\boldsymbol{i}}_{\alpha\beta}$由式(1)替换:

耦合转速项完全抵消,最终得到最简无未知量动力学方程:

$\boldsymbol{y}$仅由采样电流与给定电压计算得到,全部为控制系统已知量,原电机动态被降阶为纯积分环节:

2.3 非线性投影观测器构造

构造辅助观测向量$\boldsymbol{\eta}(\hat{\boldsymbol{x}})$,分离电流项与转子磁链项:

结合式(3)理想状态下满足:

对其取二范数:

几何意义:$\boldsymbol{\eta}$向量端点严格落在半径为$\psi_m$的二维圆上,位置观测等价于约束$\hat{\boldsymbol{\eta}}$收敛至该圆形轨迹并提取相位角。

基于径向投影修正思想设计非线性观测器:

  • $\gamma>0$:观测器收敛增益;
  • 第二项为非线性径向校正项:
    1. 若$|\hat{\boldsymbol{\eta}}|_2^2 < \psi_m^2$,修正项向外拉伸向量,逼近标准磁链圆;
    2. 若$|\hat{\boldsymbol{\eta}}|_2^2 > \psi_m^2$,修正项向内收缩向量;
    3. 当$|\hat{\boldsymbol{\eta}}|_2^2=\psi_m^2$,修正项归零,观测器仅执行原生积分$\dot{\hat{\boldsymbol{x}}}=\boldsymbol{y}$。

转子电角度直接由反正切函数求解:

2.4 系统收敛性与可观测边界

依据原论文引用Ortega无源稳定性分析结论,分四种工况给出稳定性判定:

  1. 全局有界性:观测器所有状态轨迹最终收敛于半径$2\psi_m$圆盘内,不会无界发散;
  2. 持续激励条件(指数稳定):若转速满足长期激励约束观测误差原点局部指数收敛,抗扰动能力最强;
  3. 恒定转速全局渐近稳定:电机匀速运转时,只要电角速度满足观测误差仅有唯一零平衡点,全局渐近收敛;
  4. 零速不可观测特性:$\omega=0$时无旋转反电动势激励,系统失去可观测性,纯本观测器无法完成初始定位,必须搭配高频电压脉冲注入实现零速启动。

3 速度观测:PLL锁相环无微分转速提取

若直接对角度$\hat{\theta}$差分微分计算转速,会放大电流、电压采样高频噪声,极易造成转速环震荡。本文采用PI型锁相环PLL对角度相位闭环跟踪,直接输出平滑电角速度估计值,全程无差分运算。

3.1 PLL连续域状态方程

定义两个积分状态量$z_1、z_2$:

  • $z_1$:PLL闭环跟踪观测角度$\hat{\theta}$;
  • $z_2$:角度误差积分项,消除稳态相位静差;
  • $\hat{\omega}$:PLL输出电角速度估计值。

3.2 临界阻尼参数整定

按照二阶系统临界阻尼最优整定规则:

$\omega_{\text{BW}}$为PLL闭环带宽,工程上建议取值为电流环带宽的1/5~1/10,避免转速环路干扰内环电流控制。

4 低速运行增强策略:d轴高频电流脉冲注入

电机转速低于100 r/min属于极低速区间,反电动势$\omega\psi_m$幅值极小,观测器存在两大缺陷:

  1. 定子电阻压降$ R_s \boldsymbol{i}_{\alpha\beta} $在电压方程中占主导,绕组温升带来$ R_s $漂移会严重污染$ \boldsymbol{y} $计算结果;
  2. 转子旋转激励不足,$ \hat{\boldsymbol{\eta}} $向量旋转速率过慢,观测器收敛周期拉长甚至失锁。

4.1 注入方案设计

  1. 切入阈值:机械转速<100 r/min时自动开启注入模块;转速>100 r/min直接关断注入;
  2. 激励信号:d轴直轴施加200Hz高频电压脉冲串,单脉冲幅值50V、导通时长0.2ms;
  3. 作用机理:高频脉振d轴电流引入周期性电压激励,弥补低速下反电动势缺失的持续激励条件,同时强化观测器对定子电阻参数的自适应鲁棒性。

4.2 实验指标

原论文实测结果:该注入方案可实现10 r/min、0.5倍额定负载工况下无传感器稳定矢量驱动,无明显转矩脉动与角度跳变。

5 工程实现:ODrive开源驱动源码逐模块解析

ODrive固件在sensorless_estimator.hpp与sensorless_estimator.cpp中完整实现该非线性观测器,下文做变量、公式、离散代码一一映射对照。

5.1 配置结构体与核心状态变量

1
2
3
4
5
struct Config_t {
float observer_gain = 1000.0f; // 观测器核心增益 γ [rad/s]
float pll_bandwidth = 1000.0f; // PLL锁相环闭环带宽 [rad/s]
float pm_flux_linkage = 1.58e-3f; // 永磁体励磁磁链 ψm [V/(rad/s)]
};

内部运行状态:

变量名 对应理论变量
flux_state_[2] 观测状态向量 $\hat{\boldsymbol{x}}$
V_alpha_beta_memory_[2] 上一拍αβ轴电压,补偿数字控制一拍延迟
pll_pos_ PLL闭环跟踪输出电角度
phase_ 观测器直接atan2解算原始角度
phase_vel_ 估计电角速度 rad/s
vel_estimate_ 折算后机械转速 r/s

5.2 主更新函数update()分步拆解

(1)PLL参数计算与离散稳定性校验

1
2
3
4
5
6
float pll_kp = 2.0f * config_.pll_bandwidth;
float pll_ki = 0.25f * (pll_kp * pll_kp);
// 前向欧拉离散稳定约束:Ts * Kp < 1,防止数值震荡
if (!(current_meas_period * pll_kp < 1.0f)) {
// 抛出带宽配置超限告警
}

(2)三相电流Clarke等幅值变换

1
2
3
4
float I_alpha_beta[2] = {
current_meas->phA,
one_by_sqrt3 * (current_meas->phB - current_meas->phC)
};

(3)基础积分预测 $\dot{\hat{\boldsymbol{x}}}=\boldsymbol{y}$

1
2
3
4
5
6
7
8
9
float eta[2];
for (int i=0; i<2; ++i) {
// y = -Rs*i + v_prev
float y = -R_s * I_alpha_beta[i] + V_alpha_beta_memory_[i];
// 欧拉离散积分:x_hat = x_hat + y * Ts
flux_state_[i] += y * current_meas_period;
// 计算η = x_hat - L*i
eta[i] = flux_state_[i] - L * I_alpha_beta[i];
}

(4)非线性径向修正项迭代

源码对原始公式做增益归一化,将$\gamma$量纲统一为rad/s:

1
2
3
4
5
6
7
8
float pm_flux_sqr = config_.pm_flux_linkage * config_.pm_flux_linkage;
float est_pm_flux_sqr = eta[0]*eta[0] + eta[1]*eta[1];
float eta_factor = 0.5f * (config_.observer_gain / pm_flux_sqr) * (pm_flux_sqr - est_pm_flux_sqr);

for (int i=0; i<2; ++i) {
flux_state_[i] += eta_factor * eta[i] * current_meas_period;
eta[i] = flux_state_[i] - L * I_alpha_beta[i];
}

(5)缓存当前电压,用于下一周期延迟补偿

1
2
V_alpha_beta_memory_[0] = current_control.final_v_alpha_;
V_alpha_beta_memory_[1] = current_control.final_v_beta_;

(6)PLL锁相环离散迭代转速提取

1
2
3
4
5
6
7
8
9
10
11
// 用上一拍角速度前馈预测角度
float phase_vel = phase_vel_.previous().value_or(0.0f);
pll_pos_ = wrap(pll_pos_ + current_meas_period * phase_vel);
// 由η直接解算观测角度
float phase = fast_atan2(eta[1], eta[0]);
// 角度误差限幅到[-π,π]
float delta = wrap(phase - pll_pos_);
// PLL比例环节更新位置
pll_pos_ = wrap(pll_pos_ + current_meas_period * pll_kp * delta);
// 积分环节累加得到角速度
phase_vel += current_meas_period * pll_ki * delta;

(7)观测结果输出换算

1
2
3
4
phase_ = phase;
phase_vel_ = phase_vel;
// 电角速度 → 机械转速 r/s
vel_estimate_ = phase_vel / (pole_pairs * 2 * M_PI);

5.3 论文公式与ODrive代码精准对照表

论文理论公式 ODrive工程代码实现逻辑
$\dot{\hat{\boldsymbol{x}}} = \boldsymbol{y}$ flux_state += y * Ts
$\hat{\boldsymbol{\eta}}=\hat{\boldsymbol{x}}-L\boldsymbol{i}_{\alpha\beta}$ eta[i] = flux_state[i] - L * I_alpha_beta[i]
$ \dot{\hat{\boldsymbol{x}}} = \boldsymbol{y}+\frac{\gamma}{2}\hat{\boldsymbol{\eta}}(\psi_m^2-\|\hat{\boldsymbol{\eta}}\|^2) $ 归一化增益后欧拉离散叠加修正项
$ \hat{\theta}=\arctan2(\eta_\beta,\eta_\alpha) $ fast_atan2(eta[1], eta[0])
PI型PLL转速观测 前馈预测+比例积分闭环离散实现

5.4 嵌入式工程鲁棒性处理细节

  1. 一拍电压延迟补偿:存储上一控制周期PWM输出电压,匹配功率管实际施加电压,消除数字控制计算滞后带来的观测偏移;
  2. 积分饱和防护:电流采样失效、驱动器未使能时强制重置flux_state_积分状态,防止积分漂移;
  3. 角度环绕处理:wrap()函数将角度强制约束在$[-\pi,\pi]$,避免角度跨2π跳变导致转速尖峰;
  4. 离散稳定性前置检查:硬性判定$T_s \cdot K_p < 1$,杜绝欧拉法离散后PLL系统不稳定。

6 全套参数整定流程与约束条件

6.1 核心参数说明

  1. observer_gain($\gamma$)观测器增益
    整定基准:略大于电机额定工况电频率

    稳定硬性约束(原始未归一化公式):$|\omega| > \frac{1}{4}\gamma\psi_m^2$,转速越低允许的最大$\gamma$越小。

  2. pll_bandwidth PLL带宽
    推荐取值:电流环带宽 $\div 5 \sim$ 电流环带宽 $\div 10$;
    带宽偏大:转速响应快、噪声敏感易抖动;带宽偏小:动态跟随差、加减速角度滞后。

  3. pm_flux_linkage 永磁磁链$\psi_m$
    最优来源:电机厂家参数手册;无手册时可通过堵转低压实验离线辨识,该参数失配会直接导致$\hat{\boldsymbol{\eta}}$无法收敛至标准磁链圆,观测永久静差。