FPGAに基づくMPPTシステムの開発

1.問題の説明:

 

2.プログラムの一部:

 

`timescale 1ns / 1ps
//
//会社: 
//エンジニア: 
// 
//作成日:02:59:07 06/05/2019 
//デザイン名: 
//モジュール名:MPPT_module 
//プロジェクト名: 
//ターゲットデバイス: 
//ツールバージョン: 
//説明: 
//
//依存関係: 
//
//リビジョン: 
//リビジョン0.01-作成されたファイル
//追加コメント: 
//
//
モジュールMPPT_module(
                    i_clk、
                          i_rst、
                          i_PV_current、
                          i_PV_volatile 、
                          o_PV_power、
                          o_PV_max、
                          o_PV_current、
                          o_PV_voltage、
                          o_state
                   );

入力i_clk;
入力i_rst;
入力署名済み[15:0] i_PV_current;
入力符号付き[15:0] i_PV_voltage;
署名された出力[31:0] o_PV_power;
署名された出力[31:0] o_PV_max;
署名された出力[15:0] o_PV_current;
符号付き出力[15:0] o_PV_voltage;
出力[1:0] o_state;

// power
multi_core multi_core_u(
  .a(i_PV_current)、//入力[15:0] a
  .b(i_PV_voltage)、//入力[15:0] b
  .p(o_PV_power)//出力[31:0] p
);


regsigned [31:0] r_PV_k1;
regsigned [31:0] o_PV_max;
常に@(posedgei_clkまたはposedgei_rst)
begin
     if(i_rst)
      begin
     o_PV_max <= 32'd0;
      r_PV_k1 <= 32'd0;
      終了
その他開始
     r_PV_k1 <= o_PV_power;
     if(o_PV_power> o_PV_max)
     o_PV_max <= o_PV_power; 
     それ以外の場合
      o_PV_max <= o_PV_max; 
     エンド
エンド

ワイヤー署名[31:0]英国;
ワイヤー署名[31:0] Pk;

Uk = i_PV_voltageを割り当てます。
Pk = o_PV_powerを割り当てます。

reg署名済み[15:0] dU = 16'd1;
reg署名済み[15:0] dU0 = 16'd1;

regsigned [31:0] Pk1;
regsigned [15:0] Uk1;
regsigned [15:0] Uref;


//自適応かれ、適応生登録
[19:0] cnt;
常に@(posedgei_clkまたはposedgei_rst)
begin
     if(i_rst)
      begin
      cnt <= 20'd0;
      end
else begin
     if(cnt> = 20'd35000)
     cnt <= 20'd35000;     
      それ以外の場合、
      cnt <= cnt + 20'd1;
     エンド
エンド


reg [1:0] o_state;
常に@(posedgei_clkまたはposedgei_rst)
begin
     if(i_rst)
      begin
      Pk1 <= 32'd0;    
      Uk1 <= 16'd0;      
      
      Uref <= 16'd0;

     o_state <= 2'd0;        
      終了
その他開始

      Pk1 <= Pk;
      Uk1 <=英国;
      
      
 
              if(Pk> = Pk1&Uk> Uk1)
              begin Uref  
              <= Uref + {dU0 [15]、dU0 [15]、dU0 [15]、dU0 [15]、dU0 [15]、dU0 [15]、dU0 [ 15:6]};
              o_state <= 2'd0;    
              end
              if(Pk> = Pk1&Uk <= Uk1)
              begin Uref <= Uref-  
              {dU0 [15]、dU0 [15]、dU0 [15]、dU0 [15]、dU0 [15]、dU0 [15]、 dU0 [15:6]};
              o_state <= 2'd1;    
              end
              
              
              if(Pk <Pk1&Uk> Uk1)
              begin Uref  
              <= Uref- {dU0 [15]、dU0 [15]、dU0 [15]、dU0 [15]、dU0 [15]、dU0 [15]、dU0 [ 15:6]};
              o_state <    
              end  
              
              if(Pk <Pk1&Uk <= Uk1)
              begin Uref <= Uref  
              + {dU0 [15]、dU0 [15]、dU0 [15]、dU0 [15]、dU0 [15]、dU0 [15]、dU0 [15:6]};
              o_state <= 2'd3;    
              エンド
      
     エンド
エンド
割り当てo_PV_voltage = Uref;
o_PV_current = dU0を割り当てます;

regsigned [31:0] Power_diffe;
regsigned [7:0] Current_diff;
常に@(posedgei_clkまたはposedgei_rst)
begin
     if(i_rst)
      begin
      dU <= 16'd1;
      dU0 <= 16'd1;      
     Power_diffe <= 32'd0;
      Current_diff <= 8'd0;
     
      終了
その他開始


     Power_diffe <= o_PV_max-r_PV_k1;
      Current_diff <= i_PV_current [15:8];

     
     if(cnt <20'd4000)
      begin
              if({Power_diffe [31-4:16-4]、4'd0}> 16'd10)
              dU0 <= {16'd16};
          else
              dU0 <= {Power_diffe [31-4:16-4]、4'd0};
      end
     else begin
           dU0 <= {Power_diffe [31-4:16-4]、4'd0};
           エンド
 
 
 
     エンド
エンド

 

エンドモジュール
 

3.シミュレーションの結論:

A-002-0067

おすすめ

転載: blog.csdn.net/ccsss22/article/details/114743042