反激式开关电源双环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仿真 的相关文章

  • 二维随机微分方程 (SDE)

    我第一次研究随机微分方程 我正在寻求模拟和求解二维随机微分方程 模型如下 dp F t p dt G t p dW t where p 是一个 2 1 向量 p theta t phi t F是列向量 F sin theta Psi cos
  • 在 Matlab/Java 中将手部运动建模为 3D 曲线

    我只需要一些关于我遇到的问题 在哪里查看等的指导 我在我的一个项目中使用了运动跟踪手套 它返回每个手指和手掌的 X Y 和 Z 值 我想做的是首先根据这些坐标创建每个手指运动的表示 然后将它们每个附加到手掌的运动 以获得手的表示 一旦我完成
  • 在 numpy/scipy 中查找 matlab 函数

    是否有一个等价的函数find A gt 9 1 来自 numpy scipy 的 matlab 我知道有nonzeronumpy 中的函数 但我需要的是第一个索引 以便我可以在另一个提取的列中使用第一个索引 Ex A 1 2 3 9 6 4
  • Matlab的uicontrol在Octave中的实现?

    我正在尝试在 Octave 中运行我们实验室中使用的图形程序的 m Matlab 代码 Octave 告诉我代码中使用的函数 uicontrol 没有定义 经过一番搜索 我发现 JHandles 包有一个 uicontrol GUI 功能的
  • 当 MATLAB 变得非常非常忙时,如何中断它?

    我正在运行一个长时间的模拟MATLAB http en wikipedia org wiki MATLAB我意识到我需要停下来重新运行 然而 MATLAB 确实对这种计算很感兴趣 并且它停止了响应 如何在不终止 MATLAB 的情况下中断此
  • 如何调整x轴和y轴的大小

    如何调整 x 轴和 y 轴的大小 我想要什么 更具体 3900 60 30 0 60 120 180 3600 我做了什么 a 0 0 1 10000 plot a 我应该写什么才能按预期调整 x 和 y 轴的大小 EDIT 我不想 390
  • MATLAB:MEX 矩阵除法给出的结果与 m 文件不同

    我使用 MATLAB 的编码器工具创建了矩阵指数函数的 MEX 版本 以在另一组函数中使用 问题是 MEX 版本给出的结果与原始 m 文件不同 经过调试 我认为这是因为MEX文件和m文件没有做相同的矩阵除法 或者 MEX 文件首先就有问题
  • Matlab 的 fftn 在多线程下变得更慢?

    我可以访问 12 核机器和一些严重依赖 fftn 的 matlab 代码 我想加快我的代码速度 由于 fft 可以并行化 我认为更多的内核会有所帮助 但我看到的恰恰相反 这是一个例子 X peaks 1028 ncores feature
  • 在每次迭代中使用 for 循环的索引命名图像

    我正在使用 MATLAB 进行图像处理项目 我使用 for 循环在每次循环迭代时生成某种图像数据 图像大小不同 我的问题是如何阻止它在下一次迭代中覆盖图像 Img i j data 理想情况下我希望它有 Img 1 data for 1st
  • FFT 的功率谱密度

    我有一段代码可以获取部分信号的 FFT 现在我正在尝试获取 PSD Fs 44100 cj sqrt 1 T 6 dt 1 Fs left test 1 right test 2 time 45 interval 636 w range t
  • Matlab:掩码/创建一个知道其原点且具有一定半径的圆形 roi

    只是一个简单的问题 我有一张图像 并且提取了某个点 特征 我知道每个帧中该点的坐标 说 x1 和 y1 我需要一个圆形 ROI 形式 该点在图像上具有我选择的半径 我尝试了 impoly 和 roipoly 当我知道图像中的要点时 不知道如
  • 如何让MCR启动时间快

    我将 matlab 程序转换为 net 程序集 即 dll 文件 我制作了一个控制台 C 应用程序 添加了 dll 文件并从 php 调用它 每次调用 exe 时都会调用 MCR 如何使 MCR 在服务器启动时初始化 并且即使在一段时间后调
  • matlab mex 文件和 C++ dll (Windows)

    我有一个带有 Test 类的 DLL 标题 class MY EXPORT Test public int doit const string str 和来源 int Test doit const string str return in
  • 在 MATLAB 中使用 FFT 的频率响应

    这是场景 使用频谱分析仪 我有输入值和输出值 样本数是32000采样率为2000样本 秒 输入是正弦波50 hz 输入为电流 输出为压力 单位 psi 我如何使用 MATLAB 根据这些数据计算频率响应 使用 MATLAB 中的 FFT 函
  • MATLAB中如何画水平线和垂直线?

    我目前正在尝试在 MATLAB 中绘制简单的垂直线和水平线 例如 我想绘制线 y 245 我该怎么做呢 MATLAB 根据您提供的向量逐点进行绘图 因此 要创建一条水平线 您需要改变x同时保持y对于垂直线恒定 反之亦然 xh 0 10 yh
  • 将自动生成的 Matlab 文档导出为 html

    我想为我开发的 Matlab 工具箱生成完整的帮助 我已经看到如何显示自定义文档 http www mathworks fr fr help matlab matlab prog display custom documentation h
  • 两个 y 轴与相同的 x 轴[重复]

    这个问题在这里已经有答案了 可能的重复 在单个图中绘制 4 条曲线 具有 3 个 y 轴 https stackoverflow com questions 1719048 plotting 4 curves in a single plo
  • Matlab - 如果值包含xxx,则删除元胞数组中的行

    在 Matlab 中 如何删除包含变量字符串的元胞数组中的元胞 假设我的元胞数组是 C svnTrunk RadarLib radarlb utilities scatteredInterpolant m C svnTrunk RadarL
  • 使用mat2cell将MxN的矩阵划分为1xN大小的M矩阵

    我有一个大小为 MxN 的矩阵 比方说 1867x3 1867 行和 3 列 我想将其分成 1867 个大小为 1x3 的单元格 我使用了mat2cell X 1 1866 这里X是矩阵 1867x3 结果给出了两个单元格 一个单元格的大小
  • 不等间隔时间序列的移动平均线

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

随机推荐

  • 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 但在实际电路设计中 我们还需要考