在PSIM电路仿真的时候,如果某一功能不能够使用元件库中的电路元件模型构建,可以使用C程序元件,编写C程序代码实现。其中C语言模块包括简化C模块和通用C模块。C程序模块使用方法如下。
简化C模块调用简化C模块的步骤为。打开菜单栏的Elements — Other — Function Blocks — Simplified C block。
此时就打开一个C模块,将C模块放在电路图中。
双击这个C模块打开它。
这时就可以在这个空白区域中编写C代码了,在编写C代码之前,首先简单介绍一下这个界面中各个属性的含义。
Name :用来设置C模块的名称。
Input:用来设置输入引脚的个数,输入引脚用x来命名,比如x1、x2、x3 … xn。
Output:用来设置输出引脚的个数,输出引脚用y来命名,比如y1、y2、y3 … yn.
在编写C代码的时候,还有两个默认的变量可以使用 t 和 delt,t 指的时系统运行的总时间,delt指的是时间步,也就是每隔多长时间系统调用C模块一次。比如系统运行时间为1s,时间步为0.0001s,那么1s钟系统就会调用c模块1000次。这个 t 和 delt 的值是自己在Simulation Control中设置的。
接下来编写C代码。
这里的输入端口和输出端口分别设置为一个, C代码也非常简单,设置为输出信号是输入信号的两倍。接下来搭建一个简单的测试电路。
输入一个幅度为10伏,频率为1000的正弦波信号,然后测量输出信号。输出波形如下:
通过波形也可以看到输出波形是输入波形的2倍。
为了时C模块看起来更直观,可以对元件的外形图形进行编辑。双击打开C模块,然后选择Edit Image。
此时就会打开一个图形编辑的窗口,在这个窗口中就可以自己对元件的外形进行编辑。
编辑完成后如下所示:
编辑完成后关闭图形编辑窗口,此时在仿真电路图中就可以看到C模块的输入输出端口就有文字提示了。
调用通用C模块的步骤为。打开菜单栏的Elements — Other — Function Blocks — C block。
通用C模块和简单C模块使用方法基本一样,将通用C模块放置在电路中,然后双击打开。
和简单C模块相比,通用C模块里面多了一个功能类型的选项。下面分别结束这几个功能类型的作用。
Variable / Function definitions : 定义代码中需要的头文件或者变量。
OpenSimUser Fcn: 在仿真开始时调用一次此处的代码进行系统初始化设置。
**RunSimUser Fcn:**这里是具体执行功能的C代码。在仿真过程中,每个时间步都会调用次模块中的代码。
CloseSimUser Fcn: 在仿真退出时调用一次此处的代码。
和简单C模块相比,通用C模块增加了函数运行前和函数执行后的代码。相当于函数多了一个初始化和收的功能。
按照同样的方式对C模块编写代码。这里输入和输出端口分别设置为一个,代码的功能就是输出信号是输入信号的两倍。代码编写在RunSimUser Fcn模块里面。其他三个模块不用管,就使用默认的代码就行。
这里的输入输出端口就不是x和y了,而是 in 和 out的 数组。
当前模块是一个函数,所有的参数都是从函数入口传递进来的。关于这个模块的详细用法,可以点 Help 按钮查看系统的帮助文档。
编写完代码后,可以选择Edit Image按钮,对C模块的图形符号进行编辑。
最后搭建一个简单的电路进行测试。
仿真波形如下:
通过波形可以看出,输出的信号时输入信号的2倍。
通过上面两个测试可以看出,简化C模块和通用C模块的使用方法基本是一样的。不过在这里要注意一点,每个C程序块中的变量对于其他C程序块来说都是不可见的。将C程序块中的值传递给另一个C程序块或其他电路的唯一方法,就是通过C程序块的输入输出端口。当C程序块的输出直接连接到另一个C程序块的输入时,仿真软件运行时,首先运行第1个C程序块,然后再运行第二个C程序块。
最后通过一个稍微复杂一点的例子来演示C模块的用法。
使用正弦波发生器产生一个频率为60Hz,幅度为1V的正弦波。然后使用系统自带的有效值计算工具计算当前正弦波的有效值。将这个正弦波也送到一个C模块中,通过C代码来计算当前正弦波的有效值。最后比较分别计算出来的有效值是否一样。
编写的C代码如下:
C代码实现思路为:系统在每个时间步调用此模块时,就累加当前输入电压的平方和,当一个周期采样结束后,对累加和取平均值,然后再开方。
仿真波形如下:
通过仿真波形可以看出,系统自带的RMS值计算工具计算出来的结果和C模块计算出来的结果是一样的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)