前面介绍过模拟VCO是通过改变电容充放电电流的大小实现调频的,详见LLC闭环仿真之L6599 VCO建模与工作原理分析。

那么数字环路该怎么实现呢?今天使用PSIM的C Block分享一下。

以前沿调制为例,如下图:每个中断周期内,软件通过环路计算出需要的频率(下图绿色直线),然后基于DSP主频内(这里设置的60MHz)累加的计数器(下图三角波),当三角波峰值等于环路计算值时归零(不同的工况有不同的环路输出值,闭环时自动计算),所以数字发波的三角波峰值不固定,而上升斜率固定,并且可以直接归零,这样就得到不同的周期量实现调频;

而模拟仿真是通过给电容充放电,其电压峰峰值固定(ΔV),斜率不固定(跟充电电流相关),且不可直接从最大值归零(电容放电需要时间)。

有了这个三角波后,即可发出想要的驱动,死区时间,轻载调宽移相等都可以通过操作三角波实现。

下图为总体仿真原理图:

一、输出采样

采样比例设置为0.1,电压基准为3.3V,ADC12位精度,若输出为24V,则采样为2.4,转换为数字量即为2.4/3.3*2^12

C Block第一个框中定义初始量,其他参数保持默认即可。

在第三个框中读取输入输出数值(第一个输入口为in[0],依此类推)

二、电压环

先定义初始值

然后在第三个框中设置中断和环路计算

g_nStepCount++;

//设置中断累加,用以中断计算环路

Time_50kHz++;

//输出值设定

Vout = in[1];

//如60M主频的DSP,需要50K中断频率,即60000k/1200=50k,所以仿真跑1200次就进一次中断,进入后归0

if(Time_50kHz==1200)

{   //计数器清零

Time_50kHz = 0;

//上个模块输出的输出电压采样数字量

VoutSample= in[0];

//Q12格式,因前面定义的整型,精度低,所以先把该值*2^12,如下图,然后再通过右移12位(即写代码时人为乘2^12,再用DSP除以2^12),DSP移位比较快,浮点型处理慢

采样比例/基准电压*ADC精度*Q12格式

Vref = (int)Vout*508400>>12;

//输出误差

Error =  Vref  - VoutSample  ;

//简单的PI处理,同样为Q12

VloopTemp =  VloopTemp + V_KP*Error;

VLoopOut = (VloopTemp + V_KI*Error)>>12;

//限制最小频率50khz,50K*1500=60M主频

if(VLoopOut>1200)

VLoopOut = 1200;

//限制最大频率250khz,同上

if(VLoopOut<240)

VLoopOut = 240;

}

//计算结果输出,即图1绿色线

out[0] = VLoopOut;

三、发波控制

定义完初始值后,通过以主频为步进累加,峰值达到环路输出值后归0,这样就得到一个三角波(图1直角三角形)

g_nStepCount++;

//PWM周期计数器累加

PWM_Cnt++;

//读取上个模块的环路周期量

Period = in[0] ;

//死区时间,如果需要调宽,加大死时间即可。加入条件语句通过Period和Deadtime的函数就可以实现调频+调宽了,比模拟方式实现起来简单多了

Deadtime = 20;

//半周期

HalfPeriod = Period/2;

//半周期值以下OUT0出高,然后插入死区,方波两边分各分一半

if(PWM_Cnt > Deadtime/2 && PWM_Cnt < HalfPeriod - Deadtime/2)

{

out[0]=1;

out[1]=0;

}

//半周期值以上OUT1出高,死区同上,仔细看三角波很好理解

else if(PWM_Cnt > HalfPeriod + Deadtime/2 && PWM_Cnt < Period - Deadtime/2)

{

out[0]=0;

out[1]=1;

}

//死区内均为低电平

else

{

out[0]=0;

out[1]=0;

}

//周期发波完成后计数器归0

if(PWM_Cnt==Period)

PWM_Cnt=0;

如果需要移相,也可能通过处理三角波实现,总之,数字发波比模拟发波确实方便很多,可以玩出各种花样。

最后,要在仿真器中模拟60MHz主频,将仿真器仿真步长设置为16.667n即可。

另外PSIM也可以像simplis F11窗口一样将参数定义在file文件中,这样对于参数修改更方便。

这样仿真就完成了,下面看下仿真波形:

参数都是随意编的,希望能帮助硬件新人简单的理解下LLC软件发波原理吧。

祝大家劳动节快乐,能够在五一假期看到这里的同学一定是像我一样积极向上的打工人

最后还要感谢文老师和杨老师前几天帮忙推广公众号,也感谢软件同事教我看代码!

更多分享请关注VX公众号

如何在Psim中使用C语言实现LLC闭环仿真相关推荐

  1. 如何在Jupyter中运行R语言

    如有帮助,请随手点赞. 如何在Jupyter中运行R语言(两种解决方案) 简单方案 (1)Windows用户在Anaconda prompt中运行下面代码: conda install -c r r- ...

  2. 如何在Excel中使用SQL语言?

    如何在 Excel 中获取外部数据源? 使用 SQL 查询数据,首先需要数据源.如果我们用 Excel 来呈现这些数据的话,就需要先从外部导入数据源.这里介绍两种直接导入的方式: 通过 OLE DB ...

  3. 如何在Jupyter中运行R语言(两种解决方案)

    Python用Jupyter写分析记录比较舒服,学了R也想在Jupyter上运行. 复杂方案 安装R语言.Jupyter程序 在R Console中安装1 install.packages(c('re ...

  4. 如何在SharePoint2010中实现多语言化-正确部署语言包

    SharePoint2010提供了多语言化支持,但是在你完成安装后是看不到这个设置的,因为要实现多语言化支持,你还需要做下面三项工作,以下以在简体中文企业版下安装英文语言包为例介绍.注意: 1.在安装 ...

  5. 如何在iar中建立c语言文件,使用IAR创建新工程的步骤

    kelly 发布于:周一, 08/15/2016 - 14:57 ,关键词: 新建一个IAR工程有两种方法,新建工程有两种方法,一种是使用工程模板,另一种是使用已存在的工程来建立另外一个工程.这里讲第 ...

  6. 如何在OSCOMMERCE中安装中文语言包

    步骤如下: 下载中文语言包,可以从以下连结下载 http://www.oscommerce.com/community/contributions,1054 安装步骤如下: (演示地址:http:// ...

  7. visual c 怎么编程语言,如何在c中使用julia语言(visual studio)

    嵌入朱莉娅 是的Julia可以嵌入到Julia本身可用的所有平台上的C或C程序中,并且在所有情况下通用方法都是相同的,但特别是Windows中的嵌入更加困难,因为目前编译/嵌入的框架(gcc)不是该平 ...

  8. 如何在iar中建立c语言文件,使用IAR创建新工程步骤(整理).docx

    IAR使用说明--新建第一个IAR工程 新建一个IAR工程有两种方法,新建工程有两种方法,一种是使用工程模板,另一种是使用已存在地工程来建立另外一个工程.这里讲第一个方法,第二个方法很简单,书稿上有阐 ...

  9. python如何用c语言表示_如何在python中调用C语言代码

    原博文 2019-04-03 14:19 − 1.使用C扩展CPython还为开发者实现了一个有趣的特性,使用Python可以轻松调用C代码 开发者有三种方法可以在自己的Python代码中来调用C编写 ...

最新文章

  1. 初学python的30个操作难点汇总(入门篇)希望对你有帮助
  2. 深入剖析iLBC的丢包补偿技术(PLC)
  3. AIX 操作系统中AIO、DIO、CIO 的相关概念介绍 (二)
  4. PBAS 背景建模源码浅析
  5. 区块链BaaS云服务(22)趣链BitXHub跨链平台
  6. anaconda如何做python笔记_Anaconda常用命令笔记
  7. pytorch 之 有关交叉熵函数使用的几点说明
  8. LeetCode 881. 救生艇(贪心,双指针)
  9. CodeForces 484B Maximum Value
  10. easyui获取图片路径_Python玩转图片九宫格
  11. vscode插件(安装路径),压缩js文件解压,方便查看
  12. vivado版本升级导致的IP锁定的更新解决办法
  13. 网易互娱-后台开发(支付方向)二面
  14. activiti获取偏移量minx与miny
  15. 国威电话交换机如何设置加拨17909IP功能
  16. python爬虫常见报错_Python爬虫常见异常及解决办法
  17. 无法软关机(关机变重启或关机不切断电源而显示:您可以安全关机)解决方法+ACPI精解...
  18. 4个亲测有效的视频压缩工具,压缩视频体积小、画质清晰
  19. centos7安装docker
  20. 基于Video4Linux 的USB 摄像头图像采集实现

热门文章

  1. go语言的数据库框架gorm入门Mac系统
  2. 利用ArcCatalog建立Geodatabse空间数据库
  3. (低预算)无线路由器选择
  4. 对随机过程的简单理解
  5. IFS系统功能清单之四——IFS 分销(Distribution)(续)
  6. dpdk pci设备初始化
  7. 如何通过组策略映射驱动器
  8. 基于H.264的远程视频监控
  9. 回收站被杀毒软件清理还能恢复文件吗
  10. IFTTT与Google+是什么?ifttt怎么玩?