当前位置: 华文星空 > 知识

MATLAB 到底有多厉害?

2018-03-27知识

关注作者或点赞,私信可领取电机控制秘籍一份。

刚开始玩电机的时候也不喜欢MATLAB,每次都是直接码代码,然后去转电机。

效果不好就在代码里改来改去,晕晕乎乎调了一周进展也不大。这种情况就是陷入了调参数的怪圈,恶性循环进而打击自信,进步也很缓慢。

后来学会了simulink,才明白学习FOC一定要配合MATLAB,进步快很多。

1、 理解离散系统 :在FOC中经常涉及到上个开关周期的角度,电压,或者预测下个周期的角度,电流,一般都是通过延时模块实现。

delay延时模块

为什么要使用这个模块呢?比如一般PWM比较值寄存器被改写后都是使能了预装载,采样后触发计算到比较值生效可以延时0.5个开关周期Ts,也可以延时1个开关周期Ts,或者1.5个Ts。不同的延时对于控制效果有什么区别呢?只需要在simulink定义延时时间即可,非常方便对比不同的方案下的区别。这种调试在实物上实现要复杂很多!

2、 实现参数自整定 :把所有的环路参数放在m文件里,在运行工程前,修改电机参数,环路参数等等,先运行m文件,可以实现参数自整定。要修改参数也只用改m文件,类似宏定义一样,环路的参数自整定和这个也差不多了。

m文件实现参数自整定

3、 强大示波器功能 :simulink的示波器功能非常强大,可以不限制查看任意波形,这在实物调试中也很难做到,除非去开发上位机配合查看,但是也有通道和数据量的限制。一般ARM M0的平台也没有资源去开发上位机。

示波器显示电流电压

尤其是现在比较通用的直流侧单电阻采样波形,可以清晰看到每个扇区对应的电流波形和单电阻波形的对应关系:

单电阻采样波形

4、 模块化的平台,缩短开发周期 :一般开发一种新的观测器,阅读文献之后,经过simulink验证。在搭建好平台之后,把观测器,速度环,电流环,转矩补偿等等封装成各自的模块。需要验证哪个模块,即进行对应的修改。经过simulink验证的方法,基本都可以在实物中实现。如果simulink仿真失败,基本就直接放弃了。一般一个新的观测器仿真需要一到两周,可以大大缩短开发周期。

在搭建了完整的仿真平台后,实物和仿真模型基本可以做到95%以上的对应,除了一些非线性相关的因素,因为在仿真中无法模拟,需要在实物中实现。对于有经验的开发人员,拿到了离散的仿真模型,基本就等于拿到了代码。

当然如果模型在连续域仿真,那当我没说,这种方法以无限的计算量替代离散仿真,基本等同于耍流氓。。。

滑模和电流模型集成到同一平台
滑模模型,和公式一一对应

5、 s函数代码级仿真 :如果有足够的精力,simulink是可以实现c语言代码级仿真的。用s函数替代离散模块,代码放在s函数里,完全可以实现跟实物对应的仿真。移植到实物中代码也可以快速调试通过。

s函数运行的指令是在命令窗口输入:」mex xx.c「,xx是s函数文件名。

s函数代码
s函数框图

6、在线参数变化的仿真。

一般来,Ld和Lq会随着电流出现饱和特性,所以可以通过m文件编程,实现Ld和Lq在线根据电流查表确定电感值。但是实际的无感FOC控制依然使用固定值,电机模型使用的饱和模型,这样子可以评估无感FOC的控制方法对电感饱和是否敏感,或者对电感的敏感程度。

Ld饱和模型

提供一种方法作参考:

用如下文档里的代码生成电感表格:
https:// ww2.mathworks.cn/help/p hysmod/sps/ref/elec_generateidealpmsmfluxdata.html

将表格导入如何可编辑的电机模型即可:
https:// ww2.mathworks.cn/help/a utoblks/ref/fluxbasedpmsm.html?requestedDomain=zh

表格需要自己对应代码整理一下。

7、模拟MCU的运行方式。使用Simulink离散模块搭建的方式,可以模拟MCU的硬件执行的结构。一般MCU最重要的是主频和中断,分别对应Simulink的最上层执行时间和定时执行的中断部分。如下图:

powergui模块设置仿真步长和类型

使用powergui模块设置成离散模式,设置仿真步长5e-7,相当于仿真最上层是2MHz的执行频率,这个2M就类似于MCU的主频,显示,电机模型本体响应的计算就以这个频率执行。

然后通过脉冲模块设置定时触发执行的控制模块,就相当于是定时执行的中断:

使用Pulse Generator模块,执行周期1e-4,相当于中断频率10k,控制环路都放在中断里,就跟MCU的运行结构非常类似了。执行频率对于离散控制来说是核心参数,不同的执行频率仿真结果区别很大。

千万不要在powergui里设置成continuous仿真模式 ,那样会通过很高的计算频率掩盖环路的问题,用连续模式仿真成功基本等同于耍流氓!

8、评估环路的阶跃响应:在伺服中比较常见的测试电流环带宽,一般测试交流给定幅相曲线。

以阶跃响应为例,可以把电机角度固定成0,电流解耦角度和逆变角度都强制给0,然后电流环的Id给参考,测试Id环路的参考和反馈,即可得到阶跃响应。如下图:

Id电流环节约响应

9、评估参数敏感性:

以磁链模型为例,当电机模型磁链跟计算使用磁链相等时,观测角度和误差如下:

计算磁链和电机模型磁链相等

当温度上升,磁链降低到只有计算值的80%,再去比较估算角度和误差,就能判断控制方法对磁链的变化敏感程度。

电机模型的磁链只有计算使用磁链的80%
磁链下降20%,观测角度误差增大到15degrees

对于研究电机控制来说,前期的主要工作放在文献和仿真上,到了代码已经是很后期的工作了。这种工作并不是靠代码量来决定工作进展,也许研究了一个月就改了一行代码却能够解决大问题。

对于我来说,如果不让我使用simulink我觉得自己就基本失业了,工作也没有任何乐趣可言。转电机并不是无脑的去写代码做实验,而是通过simulink去打磨模型,通过模型的搭建深入理解了方法才去开始实物阶段的实验。要想深入理解FOC,使用MATLAB是必经之路,没有捷径可走。模型对电机的诠释是无法用实验来代替的。

到现在为止,MATLAB的功能也许我才用了不到1‰。如果单纯能把MATLAB玩得很溜,我觉得年薪百万也不是难题。至少我的工作离不开MATLAB。