0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

构建MBD仿真模型和状态机

冬至子 来源:autoMBD 作者:autoMBD 2023-07-14 16:15 次阅读

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系列上的。

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

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

  1. 电机控制数学原理
  2. 电流、电压采样输入和驱动输出
  3. MCU模块资源的使用
  4. 底层驱动配置和初始化
  5. 电机控制软件架构(状态机、电机控制库、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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 状态机
    +关注

    关注

    2

    文章

    491

    浏览量

    27453
  • PMSM
    +关注

    关注

    14

    文章

    244

    浏览量

    41801
  • BLDC电机
    +关注

    关注

    7

    文章

    207

    浏览量

    21432
  • MBD
    MBD
    +关注

    关注

    0

    文章

    24

    浏览量

    8933
  • FOC算法
    +关注

    关注

    1

    文章

    16

    浏览量

    9654
收藏 人收藏

    评论

    相关推荐

    SaberRD状态机建模工具介绍(一)什么是状态机建模

    状态机建模是使用状态图和方程式的手段,创建基于混合信号的有限状态机模型的一种建模工具。
    的头像 发表于 12-05 09:51 1556次阅读
    SaberRD<b class='flag-5'>状态机</b>建模工具介绍(一)什么是<b class='flag-5'>状态机</b>建模

    Verilog状态机+设计实例

    的是有限状态机(Finite-State Machine,FSM),简称为状态机,表示在有限个状态以及这些状态之间的转移和动作等行为的数学模型
    的头像 发表于 02-12 19:07 3657次阅读
    Verilog<b class='flag-5'>状态机</b>+设计实例

    基于有限状态机的虚拟训练过程模型研究

    通过一个基于操作规程的虚拟训练系统研究了系统仿真流程,分析了有限状态机(FSM)的原理,结合虚拟仿真训练的特点,设计出了操作过程模型,并通过Windows 消息机制编程实
    发表于 12-07 14:23 14次下载

    状态机举例

    状态机举例 你可以指定状态寄存器和状态机状态。以下是一个有四种状态的普通状态机。 // Th
    发表于 03-28 15:18 969次阅读

    状态机代码生成工具

    状态机代码生成工具状态机代码生成工具状态机代码生成工具状态机代码生成工具
    发表于 11-19 15:12 9次下载

    状态机原理及用法

    状态机原理及用法状态机原理及用法状态机原理及用法
    发表于 03-15 15:25 0次下载

    状态机概述 如何理解状态机

    本篇文章包括状态机的基本概述以及通过简单的实例理解状态机
    的头像 发表于 01-02 18:03 1w次阅读
    <b class='flag-5'>状态机</b>概述  如何理解<b class='flag-5'>状态机</b>

    FPGA:状态机简述

    本文目录 前言 状态机简介 状态机分类 Mealy 型状态机 Moore 型状态机 状态机描述 一段式
    的头像 发表于 11-05 17:58 7250次阅读
    FPGA:<b class='flag-5'>状态机</b>简述

    使用独立于内核的外设构建硬件状态机

    状态机是逻辑单元、存储器单元和反馈的组合。状态机的输入与状态机的当前状态组合在一起,确定下一个状态。当出现
    发表于 03-30 15:58 7次下载
    使用独立于内核的外设<b class='flag-5'>构建</b>硬件<b class='flag-5'>状态机</b>

    什么是状态机状态机5要素

    玩单片还可以,各个外设也都会驱动,但是如果让你完整的写一套代码时,却无逻辑与框架可言。这说明编程还处于比较低的水平,你需要学会一种好的编程框架或者一种编程思想!比如模块化编程、状态机编程、分层思想
    的头像 发表于 07-27 11:23 2w次阅读
    什么是<b class='flag-5'>状态机</b>?<b class='flag-5'>状态机</b>5要素

    状态模式(状态机)

    以前写状态机,比较常用的方式是用 if-else 或 switch-case,高级的一点是函数指针列表。最近,看了一文章《c语言设计模式–状态模式(状态机)》(来源:embed linux
    发表于 12-16 16:53 8次下载
    <b class='flag-5'>状态</b>模式(<b class='flag-5'>状态机</b>)

    如何构建基于状态机的软件系统

    模式(Design Pattern)。本文介绍如何构建基于状态机的软件系统,以及如何利用Linux下的工具来自动生成实用的状态机框架。
    的头像 发表于 09-14 10:55 1497次阅读

    Verilog状态机的类型

    有限状态机(Finite-State Machine,FSM),简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型
    的头像 发表于 06-01 15:23 1756次阅读
    Verilog<b class='flag-5'>状态机</b>的类型

    如何生成状态机框架

    生成状态机框架 使用FSME不仅能够进行可视化的状态机建模,更重要的是它还可以根据得到的模型自动生成用C++或者Python实现的状态机框架。首先在FSME界面左边的树形列表中选择"R
    的头像 发表于 09-13 16:54 924次阅读
    如何生成<b class='flag-5'>状态机</b>框架

    什么是状态机状态机的种类与实现

    状态机,又称有限状态机(Finite State Machine,FSM)或米利状态机(Mealy Machine),是一种描述系统状态变化的模型
    的头像 发表于 10-19 10:27 8817次阅读