构建MBD仿真模型和状态机
2024-07-29 来源:elecfans
1 模型仿真与实际应用之间的区别
MBD(Model-Based Design,基于模型的设计)是通过模型生成代码的,所有我们有必要弄清楚模型仿真与实际应用之间的区别。
仿真模型与实际应用之间的区别本质上是理论与实践之间的差别,其中的差别可以说是两个完全不同的话题。
这里又给大家更新三篇与电机控制实践相关的文章。它们是由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拉近模型仿真****与实际应用之间的距离
如果要更加严谨地说,上面讨论的也只是电机控制算法部分的工程实践。一个完整的产品应用,硬件设计和 软件设计 。硬件设计可以交给硬件工程师,我们把重点放在软件设计上。
上面三篇应用笔记中提到的电机控制实现方案,是属于软件设计的一部分。传统的开发中,就需要将选定的电机控制方案 转化为一行行的代码 ,这就又涉及到数学(理论)到编程语言(实践)之间的转换。入门门槛高,同时效率也较低。
Tips :以我自己的经历为例,上述应用笔记内容的代码实现过程,我是完整的走过一遍的。我从对嵌入式一无所知,到学习嵌入式的基本模块和开发方法,再到能写一些基本的嵌入式代码,花费了3个月的时间,然后又花了差不多1个月的时间,才实现了一个简单的电机控制嵌入式程序。这还是我对电机控制理论有了足够的基础之后的开发效率。
但利用MBD的开发方法,我们可以大大简化这一步骤。模型我们是比较容易得到的, 利用模型直接生成代码,能有效地缩近理论和实践直接的距离 。更多MBD相关的内容,请参考本公众号 前面几期内容 ,或者在对话框中回复关键词“ MBD入门 ”。
*MBD的开发流程 * - From ST
如果读了上述三篇应用笔记,就可以发现,嵌入式软件设计很多是可以通过建模的方式实现的。这里简单的把软件设计分为五类,它的软硬件层级如下图所示(软件为虚线框部分):
*电机软硬件层级示例 * - From autoMBD
下面是这五类软件关于MBD建模实现的分析:
底层驱动 ,MCU、硬件电路强相关
底层驱动是和芯片和硬件电路设计紧密相关的,比如硬件引脚(Pin脚、外设、端口等)使用的不一样,底层驱动的配置也就不一样了。
原则上底层驱动是可以通过芯片厂商提供的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