第10章 无传感器控制总览

概述

无传感器控制(Sensorless Control)是指不使用物理位置/速度传感器,通过算法估计电机转子位置和速度的控制方法。

核心思想:从电机可测量量(电压、电流)中反推转子信息


为什么需要无传感器控制

优点描述
成本降低无需编码器、Hall 传感器
空间节省电机尺寸可以更小
可靠性提高无传感器故障点
维护简化无需传感器校准和维护
安装简便减少布线和安装工作
缺点描述
低速性能差低速时反电动势小,难以估计
启动困难启动时无反电动势,需要特殊策略
动态性能下降响应速度低于有感方案
算法复杂需要复杂的观测器算法

无传感器控制方法分类

┌───────────────────────────────────────────┐
│         无传感器控制方法            │
└───────────────────────────────────────────┘
          ↓
┌─────────┴─────────┬──────────────┐
│                 │              │
反电动势方法    观测器方法      混合方法
│                 │              │
└─────────┬─────────┴──────────────┘
          ↓
┌───────┴────────┬─────────────┐
│                │             │
过零检测      反电动势积分    高频注入

方法一:反电动势过零检测

原理

检测三相反电动势的过零点,判断换相时机。

工作流程

1. 悬空一相
2. 检测悬空相反电动势过零
3. 触发换相
4. 重复步骤1-3

电路实现

┌─────────────┐
│  分压电路   │ ─→ 电压中点
└─────────────┘
        ↓
   ┌────────────────────────────────┐
   │         相电压比较器         │
   │  E_a > V_n, E_b > V_n, E_c > V_n │
   └────────────────────────────────┘
              ↓
         换相判断逻辑

优缺点

特性评价
实现简单★★★★★☆
低速性能★☆☆☆☆☆
中高速性能★★★★☆☆
算法复杂度★★★★★☆
成本★★★★★☆

适用场景

  • 中高速应用(风扇、泵)
  • 成本敏感场景
  • 简单速度控制

方法二:反电动势积分

原理

通过积分反电动势获得转子位置和速度。

E_α = V_α - R·i_α - L·di_α/dt
E_β = V_β - R·i_β - L·di_β/dt

θ = ∫E_α dt + L·i_β
    └──∫E_β dt - L·i_α

ω = (E_α·cosθ + E_β·sinθ) / |Ψ|

优点

  • 无需硬件比较器
  • 可以连续估计位置
  • 适合中高速范围

缺点

  • 需要准确的电机参数(R、L)
  • 积分漂移问题
  • 低速性能仍然有限

方法三:滑模观测器(SMO)

原理

设计滑模面,强制估计误差在滑模上运动。

滑模面:s = e + λ·ė = 0
控制律:u = K·sign(s)

观测器方程:
dî/dt = A·î + B·u + K·sign(s)

SMO 结构

            ┌─────────────┐
            │  电流观测器  │
            └──────┬──────┘
                   ↓
            ┌─────────────┐
            │  滑模增益   │
            └──────┬──────┘
                   ↓
            ┌─────────────┐
            │  位置估计   │
            └──────┬──────┘
                   ↓
             估计位置/速度

优缺点

特性评价
鲁棒性★★★★★☆
低速性能★★★☆☆☆
高速性能★★★★☆☆
实现复杂度★★★☆☆☆
抗干扰能力★★★★★☆

抖振问题及解决

问题:sign 函数导致估计值在真值附近振荡

解决方案:

  1. 饱和函数替代 sign:tanh 函数、sat 函数
  2. 低通滤波:平滑估计输出
  3. 边界层滑模:在边界层使用线性控制
// 饱和函数
float sat(float x, float bound) {
    if (x > bound) return bound;
    if (x < -bound) return -bound;
    return x;
}

// 使用饱和函数
output = K * sat(s, boundary_layer);

方法四:扩展卡尔曼滤波(EKF)

原理

利用贝叶斯估计理论,考虑测量噪声和过程噪声。

预测步骤:
î(k|k-1) = f(î(k-1|k-1), u(k-1))
P(k|k-1) = A·P(k-1|k-1)·A^T + Q

更新步骤:
K(k) = P(k|k-1)·H^T·(H·P(k|k-1)·H^T + R)^(-1)
î(k|k) = î(k|k-1) + K(k)·(z(k) - H·î(k|k-1))
P(k|k) = (I - K(k)·H)·P(k|k-1)

状态向量

// 五状态模型
StateVector x = {
    i_α,      // α 轴电流
    i_β,       // β 轴电流
    E_α,       // α 轴反电动势
    E_β,       // β 轴反电动势
    θ          // 转子位置
};

优缺点

特性评价
估计精度★★★★★☆
鲁棒性★★★★☆☆
低速性能★★★☆☆☆
实现复杂度★★☆☆☆☆
计算量★★☆☆☆☆

适用场景

  • 高精度要求
  • 噪声环境
  • 参数不确定系统

方法五:模型参考自适应系统(MRAS)

原理

使用可调模型,通过自适应律调整参数使模型匹配实际系统。

实际系统:dX/dt = f(X, θ)
参考模型:dX̂/dt = f(X̂, θ̂)

自适应律:dθ̂/dt = γ·(X - X̂)·X̂

目标:使 θ̂ → θ

MRAS 结构

         ┌─────────┐
         │ 实际系统 │
         └────┬────┘
              │
              差 e = X - X̂
              ↓
         ┌─────────┐
         │ 自适应律 │ ─→ 参数更新
         └────┬────┘
              ↓
         ┌─────────┐
         │ 参考模型 │
         └─────────┘
              ↓
          模型输出 X̂

优缺点

特性评价
参数跟踪★★★★★☆
稳定性★★★★☆☆
实现复杂度★★★☆☆☆
动态性能★★★☆☆☆

方法六:高频注入

原理

向电机注入高频信号,从响应中提取位置信息。

工作原理

注入信号:u_inj = A·sin(ω_inj·t)

电感调制(电机饱和位置相关):
L(θ) = L_0 + L_1·cos(2pθ)

从响应中提取位置信息:
i_2ω ∝ L_1·sin(2pθ)

优缺点

特性评价
低速性能★★★★★☆
静止位置检测★★★★★☆
高频噪声★★☆☆☆☆
转矩脉动★★☆☆☆☆

适用场景

  • 零速和低速启动
  • 需要精确定位
  • 高频噪声可容忍的应用

无传感器启动策略

1. 开环启动

1. 按预定时序换相(类似方波控制)
2. 逐渐增加速度
3. 当速度足够高时,切换到闭环

2. 高频注入启动

1. 注入高频信号
2. 从响应中估计位置
3. 切换到闭环控制

3. 电流脉冲检测

1. 施加电流脉冲
2. 检测响应
3. 根据响应确定位置
4. 迭代到足够精度

性能对比总结

方法低速性能高速性能鲁棒性实现难度计算量
过零检测★☆☆☆☆☆★★★★☆☆★★☆☆☆☆★★★★★☆低
反电动势积分★★☆☆☆☆★★★★☆☆★★★☆☆☆★★★☆☆☆低
滑模观测器★★★☆☆☆★★★★☆☆★★★★★☆★★★☆☆☆中
EKF★★★☆☆☆★★★★★☆★★★★☆☆★★☆☆☆☆高
MRAS★★★☆☆☆★★★★☆☆★★★★☆☆★★★☆☆☆中高
高频注入★★★★★☆★★☆☆☆☆★★★★☆☆★★★☆☆☆中

混合方法

低速 + 高速切换

低速区域:高频注入法
中速区域:滑模观测器
高速区域:反电动势法

根据速度范围平滑切换

自适应方法切换

根据动态条件自动选择最优估计器
- 启动阶段:高频注入
- 加速阶段:EKF
- 稳定运行:SMO 或 EKF

实现框架(C++)

#include <math.h>

// 滑模观测器
class SensorlessObserver {
private:
    // 电机参数
    float R_phase;       // 相电阻
    float L_phase;       // 相电感
    float pole_pairs;    // 极对数

    // 估计状态
    float i_alpha_est;    // 电流估计
    float i_beta_est;
    float E_alpha_est;    // 反电动势估计
    float E_beta_est;
    float theta_est;      // 位置估计
    float omega_est;      // 速度估计

    // SMO 参数
    float gain_smo;      // 滑模增益
    float boundary_layer; // 边界层宽度

public:
    SensorlessObserver(float R, float L, int poles)
        : R_phase(R), L_phase(L), pole_pairs(poles),
          gain_smo(0.5f), boundary_layer(0.05f) {}

    // 饱和函数
    float sat(float x) {
        if (x > boundary_layer) return boundary_layer;
        if (x < -boundary_layer) return -boundary_layer;
        return x;
    }

    // SMO 更新
    void update(float v_alpha, float v_beta,
                float i_alpha, float i_beta,
                float dt) {

        // 电流误差
        float error_alpha = i_alpha - i_alpha_est;
        float error_beta = i_beta - i_beta_est;

        // 滑模面
        float s_alpha = gain_smo * sat(error_alpha);
        float s_beta = gain_smo * sat(error_beta);

        // 反电动势估计
        E_alpha_est = v_alpha - R_phase * i_alpha_est - L_phase * s_alpha;
        E_beta_est = v_beta - R_phase * i_beta_est - L_phase * s_beta;

        // 位置估计
        theta_est += (L_phase * i_alpha_est * E_alpha_est -
                       L_phase * i_beta_est * E_beta_est) * dt;

        // 速度估计
        float E_magnitude = sqrtf(E_alpha_est * E_alpha_est +
                               E_beta_est * E_beta_est);
        omega_est = E_magnitude / fabsf(L_phase);

        // 限制到 [0, 2π)
        theta_est = fmodf(theta_est, 2.0f * M_PI);
        if (theta_est < 0) theta_est += 2.0f * M_PI;

        // 电流更新
        i_alpha_est += (v_alpha - R_phase * i_alpha_est -
                       L_phase * s_alpha + E_alpha_est) * dt / L_phase;
        i_beta_est += (v_beta - R_phase * i_beta_est -
                      L_phase * s_beta + E_beta_est) * dt / L_phase;
    }

    // 获取估计值
    float getTheta() { return theta_est; }
    float getOmega() { return omega_est; }
};

参数整定

滑模观测器参数

参数作用典型值
gain_smo滑模增益,决定收敛速度0.3-1.0
boundary_layer边界层宽度,影响平滑度0.01-0.1
滤波系数后滤波平滑抖振0.1-0.5

EKF 参数

参数作用典型值
Q过程噪声协方差1e-6 - 1e-4
R测量噪声协方差1e-4 - 1e-2
P0初始协方差1e-3 - 1e-1

常见问题

Q1: 无传感器控制的最小启动速度?

答:

  • 过零检测:~10% 额定转速
  • 反电动势积分:~5% 额定转速
  • 滑模观测器:~2-5% 额定转速
  • EKF:~1-2% 额定转速
  • 高频注入:可以从零启动

Q2: 如何提高低速性能?

答:

  1. 使用高频注入法
  2. 结合多种方法(低速用注入,高速用其他)
  3. 提高电流采样精度
  4. 优化滤波器设计

Q3: 无传感器和有感方案如何选择?

答:

应用无传感器有感
低成本风扇推荐不推荐
伺服机器人不推荐推荐
无人机动力可选推荐
电动汽车可选推荐
高速泵类推荐可选

Q4: 无传感器控制的稳定性如何保证?

答:

  1. Lyapunov 稳定性分析
  2. 设计合理的观测器增益
  3. 使用边界层减少抖振
  4. 故障检测和容错

参考资源

资源链接
无传感器控制综述IEEE Transactions
滑模观测器论文“Sliding Mode Observers for Sensorless Control”
EKF 电机控制“Extended Kalman Filter for PMSM”
ST 无传感器应用ST 官方文档

学习路径

第一阶段(1-2周)

  1. 理解反电动势原理
  2. 学习过零检测方法
  3. 搭建简单过零检测实验
  4. 理解低速性能限制

第二阶段(2-3周)

  1. 学习滑模观测器理论
  2. 实现 SMO 算法
  3. 处理抖振问题
  4. 性能测试和对比

第三阶段(2-3周)

  1. 学习 EKF 理论
  2. 实现 EKF 算法
  3. 调整噪声参数
  4. 与 SMO 对比

第四阶段(2-3周)

  1. 学习混合方法
  2. 设计切换策略
  3. 实现完整无传感器 FOC
  4. 全面测试和优化

最后更新:2025-05-07


相关内容

如果这篇文章对你有帮助,欢迎请我喝杯咖啡 ☕
Cygnus Yang 支付宝支付宝
Cygnus Yang 微信微信