PSIM9.0_光伏MPPT仿真
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 #include __declspec(dllexport) void simuser (double t, double delt, double *in, double *out) { } 那么在括号内就可以根据自己的需要编写程序了, t 是指时间, delt 是仿真步长,这两个都在你的仿真电路的时钟控制里面设置,编程不用管。in 和 out 分别对应输入输出,用的时候直接用用数组形式赋值,比如 a=in[0],out[0]=b; 就行了, DLL 模块有小圆圈的一头从上往下依次是in[0],[1],[2] …… out[0],[1],[2] ……那么我编写的 MPPT程序如下:Vi=in[0]; Ii=in[1]; 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 三个值不过