最近想用LTspice对LLC变换器进行闭环仿真但是LLC变换器又是通过频率的变化去动态调节增益。怎么实现频率的变化犯了难。那么可能有人会想到可以使用LTspice自带的脉冲源或者正弦波源然后在里面写频率控制参数。但是这么做并不容易因为相位需要连续。在LLC闭环仿真中频率是在时刻变化的。如果直接改变脉冲源的频率参数波形在突变的瞬间可能会发生相位跳变波形突然从一半断开从0V开始。当然这在物理上不可能发生这会导致变压器瞬间磁通不平衡导致仿真报错。为了解决这种问题并且让频率随着我的PI输出参数进行实时调整我找到了另外的解决方法。压控振荡器VCO是一种输出频率可随输入控制电压变化而调节的振荡器其核心通过调节谐振回路实现频率控制。而我们目的正是希望信号的频率可随输入控制电压变化而调节。首先为了让相位连续需要知道相位和时间的关系。在物理学中相位是频率在时间上的积分。其表达式为在LTspice中有一个自带的积分器其表达式是idt()它的功能是随着仿真时间的变化会不断累加。在LTspice的帮助文件中也有该公式的简单描述。当括号中写入100k假设开关频率是100kHz时100,000随着仿真时间的推移它会不断进行累加当仿真时间达到1s时它的值则为100,000。那么当仿真进行了10us一个开关周期时它的值则为1。当仿真进行了20us时它的值则为2。可以发现它是一个斜率为100,000的正比例函数。在单个周期内它的值增量是1从0到1的点数则是受仿真时间的间隔决定的。现在想通过它获得产生方波信号所需要的调制信号。了解PWM波产生方式的人应该都知道现在最常用的方法就是使用周期性三角波或者锯齿波与一个变化的信号做比较当一个电压高于另一个电压的时候则输出高或者低点平。通过不断变化信号的幅值达到改变脉宽的目的。为获取到周期性的波形再介绍一个函数。floor()同样帮助文档里有简述如下所示是向下取括号中的值的整数部分。C语言中也有这个函数将floor()和idt()结合使用可以得到周期性的锯齿波仿真时间在0~10us内idt(freq)是从0逐渐上升到1的斜坡floor(idt(freq))0。当时间到10us后20us之前idt(freq)是从1逐渐上升到2的斜坡floor(idt(freq))1。整个式子的值还是从0逐渐上升到1的斜坡。仿真实际效果如下图从上图可知通过以上公式就可以得到频率为freq的锯齿波。那么只需要不断调整freq的值即可得到频率变化的调制信号。但是锯齿波在这种有上下管的电源电路仿真中不容易添加死区时间而三角波在这方面却能很容易添加死区。所以还需要对为了后续方便再对它进行波形变换使其成为幅值是0~1的三角波。通过对原始锯齿波向下平移再取绝对值可以得到幅值为0~0.5变化的三角波再乘2就可以得到0~1变化的三角波。这里我还对它进行了翻转处理。大家可以思考一下这么做的意义是什么。以上已经完成了大部分工作了下一步就可以让PI输出的值去调整频率了。我目前是根据频率变化范围用limit函数限制了最小频率freq_start和最大频率freq_final然后再设定一个delta_freq*V(PI)将其值赋给上面式子中的freq。通过以上的措施则可以得到频率随PI值变化的三角波。相当于实现了压控振荡器的功能。