电控算法工程师除了需要在ARM等控制器上进行算法编写、底层调试,还需要会在MATLAB平台中对电机系统建模进行仿真。本专栏将着重讲解PMSM、BLDC 以及 广义伺服系统的Simulink仿真设计。

        若不理解BLDC工作原理,请跳转嵌入式实践教程分享:

        【嵌入式电机控制#19】BLDC:六步换相-CSDN博客

 

        Simulink实际上是MATLAB中的一个工具,用于控制设计、机械设计等对可视化要求较高的环境下。MATLAB以及Simulink的安装请各位自行搜索,本文使用2020b版本的MATLAB进行演示,版本之间界面操作有区别,还请各位仔细权衡。

        此外,建议大家只保留电机相关的插件,以免拖慢MATLAB文件搜索速度,节省更多的电脑存储空间。

        一、BLDC环节创建

        BLDC作为控制系统的输出环节或近输出环节,在系统构建的过程中起到极其重要的作用。

        创建一个BLDC,我们需要打开Simulink的库浏览界面。

        

        搜索框中搜BLDC或在SimScape中选Electrical/Electromechnaical/Permannent Magnet(永磁式)

        

        将图片托甩到白板,即可添加环节,双击环节方框,打开配置界面,检查Winding Type,使用星形连接方法。

        

        右键框图,在simscape中选择三相扩展显示

        

        这样,我们BLDC的UVW(ABC)三相就显示在了框图中。

        

       我们在这个过程中使用了一个名为Simscape的软件模块,它能够以网络方式实现物理仿真,并严格遵循能量守恒等基本原则,  具体内容不做过多阐述,详见MATLAB的帮助页面。

        n,指的是电机的自然相位,英文全称Neutral Phase,可以近似为星形连接的中点

        R,指的是电机转子输出,通常通向执行器和采样机构,输出运控量

        C,指的是电机的外壳,通常可以输出一些过程量

        

        接下来我们需要严格配置电机的其他部件,以构建一个完整的电机系统。

        (1)电机外壳

        利用库浏览中的 Mechanical Rotational Reference (机械转动参考部件),将它与电机的外壳进行连接。

        

        (2)运动传感

        利用Ideal Rotational Motion Sensor(理想旋转运动传感器)

                     

        旋转传感器C端,连向模块的执行机构,一般是一个机械参考部件。

        W,测量角速度输出

        A,测量角位移(角位置)输出

        二者实际上就是我们电控中常用的光电/磁电传感器数学模型,角速度、角位移为增量式传感器的功能,角位置为绝对式传感器的功能。

        (3)电机负载

        所谓电机负载,就是我们加在电机上的螺旋桨、轮胎、机械臂等。他们通常具有一定的惯性,在控制理论中他们的机械系统被视为惯性环节,会造成控制系统输出存在延迟,但它的影响是永远存在且难以直接消除的

        在库浏览中获取Inertia部件,并Ctrl+R进行旋转(这里跟PCB不一样,空格没用),将惯性输出端连入R输出网络。

                   

        (4)自然输出接地

       这里要注意,Simulink中模块若来自不同的电气域则无法被网络直接连接,需要用域转换模块进行转换。然而,Simulink中有来自各种域的GND,我们最好直接选择simscape中的electrical reference作为GND,而不是随便搜一个GND出来。

        

        这样,就能直接连接了

        (5)示波器的配置

        如果我们需要看到传感器的输出,则需要配置示波器

        这里进行使用两个示波器分别测量角速度和角位置

        注意,Simulink示波器和Simcape物理器件属于不同电气域,需要加入转换模块。

        最终连接效果如下:

        

        (6)求解器配置

        将求解器挂载于电机输出网络,打开配置:

        勾选使用本地求解,采样周期0.001s

        勾选线性回归,设置为时域回归、自动模式

        勾选在1D3D下应用滤波选项

        

        二、三相逆变系统搭建

        现在解决了最难理解的机械系统,那么三相驱动电路就比较容易了。

        (1)MOSFEF设置

        拖出一个Simscape域的MOSFET,设置阈值电压为0.5。

        有人就会质疑,CMOS电平不是常用3V3的容限标准吗,为什么会设置0.5V并且以一个简单的阈值来衡量高低电平,不引入噪声容限的概念。

        其实在仿真中,我们绝大部分情况下没必要完全贴近实际工程,而是以执行效率优先。

        接下来回忆三项半桥电路什么样子?

     

        是不是长这样,想不出来建议回看嵌入式电控的专栏

      (2)总线电压引入  

        因为是仿真不怕被鞭尸这里上个强电,用100V DC去供电。

        

        (3)空间状态输入

        根据《现代控制理论》中空间状态方程的知识,我们这里有6个MOS管,用6维输入向量:

                                                  [u1(t), u2(t), u3(t), u4(t), u5(t), u6(t)]

        来分别表示AH AL......CL

        

        在浏览库中找到Constant,

        设置属性,把输入向量打进去,数字间不用带标点符号

                        

        随后,使用Demux(数据分离器)将输入向量中6个维度的信号分离,

        设置输出为6个信号

        

                                                     

        

                为了减少线路使图像更美观,我们采用了FROM和goto模块。

                FROM线路信号的终点

                goto,线路信号的起点

                此外,用simulink转ps模块将goto信号输入MOS

                这样,我们的三相逆变系统就如下图所示。

                

                三、参数调整

                修改霍尔传感器输出单位为degree

                

                此外,修改ps-Sim模块的输出分别为deg/s和deg

                

                然后,进行电机内部参数的调整

                最大磁链1Wb,霍尔安装角度120,磁极对数为1

                

                设置dq电感,定子零序电感,相电阻如下       

                inertia惯性参数设置为0.2

             

          四、进行仿真

                仿真10s后,得到如下图像。发现角速度和位置都进行收敛震荡后回到0

                说明单相导通下,转子经历波动后又返回原来的状态,电机未成功启动。

                

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐