1. 数字测速方法解析
在电机控制系统中,精确测量转速是闭环控制的基础。旋转编码器作为最常用的速度反馈元件,其脉冲信号的处理方式直接影响测速精度。下面我将详细介绍三种主流的数字测速方法,并结合实际工程经验分析其适用场景。
1.1 M法测速(测频法)
M法的核心思想是在固定时间窗口内统计编码器脉冲数。假设我们使用1024线的增量式编码器(Z=1024),采样周期Tc设为10ms,当测得M1=512个脉冲时:
转速n = (60 × M1)/(Z × Tc)
= (60×512)/(1024×0.01)
= 3000 RPM
工程实践中的关键点:
- 定时器配置:需要精确的硬件定时器触发采样中断
- 脉冲计数:建议使用STM32等MCU的编码器接口模式,避免软件计数丢失脉冲
- 抗干扰处理:在工业现场需添加施密特触发器消除噪声
注意:当转速低于n_min=60/(Z×Tc)=58.6RPM时,可能采样期内无脉冲,此时M法失效。因此建议在高速段(>500RPM)使用。
1.2 T法测速(测周法)
T法通过测量相邻脉冲的时间间隔计算转速。使用100MHz的高频时钟(f0),测得两个脉冲间M2=15000个时钟周期时:
转速n = (60×f0)/(Z×M2)
= (60×100×10⁶)/(1024×15000)
≈ 391 RPM
实际应用技巧:
- 输入捕获模式:利用TIMx_CHy的上升沿捕获功能
- 时钟选择:优先使用APB2总线时钟以获得更高计时精度
- 溢出处理:当转速极低时,需扩展32位计数器
典型问题:当转速达到n_max=f0/(Z×2)=48.8kRPM(假设最小可测M2=2)时,可能丢失脉冲边沿。因此T法适用于低速段(<1000RPM)。
1.3 M/T法(混合测速)
M/T法综合了前两种方法的优点。在Tc=10ms基准时间内,测得完整脉冲M1=30个,对应时钟计数M2=294000:
转速n = (60×f0×M1)/(Z×M2)
= (60×100×10⁶×30)/(1024×294000)
≈ 611.5 RPM
实现方案:
- 双定时器协同:TIM1做脉冲计数,TIM2做高精度计时
- 同步机制:在编码器脉冲边沿触发采样中断
- 动态调整:根据转速自动切换M/T权重系数
实测数据对比:
| 方法 | 100RPM误差 | 1000RPM误差 | 10000RPM误差 |
|---|---|---|---|
| M法 | ±15% | ±0.5% | ±0.05% |
| T法 | ±0.1% | ±1% | ±10% |
| M/T法 | ±0.2% | ±0.3% | ±0.4% |
2. PID控制深度实践
2.1 控制架构设计
典型电机双环控制系统:
code复制速度指令 → PID速度环 → 电流环 → PWM → 电机
↑ |
└─ 编码器反馈 ┘
参数整定步骤:
- 先调电流环(带宽1-2kHz)
- 再调速度环(带宽100-200Hz)
- 最后调位置环(带宽10-20Hz)
2.2 增量式PID实现
离散化公式:
Δu(k) = Kp[e(k)-e(k-1)] + Ki×e(k) + Kd[e(k)-2e(k-1)+e(k-2)]
C语言实现关键代码:
c复制typedef struct {
float Kp, Ki, Kd;
float integral;
float prev_err, prev2_err;
float out_max, out_min;
} PID_Handle;
float PID_Update(PID_Handle *h, float setpoint, float measurement) {
float err = setpoint - measurement;
// 抗积分饱和
float new_integral = h->integral + h->Ki * err;
if(new_integral > h->out_max) new_integral = h->out_max;
if(new_integral < h->out_min) new_integral = h->out_min;
float delta = h->Kp*(err - h->prev_err)
+ new_integral
+ h->Kd*(err - 2*h->prev_err + h->prev2_err);
h->prev2_err = h->prev_err;
h->prev_err = err;
h->integral = new_integral;
return delta;
}
2.3 参数整定经验
Ziegler-Nichols法步骤:
- 置Ki=Kd=0,逐渐增大Kp至临界振荡点Kc
- 记录振荡周期Tc
- 根据规则设置参数:
- P控制:Kp=0.5Kc
- PI控制:Kp=0.45Kc, Ki=1.2Kp/Tc
- PID控制:Kp=0.6Kc, Ki=2Kp/Tc, Kd=KpTc/8
工业现场调试技巧:
- 先调P使系统快速响应但略有超调
- 加入I消除静差,从0.1×理论值开始
- D项最后添加,不超过Kp/10
- 带载测试时逐步增加负载观察响应
2.4 先进PID变种
抗积分饱和方案对比:
| 方法 | 优点 | 缺点 |
|---|---|---|
| 积分限幅 | 实现简单 | 动态性能下降 |
| 积分分离 | 改善瞬态响应 | 需设置阈值 |
| 变积分系数 | 自适应调节 | 算法复杂 |
模糊PID实现思路:
- 定义误差e和误差变化率ec的隶属度函数
- 建立Kp/Ki/Kd的模糊规则表
- 通过重心法解模糊输出
- 在线调整PID参数
3. 工程问题解决方案
3.1 测速异常处理
常见故障现象及对策:
-
脉冲丢失:
- 检查编码器供电电压(推荐5V±5%)
- 添加RC低通滤波(截止频率>10倍信号频率)
-
方向误判:
- 验证AB相序
- 启用正交解码模式
-
高速采样溢出:
- 使用32位计数器
- 降低时钟分频系数
3.2 PID振荡抑制
典型振荡场景处理:
-
机械谐振:
- 添加陷波滤波器
- 降低D项增益
-
采样不同步:
- 确保控制周期固定
- 使用硬件定时触发
-
量化误差:
- 提高编码器分辨率
- 采用dithering技术
3.3 温度漂移补偿
参数自适应算法:
python复制def adapt_params(temp):
Kp = base_Kp * (1 + 0.005*(temp - 25))
Ki = base_Ki / (1 + 0.01*abs(temp - 25))
return Kp, Ki
4. 实测数据与优化
某400W伺服电机调试记录:
| 参数 | 初始值 | 优化值 |
|---|---|---|
| 速度环Kp | 0.5 | 1.2 |
| 速度环Ki | 0.1 | 0.3 |
| 电流环带宽 | 500Hz | 1.2kHz |
| 速度响应时间 | 50ms | 15ms |
| 稳态误差 | ±3RPM | ±0.5RPM |
优化后的阶跃响应曲线显示:
- 上升时间缩短68%
- 超调量控制在5%以内
- 抗负载扰动能力提升3倍
在电机控制领域,这些技术细节往往决定了产品的最终性能表现。经过多个项目的验证,采用M/T法测速配合模糊PID控制,在0-3000RPM范围内可实现±0.1%的转速控制精度。
