PSIM9.0学习笔记2——光伏MPPT测试和DLL模块的使用
终于把MPPT调成功了,还是C语言编程能力不足啊,找了几天才找出问题,不过现在也不是很确定是完全正确还是碰巧波形能够跟需要结果相似。在这里呢就还是先介绍一下,然后劳请各位大侠们指正。首先随便搭了一个Boost电路的测试模型,用的是前面介绍过的PSIM9.0自带的光伏板模型,以下就是模型电路图其中MPPT是一个DLL模块,进行MPPT计算并产生PWM波的,最下面一个DLL模块就拿来测试一下效率,是输出功率与最大功率的比。
对于DLL模块的使用,非常简单,首先打开VC++6.0,然后新建一个Win32 Dynamic-Link Library工程,再新建一个C文件,就可以编程了。编好之后在组建里面选择全部重建,完了之后就可以在你所建的工程文件夹Debug里面找到相应的dll文件了,最后在DLL模块里面选择用该dll文件就可以了。
对于编程来讲,首先在c文件里面包含如下语句:
#include <stdio.h>
#include <math.h>
__declspec(dllexport) void simuser (double t, double delt, double *in, double *out)
{
}
那么在括号内就可以根据自己的需要编写程序了,t是指时间,delt是仿真步长,这两个都在你的仿真电路的时钟控制里面设置,编程不用管。
in和out分别对应输入输出,用的时候直接用用数组形式赋值,比如a=in,out=b;就行了,DLL模块有小圆圈的一头从上往下依次是in,,……out,,……
那么我编写的MPPT程序如下:
Vi=in;
Ii=in;
Pi=Vi*Ii;
dv=Vi-Vl; //采样电压电流,获得电压,功率增量
dp=Pi-Pl;
if (dp==0)
{
err=0;
}
else
{
if (dp>0)
{
if (dv>0)
{err=0.1;}
else //MPPT
{err=-0.1;}
}
else
{
if (dv>0)
{err=-0.1;}
else
{err=0.1;}
}
}
我用的是最简单的PO法,然后设每次Vref=Vin+0.1或者-0.1,所以上面err就是一次计算完了之后的误差值,送入下面的增量型PI控制
dVout=20*(err-errf)+err;
if (fabs(dVout)>4.1)
{
if ((dVout)>0)
{dVout=4.1;}
else
{dVout=-4.1;}
}
Vtemp=Vout+dVout; //PI
if (Vtemp>10)
{Vtemp=10;}
else
{
if (Vtemp<0)
{Vtemp=0;}
else
{Vtemp=Vtemp;}
}
Vout=Vtemp;
errf=err;
用来得到比较值的变化,最后跟锯齿波比较之后输出占空比。
以上程序跑完之后的仿真结果如下所示:
感觉还是蛮精确的,效率算下来大概在99.87%,但是我总觉得哪儿有问题,不是太对,上面误差输出的值就只有0.1,-0.1,0三个值
不过不知道问题到底原因是什么,仿真效果还蛮好嘛,呵呵
大家给我指导一下呗,多谢!~
楼主上面的各个变量具体的定义是什么呢?还有就是为什么要送进增量型PI控制中去呢? 不错不错 一起学习 个人兴趣关注一下,希望有这方面的高人指点! 啥时候上线呀,交流下可以吗? 希望经常交流 你说的那个误差值应该是3点震荡引起的吧,还有一种2点震荡的。 不错不错~ 好帖!学习下强大的操作! 好详细的资料啊 你好,我想请问一下最后一步“最后在DLL模块里面选择用该dll文件就可以了”,是怎样选择啊? 感谢兄弟分享
页:
[1]
2