MATLAB到底有多厉害?

小麦大叔 2021-08-30 18:00

前言

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


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


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


正文:

1、理解离散系统


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

图1 delay延时模块


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


2、实现参数自整定:


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

图2 m文件实现参数自整定


3、强大示波器功能:


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

图3 相电压和相电流


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

图4 单电阻采样波形



4、模块化的平台,缩短开发周期:


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


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


当然如果模型在连续域仿真,会以很大的计算量得出很好的波形,掩盖环路中实际存在的很多问题。毕竟控制系统实际是以离散的形式在计算和工作。


图5 多个模型集成到一个框图

图6 滑模模型,和公式一一对应


5、s函数代码级仿真:

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


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


图7 s函数框图


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


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

图8 Ld在线查表


提供一种方法作参考:


用如下文档里的代码生成电感表格:

https://ww2.mathworks.cn/help/physmod/sps/ref/elec_generateidealpmsmfluxdata.html


将表格导入如何可编辑的电机模型即可:

https://ww2.mathworks.cn/help/autoblks/ref/fluxbasedpmsm.html?requestedDomain=zh


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


7、模拟MCU的运行方式:


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

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


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


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

图10 Pulse Generator模块


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


千万不要在powergui里设置成continous仿真模式,那样会通过很高的计算频率掩盖环路的问题,与实际产品中电机运行状态不符。


8、评估环路的阶跃响应:


在伺服中比较常见的测试电流环带宽,一般测试交流给定幅相曲线。


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

图11 电流环阶跃响应


9、评估参数敏感性:


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


图12 磁链准确时的观测误差


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


图13 磁链下降时的观测误差


总结:

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


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


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



往期文章:


基于磁链模型的非线性观测器


HFI高频注入代码解读


产品级IPMSM高频注入低速无传感器控制方法



作者简介:


虚怀若谷,热爱永存!

我是转子磁场定向,十年FOC开发经验,精通永磁同步电机和异步电机无感控制。

可提供长期技术顾问咨询或者项目开发,商务合作请加V: PMSM_RFO



小麦大叔 一位热衷技术的攻城狮,懂点技术,会讲故事,交个朋友?
评论 (1)
xuewen_ran 2021-09-01 16:34
要想深入理解FOC,使用MATLAB是必经之路,没有捷径可走。模型对电机的诠释是无法用实验来代替的。
热门推荐
X
广告
我要评论
1
7
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦