当前位置: 首页 > news >正文

Matlab/Simulink - BLDC直流无刷电机仿真基础教程(五) - animateRotorPosition脚本讲解与使用

Matlab/Simulink - BLDC直流无刷电机仿真基础教程(五) - animateRotorPosition脚本讲解与使用

  • 前言
  • 一、animateRotorPosition脚本内容
  • 二、脚本功能讲解
  • 三、脚本修改与模型配置
  • 四、可视化效果展示
  • 五、修改后脚本内容
  • 文章相关模型文件下载链接
  • 参考链接

前言

本系列文章分享如何使用Matlab的Simulink功能来进行BLDC直流无刷电机的基础仿真;本篇文章讲解官方animateRotorPosition.m脚本文件的功能与使用。

文章内容主要参考Matlab官网的BLDC仿真视频教程,主要是对官方视频教程的进一步详细说明,以及对BLDC电机控制原理、仿真过程部分问题点的简要讲解,希望大家通过此系列文章可以掌握Matlab电机仿真的基本技术,并在后续能够按照需要搭建更复杂的模型。

官方视频教程地址如下:
https://ww2.mathworks.cn/videos/series/how-to-design-motor-controllers-using-simscape-electrical.html

相关演示操作在Matlab2023b中进行。

一、animateRotorPosition脚本内容

该脚本文件的官方github链接如下:

https://github.com/mathworks/Design-motor-controllers-with-Simscape-Electrical/blob/master/2%20Modeling%20a%20three%20phase%20inverter/animateRotorPosition.m

也可以进入到matlab官方github仓库,获取相关系列视频里的模型文件,与本系列文章前面几章搭建的模型基本相同;仓库地址为:

https://github.com/mathworks/Design-motor-controllers-with-Simscape-Electrical

这里为方便演示,将官方可视化脚本的文件内容复制到这里,内容如下:
(注意,官方github仓库在第二、第三章节对应文件夹中各有一个名称为animateRotorPosition.m的脚本,内容略有区别,请自行查看了解。此处展示的脚本文件内容是第二章节 Modeling a three phase inverter 对应的文件)

%Copyright 2019 The MathWorks, Inc.
%% animateRotorPosition
%
% This script will run a Simulink model of a BLDC that is energized in
% one coil and animate the movement of the rotor. Once the animation figure
% is rendered, there is a 5 second pause before the animation begins.close all
clear% Below parameters are defined in the Simulink model
% Sample time
% Ts = 1e-5;
% Number of pole pairs
% p = 1; 
% Initial rotor angle in degrees
% th0 = 0;
% Sector 
% sector = 6;mdl = 'Modeling_three_phase_inverter';open_system(mdl);sim(mdl)try
%
r = 1.2;
theta = linspace(0,2*pi);
x = cos(theta);
y = sin(theta);x1 = 0.8*cos(theta);
y1 = 0.8*sin(theta);xa = cos(0);
ya = sin(0);xb = cos(2*pi/3);
yb = sin(2*pi/3);xc = cos(-2*pi/3);
yc = sin(-2*pi/3);xat = r*cos(0);
yat = r*sin(0);xbt = r*cos(2*pi/3);
ybt = r*sin(2*pi/3);xct = r*cos(-2*pi/3);
yct = r*sin(-2*pi/3);hf = figure(1);h = plot(x,y,'k-',[0 xa],[0 ya],'k-',[0 xb],[0 yb],'k-',[0 xc],[0  yc],'k-',xa,ya,'ko',xb,yb,'ko',xc,yc,'ko',x1,y1,'k-');gridset(hf,'Color',[1 1 1])ha = gca;set(ha,'Visible','off')ht1 = text(xat,yat,'A');
ht2 = text(xbt,ybt,'B');
ht3 = text(xct,yct,'C');set(ht1,'FontSize',14);
set(ht2,'FontSize',14);
set(ht3,'FontSize',14);axis([-1.2 1.2 -1.2 1.2])
axis equalset(h(5),'MarkerSize',20)
set(h(6),'MarkerSize',20)
set(h(7),'MarkerSize',20)switch_pattern = logsout{2}.Values.Data(1:20:end,:);init_switch_pattern = num2str(switch_pattern(1,:));switch init_switch_patterncase num2str([1 0 0 0 0 1])set(h(5),'MarkerFaceColor',[1 0 0])set(h(7),'MarkerFaceColor',[0 0 1])case num2str([0 0 1 0 0 1])set(h(6),'MarkerFaceColor',[1 0 0])set(h(7),'MarkerFaceColor',[0 0 1])case num2str([0 1 1 0 0 0])set(h(5),'MarkerFaceColor',[0 0 1])set(h(6),'MarkerFaceColor',[1 0 0])case num2str([0 1 0 0 1 0])set(h(5),'MarkerFaceColor',[0 0 1])set(h(7),'MarkerFaceColor',[1 0 0])case num2str([0 0 0 1 1 0])set(h(6),'MarkerFaceColor',[0 0 1])set(h(7),'MarkerFaceColor',[1 0 0])case num2str([1 0 0 1 0 0])set(h(5),'MarkerFaceColor',[1 0 0])set(h(6),'MarkerFaceColor',[0 0 1])endl1 = 0.7;
ro = logsout{1}.Values.Data(1)*pi/180;xr1 = l1*cos(ro);
yr1 = l1*sin(ro);
xr2 = -l1*cos(ro);
yr2 = -l1*sin(ro);hold on,hl1 = plot([xr1 xr2],[yr1 yr2],'m-');set(hl1,'LineWidth',3)hpr = plot(xr2,yr2,'ko');
hpb = plot(xr1,yr1,'ko');set(hpr,'MarkerSize',20)
set(hpb,'MarkerSize',20)
set(hpr,'MarkerFaceColor',[1 0 0])
set(hpb,'MarkerFaceColor',[0 0 1])pausero1 = logsout{1}.Values.Data(1:40:end);for l = 1:numel(ro1)switch_pattern1 = num2str(switch_pattern);ro = ro1(l)*pi/180;xr1 = l1*cos(ro);
yr1 = l1*sin(ro);
xr2 = -l1*cos(ro);
yr2 = -l1*sin(ro);set(hpr,'XData',xr2);
set(hpr,'YData',yr2);
set(hpb,'XData',xr1);
set(hpb,'YData',yr1);set(hl1,'XData',[xr1 xr2]);
set(hl1,'YData',[yr1 yr2]);switch switch_pattern1case num2str([1 0 0 0 0 1])set(h(5),'MarkerFaceColor',[1 0 0])set(h(7),'MarkerFaceColor',[0 0 1])case num2str([0 0 1 0 0 1])set(h(6),'MarkerFaceColor',[1 0 0])set(h(7),'MarkerFaceColor',[0 0 1])case num2str([0 1 1 0 0 0])set(h(5),'MarkerFaceColor',[0 0 1])set(h(6),'MarkerFaceColor',[1 0 0])case num2str([0 1 0 0 1 0])set(h(5),'MarkerFaceColor',[0 0 1])set(h(7),'MarkerFaceColor',[1 0 0])case num2str([0 0 0 1 1 0])set(h(6),'MarkerFaceColor',[0 0 1])set(h(7),'MarkerFaceColor',[1 0 0])case num2str([1 0 0 1 0 0])set(h(5),'MarkerFaceColor',[1 0 0])set(h(6),'MarkerFaceColor',[0 0 1])enddrawnowendcatchdisp("The animation was closed before the end of the simulated data")end

不过注意,这个脚本文件主要适配官方搭建的模型,我们前面文章系列搭建的模型如果想要进行可视化,还需要一些额外的配置。

二、脚本功能讲解

以下内容修改于deepseek回答。
部分未讲解内容请查找matlab相关教程进行学习,自学能力很重要。

以下是该 MATLAB 脚本的功能解析及关键代码的分步讲解:


脚本总体功能
这是一个用于 无刷直流电机(BLDC)转子位置动画演示 的脚本,通过 Simulink 模型仿真电机运行,并动态可视化以下内容:

  1. 转子位置:磁极方向随仿真时间的变化。
  2. 定子线圈通电状态:通过颜色标记当前通电的线圈(红色为通电,蓝色为断电)。
  3. 三相逆变器开关模式:通过六个开关状态控制电流方向。

关键代码分步解析

1. 初始化环境

close all
clear
  • close all:关闭所有图形窗口。
  • clear:清空工作区变量,确保脚本从干净环境运行。

2. 加载并运行 Simulink 模型

mdl = 'Modeling_three_phase_inverter';
open_system(mdl);
sim(mdl)
  • mdl:指定 Simulink 模型名称 Modeling_three_phase_inverter
  • open_system(mdl):打开模型界面(如果存在图形界面)。
  • sim(mdl):运行模型,生成仿真数据(存储在 logsout 变量中)。

3. 绘制静态图形(定子与标签)

r = 1.2;
theta = linspace(0,2*pi);
x = cos(theta);
y = sin(theta);
...
hf = figure(1); 
h = plot(x,y,'k-',[0 xa],[0 ya],'k-',...); 
  • 功能:绘制定子的静态图形,包括:
    • 外圆(半径 1.2)和内圆(半径 0.8)。
    • 三个相位点 A, B, C(坐标分别对应 , 120°, -120°)。
  • 图形元素
    • 黑色线条 ('k-'):定子框架。
    • 黑色圆圈 ('ko'):三相线圈位置。

4. 设置开关状态颜色(初始状态)

switch_pattern = logsout{2}.Values.Data(1:20:end,:);
init_switch_pattern = num2str(switch_pattern(1,:));
switch init_switch_patterncase num2str([1 0 0 0 0 1])set(h(5),'MarkerFaceColor',[1 0 0]) % A红set(h(7),'MarkerFaceColor',[0 0 1]) % C蓝...
end
  • 功能:从仿真数据 logsout 中提取开关状态(logsout{2}),并根据初始状态设置线圈颜色。
  • 关键参数
    • switch_pattern:三相逆变器的 6 个开关状态(如 [1 0 0 0 0 1])。
    • num2str:将开关状态转换为字符串,用于 switch-case 判断。
  • 颜色规则
    • 红色 ([1 0 0]):通电线圈。
    • 蓝色 ([0 0 1]):断电线圈。

5. 绘制转子动态轴线

ro = logsout{1}.Values.Data(1)*pi/180;
xr1 = l1*cos(ro);
yr1 = l1*sin(ro);
...
hl1 = plot([xr1 xr2],[yr1 yr2],'m-');
hpr = plot(xr2,yr2,'ko');
hpb = plot(xr1,yr1,'ko');
  • 功能:根据仿真数据 logsout{1} 中的转子角度(单位:度),绘制转子轴线。
  • 图形元素
    • 洋红色线条 ('m-''):转子轴线。
    • 红色圆点 (hpr):转子南极(假设为红色)。
    • 蓝色圆点 (hpb):转子北极(假设为蓝色)。

6. 动态更新动画

ro1 = logsout{1}.Values.Data(1:40:end);
for l = 1:numel(ro1)switch_pattern1 = num2str(switch_pattern);ro = ro1(l)*pi/180;...set(hpr,'XData',xr2); % 更新转子位置set(hpb,'YData',yr1);...drawnow % 刷新图形
end
  • 功能:循环遍历转子角度数据 (ro1),动态更新:
    1. 转子轴线位置 (set(hpr, 'XData', ...))。
    2. 线圈通电颜色 (switch-case 判断开关状态)。
  • 关键参数
    • 1:40:end:数据降采样,控制动画速度。
    • drawnow:强制刷新图形界面,形成动画效果。

异常处理

catchdisp("The animation was closed before the end of the simulated data")
end
  • 功能:捕获用户提前关闭动画窗口的异常,避免报错。

关键仿真数据说明

  1. logsout{1}:转子角度数据(单位:度),用于计算转子位置。
  2. logsout{2}:三相逆变器的开关状态(6位二进制数组),控制线圈通电逻辑。

使用场景

  • 电机控制教学:可视化 BLDC 电机工作原理。
  • 控制算法验证:通过动画观察开关策略对转子运动的影响。
  • 动态调试:检查仿真结果是否符合预期(如转子是否按设定方向旋转)。

三、脚本修改与模型配置

在使用其脚本对我们的模型转子位置及逆变器通电状态进行演示前,我们可以先运行一下官方模型及脚本,来简单的查看其效果。

进入官方github仓库,到第二章节对应文件夹中,下载如图红框选中的两项文件,分别是官方的simulink仿真模型文件及可视化脚本。

在这里插入图片描述

图片3.1 官方github仓库文件情况


将两个文件下载后,放置到同一文件夹下,使用matlab打开animateRotorPosition.m脚本,并点击运行(确保matlab目录为同一文件夹,能够识别到官方的simulink放置模型文件)。

在这里插入图片描述

图片3.2 原始animateRotorPosition脚本


随后matlab将会自动运行simulink放置模型文件,之后弹出如图所示的窗口,鼠标点击一下窗口,按下回车(由于原始代码中存在pause语句,因此需要手动回车以继续脚本的执行。),即可看到电机转子的旋转情况。

在这里插入图片描述

图片3.3 原始脚本运行效果


如上图所示,点击转子位置由初始的0°,旋转到了30°,仔细看可以看到转子在最终暂停到目标位置前,有一个幅度逐渐衰减的震荡。

在这里插入图片描述

图片3.4 脚本运行完毕后的工作区情况


此时在matlab界面右侧的工作区,可以看到脚本运行完毕后,出现了很多变量,我们在之后将会稍作分析。

在这里插入图片描述

图片3.5 官方simulink仿真模型情况


我们要了解,这个.m的可视化脚本在运行时,会首先运行simulink仿真模型文件,之后再根据仿真模型的输出来进行可视化;因此我们这里首先来查看一下官方的simulink模型运行后会有什么结果。

在这里插入图片描述

图片3.6 官方simulink仿真模型运行后的工作区情况


运行模型后,我们在工作区右侧可以看到出现了一些新的变量,其中logsout变量正是我们的可视化脚本所需要用到的,因此对其进行进一步的查看。

在这里插入图片描述

图片3.7 工作区logsout变量内容


工作区双击要查看的logsout变量,即可查看其内部的数据情况,可以看到这个数据集变量里面有两个信号,名称分别是thetaswichPattern,其中前者即是电机转子的角度位置,后者则是逆变器的通电状态,这也正是可视化脚本所要进行可视化的两个信号。

在第三篇系列文章中,我们搭建了一个带有基础速度环的BLDC模型(为便于展示,暂时不使用带PWM调制模块的模型),如下图所示。

在这里插入图片描述

图片3.8 第三章搭建的速度闭环控制模型


为了将模型运行过程中的电机转子角度位置、逆变器开关状态等信号保存、导出,我们需要进行如下的操作:
切换到Hall Sensor模块,鼠标放置到转子角度位置上,右键后在列表中点击"记录所选信号"。

在这里插入图片描述

图片3.9 信号记录操作展示


之后,我们可以看到对应位置出现了一个信号的标志,表示此处的信号在之后运行过程会进行记录并输出到工作区。

在这里插入图片描述

图片3.10 信号处于记录状态的标志


对于逆变器开关状态信号,我们可以进入到Three-Phase Inverter模块,对模块输入的逆变器开关状态信号的信号线进行相同的操作。

注:我们可以通过双击信号线来设置对应信号的名称。

在这里插入图片描述

图片3.11 逆变器状态信号记录设置


此时运行我们的模型,可以看到工作区出现了一个名为out的值。

在这里插入图片描述

图片3.12 模型运行后的工作区情况


打开之后,情况如下所示,可以看到与官方的simulink仿真模型的输出略有不同。

在这里插入图片描述

图片3.13 工作区out变量内容


关于这一点,是由于我们的模型设置方面略有差异。

为了使我们的模型输出与官方模型一致,我们需要在“建模”一栏中,点击“模型设置”按钮。

在这里插入图片描述

图片3.14 simulink界面“模型设置”按钮


随后在模型设置界面,在“数据导入/导出”一栏中,将下方的“单一仿真输出”一栏取消勾选,这个功能的含义即是使我们的仿真模型运行后只输出一个变量out

在这里插入图片描述

图片3.15 模型设置界面“单一仿真输出”设置


取消勾选后,如下图所示。

在这里插入图片描述

图片3.16 取消单一仿真输出设置


此时,我们再次运行仿真模型,输出与官方模型一致。

在这里插入图片描述

图片3.17 修改后的模型输出情况


接下来,我们还需要对官方提供的animateRotorPosition.m脚本文件进行一定的修改,才能够按照我们的预期来可视化转子位置角度、逆变器状态。

这里我们可以简单学习一下matlab脚本的调试方法;在脚本界面,可以点击左侧的行号,此时对应行号上将会出现一个红色的方框,表示稍后我们运行脚本时,将会在此处暂停,也就是在这里打了一个断点。

在这里插入图片描述

图片3.18 脚本断点设置


我们点击运行后,程序运行到对应行号会自动暂停,此时,我们可以看到上方的相关按钮发生了改变,我们可以点击“步进”按钮,来控制程序员一行一行的运行,方便我们梳理程序的运行次序以及过程中各个变量的变化情况。(这里建议不太熟悉相关功能的朋友多多尝试、学习,多多受挫,即是多多收获。)

在这里插入图片描述

图片3.19 脚本调试状态步进按钮


这里简单展示一下本人对该可视化脚本的修改。

  1. 修改脚本文件中指定的simnulink仿真模型名称为自己希望进行可视化的模型名称。(如下几个步骤的配图,上方是原始脚本的代码,下方是修改后的脚本内容。)

在这里插入图片描述

在这里插入图片描述

  1. 修改相关变量的取样间隔,使逆变器状态变量与转子角度位置变量的数目一致。

在这里插入图片描述

在这里插入图片描述

  1. 修改可视化过程相关节点的颜色修改代码。
    (主要参考官方github仓库第三章对应文件夹里面的脚本内容。)

在这里插入图片描述

在这里插入图片描述

  1. for循环后添加pause(0.1)语句,降低动画的速度,并完善逆变器状态变量的获取处理。

在这里插入图片描述

在这里插入图片描述

  1. 修改for循环中相关节点的颜色修改代码。
    (主要参考官方github仓库第三章对应文件夹里面的脚本内容。)

在这里插入图片描述

在这里插入图片描述

四、可视化效果展示

为了便于演示,我们这里修改simulink仿真模型给定的速度参考值,使转子旋转的速度比较稳定。

在这里插入图片描述

图片4.1 修改仿真模型速度参考量给定


接下来,我们运行修改后的animateRotorPosition脚本,将会看到如下效果,可以结合转子及三相的颜色,来了解BLDC电机旋转过程中应当如何改变逆变器的通电状态。

在这里插入图片描述

图片4.2 修改后的可视化脚本运行结果


五、修改后脚本内容

此处为方便大家学习、对照,将修改后的脚本内容放置于此。

%Copyright 2019 The MathWorks, Inc.
%% animateRotorPosition
%
% This script will run a Simulink model of a BLDC that is energized in
% one coil and animate the movement of the rotor.close all
clear% Below parameters are defined in the Simulink model
% Sample time
% Ts = 1e-5;
% Number of pole pairs
% p = 1; 
% Initial rotor angle in degrees
% th0 = 0;
% Sector 
% sector = 6;mdl = 'BLDC_DRIVER_BASIC_SPEED_LOOP_visulization';open_system(mdl);sim(mdl)try
%
r = 1.2;
theta = linspace(0,2*pi);
x = cos(theta);
y = sin(theta);x1 = 0.8*cos(theta);
y1 = 0.8*sin(theta);xa = cos(0);
ya = sin(0);xb = cos(2*pi/3);
yb = sin(2*pi/3);xc = cos(-2*pi/3);
yc = sin(-2*pi/3);xat = r*cos(0);
yat = r*sin(0);xbt = r*cos(2*pi/3);
ybt = r*sin(2*pi/3);xct = r*cos(-2*pi/3);
yct = r*sin(-2*pi/3);hf = figure(1);h = plot(x,y,'k-',[0 xa],[0 ya],'k-',[0 xb],[0 yb],'k-',[0 xc],[0  yc],'k-',xa,ya,'ko',xb,yb,'ko',xc,yc,'ko',x1,y1,'k-');gridset(hf,'Color',[1 1 1])ha = gca;set(ha,'Visible','off')ht1 = text(xat,yat,'A');
ht2 = text(xbt,ybt,'B');
ht3 = text(xct,yct,'C');set(ht1,'FontSize',14);
set(ht2,'FontSize',14);
set(ht3,'FontSize',14);axis([-1.2 1.2 -1.2 1.2])
axis equalset(h(5),'MarkerSize',20)
set(h(6),'MarkerSize',20)
set(h(7),'MarkerSize',20)switch_pattern = logsout{2}.Values.Data(1:40:end,:);init_switch_pattern = num2str(switch_pattern(1,:));switch init_switch_patterncase num2str([1 0 0 0 0 1])set(h(5),'MarkerFaceColor',[1 0 0])set(h(7),'MarkerFaceColor',[0 0 1])set(h(6),'MarkerFaceColor',[1 1 1])case num2str([0 0 1 0 0 1])set(h(6),'MarkerFaceColor',[1 0 0])set(h(7),'MarkerFaceColor',[0 0 1])set(h(5),'MarkerFaceColor',[1 1 1])case num2str([0 1 1 0 0 0])set(h(5),'MarkerFaceColor',[0 0 1])set(h(6),'MarkerFaceColor',[1 0 0])set(h(7),'MarkerFaceColor',[1 1 1])case num2str([0 1 0 0 1 0])set(h(5),'MarkerFaceColor',[0 0 1])set(h(7),'MarkerFaceColor',[1 0 0])set(h(6),'MarkerFaceColor',[1 1 1])case num2str([0 0 0 1 1 0])set(h(6),'MarkerFaceColor',[0 0 1])set(h(7),'MarkerFaceColor',[1 0 0])set(h(5),'MarkerFaceColor',[1 1 1])case num2str([1 0 0 1 0 0])set(h(5),'MarkerFaceColor',[1 0 0])set(h(6),'MarkerFaceColor',[0 0 1])set(h(7),'MarkerFaceColor',[1 1 1])endl1 = 0.7;
ro = logsout{1}.Values.Data(1)*pi/180;xr1 = l1*cos(ro);
yr1 = l1*sin(ro);
xr2 = -l1*cos(ro);
yr2 = -l1*sin(ro);hold on,hl1 = plot([xr1 xr2],[yr1 yr2],'m-');set(hl1,'LineWidth',3)hpr = plot(xr2,yr2,'ko');
hpb = plot(xr1,yr1,'ko');set(hpr,'MarkerSize',20)
set(hpb,'MarkerSize',20)
set(hpr,'MarkerFaceColor',[1 0 0])
set(hpb,'MarkerFaceColor',[0 0 1])pausero1 = logsout{1}.Values.Data(1:40:end);for l = 1:numel(ro1)pause(0.1)switch_pattern1 = num2str(switch_pattern(l,:));ro = ro1(l)*pi/180;xr1 = l1*cos(ro);
yr1 = l1*sin(ro);
xr2 = -l1*cos(ro);
yr2 = -l1*sin(ro);set(hpr,'XData',xr2);
set(hpr,'YData',yr2);
set(hpb,'XData',xr1);
set(hpb,'YData',yr1);set(hl1,'XData',[xr1 xr2]);
set(hl1,'YData',[yr1 yr2]);switch switch_pattern1case num2str([1 0 0 0 0 1])set(h(5),'MarkerFaceColor',[1 0 0])set(h(6),'MarkerFaceColor',[1 1 1])set(h(7),'MarkerFaceColor',[0 0 1])case num2str([0 0 1 0 0 1])set(h(6),'MarkerFaceColor',[1 0 0])set(h(7),'MarkerFaceColor',[0 0 1])set(h(5),'MarkerFaceColor',[1 1 1])case num2str([0 1 1 0 0 0])set(h(5),'MarkerFaceColor',[0 0 1])set(h(6),'MarkerFaceColor',[1 0 0])set(h(7),'MarkerFaceColor',[1 1 1])case num2str([0 1 0 0 1 0])set(h(5),'MarkerFaceColor',[0 0 1])set(h(7),'MarkerFaceColor',[1 0 0])set(h(6),'MarkerFaceColor',[1 1 1])case num2str([0 0 0 1 1 0])set(h(6),'MarkerFaceColor',[0 0 1])set(h(7),'MarkerFaceColor',[1 0 0])set(h(5),'MarkerFaceColor',[1 1 1])case num2str([1 0 0 1 0 0])set(h(5),'MarkerFaceColor',[1 0 0])set(h(6),'MarkerFaceColor',[0 0 1])set(h(7),'MarkerFaceColor',[1 1 1])enddrawnowendcatchdisp("The animation was closed before the end of the simulated data")end

下一篇文章中,我们将会对仿真模型各种情况下的波形进行重点分析。

文章相关模型文件下载链接

通过网盘分享的文件:BLDC直流无刷电机仿真基础教程(五) - animateRotorPosition脚本讲解与使用
链接: https://pan.baidu.com/s/1ld_d9TDVztWcLyAUgokNpg?pwd=bu2r 提取码: bu2r

参考链接

Design-motor-controllers-with-Simscape-Electrical
MATLAB 教程
matlab——simulink从工作空间导入数据作为输入信号进行仿真
深入研究simulink仿真之信号标签
matlab帮助中心 - pause

相关文章:

  • Unity 几种主流的热更新方式
  • 【Java学习笔记】递归
  • 【白雪讲堂 】GEO兴起:AI搜索时代的内容优化新战场
  • 哈希表笔记(三)Java Hashmap
  • 用手机相册教我数组概念——照片分类术[特殊字符][特殊字符]
  • AXI中的out of order和interleaving的定义和两者的差别?
  • mysql-窗口函数一
  • 缓存:缓解读库压力的高效方案与应用实践
  • Transformer架构的解耦重组现象
  • JVM——Java 虚拟机是如何加载 Java 类的?
  • RAG工程-基于LangChain 实现 Advanced RAG(预检索-查询优化)(下)
  • 记录搭建自己的应用中心-需求看板搭建
  • 如何解决 H5 远程收款的问题呢?
  • 计算机网络——HTTP/IP 协议通俗入门详解
  • 人工智能——DBSCAN 聚类算法
  • 前端面经-webpack篇--定义、配置、构建流程、 Loader、Tree Shaking、懒加载与预加载、代码分割、 Plugin 机制
  • Java学习手册:Spring 事务管理
  • Unity SpriteRenderer(精灵渲染器)
  • 【专题五】位运算(2)
  • 【5G 架构】边缘计算平台是如何与3GPP网络连接的?
  • 巴菲特股东大会前瞻:执掌伯克希尔60年,巨轮将驶向何方
  • 华夏银行一季度营收降逾17%、净利降逾14%,公允价值变动损失逾24亿
  • 15世纪以来中国文化如何向欧洲传播?《东学西传文献集成初编》发布
  • “五一”假期,又有多地将向社会开放政府机关食堂
  • 北京公园使用指南
  • 早睡1小时,变化有多惊人?第一个就没想到