3. 编码器与SVPWM的接口:位置采样与PWM同步机制、速度估算方法
好,咱们进入第三章。这一章我把它叫做「接口的艺术」。为什么这么说?因为编码器和SVPWM之间,说白了就是一场「你什么时候告诉我位置,我什么时候更新电压」的配合战。配合不好,电机就会抖、会响、会丢步。
我在项目里见过太多人,编码器选得挺好,SVPWM算法也写得对,但就是跑起来不对劲。一查,原来是采样时机和PWM更新没对齐。嗯,这章咱们就把这个坑填上。
3.1 位置采样与PWM同步机制
先问一个问题:你什么时候读编码器的值?
很多人习惯在主循环里随便找个地方就读。这其实很危险。你想想看,PWM周期是固定的,比如10kHz,也就是100微秒一个周期。如果你在PWM周期的中间读位置,然后立刻更新占空比,那这个占空比对应的电压矢量,和实际转子位置之间就有个时间差。这个时间差,就是误差。
我个人习惯的做法是:在PWM的载波波谷(或者波峰)处触发ADC采样和编码器读取。为什么选这个点?因为这时候PWM计数器归零,电流纹波最小,干扰也最小。
核心原则:位置采样必须在PWM周期内固定的、可重复的时刻进行,且该时刻与PWM更新时刻严格对齐。
具体实现上,我一般用两种方式:
- 硬件触发:用定时器的比较匹配事件直接触发编码器接口的锁存。这样延迟是固定的,大概几十纳秒。
- 中断同步:在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法结合起来,取长补短。
怎么做?
- 设定一个固定的采样时间T0(比如10ms)。
- 在T0内,数脉冲数M1(这是M法的部分)。
- 同时,测量T0内最后一个完整脉冲的时间间隔Tp(这是T法的部分)。
- 速度 = M1 / (T0 + Tp) * 系数。
你看,这个公式里,分母是T0加上一个修正项Tp。这样在高速时,M1很大,Tp的影响很小,相当于M法;在低速时,M1很小甚至为1,但Tp能精确测量,相当于T法。
MT法的精髓:它自动在M法和T法之间平滑过渡,不需要你手动切换。高速用M法,低速用T法,中间区域自然融合。
下面这张图,是我自己总结的三种方法的适用区间:
实际项目中,我推荐大家用MT法。虽然代码量比M法多那么几十行,但换来的是全速域稳定的速度反馈。特别是做位置闭环的时候,速度反馈的抖动会直接影响定位精度。
3.3 三种方法的对比总结
最后,我用一张表把三种方法的核心差异列出来,方便你选型时参考:
| 方法 | 测量原理 | 低速精度 | 高速精度 | 实时性 | 实现复杂度 |
|---|---|---|---|---|---|
| M法 | 固定时间数脉冲 | 差(有死区) | 优 | 固定(取决于采样时间) | 低 |
| T法 | 测量脉冲间隔 | 优 | 差(量化误差大) | 可变(高速时更新快) | 中 |
| MT法 | 综合M法和T法 | 优 | 优 | 固定(与采样时间一致) | 中高 |
我的建议:如果你的电机工作在一个比较窄的速度范围内(比如只跑3000-5000 RPM),那M法就够了,没必要上MT法。但如果你做的是宽调速范围的应用(比如从1 RPM到10000 RPM),那MT法是唯一的选择。我在做工业缝纫机驱动时,速度范围从几十转到上万转,MT法帮我省了很多调试时间。
嗯,这一章的内容就到这儿。位置采样和PWM同步是基础,速度估算是上层应用。这两块做好了,你的SVPWM控制才算真正「接地气」了。