3. 编码器与SVPWM的接口:位置采样与PWM同步机制、速度估算方法

好,咱们进入第三章。这一章我把它叫做「接口的艺术」。为什么这么说?因为编码器和SVPWM之间,说白了就是一场「你什么时候告诉我位置,我什么时候更新电压」的配合战。配合不好,电机就会抖、会响、会丢步。

我在项目里见过太多人,编码器选得挺好,SVPWM算法也写得对,但就是跑起来不对劲。一查,原来是采样时机和PWM更新没对齐。嗯,这章咱们就把这个坑填上。

3.1 位置采样与PWM同步机制

先问一个问题:你什么时候读编码器的值?

很多人习惯在主循环里随便找个地方就读。这其实很危险。你想想看,PWM周期是固定的,比如10kHz,也就是100微秒一个周期。如果你在PWM周期的中间读位置,然后立刻更新占空比,那这个占空比对应的电压矢量,和实际转子位置之间就有个时间差。这个时间差,就是误差。

我个人习惯的做法是:在PWM的载波波谷(或者波峰)处触发ADC采样和编码器读取。为什么选这个点?因为这时候PWM计数器归零,电流纹波最小,干扰也最小。

核心原则:位置采样必须在PWM周期内固定的、可重复的时刻进行,且该时刻与PWM更新时刻严格对齐。

具体实现上,我一般用两种方式:

  1. 硬件触发:用定时器的比较匹配事件直接触发编码器接口的锁存。这样延迟是固定的,大概几十纳秒。
  2. 中断同步:在PWM中断服务函数里,一进来就先读编码器,然后再算SVPWM。这样能保证每次读的位置都是上一个周期结束时的位置。

我的小技巧:如果MCU支持,把编码器的位置寄存器配置成「硬件锁存」模式。这样PWM触发信号一来,位置值就被冻住了,你什么时候去读都行,读到的都是同一时刻的值。

我曾经在一个伺服项目里,因为没做同步,电机在低速时总是有「咔咔」的顿挫感。后来把编码器读取挪到PWM中断的入口,问题立刻消失。你想想看,这中间差了可能也就几十微秒,但对闭环控制来说,这几十微秒就是生与死的区别。

3.2 速度估算方法:M法、T法、MT法

有了位置,下一步就是算速度。速度估算的方法,我把它分成三类。咱们一个一个说。

3.2.1 M法(测频法)

M法的思路很简单:在固定时间内,数编码器产生了多少个脉冲。

公式:

速度 = (脉冲数 / 编码器线数) / 采样时间 * 60 (转/分钟)

举个例子:编码器是2500线,采样时间是10ms,数到50个脉冲。那速度就是 (50 / 2500) / 0.01 * 60 = 120 RPM。

M法有什么特点?

  • 优点:高速时精度高。因为高速时脉冲多,数出来的值稳定。
  • 缺点:低速时不行。比如电机只转1 RPM,10ms里可能只来1个脉冲,甚至0个。这时候算出来的速度要么是0,要么误差巨大。

注意:M法在低速时有一个「死区」。当采样时间内脉冲数小于2时,速度估算基本不可用。我曾经在调试一个转台时,低速段速度波动达到30%,后来才发现是M法在低速时的固有缺陷。

3.2.2 T法(测周法)

T法反过来:测量两个相邻脉冲之间的时间间隔。

公式:

速度 = 1 / (时间间隔 * 编码器线数) * 60 (转/分钟)

比如两个脉冲之间隔了1ms,编码器2500线,那速度就是 1 / (0.001 * 2500) * 60 = 24 RPM。

T法的特点:

  • 优点:低速时精度高。因为低速时脉冲间隔长,时间测得更准。
  • 缺点:高速时不行。高速时脉冲间隔太短,比如10000 RPM时,两个脉冲之间只有2.4微秒。普通MCU的定时器分辨率根本不够,算出来的速度跳得厉害。

我记得有一次做高速主轴,用T法估算速度,结果速度反馈值像心电图一样上下跳。后来一算,定时器分辨率是0.1微秒,但高速时脉冲间隔才几微秒,量化误差直接导致速度波动。

3.2.3 MT法(综合法)

MT法就是把M法和T法结合起来,取长补短。

怎么做?

  1. 设定一个固定的采样时间T0(比如10ms)。
  2. 在T0内,数脉冲数M1(这是M法的部分)。
  3. 同时,测量T0内最后一个完整脉冲的时间间隔Tp(这是T法的部分)。
  4. 速度 = M1 / (T0 + Tp) * 系数。

你看,这个公式里,分母是T0加上一个修正项Tp。这样在高速时,M1很大,Tp的影响很小,相当于M法;在低速时,M1很小甚至为1,但Tp能精确测量,相当于T法。

MT法的精髓:它自动在M法和T法之间平滑过渡,不需要你手动切换。高速用M法,低速用T法,中间区域自然融合。

下面这张图,是我自己总结的三种方法的适用区间:

速度估算方法适用区间对比 转速 (RPM) 0 100 1000 5000 10000 精度 高 低 M法(测频法) 高速精度高 T法(测周法) 低速精度高 MT法 全速域自适应 说明:横轴为转速,纵轴为估算精度。颜色越深代表该区域该方法越适用。

实际项目中,我推荐大家用MT法。虽然代码量比M法多那么几十行,但换来的是全速域稳定的速度反馈。特别是做位置闭环的时候,速度反馈的抖动会直接影响定位精度。

3.3 三种方法的对比总结

最后,我用一张表把三种方法的核心差异列出来,方便你选型时参考:

方法 测量原理 低速精度 高速精度 实时性 实现复杂度
M法 固定时间数脉冲 差(有死区) 优 固定(取决于采样时间) 低
T法 测量脉冲间隔 优 差(量化误差大) 可变(高速时更新快) 中
MT法 综合M法和T法 优 优 固定(与采样时间一致) 中高

我的建议:如果你的电机工作在一个比较窄的速度范围内(比如只跑3000-5000 RPM),那M法就够了,没必要上MT法。但如果你做的是宽调速范围的应用(比如从1 RPM到10000 RPM),那MT法是唯一的选择。我在做工业缝纫机驱动时,速度范围从几十转到上万转,MT法帮我省了很多调试时间。

嗯,这一章的内容就到这儿。位置采样和PWM同步是基础,速度估算是上层应用。这两块做好了,你的SVPWM控制才算真正「接地气」了。