去年接手一个工业风机改造项目时,客户扔过来一个"不可能完成"的需求:要在无位置传感器条件下实现高压风机的顺逆风启动,并且要兼容不同规格的叶轮负载。当时市面上主流方案都依赖编码器反馈,但现场环境根本不允许加装任何旋转检测装置。
这个需求背后其实隐藏着两个行业痛点:
我花了三周时间做了六版方案迭代,最终用无感FOC+滑模观测器的组合拳解决了这个问题。实测在叶轮完全静止到20000RPM的启动过程中,电流波动控制在额定值的15%以内,逆风启动转矩达到额定值的80%。下面就把这套方案的实现细节和踩坑记录完整分享出来。
采用双闭环级联结构:
code复制[速度环PID] → [电流环PR] → [SVPWM调制]
↑ ↑
[滑模观测器] ← [CLARK/PARK变换]
关键设计点在于:
特别注意:电流采样带宽需≥10倍PWM频率,我们用的20kHz PWM对应传感器带宽200kHz
传统高频注入法在高压风机上会引发啸叫,改用改进的脉冲振动法:
实测角度误差<5°,满足启动需求。关键代码片段:
c复制void DetectInitialAngle(void) {
for(int i=0; i<3; i++) {
PWM_InjectPulse(i); // 按相序注入脉冲
delay_ms(2);
di_dt[i] = GetCurrentSlope(); // 获取电流变化率
}
init_theta = atan2f(di_dt[1]-di_dt[2], SQRT3*(di_dt[0]-0.5*(di_dt[1]+di_dt[2])));
}
采用I/f控制策略,分三个子阶段:
参数整定经验公式:
code复制I_start = 2 * I_rated * (J_load/J_motor)
f_ramp_rate = 0.2 * (T_breakaway / J_total)
核心状态方程:
code复制dz/dt = -k*sign(i_α - z_α) - L_s*i_α
e_αβ = [z_α - L_s*i_α, z_β - L_s*i_β]^T
其中k为滑模增益,L_s为定子电感。
参数调试技巧:
在强拖阶段前增加预检测流程:
mermaid复制// 注意:此处仅为说明算法流程,实际实现需用代码替代图示
direction = (Hilbert(i_u)*i_v - i_u*Hilbert(i_v)) > 0 ? CW : CCW;
逆风状态下需额外补偿:
code复制T_comp = B*w + J*dw/dt + T_wind
其中:
实测数据对比:
| 转速(RPM) | 无补偿电流(A) | 补偿后电流(A) |
|---|---|---|
| 500 | 12.8 | 8.2 |
| 1000 | 18.6 | 11.4 |
| 2000 | 25.3 | 15.7 |
电机参数辨识:
控制器参数整定:
python复制# 自动整定脚本示例
def tune_pid():
Kp = 0.45 * J * BW # BW取10Hz
Ki = Kp * BW / 3
Kd = Kp * 0.1 * (1/BW)
启动抖动:
高速失步:
逆风启动失败:
在55kW高压风机上的测试结果:
这套方案后来被复制到七条产线上,最老的设备已经无故障运行超过8000小时。期间最大的收获是认识到:无感控制不是简单地去掉编码器,而是要重构整个控制策略的思维框架。