1. 引言:电机测速方法的迷思与真相
作为一名从事电机控制多年的工程师,我经常遇到同行们关于编码器测速方法的困惑。新手阶段,我们都从M法测速加低通滤波开始;随着经验增长,又听说PLL锁相环测速更"高级"。但究竟哪种方法更好?这个问题困扰着许多从业者。
今天我要打破这个迷思:在某些情况下,M法加低通滤波完全可以达到与PLL测速相同的效果,甚至表现更优。关键在于理解它们的本质联系和适用场景。本文将深入分析三种PLL结构的特点,揭示它们与M法加低通的等效关系,并通过实测数据展示不同方法的实际表现。
2. 三种PLL测速结构的本质解析
2.1 经典PLL结构的问题
经典PLL测速结构由比例(P)和积分(I)环节组成,其传递函数可以表示为:
code复制G(s) = (kp*s + ki) / (s² + kp*s + ki)
这种结构看似完美,但实测表明它存在一个严重缺陷:即使将阻尼比ζ设为1,系统仍会出现过冲。这是因为它的传递函数并非标准的二阶弹簧阻尼系统。在实际电机控制中,这种过冲会导致速度环反馈失真,可能引发系统振荡。
关键发现:经典PLL的过冲不是测量误差,而是算法本身特性导致的"虚假信号",直接用于速度环反馈可能适得其反。
2.2 纯P环节PLL的等效性
纯P环节PLL去掉了积分项,其传递函数简化为:
code复制G(s) = kp / (s + kp)
这实际上就是一个一阶低通滤波器,其截止频率由kp决定。时间常数τ=1/kp。这意味着:
- 当kp=2000时,相当于截止频率318Hz的一阶低通(τ=0.0005s)
- 调整kp值就相当于调整低通滤波器的截止频率
2.3 引出积分项PLL的特性
这种结构将积分项单独引出,其传递函数为:
code复制G(s) = ki / (s² + kp*s + ki)
这是一个标准的二阶低通滤波器,可以通过kp和ki分别调节自然频率ωn和阻尼比ζ。特别地,当ζ=1时,它等效于两个相同的一阶低通串联。
3. 实测对比与性能分析
3.1 代码实现关键点
在实际嵌入式实现中,需要注意几个关键细节:
- 角度归一化处理:必须将误差限制在[-π, π]范围内,防止跨周期时的突变
c复制if(error > PI_F) error -= PI_F * 2.0f;
else if(error < -PI_F) error += PI_F * 2.0f;
- 离散化处理:连续域参数需要转换为离散实现,考虑执行周期DT
c复制#define DT 0.00005f // 20kHz执行频率
pll->I += pll->ki * error * DT;
- 角度累积处理:确保角度值在[0, 2π]范围内循环
c复制if(pll->angle > PI_F * 2.0f) pll->angle -= PI_F * 2.0f;
else if(pll->angle < 0.0f) pll->angle += PI_F * 2.0f;
3.2 动态性能实测对比
通过阶跃响应和噪声抑制测试,我们发现:
-
经典PLL:
- 相位超前约15°
- 存在明显过冲(约10%)
- 噪声抑制能力中等
-
纯P环节PLL:
- 相位滞后约5°
- 无过冲
- 噪声抑制能力中等
-
引出积分项PLL:
- 相位滞后约20°
- 无过冲
- 噪声抑制最佳
实测技巧:测试时应保持相同的ωn(1000rad/s)和ζ(1.0),控制变量才能准确比较。
4. M法与PLL的等效性证明
4.1 采样频率的关键影响
当M法测速的采样频率与PLL执行频率相同(20kHz)时,纯P环节PLL与M法加一阶低通的表现完全重合。这证实了它们在算法层面的等效性。
但常见误区是:许多工程师将M法采样频率设为电流环的1/10(如2kHz)。这会导致:
- 速度波形呈现阶梯状
- 相位滞后增加
- 数据更新率降低,不适合高频速度环
4.2 优化建议
对于必须使用低频采样的场景,推荐:
- 保持高采样频率(20kHz)的M法
- 采用滑动平均滤波替代单次低通
- 10次滑动平均相当于截止频率约200Hz
- 保持数据更新率的同时抑制噪声
c复制// 滑动平均滤波示例实现
#define FILTER_SIZE 10
float speed_buffer[FILTER_SIZE];
int buffer_index = 0;
float moving_average(float new_speed) {
speed_buffer[buffer_index] = new_speed;
buffer_index = (buffer_index + 1) % FILTER_SIZE;
float sum = 0;
for(int i=0; i<FILTER_SIZE; i++) {
sum += speed_buffer[i];
}
return sum / FILTER_SIZE;
}
5. 工程实践中的选择策略
5.1 何时选择M法加低通
- 系统资源有限,需要简化算法时
- 只需要速度测量,无需角度滤波时
- 电机加速度不大的场景(避免M法低速失锁)
5.2 何时选择PLL测速
- 需要同时滤波电角度时
- 计划扩展为速度观测器或扰动观测器时
- 编码器分辨率较高,可以支持更小的ωn设置时
5.3 参数调节经验法则
-
自然频率ωn选择:
- 最低值:大于最大预期加速度除以速度分辨率
- 最高值:小于Nyquist频率(采样频率/2)
-
阻尼比ζ选择:
- 常规应用:1.0(临界阻尼)
- 需要更平滑:1.2-1.5
- 需要更快响应:0.7-1.0
-
M法采样频率:
- 绝对最小值:10倍目标带宽
- 推荐值:与电流环同频(通常20kHz)
6. 高级话题:从测速到观测器
虽然本文聚焦测速方法,但PLL的价值不仅于此。通过改造PLL结构,可以实现:
- 速度观测器:消除稳态误差
c复制// 简化的速度观测器实现
void SpeedObserver_Update(float angle_meas) {
float error = angle_meas - estimated_angle;
// 抗饱和处理
if(fabs(error) > MAX_ERROR) error = MAX_ERROR * sign(error);
estimated_speed += ki * error * DT;
estimated_angle += (estimated_speed + kp * error) * DT;
}
- 扰动观测器:估计负载转矩
c复制float disturbance_obs(float speed_ref, float speed_meas) {
static float dist_estimate = 0;
float error = speed_ref - speed_meas;
dist_estimate += k_dist * error * DT;
return dist_estimate;
}
这些扩展应用是M法难以实现的,也是PLL在高端应用中的真正价值所在。
7. 实测数据解读技巧
分析测速波形时,注意区分:
- 真实动态:反映实际速度变化
- 测量延迟:算法固有的相位滞后
- 噪声特性:高频抖动与采样噪声
特别提醒:不要盲目追求平滑而牺牲动态响应。过度的滤波会导致:
- 速度环相位裕度降低
- 系统响应变慢
- 动态性能下降
一个实用的平衡点是:让噪声幅度小于速度控制精度的1/3。例如,若要求速度控制精度为1RPM,则滤波后噪声应小于0.3RPM峰峰值。
8. 编码器分辨率的影响
编码器分辨率直接影响测速性能:
-
低分辨率编码器(如500线):
- 低速时脉冲间隔大,速度计算波动明显
- 需要更强滤波,导致更大延迟
- 建议配合M/T法使用
-
高分辨率编码器(如17位绝对值):
- 即使低速也能获得平滑速度估计
- 可以使用较小滤波,保持快速响应
- 更适合PLL应用
经验公式:最低可测速度(RPM)≈ 60×采样频率/(4×编码器线数)
例如20kHz采样,500线编码器:最低可测速度≈60×20000/(4×500)=600RPM。要测更低速度,必须结合滤波或改用M/T法。
9. 不同电机类型的考量
-
伺服电机(高动态):
- 优先选择引出积分项PLL
- ωn设置在500-2000rad/s范围
- 强调动态响应速度
-
步进电机(低速大转矩):
- 适合M法加滑动平均
- 采样频率可适当降低
- 强调低速平稳性
-
无刷直流电机(BLDC):
- 方波驱动:M法足够
- FOC驱动:推荐PLL
- 注意换相噪声的影响
10. 实际调试中的陷阱与解决方案
10.1 常见问题1:速度环振荡
可能原因:
- 测速延迟过大(相位滞后)
- 经典PLL的过冲被误认为真实速度
解决方案:
- 改用纯P环节PLL或引出积分项PLL
- 降低ωn(牺牲响应速度换稳定性)
- 检查速度环PID参数是否过于激进
10.2 常见问题2:低速时速度跳动大
可能原因:
- 编码器分辨率不足
- 滤波不足或过度
- 机械传动存在间隙
解决方案:
- 提高编码器分辨率
- 调整滤波参数(找到噪声与延迟的平衡点)
- 机械侧加装消隙装置
- 低速时切换至M/T法测速
10.3 常见问题3:加速度大时失锁
可能原因:
- ωn设置过低,无法跟踪快速变化
- 编码器信号丢失或受干扰
解决方案:
- 根据最大加速度提高ωn
code复制ωn_min = sqrt(最大加速度/允许误差) - 检查编码器接线与电源质量
- 增加信号滤波硬件
在多年实践中,我发现很多"算法问题"实际是实施细节不到位导致的。比如曾遇到一个案例:PLL在特定速度段总是失锁,最终发现是编码器电源走线过长导致信号质量差。因此,良好的硬件设计是算法发挥效用的前提。
