基于simulink的MPPT控制器性能仿真,MPPT使用S函数实现

目录

1.算法仿真效果

2.MATLAB核心程序

3.算法涉及理论知识概要

4.完整MATLAB


1.算法仿真效果

matlab2022a仿真结果如下:

 

 

 

 

2.MATLAB核心程序

function [sys,x0,str,ts] = MPPTsfun(t,x,u,flag)
switch flag,
  case 0,
    [sys,x0,str,ts]=mdlInitializeSizes;
  %case 1,
    %sys=mdlDerivatives(t,x,u);
 %case 2,
    %sys=mdlUpdate(t,x,u);
  case 3,
    sys=mdlOutputs(t,x,u);
  %case 4,
    %sys=mdlGetTimeOfNextVarHit(t,x,u);
  case {1,2,4,9} %unused flag value  
    sys=[];
      %sys=mdlTerminate(t,x,u);
  otherwise
    error(['Unhandled flag = ',num2str(flag)]);

end


function [sys,x0,str,ts]=mdlInitializeSizes


sizes = simsizes;

sizes.NumContStates  = 0;
sizes.NumDiscStates  = 0;
sizes.NumOutputs     = 2;
sizes.NumInputs      = 7;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 1;   % at least one sample time is needed

sys = simsizes(sizes);

.........................................................................

function  sys=mdlOutputs(t,x,u)
          %I=u(4)*(1-u(6)*(exp((u(7)-u(2))/(u(5)*u(1)))-1))+u(3);
          k1=0.001; % voltage search step size
          u1=0;
        % u1=u(7);  %init voltage
          p1=u1*(u(4)*(1-u(6)*(exp((u1-u(2))/(u(5)*u(1)))-1))+u(3));
          u2=u1+k1;
          p2=u2*(u(4)*(1-u(6)*(exp((u2-u(2))/(u(5)*u(1)))-1))+u(3));
          k2=(p2-p1)/(u2-u1);
          U=(u1+u2)/2 ;
          k=abs(k2);
       while k>0.001   % xie liu "k<=0.1,(5.7 du)" shi, stop search
                     % if "k" selected too small ,it will take a lot of time to search 
               if k2>0
                  u1=u1+k1;
                  p1=u1*(u(4)*(1-u(6)*(exp((u1-u(2))/(u(5)*u(1)))-1))+u(3));
                  u2=u1+k1;
                  p2=u2*(u(4)*(1-u(6)*(exp((u2-u(2))/(u(5)*u(1)))-1))+u(3));
                  k2=(p2-p1)/(u2-u1);
                  U=(u1+u2)/2;
                  k=abs(k2);
               else
                  u1=u1-k1;
                  p1=u1*(u(4)*(1-u(6)*(exp((u1-u(2))/(u(5)*u(1)))-1))+u(3));
                  u2=u1-k1;
                  p2=u2*(u(4)*(1-u(6)*(exp((u2-u(2))/(u(5)*u(1)))-1))+u(3));
                  k2=(p2-p1)/(u2-u1);
                  U=(u1+u2)/2;
                  k=abs(k2);
               end
       end
          if U>=320      % Voc=44.2V
             sys=[0;320];  % Imax=0;Umax=44.2;
          else
             sys=[U;u(4)*(1-u(6)*(exp((u2-u(2))/(u(5)*u(1)))-1))+u(3)];
          end
A372

3.算法涉及理论知识概要

         MPPT控制器的全称是“最大功率点跟踪”(Maximum Power Point Tracking)太阳能控制器,是传统太阳能充放电控制器的升级换代产品。MPPT控制器能够实时侦测太阳能板的发电电压,并追踪最高电压电流值(VI),使系统以最大功率输出对蓄电池充电。应用于太阳能光伏系统中,协调太阳能电池板、蓄电池、负载的工作,是光伏系统的大脑。

       最大功率点跟踪系统是一种通过调节电气模块的工作状态,使光伏板能够输出更多电能的电气系统能够将太阳能电池板发出的直流电有效地贮存在蓄电池中,可有效地解决常规电网不能覆盖的偏远地区及旅游地区的生活和工业用电,不产生环境污染。

        目前,光伏阵列的最大功率点跟踪(MPPT)技术,国内外已有了一定的研究,发展出各种控制方法常,常用的有一下几种:恒电压跟踪法(ConstantVoltageTracking简称CVT)、干扰观察法(PerturbationAndObservationmethod简称P&O)、增量电导法(IncrementalConductancemethod简称INC)、基于梯度变步长的电导增量法等等。(这些算法只能用在无遮挡的条件下)

1)单峰值功率输出的MPPT的算法

       目前,在无遮挡条件下,光伏阵列的最大功率点跟踪(MPPT)的控制方法常用的有以下几种:
l恒电压跟踪法(ConstantVoltageTracking简称CVT)
l干扰观察法(PerturbationAndObservationmethod简称P&O)
l增量电导法(IncrementalConductancemethod简称INC)
l基于梯度变步长的电导增量法,等等。

2)多峰值功率输出MPPT算法

       普通的最大功率跟踪算法,如扰动观测发和电导增量法在一片云彩的遮挡下就有可能失效,不能实现真正意义的最大功率跟踪。
————————————————

         S-函数是系统函数(System Function)的简称,是指采用非图形化的方式(即计算机语言,区别于Simulink的系统模块)描述的一个功能块。用户可以采用MATLAB代码,C,C++,FORTRAN等语言编写S-函数。S-函数由一种特定的语法构成,用来描述并实现连续系统、离散系统以及复合系统等动态系统;S-函数能够接受来自Simulink求解器的相关信息,并对求解器发出的命令作出适当的响应,这种交互作用非常类似于Simulink系统模块与求解器的交互作用。一个结构体系完整的S-函数包含了描述动态系统所需的全部能力,所有其他的使用情况都是这个结构体系的特例。往往S-函数模块是整个Simulink动态系统的核心。

        S-函数作为与其他语言相结合的接口,可以使用这个语言所提供的强大能力。例如,Matlab语言编写的S-函数可以充分利用MATLAB所提供的丰富资源,方便地调用各种工具箱函数和图形函数;使用C语言编写的S-函数可以实现对操作系统的访问,如实现与其他进程的通信和同步等。

用户可以从如下的几个角度来理解S-函数:

(1) S-函数为Simulink的“系统”函数。

(2)能够响应Simulink为求解器命令的函数。

(3)采用非图形化的方法实现一个动态系统。

(4)可以开发新的Simulink模块。

(5)可以与已有的代码相结合进行仿真。

(6)采用文本方式输入复杂的系统方程。

(7)扩展Simulink功能。M文件S-函数可以扩展图形能力,C MEX S-函数可以提供与操作系统的接口。

(8)S-函数的语法结构是为实现一个动态系统而设计的(默认用法),其他S-函数的用法是默认用法的特例(如用于显示目的)。

4.完整MATLAB

V

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 基于s函数的bp神经网络pid控制器是一种控制器,它使用了bp神经网络和pid控制算法来实现对系统的控制。在Simulink中,可以使用s函数实现这种控制器,并进行仿真。通过仿真可以验证控制器性能和稳定性,以及优化控制参数。 ### 回答2: BP神经网络是一种常用的人工神经网络,广泛应用于控制、分类、映射等领域。PID控制器是一种常用的控制器,具有简单、稳定、易实现等优点。将BP神经网络与PID控制器结合起来,可得到BP神经网络PID控制器,该控制器不仅具有PID控制器的优点,还能通过神经网络学习调整自身的权重和偏置,实现更加精准的控制。 在实现BP神经网络PID控制器之前,需先建立神经网络模型。以单输入单输出为例,设控制目标为y,控制器输出为u,则输入为e=y-d,其中d为设定值。神经网络的每一层包括若干个神经元,每个神经元都有一个输入、一个输出和一组权重。假设BP神经网络包括输入层、隐层和输出层,则神经元的输入可以表示为: $net_j=\sum_{i=1}^nx_iw_{ij}+b_j$ 其中,$x_i$为输入数据,$w_{ij}$为连接第$i$个输入与第$j$个神经元的权重,$b_j$为第$j$个神经元的偏置。 由此,神经元的输出可以表示为: $y_j=f(net_j)$ 其中,f()为激活函数,常用的激活函数包括Sigmoid函数、ReLU函数等,本例中采用Sigmoid函数。 以PID控制器为例,可将该控制器的输出表示为: $u(t)=K_pe(t)+K_i\int_0^te(\tau)d\tau+K_d\frac{de(t)}{dt}$ 将上式的$e(t)$替换为上述的输入形式,可得到神经网络PID控制器的输出表示式: $u(t)=K_p\cdot net_o+K_i\cdot\sum_{i=1}^t net_o+K_d\cdot\frac{dnet_o}{dt}$ 其中,$net_o$为输出神经元的加权总和。 通过神经网络的训练,可以得到网络中各层的权重和偏置。一般采用误差反向传播算法(Backpropagation,BP算法)进行训练,具体步骤为:给定输入数据,计算网络输出;计算误差,并将误差反向传递到网络中;利用误差修正神经元的权重和偏置;重复以上步骤,直至达到预期的训练效果。 为验证BP神经网络PID控制器性能,可以使用Simulink进行仿真。在Simulink中,可用PID Controller模块搭建PID控制器模型,并使用S Function模块集成BP神经网络模型。具体步骤为:将S Function模块与PID Controller模块连接,将模型的输入和输出分别指向S Function模块的输入端口和输出端口;在S Function模块中编写BP神经网络模型的代码,并在其中调用MATLAB Neural Network Toolbox提供的函数进行训练和预测。 通过Simulink仿真,可以得到BP神经网络PID控制器的控制效果,包括控制精度、响应速度和稳定性等指标。通过调整神经网络模型的结构和训练参数,可以进一步优化控制效果。 ### 回答3: 基于s函数的bp神经网络pid控制器是一种高级的控制器,它结合了神经网络和pid控制的优点,能够在复杂的控制系统中实现更加精准的控制效果。 首先,我们需要了解什么是bp神经网络和pid控制。BP神经网络是一种前馈神经网络,它可以用来处理非线性的输入输出关系。PID控制器是一种比例、积分、微分控制的算法,用于调节系统的输出与设定值的差异。 对于基于s函数的bp神经网络pid控制器,它通过使用神经网络的非线性特性来计算控制输入,而PID控制器则对方程中的误差进行修正和控制。此外,通过使用自适应学习算法,bp神经网络pid控制器可以实现自动调节参数,从而适应系统变化和噪声干扰。 在Simulink中进行仿真实验时,我们需要首先搭建一个基于s函数的bp神经网络pid控制器模型。该模型包括输入、输出、神经网络、PID控制和反馈环节。然后,我们可以使用不同的仿真场景来测试控制器性能。 总之,基于s函数的bp神经网络pid控制器是一种可行的高级控制器,它融合了神经网络和PID控制的优点,可以大大提高控制系统的性能和稳定性。在Simulink中进行仿真实验时,我们可以通过不同的参数设置和仿真场景来探究其性能和特点,为实际控制系统的应用提供更加精准的控制策略。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我爱C编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值