Matlab/Simulink - BLDC直流无刷电机仿真基础教程(一) - 三相逆变器的搭建
前言
本系列文章分享如何使用Matlab的Simulink功能来进行BLDC直流无刷电机的基础仿真,最终目标是通过Simulink中的模块搭建一个简单的BLDC电机控制模型,并实现速度闭环控制。
文章内容主要参考Matlab官网的BLDC仿真视频教程,主要是对官方视频教程的进一步详细说明,以及对BLDC电机控制原理、仿真过程部分问题点的简要讲解,希望大家通过此系列文章可以掌握Matlab电机仿真的基本技术,并在后续能够按照需要搭建更复杂的模型。
官方视频教程地址如下:
https://ww2.mathworks.cn/videos/series/how-to-design-motor-controllers-using-simscape-electrical.html
相关演示操作在Matlab2023b中进行。
一、BLDC电机六步换相简明控制原理
BLDC无刷直流电机与有刷电机的运行原理相似,由永磁体和电励磁线圈的吸引和排斥来产生旋转运动。
如下图所示,为一对极电机的简化图,外侧A、B、C为等效后定子上的三相电励磁线圈,中间由粉色线连接的红蓝部分为电机转子的等效示意图。
给三相线圈按照一定规律来通电,A、B、C三处对应磁性可以不断变化,从而带动电机转子的旋转运动。
按照BLDC的六步换相方法,线圈共有六种通电方法,每次通电后,转子将会旋转至如图所示的对应位置。图中标注的角度以水平轴为参考的零度,可以看到按照如下顺序给励磁线圈通电,电机转子将可以进行连续的旋转。
实际控制中,一般使用三相逆变电路来控制电机A、B、C三相线圈的通电。如下图所示,为控制电流由逆变器S5开关器件流经C相、B相线圈,之后由S4开关器件回到地。后续我们也将模拟三相逆变电路的导通情况,来实现电机的连续运行。
容易想到,如果上述六步换相的各个导通情况没有正确切换,例如电机转子尚未达到对应的角度位置,就已经进行了下一步的激励,那么电机将不会按照预期正常运行,可能会出现电机抖动,但无法连续运行的情况;或是如果换相激励切换太慢,会出现转矩、转速较大的波动等。
因此对于BLDC电机的六步换相控制,一般需要采用有感或无感的转子位置检测技术,来正确判断当前所需的线圈激励情况,以实现电机的稳定运行。对于有感,一般采用霍尔元件以检测电机转子位置所在区间,无感方面可以参考反电动势检测以及磁链检测的技术,此处不详述。
二、Simulink中BLDC电机模块的机械连接
首先我们打开Matlab的Simulink功能,并按下图所示打开库浏览器,搜索“BLDC”,按住该模块拖到右侧。
我们可以看到刚刚拖出的BLDC模块现在有四个端口,为了便于演示,我们需要双击该模块,打开配置界面,在如下图所示的选项中,选择“Expanded three-phase ports”。
对该模块各个端口的讲解见下文。
如下图所示,此时BLDC模块有五个端口,刚刚的“~”端口变为了a、b、c三个端口,表示BLDC电机的A、B、C三相控制端口。
这里我们对该模块的端口进行一个简要的讲解。下图为Matlab帮助文档中的相关内容,可以看到,模块此前的~端口及现在的a、b、c端口表示电机的电气端口,R、C端口表示电机的转子及外壳,为机械端口。
我们使用到的BLDC模块为Simscape软件的模块,其采用物理网络方法来实现建模仿真,与常规的Simulink基本数学运算不同,涉及到仿真中能量的守恒等,若需要进一步了解,可以参考后附的Matlab 模型物理网络基础原则。
接下来,我们需要正确配置BLDC模块的各个端口,才能按照我们预期进行控制。
这里,我们首先进行电机模块右侧的机械端口的连接。我们需要用到机械旋转参考模块,搜索“Mechanical Rotational Reference”,找到如图所示的模块,并拖到右侧。
将刚刚拖出的机械旋转参考模块,连接到电机模块右侧的C端口,相当于表示电机的定子外壳(静止)部分。
为了观察后续三相逆变电路控制电机模块时,电机转子的运动情况,我们需要一个能够观察转子旋转的模块,这里我们用到理想旋转运动传感器(“Ideal Rotational Motion Sensor”)。
拖出该模块后,将其R端与电机R端相连接,我们可以看到该传感器模块右侧有三个端口,继续查阅帮助文档了解其设计。
可以看到,该模块右侧C端口也是机械参考端口,我们需要像此前BLDC模块的处理一样,将一个机械参考模块连接到该端口。而W端口、A端口分别是传感器检测到的角速度、角位置(角位移),其单位默认使用弧度制,后续我们可以按照自身需求修改其单位。
接下来为了仿真电机带负载情况,我们可以使用一个惯性模块,用于模拟电机运行时的惯性负载。
找到惯性模块后,将其拖出并与BLDC电机模块相连,注意需要连接到电机模块右侧R端口上(表示电机转子输出轴连接负载)。
为了方便后续观察传感器模块的数据输出,我们可以使用Simulink的示波器模块,即Scope模块,找到该模块后,拖出两个到右侧。
不过注意,刚刚连接的各类模块属于物理仿真模块,其信号不能直接输入给示波器模块,需要进行数据转换后才能正常连接。
这里我们搜索“PS-Simulink Converter”模块,该模块用于将物理信号转换为常规的Simulink输出信号。
可以看到对于该模块,其由三部分构成,分别是左侧的白色三角形,中间的黑色三角形,以及右侧黑色箭头。
其中白色三角形可以引出连接线,用于连接机械仿真模块的端口,右侧黑色箭头用于连接接收Simulink信号的模块端口。
使用该转换模块,我们现在可以按照如下图所示,将理想旋转运动传感器的角速度、角度位置输出连接到示波器模块。
完成连接后,我们的模型如下图所示;这里为了便于区分,我们给示波器模块进行了命名。
不过到这一步时我们尚不能进行仿真,在仿真之前,我们还需要进行求解器的配置,若缺少求解器,运行时将会提示以下错误。
接下来,我们搜索“Solver Configuration”模块,并将其拖动到右侧。
这里为了机械参考端口的简洁,我们继续把求解器模块连接到电机模块的R端口上。
接下来,我们需要对求解器模块进行参数配置,双击求解器模块,在参数配置界面勾选“使用本地求解器”,并设定采样时间为0.001。
到此,我们模型中电机模块的机械部分完成了搭建,接下来我们开始进行左侧逆变电路部分的搭建。
三、三相逆变电路的搭建
完成了电机模块机械部分的搭建后,我们开始进行三相逆变电路的搭建,也就是BLDC模块左侧电路部分端口的连接。
我们知道,电路都有一个参考的地,其决定了整个电路的基准。
我们搜索“Electrical Reference”,也就是电气参考模块,并将其拖动到右侧。
如图所示,我们将刚刚拖出的电气参考模块连接到BLDC模块左侧下端的n端口,其意义是电机的中性点,和此前帮助文档的说明一致。
这里三相逆变电路的搭建,我们使用MOSFET模块。
拖动一个MOSFET模块到右侧,随后,我们需要对其参数进行一些设定。
双击模块打开其配置界面,随后在Threahold voltage栏修改阈值电压。因为我们希望以开关表的0、1来表示开关器件的关闭与打开,因此我们需要调整其阈值电压到0和1之间,这里我们修改其阈值电压为0.5V。
接下来,我们需要用到一个直流电压源,如下图进行搜索,并将模块拖出到右侧。
这里我们设定该模块的电压为100V,保持与官方例程一致。
接下来,将刚刚的MOSFET模块复制为六份,并按照如图所示方式进行连接,和经典三相逆变电路排布一致。
为了便于演示说明,我们可以命名各个模块,赋予其明确的控制意义,3对MOSFET从左至右分别表示电机A、B、C相的上下桥。
接下来,我们参考文章第一部分的控制原理,人为给定一个恒定的开关状态。
这里我们搜索“Constant”常量模块。
由于我们的三相逆变电路有六个开关器件,因此需要将该常量模块给值设定为6个,用于控制各个开关器件的通断情况。
这里我们选择输入[1 0 0 0 0 1],表示A相上桥、C相下桥打开,其余器件关闭。
随后我们使用Demux模块,该模块用于向量信号的数据分离处理。其会提取输入信号的分量,并输出为单独的信号;输出信号端口按照顺序从上到下分别输出各个分量信号。
这里我们的开关信号有6个,因此我们双击Demux模块,在配置界面将其输出数目改为6。为了便于连接与展示,我们可以适当拉伸该模块。
随后,我们将常量模块的唯一一个输出端口连接到Demux模块左侧的信号输入端口。
为了仿真模型信号通路在视觉方面简洁直观,我们使用From和Goto模块进行信号的传输。
在将信号传输给我们的MOSFET开关器件模块前,我们需要像此前示波器模块的连接一样,进行信号类型的转换。
不过注意,这里我们需要将Simulink信号转换为物理信号,与此前刚好反过来;在库浏览器搜索“Simulink-PS Converter”,并将其拖到右侧,复制六份后与6个MOSFET模块左侧的控制端口一一相连。
分别拖出一个From模块和一个Goto模块,并将其复制六份,按照如下图所示方式进行连接,其中左侧Demux模块信号输出侧连接的是Goto模块,右侧开关器件的控制端口处为From模块。可以看到我们这里6个MOSFET模块分别由一个控制信号进行控制,Goto模块和From模块一一对应;其中在From模块连接到MOSFET模块前,要通过Simulink-PS Converter模块连接。
在这之后,我们将BLDC电机模块的a、b、c三个电气输入端口分别连接到逆变电路A、B、C三相上下桥之间,目前的仿真模型整体如下图所示。
到此,我们完成了电机模块的电气端口的连接。
接下来,在统一模块参数设置及仿真时长后,就可以开始仿真。
四、仿真参数设置与仿真结果验证
为了便于观察数据,我们对之前放置的理想旋转运动传感器模块进行修改。
在如图所示位置,通过下拉栏修改传感器单位为“度”(degree)。
接下来,为了使输出信号量可以按照我们要求的角度格式进行输出,还需要修改与理想旋转运动传感器输出端W端口和A端口相连接的PS-Simulink Converter模块的参数。
如下图所示,将与角速度示波器(W端口)连接的PS-Simulink Converter模块的输出信号单位改为“deg/s”,即 度/s ,将于角位置示波器(A端口)连接的模块输出信号单位改为“deg”,即角度。(感谢私信指出缺漏)
为了统一我们的仿真模型参数,以及进一步简化模型,我们对BLDC电机模块进行进一步的配置。
这里我们修改其磁链为1Wb,修改其反电动势为常量对应的角度为120deg(相当于修改电机定子绕组形式),极对数为1对极,dq轴电感改为8.5e-3H,定子零序电感为0H,相电阻为0.04Ohm。
修改Inertia惯性模块参数为0.2。
一般来说,我们不需要进行太长时间的仿真,可以将仿真停止时间设定为5s,根据具体情况,也可以设置的更短。
随后,按下仿真运行按键,等待文件编译、仿真结束,我们可以查看示波器中的数据情况。
由下图角速度仿真数据可知,电机在初始激励时,转子位置产生了一定波动,一段时间后,角速度变为0,表明此时转子静止。
由角位置数据可知,电机转子位置由开始的0度,变化到了30度,并保持静止,与我们预期一致。
关于为何电机转子位置在上电后,会围绕30度产生波动,我们可以想象电机转子是一个摆锤,当我们通过逆变电路控制电机的AC相导通后,相当于将一个摆锤摆放到一定角度后松手,在重力作用下(对于电机转子而言是线圈磁场的作用),便会来回摆动,最终在诸如摩擦、发热的因素下,稳定在受力的方向上。
五、补充内容
刚刚我们的仿真主要关注的是电机模块机械部分的输出,诸如转子位置、角速度等,而很多时候,我们也会关注电路部分的数据情况,接下来,我们将使用simscape中的电流、电压模块来观测仿真过程中,流经电机三相的电流、电压情况。
在库浏览器中搜索Current Sensor(Three-Phase),找到该模块后,将其拖动到右侧。
继续搜索Phase Voltage Sensor(Three-Phase)模块。
为了便于信号通路的连接和展示,我们这里将这两个模块通过如下方法,设置为扩展三相端口模式(鼠标放置到模块上点击右键)。
接下来,我们将传感器模块并入到电路中,其中,电流传感器需要串联在三相通路上,电压传感器并联连接,并设置其另外一侧的参考点为地(前述的electrical reference)。连接好之后,我们可以将示波器模块通过PS-Simulink Converter转换模块连接到对应的传感器上。
完成连接后,我们的模型如下图所示。
接下来,我们在保存修改后的模型后,重新点击运行来进行仿真,等待仿真结束后,我们可以通过刚刚新连接的两个示波器模块来查看本次仿真过程中电机模块电气端口的电流、电压变化情况。
双击电流模块连接的示波器,我们将会看到如下所示的波形,可以看到某一相的电流很快上升到1000A,有另一相则是变为-1000A,这与定义的电流正负方向有关,还有一相电流则始终保持为0,满足基尔霍夫电流定律。
接下来,我们打开电压模块连接的示波器,可以看到三相电压在开始时均产生了波动,这与初始时刻我们电机转子的角速度波动有关,电机转子在开始时刻的波动会产生反电动势,进而影响了电压传感器的检测结果。
这里简单提一下当示波器中有多条曲线时,如何设定显示各个曲线对应信号。如下图所示,在示波器显示窗口点击“视图”,在下拉栏中勾选上“图例”,此时将会在示波器显示窗口右上角出现这样一个图例说明,表示了各个颜色波形对应的信号。
从示波器显示的数据中,我们可以计算一下为何电压表会显示两条分别稳定到正负40V的曲线。
由电流表的数据可知,稳态时电流达到了1000A,我们知道此前设定的电机相电阻为0.04Ω,那么电机单相压降为U = I*R = 40V,那么A、C两相的总压降为80V,和我们设定的100V还相差20V。
这20V实际上在我们的开关器件中损耗了,双击一个MOSFET模块,在配置界面我们可以看到MOSFET器件的源极-漏极之间的电阻设定为0.01Ω,当流经1000A的电压时,将会产生10V的压降,而上下桥两个MOSFET则刚好是20V,与此前电压源电压和电机两端电压的差值一致。
后续为了实现电机的闭环转速控制,我们还需要能够令电机持续不断地旋转,并且根据我们设定的转速来改变旋转速度,将会涉及到转子位置检测及速度反馈闭环相关内容。
参考链接
How to Design Motor Controllers Using Simscape Electrical
Matlab 无刷直流电机控制简介
Matlab 模型物理网络基础原则