反激式开关电源双环PID(电压环+电流环)控制之MATLAB仿真

2023-11-06

前面一篇文章我讲解了反激式开关电源输出电压的pid控制的matlab仿真。

《反激式开关电源输出电压PID控制的MATLAB仿真

       我只对输出电压做了控制,不管负载多大,只要在设计功率之内,都能把电压维持在12V。但在实际电路设计中,我们还需要考虑输出电流的限定
        因为器件选择都是基于额定值来的,如果实际值超出额定值,轻则无法工作,重则击穿器件。
        例如副边的二极管D1,如果流过它的电流超过最大正向电流,则会击穿烧坏。

         所以输出光有电压的闭环控制(简称电压环)还不行,还得有电流的闭环控制(简称电流环)。
电压环起作用时,输出电压稳定在一个值,输出电流随负载变化。


        电流环起作用时,相当于一个恒流源,输出电流稳定在一个值,电压是随负载变化的。


        从他们的作用来看,电压环与电流环似乎是矛盾的。电压环想稳定电压,电流环想稳定电流。
        其实并不矛盾,因为他们不会同时起作用。我们来具体分析两个环路的工作状态。

        假设现有一个电路,设计为输出电压12V,最大输出电流10A。        
        然后给他带负载R,R的阻值从大到小变化。
       · 当R无穷大时,相当于空载,此时电压环应将输出电压控制在12v,输出电流为0A。
       · 当R减小到2.4欧,此时电压环仍将输出电压控制在12v,电流为12/2.4=5A,相当于半载。
       ·继续减小到1.2欧,此时电压仍为12V,电流为12/1.2=10A。此时电流已经达到最大设计值了。
       · 如果继续减小R到 1欧,且保持输出电压不变的话,输出电流会达到12/1=12A,超出了设计值。怎么办呢?

此时,就轮到电流环起作用了。
        电流环的作用并不是去抬高输出电压来稳定电流,其实是通过拉低输出电压来限制电流。也就是电流环会把输出电压降低,以满足输出电流不大于10A的设定,会拉低到多少呢?计算很简单,R为 1欧时,为满足电流为10A,此时的电压应为10×1=10v。
        那么此时电压环呢?为了不让电压环把电压抬高到12v,需将电压环开环(开环即环路失效),输出由电流环控制。
        同样,在电流未达到10A时,电流环开环,不起作用,整个系统由电压环控制。
两个状态的转折点就是负载R=电压环设计值/电流环设计值=12/10=1.2欧,

        R>1.2时电压环工作,电流环开环;R<1.2欧时,电流环工作,点压环开环。

在上述电路中,输出电压电流与负载R的关系应当如下:

        我们要做的就是设置两个环路,按上面的逻辑来控制占空比。

注意:在模拟电路控制的开关电源中,逻辑与数字控制的稍有不同。模拟电路中,控制MOSFET的PWM波由专门的驱动IC提供,IC有一个FB端口(feedback,即反馈),其输出的PWM占空比取决于FB端口的电压,一般成线性关系,FB电压越高,输出的占空比越高,且FB在悬空状态下是处于最大电压状态,也就是FB如果悬空,输出的PWM占空比是最大的。

而输出的电压环电流环就是通过拉低FB的电压来实现控制电压电流。可以这么理解,开关电源刚开机时,其占空比是最大的,电压会迅速上升,当达到电压的设计值,电压环会将FB的电压拉低到一定值,以保持输出电压不超过设定值。如果电压环失效,输出电压则会失控过压。当电流达到电流的设计值,电流环则会动作,也将FB电压拉低一定值,以限制输出电流。
不过,PWM驱动IC都会有开环保护,一旦检测到开环(FB电压如果保持在最高电压的时间过长),就会自动锁死,停止发波。

例如NCP1253是一款用于反激电路的PWM控制器,其引脚定义如下:

 其FB的频率与FB端口电压的关系如下:

 注:该控制器是保持固定的on时间,通过改变PWM波的off时间,来改变占空比与频率。

该芯片在反激开关电源中的应用实例:

         该电路中反馈信号通过光耦传递,在副边是个由基准电压源构成的电压环,这里暂不详细分析原理。

MATLAB仿真

我们回到matlab,电路设计技术指标:

输出电压300V,输出功率120W,输出电压12V,输出电流10A

在simlink中建模如下:

  将其分为各个模块:

1.反激电路原边

2.反激电路副边

3.电压PID控制环

4.电流PID控制环

5.模拟动态负载。通过延时控制开关,来控制R2的接通与否,实现负载大小的切换

6.输出电压、电流、功率监控

7.电压环电流环工作状态转换。原理是通过计算负载的总阻值,与1.2进行比较,如果大于1.2,则切换至电压环控制占空比;若小于1.2,则切换至电流环控制。

关于PID参数的调节,我上篇文章已经讲过,这里就不演示了。

        对于双环的电路,一般先调电压环。我们先将R2断开(可以先删除或者将线断开),设置R=1.5Ω。

        然后将PID电压环的Ki设为0,Kp设为1,然后运行,观察输出电压波形,波形是否流畅,无明显震荡,且在电压升至12V时,是否有过冲,如果有,则调小Kp至波形无振荡且无过冲。

         确定Kp之后再设Ki=1,运行仿真后,观察输出电压是否能快速升到12V,如果很慢,则增加Ki值,直到符合要求,如果有过冲,则调小Ki。直到上升既快又不发生过冲。

         以下是我的电压环PID参数,可供参考:

        电压环PID参数设置完成之后,开始电流环。

        调电流环就必须让电压环开路,所以我们需要将电阻R设为小于1.2Ω,这里我设置为0.1Ω。

        调节方式与电压环类似。只不过是观察输出电流波形来确定参数是否合适,这里就不演示了。

        下面的参数可供参考:

下面是电流环最终的效果 

PID的参数调节完成之后,老看看实际的效果。

----------------------------

1.当R=2.4Ω,输出波形如下:

 稳定后,输出电压12V,输出电流5A,输出功率60W,符合要求

---------------------------------------

2.当R=1.2Ω,输出波形如下;

稳定后, 输出电压12V,输出电流10A,输出功率120W,符合要求

----------------------------------------------

3.当R=1Ω,输出波形如下:

 稳定后,输出电压10V,输出电流10A,输出功率100W

----------------------------------------------

4.当R=0.5Ω,输出波形如下:

稳定后,输出电压5V,输出电流10A,输出功率50W 。

动态负载

通过动态负载试试环路的响应速度.R设为4Ω,R2设为4Ω,脉冲发生器设置如下:

 也就是0.02s时,负载切换至2Ω(R与R2并联),0.45s时切换回4Ω。

运行仿真看看效果:

         负载由4Ω切换至2Ω时,电压有略微下降,但是仍保持稳定,输出电压由3A增加到6A;

        负载由2欧姆切换回4Ω时,电压有稍微上升,然后稳定,电流降回3A。

再试试电流环的效果,R设为1Ω,R2设为1Ω。

         负载从1Ω切换至0.5Ω时,瞬间电流达到20A,这是因为输出电容电压无法突变导致,但是电流很快就恢复到10A。从0.5Ω切换回1A时,电流急剧下降至5A,也是因为输出电容电压无法突变导致,后面电流恢复到10A。

总体来说,效果还是不错的。

-------------------

觉得有用,点个赞哦~


 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

反激式开关电源双环PID(电压环+电流环)控制之MATLAB仿真 的相关文章

  • Matlab-如何在曲线上绘制切线

    我在 matlab 中绘制了一个图表 plot x y 我的图表有不同的斜率 我如何在每个斜率上绘制切线并计算斜率的系数 如果您没有用于绘制点的显式函数 您可以使用有限差分 http en wikipedia org wiki Finite
  • 如何在Matlab中自定义轮廓线?

    我正在准备一个等高线图 我应该在其中突出显示特定级别的等高线 例如 我的轮廓线值位于 1 和 1 之间 我想突出显示与值 0 相对应的线 我尝试使用以下过程来执行此操作 M c contourf longitude latitude del
  • Matlab:如何显示数组的“真实”值?

    我有一个在脚本中计算的向量 计算后 我将值显示到命令窗口 显示如下 finalResults 1 0e 05 0 0001 0 0 0005 0 0002 0 0001 0 0027 0 0033 0 0001 0 0000 0 0000
  • 检查Matlab中脚本需要使用的函数

    我有一个别人写的代码包 我正在运行一个脚本 它调用一些函数 这些函数又调用更多函数 等等 我想获取不是 MATLAB 内置函数但属于包的一部分的函数列表 我尝试使用matlab codetools requiredFilesAndProdu
  • 在另一列中添加具有特定条件的一列,如 excel 的 sumif

    我有一个像这样的矩阵 A 1 2 2 3 3 4 4 5 5 6 6 8 7 9 8 5 9 4 现在我想添加第二列 条件是如果 limit 0 interval 3 且 limit limit interval 或者换句话说 当第 1 列
  • 在 matlab 中求 3d 峰的体积

    现在我有一个带有峰值的 3D 散点图 我需要找到其体积 我的数据来自图像 因此 x 和 y 值表示 xy 平面上的像素位置 z 值是每个像素的像素值 这是我的散点图 scatter3 x y z 20 z filled 我试图找到数据峰值的
  • 不等间隔时间序列的移动平均线

    我有一个证券交易所股票价格的数据集 时间 价格 但数据点之间的间隔并不相等 从 1 到 2 分钟不等 在这种情况下计算移动平均值的最佳实践是什么 如何在Matlab中实现呢 我倾向于认为 点的权重应该取决于自上一个点以来的最后时间间隔 Ma
  • MATLAB - 如何将子图一起缩放?

    我在一张图中有多个子图 每个图的 X 轴是相同的变量 时间 每个图上的 Y 轴都不同 无论是它所代表的内容还是数据的大小 我想要一种同时放大所有图的时间尺度的方法 理想情况下 可以在其中一张图上使用矩形缩放工具 并让其他图相应地更改其 X
  • Matlab:保存后翻转图例顺序和图例重叠图

    我正在尝试根据以下内容反转我的图例条目顺序matlab条形图中图例颜色的逆序 https stackoverflow com questions 31178005 reverse ordering of legend colors in m
  • 使用 MATLAB 进行线路跟踪

    我有一个图像 我想将其转换为逻辑图像 包括线条为黑色 背景为白色 当然 可以使用阈值方法来实现这一点 但我不想使用这种方式来做到这一点 我想通过使用线路跟踪方法或类似的方法来检测它 这是关于视网膜血管检测的 我找到了一个article ht
  • 有没有办法在matlab中进行隐式微分

    我经常使用 matlab 来帮助我解决数学问题 现在我正在寻找一种在 matlab 中进行隐式微分的方法 例如 我想区分y 3 sin x cos y exp x 0关于dy dx 我知道如何使用数学方法通常做到这一点 但我一直在努力寻找使
  • 使用符号求解器仅求解某些变量

    我正在尝试在 MATLAB 中求解包含 3 个变量和 5 个常量的方程组 是否可以使用solve求解三个变量 同时保持常量为符号而不用数值替换它们 当您使用SOLVE http www mathworks com access helpde
  • 在 Matlab 中高效获取像素坐标

    我想在 Matlab 中创建一个函数 给定一个图像 该函数将允许人们通过单击图像中的像素来选择该像素并返回该像素的坐标 理想情况下 人们能够连续单击图像中的多个像素 并且该函数会将所有相应的坐标存储在一个矩阵中 有没有办法在Matlab中做
  • matlab中的排列函数是如何工作的

    这是一个有点愚蠢的问题 但我似乎无法弄清楚排列在 matlab 中是如何工作的 以文档为例 A 1 2 3 4 permute A 2 1 ans 1 3 2 4 到底是怎么回事 这如何告诉 matlab 3 和 2 需要交换 哇 这是我迄
  • MATLAB - 冲浪图数据结构

    我用两种不同的方法进行了计算 对于这些计算 我改变了 2 个参数 x 和 y 最后 我计算了每种变体的两种方法之间的 误差 现在我想根据结果创建 3D 曲面图 x gt on x axis y gt on y axis Error gt o
  • 如何在文本集中创建所有字符组合?

    例如 我有这样的文本集 第 1 栏 a b 第 2 栏 l m n 第 3 栏 v w x y 我想将它们组合起来以获得如下输出 alv alw alx aly amv amw amx amy 这将输出 24 种文本组合 如果我只使用前两列
  • 有效地绘制大时间序列(matplotlib)

    我正在尝试使用 matplotlib 在同一轴上绘制三个时间序列 每个时间序列有 10 6 个数据点 虽然生成图形没有问题 但 PDF 输出很大 在查看器中打开速度非常慢 除了以栅格化格式工作或仅绘制时间序列的子集之外 还有其他方法可以获得
  • 在matlab中绘制给定区域内(两个圆之间)的向量场

    我想在 Matlab 中绘制下面的向量场 u cos x x 0 y y 0 v sin x x 0 y y 0 我可以在网格中轻松完成 例如 x 和 y 方向从 2 到 2 x 0 2 y 0 1 x y meshgrid 2 0 2 2
  • 图像处理 - 使用 opencv 进行服装分割

    我正在使用 opencv 进行服装特征识别 第一步 我需要通过从图像中移除脸部和手来分割 T 恤 任何建议表示赞赏 我建议采用以下方法 Use 阿德里安 罗斯布鲁克的用于检测皮肤的皮肤检测算法 谢谢罗莎 格隆奇以获得他的评论 在方差图上使用
  • @(t)在Matlab中是什么意思? [复制]

    这个问题在这里已经有答案了 正如标题所示 考虑到下面的上下文 t 在 Matlab 中到底意味着什么 computeNumericalGradient 是一个函数 cofiCostFunc 也是一个接受一堆参数的函数 问题是 t 对 cof

随机推荐

  • Python code模块

    code 解释器基类 code 模块提供了在 Python 中实现 read eval print 循环的功能 它包含两个类和一些快捷功能 可用于构建提供交互式解释器的应用程序 class code InteractiveInterpret
  • Kmeans原理公式图文详解

    在网上查看了些博客 感觉大家都对数学公式的解释的比较晦涩 下面我结合一个非常简单的示意图解释下他的数学公式 理解不到位的请留言 kmeans是一种聚类算法下面是算法的描述 给定训练样本是每一个 即每一个样本元素都是n维向量 为了便于理解在后
  • 淘宝淘金币助手,自动完成淘金币任务,蚂蚁庄园和蚂蚁森林,天猫领红包和收取能量

    最新软件下载 详见群文件 长期更新 QQ群号 636677598 或者直接点击链接加群 https jq qq com wv 1027 k 8rmAofkO 微信 baohuikf 1 下载安装金币助手 2 打开无障碍服务和悬浮窗权限 授权
  • Android进阶(五)DataBinding解析

    1 概述 在上篇文章Android进阶 四 LiveData解析中讲到了关于JetPack框架的LiveData解析 这是一个基于ViewModel和观察者模式的实践 这篇文章要讲的DataBinding同样可以认为是基于ViewModel
  • MIB、SIB

    1 1 概述 系统信息分成MasterInformationBlock MIB 和多个SystemInformationBlocks SIBs MIB包括有限个最重要 最常用的传输参数 其需要从该小区中获得其它的信息 同时其在 BCH上进行
  • 还在为ElementUI的原生校验方式苦恼吗,快用享受element-ui-verify插件的快乐吧(待续)

    element ui verify 本文章意在介绍element ui verify插件使用 以及对比elementUI原生校验方式 突显该插件用少量代码也能实现原生的校验效果甚至更好 1 先观察一个示例
  • Maven Helper插件 IDEA配置使用(详细配置)

    转自 https blog csdn net qq 33541575 article details 80211122 配置Maven Helper插件 因为在准备讲Maven用Maven Helper插件的时候 在网上学习 发现资料很少
  • 一个常用的 C++ 学习、了解平台特性和数据类型的小工具(源代码)

    这是一段C 代码 运行后会输出不同数据类型在当前平台下所占字节数 最大值和最小值等信息 具体解释如下 首先 包含两个头文件 iostream 输入输出流的标准头文件 用于标准输入输出 包含定义在 std 命名空间的 cout 和 endl
  • SpringCloud Alibaba之Ribbon 修改和自定义负载均衡策略

    Ribbon 简介 Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具 它基于Netflix Ribbon实现 通过Spring Cloud的封装 可以让我们轻松地将面向服务的REST模版请求自动转换成客户
  • 文件服务器 选择,文件服务器选择

    文件服务器选择 内容精选 换一换 从本地上传日志文件 是指从浏览器所在机器选择日志文件并上传 目前只支持选择 log的日志文件 如果日志文件中包含其他格式文件 则导入时会提示格式错误 如图2所示 单击Upload 则只会上传 log的日志文
  • request.getParameterNames();

    详情查询 J2EE 1 3 1 API
  • 第2章 信息系统集成及服务管理

    本章考试分值 1 2 分 主要考点 1 ITSS 信息技术服务标准 2 信息系统设计 一 信息系统集成及服务管理体系 1 信息系统集成及服务管理体系 了解 信息系统集成及服务是一个范围相当广泛的概念 所有以满足企业和机构的业务发 展所带来的
  • Android平台安全(一)

    刚好五一了 已经过去两三天了 今天接触到了关于Android安全的一些东西 记录下来 Android安全我大致分三个部分来说明 今天我就先说第一个部分 在典型的场景中 安全主要用于解决一下4类需求 保密 鉴别 认证 完整性 不可以否认性 安
  • IncrediBuild 联合编译

    01 基本信息 官网 https www incredibuild com Make 和其他构建工具示例 要使用IncrediBuild 必须有License 可以免费申请试用版本的license 可以到 https www incredi
  • 【H5】两种加密解密方法:

    H5 两种加密解码方法 encodeURI 加密 decodeURI 解密 加密成base64编码格式 btoa 加密 atob 解密 实现代码如下
  • 【C语言】计数排序

    一 算法描述 得到最小值和最大值 即得到临时数组的长度 数等于临时数组的下标 下标对应的值就加一 把临时数组的信息对应到原数组中 计数排序有很大的约束 最小值和最大值不能相差很大 排序的数适用于非负数 否则得另加代码将负数偏移为正数 最后还
  • MySQL——存储过程详解及实例分析

    目录 一 储存过程简介 1 什么是存储过程 2 存储过程优缺点 3 存储过程入门程序 4 在idea中如何调用储存过程 二 存储过程编程 1 存储过程的变量 2 存储过程中的参数 3 选择结构if 4 分支结构case 5 3个循环结构 6
  • 中文分词jieba学习笔记

    中文分词jieba学习笔记 一 分词模式 二 自定义词典 2 1 命令 2 2 使用方式 三 关键词抽取 基于TF IDF算法 3 1 用jieba analyse extract tags 3 2 用jieba analyse textr
  • idea配置tomcat启动服务器时控制台乱码

    项目场景 在idea中配置tomcat启动时候控制台乱码问题 问题描述 idea中以tomcat启动控制台出现乱码问题 原因分析 由于tomcat8以后默认编码格式是utf 8 tomcat7之前的都是iso8859 1 与idea中的编码
  • 反激式开关电源双环PID(电压环+电流环)控制之MATLAB仿真

    前面一篇文章我讲解了反激式开关电源输出电压的pid控制的matlab仿真 反激式开关电源输出电压PID控制的MATLAB仿真 我只对输出电压做了控制 不管负载多大 只要在设计功率之内 都能把电压维持在12V 但在实际电路设计中 我们还需要考