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

        前面介绍过模拟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公众号

### LLC 数字控制软件开发实现方法 #### 使用Psim进行LLC全桥仿真的数字控制方案 对于希望深入了解LLC谐振转换器工作原理及其波形特性的开发者而言,PSIM提供了一个理想的平台[^1]。此工具不仅支持构建复杂的电力电子电路模型,而且允许用户通过图形界面轻松设置各种参数并观察不同节点处的电压电流变化情况。 #### 基于MathCAD的设计计算辅助 除了仿真外,在实际项目启动前利用MathCAD完成必要的理论分析同样重要。它可以帮助工程师快速验证设计方案是否合理,并为后续硬件选型提供依据。例如,可以通过编写脚本来自动执行一些重复性的数学运算任务,从而节省大量时间成本。 ```matlab % MathCAD示例代码片段用于计算LCR元件值 L := 1e-6; % Inductance (H) C := 220e-9; % Capacitance (F) f_resonant = sqrt(1/(L*C))/(2*pi); % Resonant frequency calculation ``` #### 利用DSP实现高效精准的控制系统 针对更高性能需求的应用场景,则推荐采用基于TMS320F28034这样的高性能DSP芯片来进行实际控制逻辑编程[^3]。这类微控制器具备强大的数据处理能力以及丰富的外设接口资源,非常适合用来搭建稳定可靠的工业级产品原型机。具体来说: - **EPWM模块配置**:为了驱动外部功率器件(如MOSFET),需要正确初始化相应的事件管理单元(EPU)通道; - **中断服务程序(ISR)**:当检测到特定条件满足时触发相应动作; - **PID算法优化**:通过对反馈回来的实际输出量与期望设定值之间的偏差实施比例积分微分调节,使得整个闭环系统的动态特性更加优良。 ```c // TMS320F28034 C语言伪码展示如何配置EPWM功能 void EPWM_Config(void){ EALLOW; // 设置周期寄存器CMPA和比较寄存器CMPB EpwmSetPeriod(CMPA_VALUE); EpwmSetCompareValue(EPWM_CMPA, CMPB_VALUE); EDIS; } ```
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值