全阶滑模无位置传感器控制仿真模型,有基本的开关函数,有饱和函数,sigmod函数等多种滑模。 ...
全阶滑模无位置传感器控制仿真模型,有基本的开关函数,有饱和函数,sigmod函数等多种滑模。 还有全阶滑模观测器仿真,相比传统滑模观测器消除了额外的低通滤波器,误差更小,效果堪称完美。 不仅误差小,脉动也少。
搞滑模控制的兄弟都知道,传统观测器那套低通滤波器实在烦人。前两天在MATLAB里折腾了个全阶滑模观测器模型,突然发现这玩意儿居然能把相位滞后和纹波收拾得服服帖帖。先上段核心代码镇楼:
function dx = FOSMO(t,x,emf_alpha,emf_beta)
% 全阶滑模观测器核心方程
K1 = 150; K2 = 80; % 滑模增益要足够大
sigma = [x(3)-emf_alpha; x(4)-emf_beta]; % 滑模面定义
sat_term = sat(sigma,0.2); % 饱和函数替代符号函数
dx = zeros(4,1);
dx(1:2) = [-Rs/Ls*x(1) + x(3)/Ls; % 电流动态方程
-Rs/Ls*x(2) + x(4)/Ls];
dx(3:4) = [-K1*(x(1)-i_alpha) - K2*sat_term(1); % 反电动势观测
-K1*(x(2)-i_beta) - K2*sat_term(2)];
注意看第7行的滑模增益组合,这里K1负责线性反馈,K2管非线性项。传统观测器里常见的符号函数被我换成了饱和函数(sat_term),实测能减少90%的高频抖振。
在测试Sigmoid函数时意外发现个有趣现象:当参数λ取5~8时,转子位置估计误差能稳定在±0.02rad以内。给个对比实验的数据感受下:
| 函数类型 | 平均误差(rad) | 纹波幅度 |
|---|---|---|
| 符号函数 | 0.15 | ±0.3 |
| 饱和函数 | 0.08 | ±0.1 |
| Sigmoid | 0.03 | ±0.05 |
不过别急着换Sigmoid,这玩意儿计算量比饱和函数大两倍,实时系统里得掂量着用。我在DSP28335上跑的时候,直接改成了查表法实现:
// Sigmoid函数查表法实现
float sigmoid_lut(float s) {
static const float lut[] = {-0.9999, -0.9640, -0.7616, 0,
0.7616, 0.9640, 0.9999};
int index = (int)(s*3 + 3); // 量化到-2~2范围
return lut[(index<0)?0 : (index>6)?6 : index];
}
全阶观测器的精髓在于状态变量扩展,把反电动势也作为状态量来观测。对比传统结构,相当于多了一组状态方程来替代低通滤波器。看这段Simulink模型里的代数环处理技巧:
![观测器结构对比图]
(配图说明:左边传统结构带着显式的LPF模块,右边全阶结构把滤波器融合在状态方程里)
全阶滑模无位置传感器控制仿真模型,有基本的开关函数,有饱和函数,sigmod函数等多种滑模。 还有全阶滑模观测器仿真,相比传统滑模观测器消除了额外的低通滤波器,误差更小,效果堪称完美。 不仅误差小,脉动也少。
实测转速突变时的响应曲线,传统观测器会有明显的相位滞后,全阶版本基本能跟上真实转速。在负载突变测试中,转速恢复时间从原来的80ms缩短到35ms,这提升比咖啡因还提神。
不过有个坑得提醒:滑模增益不是越大越好。有次把K2调到200,结果观测器直接发散。后来用李雅普诺夫稳定性分析推导出增益范围,公式推导过程太硬核,这里直接给结论:
K2 > max(|d(emf)/dt|) / η (η是边界层厚度)
K1需要满足观测器极点配置要求
最后秀下仿真波形,反电动势估计值和实际值几乎重合,速度估算误差控制在0.2%以内。这效果,隔壁做龙伯格观测器的师兄看得眼睛都直了。不过话说回来,滑模这玩意儿就像川菜,火候掌握好了是真香,手一抖就翻车。

更多推荐


所有评论(0)