前言
刚开始玩电机的时候也不喜欢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。

文章同步在公众号更新:

联系作者:

MATLAB 到底有多厉害?相关推荐

  1. MATLAB到底有多厉害

    前言 有人说,"MATLAB除了不会生孩子,什么都会." 矩阵运算.数据可视化.GUI(用户界面)设计.甚至是连接其他编程语言,MATLAB都能轻松实现! 那么,MATLAB到底有 ...

  2. MATLAB到底有多厉害?(小白大概了解)

    在查阅中,了解到一篇关于matlab的文章, 个人觉得对于我一样刚开始学习的同学,都有一定的帮助,便分享一下(非推销广告) 有人说,"MATLAB除了不会生孩子,什么都会." 矩阵 ...

  3. matlab有多么强大,MATLAB 到底有多厉害

    匿名用户 1级 2017-04-14 回答 Mathematica是一款科学计算软件,很好地结合了数值和符号计算引擎.图形系统.编程语言.文本系统.和与其他应用程序的高级连接.很多功能在相应领域内处于 ...

  4. matlab 邻近度 离群点_MATLAB到底有多厉害

    有人说,"MATLAB除了不会生孩子,什么都会." 矩阵运算.数据可视化.GUI(用户界面)设计.甚至是连接其他编程语言,MATLAB都能轻松实现! 那么,MATLAB到底有多厉害 ...

  5. MATLAB做研究生毕业论文,为什么说工科硕士论文必须掌握MATLAB?它到底有多厉害?...

    原标题:为什么说工科硕士论文必须掌握MATLAB?它到底有多厉害? 更多论文有关的资料.方法登陆中国论文网www.jinduodian.cn , 如果有关于论文的问题,可以直接在本文留言! 像草稿纸一 ...

  6. 技术系列课|“主动降噪”到底有多厉害?

    "大音希声,大象无形".当世界底色从泼墨山水变成钢筋混凝土,我们的生活也被各种各样的噪音充斥. 平稳噪音,例如白噪.空调/风扇噪音.飞机噪音等:以及非平稳噪音,例如人声噪音,车辆噪 ...

  7. 西北大学计算机排行,世界排名领先,西北大学到底有多厉害?

    原标题:世界排名领先,西北大学到底有多厉害? 西北大学作为综排TOP9的美国名校,是许多留学生选择名校得最佳选择之一.那么作为世界排名领先的西北大学到底有多厉害?接下来立思辰留学云小编为你详细介绍. ...

  8. 手机辐射到底有多厉害!65分钟将生鸡蛋煮熟

    就在前几天,美国联邦通讯委员会(FCC)发布了全球手机辐射排行榜,虽然目前还没有足够的证据表明手机辐射是否会导致大脑患病,但手机辐射的危害不言而喻,至于手机的辐射到底有多厉害,平时我们在使用的时候似乎 ...

  9. 高鹏清华计算机系,中国最顶尖的学霸到底有多厉害?看完,膝盖已跪碎!

    原标题:中国最顶尖的学霸到底有多厉害?看完,膝盖已跪碎! 还记得下面这张曾经轰动网络的成绩单吗? 15门课程100分.4门99分.1门98分! 这是当时清华大学韩衍隽同学的成绩 据了解,该图出自201 ...

最新文章

  1. android popupwindow 自定义背景,Android PopupWindow背景半透明兼容方案
  2. linux 编译C++错误整理
  3. 第6课 仿Siri机器人-语音朗读和语音识别
  4. 《推荐系统实战(二)》音乐推荐系统(数据清洗、召回、排序)
  5. 从入门到入土:基于Python爬取四川大学所有官方网站|狗头保命|
  6. 20211202:力扣第268周周赛(下)
  7. css悬浮在某个span后面,在contenteditable div中的span元素后面设置光标
  8. 【转】tensorflow中的batch_norm以及tf.control_dependencies和tf.GraphKeys.UPDATE_OPS的探究
  9. rapidxml对unicode的支持
  10. 使用Ubuntu的Crontab定时任务需要注意的地方
  11. RK3288 查看时钟树
  12. greenplum定期清理日志脚本-分割线后更新简单方法
  13. Web前端开发技术第三版课后练习答案
  14. c语言调用函数时二维数组实参,C语言函数调用二维数组,指针问题
  15. jwplayer使用方法
  16. NPN与PNP三极管
  17. 12C Sharding 学习安装
  18. CobaltStrike服务端自身隐匿技巧
  19. (初学者)关于C语言中退格键(\b)的初步了解
  20. 定制任务栏托盘的dll

热门文章

  1. 简网越过阅读,重新定义个性化
  2. Zigbee疑难问题定位以及思路方法分享 (四)
  3. php水果百科动态网站毕业设计源码060917
  4. 二维堆叠 matlab,matlab二维数组与三维数组叠加问题
  5. iMovie 入门教程:视频编辑的利器
  6. cube-ui的用法
  7. Quartz定时任务2.3版本数据库表字段说明
  8. html怎么设计为中文字体,css中怎么设置字体?
  9. 单向散列函数-指纹-哈希函数
  10. java二维码登录实现