4. 位置与速度检测:旋转变压器与编码器原理、SPI/SSI接口时序、速度计算(M法/T法/MT法)

位置和速度,是电机控制的「眼睛」。没有它们,你的FOC算法再漂亮也是盲人摸象。我在弱磁项目里见过太多因为位置信号抖动导致电流失控的案例,说白了,源头往往不是算法,而是传感器这一关就没过。

这一章我们聚焦三个核心问题:用什么传感器?怎么把数据读回来?怎么算出速度?

4.1 旋转变压器 vs 编码器:选型前的灵魂拷问

先说说两种主流传感器的脾气。你想想看,一个在高温油污的工业现场,一个在追求极致精度的伺服平台,它们的选择逻辑完全不同。

特性 旋转变压器 编码器(增量式/绝对式)
原理 电磁感应,类似小型变压器 光电/磁电,码盘+读数头
抗环境能力 极强(耐高温、振动、油污) 一般(怕粉尘、油污、振动)
精度 中等(12~16位,依赖RDC芯片) 高(17~23位,甚至更高)
成本 较高(本体+RDC解码芯片) 中低(增量式便宜,绝对式贵)
典型应用 电动汽车、军工、重载伺服 机器人、数控机床、轻载伺服

我个人习惯:做弱磁控制,如果目标转速超过10000rpm,我优先考虑旋变。为什么?因为编码器在高速下容易丢脉冲,而旋变是模拟量输出,没有这个烦恼。当然,代价是解码电路更复杂。

避坑指南:我曾经在一个风电变桨项目里选了增量式编码器,结果现场电磁干扰严重,编码器脉冲经常被毛刺吃掉,导致速度计算跳变。后来换成旋变+AD2S1205解码,问题才解决。所以,环境恶劣的场合,别犹豫,上旋变。

4.2 旋转变压器的工作原理与解码

旋变本质上是一个旋转变压器。它的定子有励磁绕组,转子有两相正交的输出绕组。当你给励磁绕组通入高频正弦波(比如10kHz),转子旋转时,两相输出信号的幅值会随角度变化:

Vsin = Vp * sin(θ) * sin(ωt)
Vcos = Vp * cos(θ) * sin(ωt)

其中θ就是转子角度。解码芯片(比如ADI的AD2S1205、TI的PGA411)会实时跟踪这两个信号,解算出θ和转速。嗯,这里要注意:励磁频率和解码带宽是匹配的,频率越高,带宽越宽,但抗干扰能力会下降。

关键参数:旋变的极对数。常见的是1对极(一圈一个电气周期),也有多对极的。多对极旋变精度更高,但解码算法更复杂。我在做电动车主驱时用过2对极旋变,电气角度和机械角度需要做映射,千万别搞混。

4.3 编码器:增量式与绝对式

编码器就简单多了。增量式输出A、B、Z三路脉冲,通过相位差判断方向,通过脉冲计数算位置。绝对式则直接输出一个二进制码,代表当前绝对位置。

但增量式有个致命弱点:断电后位置丢失。所以上电必须找零。绝对式就没这个烦恼,但接口通常更复杂——SPI或SSI。

4.4 SPI/SSI接口时序:把数据读回来

不管是旋变的RDC芯片,还是绝对式编码器,它们和MCU通信最常用的就是SPI或SSI。SSI其实是SPI的变种,区别在于:

  • SPI:全双工,有MISO/MOSI,时钟由主机提供,片选CS控制。
  • SSI:半双工,只有一根数据线(或差分对),时钟由主机提供,数据在时钟上升沿/下降沿输出。

以绝对式编码器常用的SSI协议为例,时序是这样的:

// 伪代码:SSI读取绝对位置
uint32_t ReadSSI(void) {
    uint32_t data = 0;
    // 拉低时钟,启动传输
    CLK_LOW();
    delay_us(1);
    // 产生N个时钟脉冲(N=位数,比如25位)
    for(int i = 0; i < 25; i++) {
        CLK_HIGH();
        delay_us(0.5);
        data <<= 1;
        if(DATA_IN == HIGH) data |= 1;
        CLK_LOW();
        delay_us(0.5);
    }
    // 等待编码器准备下一帧
    delay_us(20);
    return data;
}
注意:SSI的时钟频率不能太高,通常不超过5MHz。我曾经为了追求速度把时钟提到10MHz,结果编码器数据偶尔跳变,查了半天发现是线缆太长导致信号反射。降回4MHz就稳定了。所以,时序参数要留余量。

4.5 速度计算:M法、T法、MT法

位置读回来了,怎么算速度?三种经典方法,各有适用场景。

4.5.1 M法(测频法)

在固定时间T内,统计编码器脉冲数M。速度 = M / (T * 编码器线数)。

  • 优点:高速时精度高。
  • 缺点:低速时M很小,误差大。

4.5.2 T法(测周法)

测量两个相邻脉冲的时间间隔T。速度 = 1 / (T * 编码器线数)。

  • 优点:低速时精度高。
  • 缺点:高速时T很小,误差大。

4.5.3 MT法(综合法)

同时测量固定时间T内的脉冲数M,以及最后一个完整脉冲的时间T0。速度 = M / (T0 * 编码器线数)。

  • 优点:全速域精度都高。
  • 缺点:计算复杂,需要高精度定时器。
方法 适用速度 精度 实时性 实现难度
M法 中高速 中 高 低
T法 低速 高 中 低
MT法 全速域 高 中 高
我的经验:在弱磁控制中,我通常用MT法。因为弱磁区域转速范围很宽(从几百到几万转),M法在低速时根本没法用。但MT法需要两个定时器:一个用于计数脉冲,一个用于测量时间间隔。如果你的MCU定时器资源紧张,可以考虑在低速时切到T法,高速时切到M法——这就是所谓的「自适应法」。

4.6 知识体系总览

下面这张图把本章的核心逻辑串起来了。从传感器选型,到接口时序,再到速度计算,每一步都有坑,也都有技巧。

位置与速度检测知识体系 旋转变压器 增量式编码器 绝对式编码器 RDC解码(SPI) 脉冲计数(QEP) SSI/SPI读取 M法(测频) T法(测周) MT法(综合) 弱磁控制:速度环 + 电流环 选型决定接口,接口决定精度,精度决定控制效果。每一步都环环相扣。

4.7 实战建议

最后,给几个我在项目中踩过的坑和总结的经验:

  1. 滤波不能省:位置信号进来,先做低通滤波。我习惯用一阶IIR,截止频率设在速度环带宽的5~10倍。
  2. 速度计算要同步:速度环的采样时刻,必须和位置采样对齐。否则会有相位滞后,导致系统振荡。
  3. 编码器线数不是越高越好:线数高了,脉冲频率也高,MCU的QEP模块可能处理不过来。我一般选1024~4096线,够用就行。
  4. 旋变的励磁频率要稳定:如果励磁信号有抖动,解码出来的角度也会抖。用晶振或者DDS生成,别用MCU的PWM直接滤波。
一句话总结:位置检测是弱磁控制的地基。传感器选对了,接口时序调稳了,速度算准了,后面的控制算法才能发挥价值。别在这个环节省钱省力,否则后面有你哭的时候。