设为首页收藏本站|繁體中文 快速切换版块

 找回密码
 立即加入
搜索
查看: 8364|回复: 19

[分享] PSIM9.0学习笔记2——光伏MPPT测试和DLL模块的使用

    [复制链接]

该用户从未签到

尚未签到

发表于 2012-1-10 14:17:36 | 显示全部楼层 |阅读模式

马上加入,结交更多好友,共享更多资料,让你轻松玩转电力研学社区!

您需要 登录 才可以下载或查看,没有账号?立即加入

×
终于把MPPT调成功了,还是C语言编程能力不足啊,找了几天才找出问题,不过现在也不是很确定是完全正确还是碰巧波形能够跟需要结果相似。在这里呢就还是先介绍一下,然后劳请各位大侠们指正。首先随便搭了一个Boost电路的测试模型,用的是前面介绍过的PSIM9.0自带的光伏板模型,以下就是模型电路图, u( ~- N( k7 i4 w! C4 u( f5 g0 V

MPPT测试模型

MPPT测试模型

. X$ P9 Y& u4 z# y$ d5 m3 G0 k0 x* P' j& F3 Q
其中MPPT是一个DLL模块,进行MPPT计算并产生PWM波的,最下面一个DLL模块就拿来测试一下效率,是输出功率与最大功率的比。* V7 F% V* n+ D) h8 ~
对于DLL模块的使用,非常简单,首先打开VC++6.0,然后新建一个Win32 Dynamic-Link Library工程,再新建一个C文件,就可以编程了。编好之后在组建里面选择全部重建,完了之后就可以在你所建的工程文件夹Debug里面找到相应的dll文件了,最后在DLL模块里面选择用该dll文件就可以了。
7 h7 u. U( g2 @对于编程来讲,首先在c文件里面包含如下语句:
, P6 T- V9 b, |  ?4 O) Q1 g#include <stdio.h>
0 h# D7 h" E8 k1 g#include <math.h>. D, m% r4 ~5 S. r3 D2 Y
__declspec(dllexport) void simuser (double t, double delt, double *in, double *out)% q5 w, S9 f7 z4 g0 r
{
( z0 M- @' m" `  g/ W6 H}* M- w7 E" l, B8 [' Z5 k
那么在括号内就可以根据自己的需要编写程序了,t是指时间,delt是仿真步长,这两个都在你的仿真电路的时钟控制里面设置,编程不用管。
# F, D, l# _" a  [6 i' {% w. Gin和out分别对应输入输出,用的时候直接用用数组形式赋值,比如a=in[0],out[0]=b;就行了,DLL模块有小圆圈的一头从上往下依次是in[0],[1],[2]……out[0],[1],[2]……
4 R0 Q0 N  N( i  v. d0 A9 \" J那么我编写的MPPT程序如下:. o1 D! q1 D, N4 |& ^/ u* J; {! |9 @! C

4 I& g2 R  A- q4 A# n( ^# F: g        Vi=in[0];
' F! W' ]+ Q2 N) Y* ?5 u3 |  _% w$ Q1 q* ?
Ii=in[1];7 |5 X/ c; Q. H* M
3 F7 I  n; L: d- k
Pi=Vi*Ii;
/ d' _  p3 d. s* y; K/ V6 z6 z: h" M/ h+ D( W4 B, a# @1 X
dv=Vi-Vl;                                          //采样电压电流,获得电压,功率增量
( {4 G  A" K8 k0 r2 a0 u: y, f' t3 N
dp=Pi-Pl;6 F% ]! X% s' V! v4 c8 F, Q

4 Z! ^2 o* f" W# v4 I: B- Kif (dp==0)
  g. E+ d+ {$ Z: y. R: {5 x2 W6 _1 U( ], x+ ?
{* m& d+ _  x, N- t4 x; W

5 V" d# Q* C$ \' S% ferr=0;
, I, {0 I, {' g+ P- ^1 r0 Q3 D9 Q. O* Y: B4 N
}
; Z8 |. {) h  R1 ^6 y  c
# J' [$ `* J& Belse5 @+ b: d! E% w" [2 c  Z* {  T

$ y# a% M9 V) ?6 ~0 G: R{7 O  N. t/ e) y1 @4 l& ]) J  P
6 @9 d, W; W9 p3 r+ i5 E' P
if (dp>0): T) T  ]$ g3 {9 ?7 T$ r

! A! O5 e. t; y$ {{
. q# z* ~% X6 z* r
: F0 Z. m8 q" F  Sif (dv>0)
, x6 Z  i* a; h" g6 n8 j( I& J
- ?$ s; [- a* z7 d/ X. K{err=0.1;}
: e7 i1 m& I. f+ p. q: X2 q
9 x9 I4 q( Q0 |; \else                                   //MPPT
" _- s2 H6 H' J! n7 j+ d$ I5 j' M. E  r5 G# f, B- U# W' e' _: E
{err=-0.1;}
6 M& K/ Q" m2 @$ e8 L+ c8 l6 V
( A/ R4 n8 S! t, V" k. B6 a}
! u" }' x/ s9 C$ U. X
6 p0 R3 F; o: j# F, ]else) S) `- @4 |9 r9 _9 F
' i0 w$ Z9 ?! N1 ^# R! `' Z
{
1 M1 L( S: ~) n* V% C
2 c3 K4 t/ q( x; S3 n2 q* Gif (dv>0)
/ o0 _0 c0 }% F) ~  ^, q
. n0 E0 b  `& M: A/ h{err=-0.1;}$ t! L$ P& [7 v) e

6 G& v% ?$ Y0 l: \3 }else) y4 w4 L% @' U, [% J# ]5 u" {
# F/ Q  H6 w# d# V
{err=0.1;}8 _# K. \& Z: J
( }+ l# I8 E: ]" }1 l
}  u! s; x7 G+ q" @& i
8 X8 ?( N, |" b: [* o
}" v' h7 Q3 T. s( T2 z  @
# G3 _" x0 j1 X/ l# T4 o, J, y9 B
我用的是最简单的PO法,然后设每次Vref=Vin+0.1或者-0.1,所以上面err就是一次计算完了之后的误差值,送入下面的增量型PI控制% a8 l$ X6 d' t: O- n
                dVout=20*(err-errf)+err;                 5 [' J. g& D$ C+ {: ^

: S" H. L6 @8 S4 ]: Z9 Y& qif (fabs(dVout)>4.1). F# k, S" `) f# ?" E/ {! n- N
; F1 F+ k! s" m- s
{
6 |5 [/ e, Z) w) i: W% z1 c; z3 _5 n2 F" T# r9 j4 [
if ((dVout)>0)1 w0 B; w% P4 t! H; l
* }8 V7 Z! p$ k+ Z" \; I7 U
{dVout=4.1;}+ v. w. \- Q( n0 _7 C

! D6 G& p8 J4 Z9 P: @else
  b$ P: J7 f2 z( x
6 i3 Z9 o6 z, w$ V, X% v1 B3 U3 D{dVout=-4.1;}4 j' U% D9 s" z6 x+ n1 h1 l$ C4 G

2 x( P5 S) |9 w7 L% @) w. j. I! I4 _}
/ G/ _" K8 E5 X+ v( q$ d3 E( _0 c  j/ p0 z% O& l) X
Vtemp=Vout+dVout;                          //PI
7 T0 @" i! ~/ K7 b! T  y1 [/ M' ]1 H% J2 N: B* N, \* S

& s5 C4 |" \6 `  r. m1 e3 J
+ R& H  P% K# g$ i& u) _& ?if (Vtemp>10)                                  X! R. q! O; @* U1 F. I  o; M" H
, I2 |( c( J0 X8 a8 P! k$ |
{Vtemp=10;}
+ {/ L1 T2 \( P* a) b' N; r2 `" M
else
# T8 c8 n8 Z5 F* |% T' ?! I0 p2 e* d9 o. _3 f$ R: M
{( N( C; O/ E: |- @0 X/ i
" x/ p# o( Z% q* S9 A' ]4 H& b4 Y
if (Vtemp<0)
# h! p; x. F+ z) \- w+ b$ Q9 i' S. u6 [% f" M3 L* o& l; a0 [
{Vtemp=0;}* f0 z( I7 s5 n

; d0 a% y# h. Gelse
% i" E7 d- D: L# w
3 @- p; K  o. p3 d/ A) s( w0 P0 N{Vtemp=Vtemp;}
' P8 ^. s: m8 ?* Q8 Q% @( z. W
) n+ E" B/ l5 r% r0 s}
: C: `3 }. c3 H! M! A# m6 h. m8 P8 ^  O: K' M- H0 o4 O0 ?
Vout=Vtemp;$ L6 `6 A5 I! \# G  L
6 T$ U1 q+ p( t+ |. J! H
errf=err;  |6 O& u" v4 v" D; Q( g- u

6 D$ P- {  ]" t+ t1 q8 j. N% \用来得到比较值的变化,最后跟锯齿波比较之后输出占空比。
0 [3 E; k. }$ d2 U, u以上程序跑完之后的仿真结果如下所示:
2 N. v6 @4 e' X MPPT仿真结果图.png
9 d7 x0 ?# n* [1 l2 ?0 C3 v# D2 Z1 u3 Z# N* T
感觉还是蛮精确的,效率算下来大概在99.87%,但是我总觉得哪儿有问题,不是太对,上面误差输出的值就只有0.1,-0.1,0三个值$ n8 \* V% Z/ `/ x2 F
不过不知道问题到底原因是什么,仿真效果还蛮好嘛,呵呵
2 i7 N+ N9 K1 L) c' G大家给我指导一下呗,多谢!~
! P. s1 G6 y2 P) A& f1 Y+ W3 `' i
"真诚赞赏,手留余香"
还没有人打赏,支持一下
楼主热帖
帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】
  • TA的每日心情
    奋斗
    2016-12-20 21:25
  • 签到天数: 7 天

    连续签到: 2 天

    [LV.3]偶尔看看II

    累计签到:7 天
    连续签到:2 天
    发表于 2016-12-20 21:45:48 | 显示全部楼层
    楼主上面的各个变量具体的定义是什么呢?还有就是为什么要送进增量型PI控制中去呢?
    "真诚赞赏,手留余香"
    还没有人打赏,支持一下
    帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】
    回复 推荐 踩下

    使用道具 举报

  • TA的每日心情
    难过
    2016-5-6 08:27
  • 签到天数: 5 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    累计签到:5 天
    连续签到:1 天
    发表于 2016-1-8 15:32:18 | 显示全部楼层
    不错不错 一起学习
    "真诚赞赏,手留余香"
    还没有人打赏,支持一下
    帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】
  • TA的每日心情
    愤怒
    2020-12-8 11:59
  • 签到天数: 105 天

    连续签到: 1 天

    [LV.6]常住居民II

    累计签到:219 天
    连续签到:1 天
    发表于 2012-2-8 19:11:00 | 显示全部楼层
    个人兴趣关注一下,希望有这方面的高人指点!
    "真诚赞赏,手留余香"
    还没有人打赏,支持一下
    帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】

    该用户从未签到

    尚未签到

    发表于 2012-2-25 16:14:12 | 显示全部楼层
    啥时候上线呀,交流下可以吗?
    "真诚赞赏,手留余香"
    还没有人打赏,支持一下
    帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】

    该用户从未签到

    尚未签到

    发表于 2012-3-19 20:17:57 | 显示全部楼层
    希望经常交流
    "真诚赞赏,手留余香"
    还没有人打赏,支持一下
    帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】

    该用户从未签到

    尚未签到

    发表于 2012-3-19 20:26:31 | 显示全部楼层
    你说的那个误差值应该是3点震荡引起的吧,还有一种2点震荡的。
    "真诚赞赏,手留余香"
    还没有人打赏,支持一下
    帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】

    该用户从未签到

    尚未签到

    发表于 2012-5-22 17:13:27 | 显示全部楼层
    不错不错~
    "真诚赞赏,手留余香"
    还没有人打赏,支持一下
    帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】

    该用户从未签到

    尚未签到

    发表于 2012-8-1 23:11:26 | 显示全部楼层
    好帖!学习下强大的操作!
    "真诚赞赏,手留余香"
    还没有人打赏,支持一下
    帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】
  • TA的每日心情
    愤怒
    2021-6-12 00:00
  • 签到天数: 1657 天

    连续签到: 28 天

    [LV.Master]伴坛终老

    累计签到:2457 天
    连续签到:13 天
    发表于 2012-8-4 00:50:37 | 显示全部楼层
    好详细的资料啊
    "真诚赞赏,手留余香"
    还没有人打赏,支持一下
    帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】

    该用户从未签到

    尚未签到

    发表于 2012-9-22 15:38:43 | 显示全部楼层
    你好,我想请问一下最后一步“最后在DLL模块里面选择用该dll文件就可以了”,是怎样选择啊?
    帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】

    该用户从未签到

    尚未签到

    发表于 2012-10-24 18:44:15 | 显示全部楼层
    感谢兄弟分享
    "真诚赞赏,手留余香"
    还没有人打赏,支持一下
    帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】
    您需要登录后才可以回帖 登录 | 立即加入

    本版积分规则

    招聘斑竹

    小黑屋|手机版|APP下载(beta)|Archiver|电力研学网 ( 赣ICP备12000811号-1|赣公网安备36040302000210号 )|网站地图

    GMT+8, 2024-3-29 23:45

    Powered by Discuz! X3.5 Licensed

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表