Matlab/Simulink - BLDC直流无刷电机仿真基础教程(四) - PWM调制模拟

Matlab/Simulink - BLDC直流无刷电机仿真基础教程(四) - PWM调制模拟

  • 前言
  • 一、PWM调制技术基本原理
  • 二、仿真模型中加入PWM调制
  • 三、逆变电路MOS管添加体二极管
  • 四、模拟添加机械负载
  • 五、仿真模型与控制框图
  • 文章相关模型文件下载链接
  • 参考链接

前言

本系列文章分享如何使用Matlab的Simulink功能来进行BLDC直流无刷电机的基础仿真;本篇文章将会从较为贴合实际控制情况下,讲解如何使用PWM调制技术来实现对BLDC电机的转速控制。在此感谢各位读者的支持,并欢迎交流。

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

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

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

一、PWM调制技术基本原理

PWM,即脉冲宽度调制(Pulse Width Modulation),是一种将连续的模拟信号转换为脉冲序列的调制技术,也就是通过对数字信号进行调制,来等效模拟信号。

面积等效原理是PWM调制技术的重要理论基础,其原理内容是:冲量相等而形状不同的窄脉冲加在具有惯性的环节上时,其效果基本相同;这也是应用PWM调制技术的前提。

在前面的文章中,我们搭建了一个基础的电机转速闭环控制模型,其中我们通过PID控制器来实现对电源电压的直接控制,不过在实际的物理世界中,这种方法往往不能直接实现;比如有一块电池,它的电压往往也和它的电量有关,我们做不到直接改变电池本身的电压,但是通过PWM调制技术,我们可以实现几乎等效的不同幅值电压的输出。又或者我们希望能够输出正弦波形的电压,且波形幅值、频率可以变化,结合PWM技术,同样可以做到。

PWM输出的具体形式,受到目标信号的波形、频率、幅值影响,接下来将会逐个进行简要讲解:

  • 波形:不同电压幅值的直流输出,可以理解为不同高度的直线波形,此外还有正弦波、三角波等,这些波形决定了我们PWM的占空比应该如何变化;例如对于不同幅值的直流输出,可以固定占空比,幅值高的输出,对应占空比则更高,对于正弦波,则是在其波峰处占空比要高一些,而在波谷处,占空比要低一些(具体也要看电路等实际物理情况)。
  • 频率:一般来说,PWM信号的频率最好远高于信号频率,例如十倍以上(涉及到采样定理);PWM频率往往直接影响着调制效果,一般来说频率越高,等效的效果就越好,但是在逆变电路中也会增加开关损耗等,需要平衡。
  • 幅值:目标信号的幅值影响着PWM占空比,幅值越高,占空比也就要越高,即此时等效的信号幅值更大。

在这里插入图片描述

图片1.1 PWM面积等效原理示意图


注意,PWM调制技术适用的前提是控制对象具有比较明显的惯性环节的特征,若对象的惯性极小,或对噪声、纹波非常敏感,那么PWM的表现就不太好了,或是并不适用。例如一些小电感电机,若PWM的频率不高,其电流波动会非常明显,具有比较大的电流谐波,影响控制效果;还有在电源方面,MCU通常需要使用LDO来供电,而Buck电源由于存在纹波,会对MCU正常工作产生影响。

二、仿真模型中加入PWM调制

在前面的博客中,我们搭建了如下图所示的BLDC电机速度闭环控制模型,包含有电机本体、霍尔传感器、换相逻辑模块、三相逆变器模块,以及我们的控制回路。

在这里插入图片描述

图片2.1 基础BLDC电机速度闭环控制模型


接下来,我们需要引入PWM调制技术,使这个仿真模型更加贴近实际的电路系统。

我们打开库浏览器,并搜索PWM,将该模块拖出到右侧。(有探索精神的朋友也可以看一下simscape库中的PWM模块如何使用。)

在这里插入图片描述

图片2.2 PWM模块


双击该模块,在模块配置界面,可以看到我们可以修改该模块的周期、初始延迟等参数,PWM周期和频率是倒数关系,在电机控制领域中,一般10kHz的频率就可以进行大部分基础效果的控制,对应时间也就是100us,这里我们设定其周期为1e-4(即0.0001s - 100us)。

在这里插入图片描述

图片2.3 PWM模块周期设置


从该配置界面,我们可以看到该模块采用输入信号数值作为占空比,也就是说我们如果给定一个0.5的数值,那么占空比就是50%,数值为1,占空比就是100%。

在正式地引入PWM模块到我们的模型之前,还需要对模型的一些部分进行调整。

  1. 此前在逆变器电路中放置的可控电压源,需要改回我们最开始使用的电压源(记得将电压也恢复为直流100V),并删除现在多余的电压控制输入引脚Voltage in。(图中红色方框部分均删除。)

在这里插入图片描述

图片2.4 修改三相逆变器模块


  1. 换相逻辑模块需要补充PWM关断时的处理,也就是说我们需要为该模块添加一个新的输入引脚,表示PWM信号。

在这里插入图片描述

图片2.5 换相逻辑模块添加PWM输入


仿照matlab官网视频中的做法,这里我们设定的PWM控制逻辑是在同一相位时,上桥MOS管发PWM,下桥保持常开。

这里借用一下其他博主文章中的图片,可以看到我们这种方法对应的就是下图中的(2)H_pwm-L_on;matlab官网演示的逻辑则是相当于对BLDC电机进行正反向交替的控制,控制效果方面没有本质区别,不过实际电路中这种方法会存在MOS开关次数较多的问题,会存在较高的开关损耗。

在这里插入图片描述

图片2.6 不同PWM调制方式


从库浏览器中搜索swith模块,拖出后按照下图方式搭建我们新的换相逻辑模块。

这里switch的阈值设定为0.5,因为我们的PWM模块的输出仅有0和1,当PWM模块输出1时,我们启用上方的换相逻辑,也就是正常的打开对应的上桥和下桥,PWM模块输出0时,启用下方的换相逻辑,表示上桥关断,下桥继续保持打开。

在这里插入图片描述

图片2.7 修改完毕后的换相逻辑模块


此时我们的仿真模型如下图所示。

在这里插入图片描述

图片2.8 修改换相逻辑模块与逆变器模块后的模型


这里我们的PID控制器此前所要连接的电压输入端口已经被删除了,那么现在控制器的输出应该连接到哪里?

此前我们已经知道了PWM模块的输入信号即代表其占空比,数值越大,占空比越高,那么后续控制输出的等效的电压也就越高,是不是和我们之前直接控制电压源电压有点相似?

所以PID控制器的输出要连接到PWM模块的输入,而PWM模块的输出则是连接到我们刚刚添加的换相逻辑模块的PWM输入引脚。

在这里插入图片描述

图片2.9 修改后的模型信号连线


这里我们对我们仿真模型模块的连接进行了调整,如上图所示。

不过此时我们的模型还不适合直接运行,因为PWM模块的输入信号要求数值在0到1,而我们的PID控制器之前输出的数值则是直接控制电压,数值可以达到上百,并不合适。

这里我们重新调整PI参数,可以直接缩小为原本参数的一千分之一。

在这里插入图片描述

图片2.10 PID控制器模块修改参数


接下来切换到“饱和”栏,勾选上输出饱和和积分器饱和的“限制输出”框,并设定两者的上限为1,下限为0,将输出限定在PWM模块输入信号的规定范围内。

在这里插入图片描述

图片2.11 PID控制器模块设置输出限制


点击运行,在仿真结束后,我们打开速度角速度示波器,看到角速度的变化趋势与此前的设定一致。

在这里插入图片描述

图片2.12 PWM速度闭环控制效果


单纯看角速度的变化情况平平无奇,毕竟我们本身就是希望引入PWM调制来实现此前直接控制电源电压相同的效果。

切换到三相逆变器模块中,打开电流、电压示波器,可以看到现在的波形长的十分奇特。

在这里插入图片描述

图片2.13 运行过程电压电流变化情况


这里选定电压窗口,为了便于展示隐藏了两相电压波形,可以看到这一相电压存在频繁的高低切换,表明我们的逆变电路正在根据PWM信号对MOS管进行快速的导通与关断的切换。

在这里插入图片描述

图片2.14 PWM调制下的相电压变化情况


我们进一步放大电压波形,并使用游标来测量电平切换的间隔。

在这里插入图片描述

图片2.15 相电压变化间隔


从右侧可以看到,相邻的两个电平之间的时间间隔竟然是1ms左右,与我们设定的100us(1ms)相去甚远。

不过别担心,物理学的大厦并没有崩塌,这里我们确实设定的PWM的输出周期是100us,而此处逆变电路模块的切换间隔是1ms的缘故是求解器设定的采样时间比较大。(不知道大家还记不记得这个久远的模块。)

在这里插入图片描述

图片2.16 求解器设置界面


我们将求解器的时间也设定为100us,重新运行并再次查看电平变化的间隔。(此时由于求解器采样时间缩短,会导致运行时间变长。)

在这里插入图片描述

图片2.17 减小求解器采样时间


如下图所示,可以看到这次电平变化的间隔就是100us了,与我们的设定一致。(拯救物理学大厦行动大成功)
(不过后面我们将会知道,此时的设定依然有一些问题,这一点会在之后的系列文章中进行讲解。)

在这里插入图片描述

图片2.18 修改求解器设置后的电压变化情况


关于刚刚奇特的电压电流波形,大家如果进行过一些实际调试的话,会觉得这显然存在一些问题;这种波形与实际示波器中看到的电路波形差异很大,我们会在接下来的部分讲解如何修改我们的模型,使得其更贴近实际电路情况。

三、逆变电路MOS管添加体二极管

这里我们打开逆变器模块中的各个MOS管,为其添加体二极管(红色框中所示)。

在这里插入图片描述

图片3.1 MOSFET模块添加体二极管


为六个MOS管模块进行同样的修改,在完成之后我们再次点击运行,观察电压波形。

在这里插入图片描述

图片3.2 修改MOSFET模块后的相电压波形


有实物调试经验的朋友可以看到,现在的波形就会比较贴近在示波器中看到的实际波形;从波形的高低切换过程,我们也可以看到六步换相控制方法的特征:
最开始此相下桥导通,之后作为悬空相,电机反电动势叠加到该相,使得相电压提高(上图波形两侧下方的小三角表示逆变电路上桥没有打开时对应的相电压);接下来又作为上桥导通相,导通了两个相位周期,后续又是作为悬空相、下桥导通相,与此前讲述的六步换相次序一致。

在这里插入图片描述

图片3.3 体二极管导通电压对相电压波形的影响


对该波形下端部分进行放大,可以看到最低达到-0.8V电压,和刚刚配置的正向导通电压一致,也就是当电机反电动势使得相位电压小于-0.8V时,MOS管内部的体二极管导通,使得相电压钳位在-0.8V,不会达到更大的负电压。

四、模拟添加机械负载

也许这个时候可以认为模型已经比较贴近实际了,不过当我们设定转速由高速重新降低回到低速时,却发现出现了不符合预期的情况。

在这里插入图片描述

图片4.1 修改速度参考量给定


我们修改重复序列模块的输出值,要求现在的参考速度是达到1000后,又降低回到500。

在这里插入图片描述

图片4.2 修改速度参考量后的速度波形


打开我们的角速度示波器,发现电机转速达到1000后,却没有按照预期降低下来。

我们在PID输出侧放置一个示波器模块,观察PID控制器的输出,发现中间及后面部分的输出都是0,表示此时不输入电压给逆变电路;但电机速度却保持了恒定,表明我们的电机是没有负载转矩及摩擦损耗的,而我们的控制逻辑又只有正向旋转的控制,因此无法降低速度。(某种程度上讲,我们这里搭建了一个永动机。)

在这里插入图片描述

图片4.3 PID控制模块输出值


为了模拟实际电机受到的反向转矩,我们可以按照如下步骤来为我们的模型添加机械负载。

在库浏览器搜索Ideal Torque Source,即理想转矩源,并拖动到右侧。

在这里插入图片描述

图片4.4 理想转矩源模块


阅读其帮助文档,我们知道这个模块的C端口表示外壳,R端口表示输出轴,和我们电机模型对应端口的含义一致。这里我们将其R、C两个端口和电机的R、C两个端口连接在一起。

该模块的S端口表示信号控制端口,输出转矩数值即是我们给定S端口的信号数值(单位是N*m)。

在这里插入图片描述

图片4.5 理想转矩源模块介绍


我们按照下图方式放置、连接此模块,并在S端口连接了一个Simulink-PS Converter模块以实现信号的转换输入,在后面添加一个Constant模块,这里我们设定数值为-4,即不断的给BLDC电机输出轴施加一个反向的,大小为4N*m的负载转矩。

在这里插入图片描述

图片4.6 理想转矩源模块的使用


此时我们再观察角速度传感器的输出,可以看到此时转速的变化大体上符合了我们设定的参考转速的给定。

在这里插入图片描述

图片4.7 模拟添加负载后的转速波形


五、仿真模型与控制框图

这里我们再简要分析一下现在搭建的仿真模型与自动控制领域的控制框图的联系。

目前我们的仿真模型如下图所示。

在这里插入图片描述

图片5.1 带PWM调制模块的BLDC速度闭环控制模型


借用其他作者文章里面的自动控制系统方框图,可以看到,我们搭建的仿真模型与这张控制框图有些相似的地方;实际上我们也确实可以将两者联系起来。

在这里插入图片描述

图片5.2 自动控制系统方框图


接下来我们按照从左到右,从上到下的次序,依次讲解这个自动控制系统方框图各个元素与我们的仿真模型的联系。

  • 输入信号r(t),在我们的模型中实则就是Repeating Sequence重复序列模块,这个模块给出了我们希望达到的转速,也就是参考速度。
  • 偏差信号e(t),就是输入信号减去主反馈信号,在我们的模型中,就是重复序列模块减去理想角速度传感器获得的电机转速,也是对应的。
  • 串联校正元件,即PID环节,对应的就是模型中的PID控制器模块。
  • 放大元件,对应实际电路系统中,一般MCU的PWM信号给到逆变电路前,还会有驱动芯片等,用于放大MCU输出的弱电控制信号;在我们的模型中,换相逻辑输出直接给到了逆变电路,可以认为放大元件和我们的执行元件(MOS管)合并在了一起。
  • 执行元件,如前所述,就是我们三相逆变器模块,或者说其中的MOSFET模块。
  • 控制对象,这里我们搭建的是BLDC电机控制模型,控制对象自然是BLDC电机,我们希望能够控制其转速的输出,而在实际电机运行过程中,由于摩擦转矩、负载转矩波动等,会对控制结果引入扰动。
  • 输出,也就是被控量,这里我们要实现的是电机转速的闭环控制,因此模型中的输出就是电机转速。
  • 并联校正元件,有时放大元件、执行元件本身参数会有波动,使用并联校正的方式来降低被包围元件参数变化的敏感性。模型中没有并联校正部分。(个人对这一点也不是很理解,欢迎指导。)
  • 测量元件,即理想旋转运动传感器。
  • 主反馈信号,模型中我们直接获取了转速数值,不过转速这个概念实际上是抽象的,在实际系统中,我们可能通过编码器来获取电机一定时间内转过的角度,进而计算出转速;从编码器输出的各类信号量,进一步处理为电机转速,此时我们才得到了实际参与运算的反馈信号。
  • 主反馈,也就是测量元件要进行测量的物理量,实际与作为输出的电机转速含义相同。
  • 此外,我们还需要注意反馈信号的极性,也就是检测到了这样的反馈信号后,我们到底是要提高控制器的输出还是降低控制器的输出;例如这里电机转速低于参考量时,我们可以增加PWM占空比,也就是等效提高输出电压;但如果我们控制不了PWM占空比,例如我们只能控制一个串联在逆变器电源上的滑动变阻器,通过改变阻值来影响电压输出,阻值越高,给到电机三相的电压越低,此时如果我们检测到的电机转速低于参考转速,而我们却增加了变阻器阻值,使得输出电压更低,进一步使得电机转速更低,此时就形成了一个预期外的正反馈,而无法达到我们的控制目的。

下一篇文章中,我们将会对官方视频展示的animateRotorPosition.m的可视化脚本进行讲解,并展示如何修改脚本以适配我们的模型进行可视化。

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

通过网盘分享的文件:BLDC直流无刷电机仿真基础教程(四) - PWM调制模拟
链接: https://pan.baidu.com/s/1ORc2kw0Dn_0dOwvcu-OzUQ?pwd=32e8 提取码: 32e8

参考链接

PWM(脉冲宽度调制)原理、应用以及实现
BLDC的基本控制
自动控制原理分析工作原理以及方框图做题过程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/903735.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Curl 全面使用指南

Curl(Client URL)是一个跨平台命令行工具,支持多种协议(HTTP/HTTPS/FTP/SFTP等),用于数据传输、API调试、文件上传/下载等场景。以下从 核心功能、用户疑问解答、高级技巧 三方面系统总结,并整合…

PyTorch中“原地”赋值的思考

在开发一个PyTorch模块时,遇到了一个诡异的现象,将他描述出来就是下面这样: f[..., :p_index - 1] f[..., 1:p_index] 这个操作将f张量的部分数值进行左移,我在模型训练的时候还能正常跑,但是当我将模型部署到项目中…

什么是:云边端一体化架构

什么是云边端一体化架构 文章目录 什么是云边端一体化架构云、边、端云计算边缘计算终端设备 云边端一体化协同云边端一体化架构协同的流程云边端一体化架构协同的应用云边端一体化架构协同的价值云边端一体化架构协同未来发展趋势 云、边、端 云(Cloud&#xff09…

gephi绘图

参考: 如何在Gephi中正确的显示中文? Gephi绘制网络图初步探索 gephi 节点标签 调节_图分析与可视化-从Gephi开始

马克·雷伯特:用算法让机器人飞奔的人

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 马克雷伯特:用算法让机器人飞奔的人 一、天才的起点 在机器人领域,有一个名字如雷贯耳——马克雷伯特(Marc Raibert)。作为波士顿动力公司(Boston…

三维装配可视化界面开发笔记

三维装配可视化界面开发笔记 项目概述 这是一个基于Vue.js和Three.js的三维装配可视化系统,用于展示机械零部件的装配和拆解过程。系统支持模型加载、拆解/装配路径生成、动画展示和工艺流程图生成等功能。 技术栈 前端框架: Vue 3 (使用组合式API)构建工具: Vi…

深⼊理解指针(8)

1.对上一篇的补充内容 typedef int* ptr_t #define PTR_T int* 这两种写法都是可以的 ptr_t p1, p2; //p1, p2 都是指针变量 PTR_T p3, p4; //p3 是指针变量, p4是整型变量 为什么p3 是指针变量, p4是整型变量呢? 因为PTR_T 真的被改为了 int* 在编译器中…

neo4j暴露公网ip接口——给大模型联通知识图谱

特别鸣谢 我的领导,我的脑子,我的学习能力,感动了 1. 搭建知识图谱数据库(见上一章博客) 这里不加赘述了,请参考上一篇博客搭建 2. FastApi包装接口 这里注意:NEO4J_URI不得写http:,只能写…

AI编程新选择!VSCode + RooCode,超越Cursor​

在当今快节奏的开发环境中,AI编程助手已经成为提升开发效率的关键工具。然而,面对众多选择,开发者往往陷入纠结:如何在众多AI编程工具中找到最适合自己的方案?尤其是当VSCode搭配RooCode时,相比Cursor&…

电子病历高质量语料库构建方法与架构项目(环境聆听与自动化文档生成篇)

电子病历高质量语料库的构建是一个复杂而系统的工程,涉及数据收集、清洗、标注、验证等多个环节。在项目实施过程中,"环境聆听"和"自动化文档生成"是两个关键支撑要素,前者确保项目能够适应不断变化的技术和业务环境,后者则保障项目过程的可追溯性和知…

Python协程入门指北

一、什么是协程? 协程(Coroutine)就像可以暂停执行的函数,能够在执行过程中主动让出控制权,等准备好后再继续执行。 生活小例子 想象你在咖啡店排队: 普通函数:必须一直排到取餐&#xff08…

mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz的下载安装和使用

资源获取链接: mysql-5.7.24-linux-glibc2.12-x86-64.tar.gz和使用说明资源-CSDN文库 详细作用 数据库服务器的核心文件: 这是一个压缩包,解压后包含 MySQL 数据库服务器的可执行文件、库文件、配置文件模板等。 它用于在 Linux 系统上安装…

C++笔记-继承(下)(包含派生类的默认成员函数,菱形继承等)

一.派生类的默认成员函数 1.14个常见默认成员函数 默认成员函数,默认的意思就是指我们不写,编译器会自动为我们生成一个,那么在派生类中,这几个成员函数是如何生成的呢? 1.派生类的构造函数必须调用基类的构造函数初…

C++中指针使用详解(3)数组、指针和函数参数传递的底层 ABI实现

要深入理解 数组、指针和函数参数传递 的底层 ABI(Application Binary Interface)实现,需要从以下几个维度出发进行学习: 一、什么是 ABI? ABI 是编译器和操作系统之间的协定,规定了: 函数如何…

【RustDesk 】中继1:压力测试 Python 版 RustDesk 中继服务器

测试 Python 版 RustDesk 中继服务器 测试我们实现的中继服务器有几种方法,从简单到复杂依次如下: 1. 基本连接测试客户端 创建一个简单的测试客户端来验证中继服务器的基本功能: 2. 用两个测试客户端测试中继功能 要测试完整的中继功能,你需要运行两个客户端实例来模拟…

Spring Boot集成Spring Cloud 2024(不使用Feign)

本文介绍Spring Boot集成Spring Cloud 2024,且不使用Feign,而是采用Spring 6自带的HttpExchange方式进行服务调用的详细步骤: 环境准备 Spring Boot版本:推荐使用Spring Boot 3.4.1及以上版本,以更好地与Spring Clou…

vue中$set原理

Vue 中的 $set 方法(Vue.set)主要用于 向响应式对象中添加一个新的属性,并确保这个新属性是响应式的,能够触发视图更新。 📌 背景问题:为什么需要 $set? 在 Vue 2 中,直接给对象新增…

Superset二次开发之深度解读系列:1.概述

Apache Superset 是一款现代化的企业级商业智能 Web 应用程序,专为数据探索和可视化而设计。本概述介绍了 Superset 的架构、核心组件和主要功能,以帮助开发人员了解该系统的工作原理。 What is Apache Superset? Apache Superset 是一个开源数据探索…

Linux系统之elfedit详解

elfedit 是一个用于修改 ELF(可执行与可链接格式)文件头的工具。它允许用户根据指定的条件(如机器类型、文件类型、操作系统/ABI)匹配并更新 ELF 文件的头部信息。支持 32 位和 64 位 ELF 文件,以及包含 ELF 文件的归档…

前端HTML基础知识

1.HTML介绍 HTML(HyperText Markup Language,超文本标记语言)是构成网页的基本元素,是一种用于创建网页的标准化标记语言。HTML不是一种编程语言,而是一种标记语言,通过标签来描述网页的结构和内容。 超文本:超文本是…