中国汽车工程师之家--聚集了汽车行业80%专业人士 

论坛口号:知无不言,言无不尽!QQ:542334618 

本站手机访问:直接在浏览器中输入本站域名即可 

搜索附件  
汽车工程师之家 附件中心 结构原理专业知识特区 『Matlab-Simulink-Advisor论坛』 MBD实战之电机控制 第02期:构建MBD仿真模型和状态机w11.jpg
左侧广告
附件中心&附件聚合2.0
For Discuz! X2.5 © hgcad.com

MBD实战之电机控制 第02期:构建MBD仿真模型和状态机w11.jpg

 

MBD实战之电机控制 第02期:构建MBD仿真模型和状态机:
全文约4744字,1段视频,你将看到以下内容:


    模型仿真与实际应用之间的区别

    MBD拉近模型仿真与实际应用之间的距离

    基于Stateflow构建电机控制状态机

    下期预告


1 模型仿真与实际应用之间的区别

MBD(Model-Based Design,基于模型的设计)是通过模型生成代码的,所有我们有必要弄清楚模型仿真与实际应用之间的区别。

仿真模型与实际应用之间的区别本质上是理论与实践之间的差别,其中的差别可以说是两个完全不同的话题。

上期文章给了一本参考书《现代永磁同步电机控制原理及MATLAB仿真》,关于永磁无刷电机的数学理论和模型仿真,这本书讲的很全面。对电机控制理论还有所欠缺的,可以先学习和实现书中的一些算法和数学建模。



永磁无刷电机的模型仿真参考书 - From Internet

这里又给大家更新三篇与电机控制实践相关的文章。它们是由NXP的工程师编写的电机控制应用笔记,可以在NXP官网找到,也可以在对话框中回复关键词“NXP应用笔记”,即可收到相应资源。

这三篇应用笔记分别是:


    3-Phase Sensorless PMSM Motor Control Kit with S32K144

    3-Phase Sensorless BLDC Motor Control Kit with S32K144

    3-phase Sensorless Single-Shunt Current-Sensing PMSM Motor Control Kit with MagniV MC9S12ZVM




NXP电机控制应用笔记 - From autoMBD

前两篇分别以PMSM和BLDC为主题,介绍如何实现无感FOC控制;第三篇讲的是单电阻无感控制方案,实现的也是FOC算法,软件实现上是有一些区别的,也要复杂一些。

Tips:第三篇是基于MagniV MC9S12ZVM的,而不是S32K144,参考这篇文章时,主要学习的是单电阻电机控制方案,这个方案也是完全可以移植到S32K1xx系列上的。

无感控制比有感控制要复杂,将无感的方案稍加改造就可以做出有感的控制方案,所以这三篇应用笔记是很有实践参考价值的。

这三篇应用笔记给的都是纯代码开发的方案,即介绍了工程实践中如何从数学原理一步一步实现电机控制,主要内容包括:


    电机控制数学原理

    电流、电压采样输入和驱动输出

    MCU模块资源的使用

    底层驱动配置和初始化

    电机控制软件架构(状态机、电机控制库、MCAT等)



下面的这个框图可以较为全面的展示第1~4点在电机控制中的实际体现:系统从外部硬件(电机、逆变器、预驱芯片)起,经过信号采集,再到MCU的外设模块(白色方块),再到底层驱动(SDK Driver/橙色方块),然后进入到FOC的软件算法部分(绿色方块),而FOC的输出经底层驱动、再到外设模块(FTM模块)输出到预驱芯片,从而实现控制。第5点则是调度上述过程的状态机,关于第5点后文会更一步的讲解。



NXP电机控制软硬件框图 - From NXP

从这五点我们就能引出我们要讨论的问题:模型仿真与实际应用之间的区别到底有哪些?

简单的说,模型仿真只能触及上述的第1点;如果对建模有更深入的研究,第2点也能做仿真,这部分实际上和硬件电路设计有关,所以很少有在模型仿真中考虑这一点;第3、4、5点就是完全的非理论了,与嵌入式、编程和芯片有较强的关联,是实实在在的实践过程。

所以,在袁雷的《现代永磁同步电机控制原理及MATLAB仿真》中是完全不包括第2~5点的内容的。

以电流采样电阻为例,实际应用场景中,为了测量电流信号的方向,一般会对采样电阻进行偏置处理。NXP开发的DEVKIT驱动板相电流采样电阻为例,其电路设计如下图所示:



DEVKIT驱动板相电流采样电阻 - From NXP

可以看到,偏置电压为参考电压的一半,所以最终输入到芯片ADC的电压是以偏置电压为中心对称的。

根据大于偏置电压还是小于偏置电压,可以判定电流是正方向还是负方向。所以在信号处理中还需要将这个偏置电压减去。

关于电流采样,还有布置方式的不同,常见的采样电阻布置方式有以下这些:



    三电阻下桥臂采样/相电流采样

    双电阻下桥臂采样/相电流采样

    单电阻母线采样


Tips:这里列举了常见采样电阻布置方式,一般应用中下桥臂采样较多,相电流采样多用于高性能、高效率电机控制的场合,而单电阻母线采样是成本最低,但采样方式最复杂的。

不同的布置方式,采集的电流是不同的,而控制算法是需要全部的三相电流的。三个采样电阻可以直接得到三相电流信号,如何通过一个电阻或者两个电阻得到三相电流数据,也是有方法的。

双电阻相对来说较为简单,根据三相电流和为零,可以直接求解出第三相电流。单电阻采样的场景要复杂很多,具体可以参考上述的第三篇应用笔记。

以上关于电流采样的所有方法,在模型仿真中都没有考虑,只是一根信号线连接到控制器,这就是理论仿真和实践的巨大区别所在,如下图所示(摘自袁雷的《现代永......仿真》):



仿真模型示例 - From 袁雷

Tips:因为我们要使用MBD的开发方法,所以这里不再深入详细展开讲其他的区别,以后有需要的地方再做提示,有兴趣的读者可以自行参阅上述三篇NXP的应用笔记。

当我们了解了所有理论与实践之间的区别,辅以嵌入式开发和编程的基础,一个简单的电机控制项目就可以实现。

即使是一个产品级的电机控制软件,也只是再补充通信、故障诊断、功能安全等其他需求的功能。复杂度可能会高很多,但开发和设计的本质框架就是这样的。

2 MBD拉近模型仿真与实际应用之间的距离

如果要更加严谨地说,上面讨论的也只是电机控制算法部分的工程实践。一个完整的产品应用,硬件设计和软件设计。硬件设计可以交给硬件工程师,我们把重点放在软件设计上。



电机控制的硬件 - From NXP

上面三篇应用笔记中提到的电机控制实现方案,是属于软件设计的一部分。传统的开发中,就需要将选定的电机控制方案转化为一行行的代码,这就又涉及到数学(理论)到编程语言(实践)之间的转换。入门门槛高,同时效率也较低。

Tips:以我自己的经历为例,上述应用笔记内容的代码实现过程,我是完整的走过一遍的。我从对嵌入式一无所知,到学习嵌入式的基本模块和开发方法,再到能写一些基本的嵌入式代码,花费了3个月的时间,然后又花了差不多1个月的时间,才实现了一个简单的电机控制嵌入式程序。这还是我对电机控制理论有了足够的基础之后的开发效率。

但利用MBD的开发方法,我们可以大大简化这一步骤。模型我们是比较容易得到的,利用模型直接生成代码,能有效地缩近理论和实践直接的距离。更多MBD相关的内容,请参考本公众号前面几期内容,或者在对话框中回复关键词“MBD入门”。



MBD的开发流程 - From ST

如果读了上述三篇应用笔记,就可以发现,嵌入式软件设计很多是可以通过建模的方式实现的。这里简单的把软件设计分为五类,它的软硬件层级如下图所示(软件为虚线框部分):



电机软硬件层级示例 - From autoMBD

下面是这五类软件关于MBD建模实现的分析:



    底层驱动,MCU、硬件电路强相关

底层驱动是和芯片和硬件电路设计紧密相关的,比如硬件引脚(Pin脚、外设、端口等)使用的不一样,底层驱动的配置也就不一样了。对于底层驱动我们需要特殊处理,详见MBD闲谈 第03期:MBD的“禁区”——底层驱动。
原则上底层驱动是可以通过芯片厂商提供的MBD硬件支持包来实现的,但从灵活性和效率的角度来说,目前建议通过专门的底层驱动配置工具来配置底层驱动,例如NXP适用于S32K1系列的配置工具Processor Expert。



    数字信号处理,硬件电路弱相关


数字信号处理(Digital Signal Processing,DSP)是将真实世界中的物理量(模拟量,例如电流、电压等)转换为控制器需要的量的过程。

还是以电流采样为例,在前文给的电流采样电路基础上,ADC读到的电压实际上是一个12 bit的整数,需要将其进行偏置消除以及物理量转换等操作,有必要的话会需要进行滤波处理。

可以看到,这个过程和硬件电路设计有一定的联系,硬件设计的不一样,处理的细节可能存在一定的差异。但基本的信号处理方法是相通的,例如滤波器、积分、微分、移位运算、逻辑运算等。

这一过程是可以通过建模的方式实现,并且信号处理越复杂,模型的优势就更明显,毕竟模型很容易搭建,代码写起来就很费劲了。

所以我们可以把软件设计中的这一部分纳入到MBD中,通过建模的方式自动生成代码。



    电机控制算法,硬件电路弱相关


数据信号处理后,将得到的数据传递到电机控制算法中。控制算法中一般包括坐标变换、PI控制器、FOC、SVPWM等环节。电机控制算法会得到一个控制输出量,一般是三相的占空比。

这些环节使用Simulink内置的模块,或者使用芯片厂商提供的MBD硬件支持包,是可以很方便快捷的实现的。这部分如果要编写代码,对初学者来说,甚至对有一定编程基础的人来说,都算是不小的挑战。

此外建模可以很方便地调整控制算法的结构,开发初期这是很常见的。手写代码的话,每一次调整结构就需要重复工作一遍,效率很低。

因此电机控制算法部分是很适合通过建模生成代码来实现的。

这里解释一下电机控制算法为什么是硬件电路弱相关。一般来说,通用的电机控制算法是可以做到与硬件电路无关的。

但在某些场景下,例如有的芯片具有硬件加速模块,或者使用一些特殊的控制算法(无感和有感就有硬件上的差异),可能会影响控制算法的执行,所以电机控制算法和硬件有一定的关联。



    状态机,与硬件电路无关


状态机是与硬件电路完全无关的,而且在Simulink中提供的Stateflow是专门用于状态控制建模的工具,用它开发状态机效率可以提高一个档次。所以状态机使用MBD来实现也是毫无问题的。



    其他软件,例如通信、失效检查等,暂时我们不考虑这部分内容


从上面的分析来看,除开底层驱动,其他软件部分均可以通过MBD建模的方式实现,并且能大大提高效率。

下图是较为常见的V型开发流程,参考这个流程就可以开发一个基于MBD的电机控制软件。



V型开发流程 - From ST

3 基于Stateflow构建电机控制状态机

前面讲了这么多内容,总得要有实践来证明。



实践是检验真理的唯一标准 - From Internet

关于使用MBD开发方法来开发一个电机控制软件,我建议从上层开始,即先构建状态机,再深入到控制算法建模、数字信号处理,最后进行底层驱动的集成。

Tips:由于平时要上班,这部分只能利用的空闲时间完成,所以开发过程会比较慢。我会一部分一部分地做,并在这个公众号中分享给大家,欢迎大家关注



首先关于Stateflow的使用方法,在我收集的资源中,刘杰教授出版的三本专著是由专门介绍的。在对话框选择MBD->资源可以收到相关分享连接,也可以在对话框中直接回复关键词“资源”。这三本专著的路径如下图所示:



刘杰教授出版的三本专著路径 - From autoMBD

不了解Stateflow的可以先学习它的使用方法。

这一期分享的是使用Stateflow构建一个电机控制的状态机。我们看看状态机长什么样,下图是摘自NXP PMSM 无感控制算法的状态机(详情参见上文给出的应用笔记):



NXP电机控制状态机 - From NXP

状态机有两个很重要的元素:状态(State)和事件(Event),状态之间的切换是通过事件触发的。实际上了解了状态机,也就了解了电机的运行情况,也就有了电机控制算法的基本框架。

状态机的设计也不是唯一的,可以根据自己的需求自行设计。以我的观点来看NXP设计的这个状态机就比较简单,只是比较初级地实现功能。下图是我在Simulink中利用Stateflow构建的状态机:



Stateflow构建状态机 - From autoMBD

从上图中我们可以看到,电机控制状态有四个,不同的状态执行不同的功能:



    Initial,执行初始化过程,包括变量初始化、FOC初始化、预驱初始化等,MCU上电后自动进入此状态;

    Ready,初始化完成,进入可以启动的状态;

    Run,该状态包含两个子状态,即Calibration和NormalRun,分别实施电流、电压传感器校准工作和正常运行时的算法计算工作;

    FAULT,故障状态,任何时候检查到故障,进入此状态。


我也为该状态机构建了一个简单的测试模型,该模型可以在不同的状态点亮不同的LED指示灯,如下图所示:



电机控制状态机测试模型 - From autoMBD

下面这个视频展示了该模型运行时的状态(时长约 1min 9 s):



video: https://mp.weixin.qq.com/mp/readtemplate?t=pages/video_player_tmpl&action=mpvideo&auto=0&vid=wxv_1920968537729220614

电机控制状态机测试视频展示 - From autoMBD

该状态机将会是今后MBD开发电机控制算法的基础,目前也只是初级版本,以后可能还会有更多的调整。

我会将该模型上传到GitHub仓库中,供大家参考,对话框中回复关键词“MBD电机控制”可收到相关链接。


MBD实战之电机控制 第02期:构建MBD仿真模型和状态机w11.jpg
         同一主题附件:
    MBD实战之电机控制 第02期:构建MBD仿真模型和状态机w1.jpg
    MBD实战之电机控制 第02期:构建MBD仿真模型和状态机w2.jpg
    MBD实战之电机控制 第02期:构建MBD仿真模型和状态机w3.jpg
    MBD实战之电机控制 第02期:构建MBD仿真模型和状态机w4.jpg
    MBD实战之电机控制 第02期:构建MBD仿真模型和状态机w5.jpg
    MBD实战之电机控制 第02期:构建MBD仿真模型和状态机w6.jpg
    MBD实战之电机控制 第02期:构建MBD仿真模型和状态机w7.jpg
    MBD实战之电机控制 第02期:构建MBD仿真模型和状态机w8.jpg
    MBD实战之电机控制 第02期:构建MBD仿真模型和状态机w9.jpg
    MBD实战之电机控制 第02期:构建MBD仿真模型和状态机w10.jpg
    MBD实战之电机控制 第02期:构建MBD仿真模型和状态机w11.jpg
    MBD实战之电机控制 第02期:构建MBD仿真模型和状态机w12.jpg
    MBD实战之电机控制 第02期:构建MBD仿真模型和状态机w13.jpg
    MBD实战之电机控制 第02期:构建MBD仿真模型和状态机w14.jpg
    MBD实战之电机控制 第02期:构建MBD仿真模型和状态机w15.jpg
    MBD实战之电机控制 第02期:构建MBD仿真模型和状态机w16.jpg

QQ|手机版|小黑屋|Archiver|汽车工程师之家 ( 渝ICP备18012993号-1 )

GMT+8, 18-5-2024 05:51 , Processed in 0.170242 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.