三相整流器移相觸發電路的整體FPGA設計

fpga&matlab發表於2020-12-25

    三相整流器移相觸發電路系統的整體設計方案主要包括如下幾個型別:基於CPLD的系統實現方案;基於專用晶片的系統實現方案以及基於中小規模積體電路的系統實現方案[06~09]。

  ·基於中小規模積體電路的系統實現方案

    基於中小規模積體電路來實現三相整流器移相觸發電路系統,其主要方法是通過多個數字晶片焊接在PCB電路板上,構建一個三相整流器移相觸發積體電路,該方法需要了解各個晶片的時序,設計的電路板需要嚴格滿足時序要求。因此,通過這種方法得到的三相整流器移相觸發電路,其系統穩定性較差,任何一個晶片出現問題都會導致系統無法正常工作,在實際中並不是實用。

  ·基於專用晶片的系統實現方案

    通過專用的三相整流晶片來實現該系統,如36MT160-ASEMI,其往往在某些特定的場合能夠實現特定的整流功能,但是在其餘場合往往存在較大的侷限性。因此,在實際中,一般是針對有特殊應用需求的場合,才使用類似36MT160-ASEMI的整流晶片,因此,該方案也不適合本課題。

  ·基於CPLD的系統實現方案

    採用Altera公司的MAX系列CPLD晶片,可以通過CPLD的現場可程式設計功能,實現各種功能,將整個三相整流器移相觸發電路的功能設計到一片CPLD晶片中,並通過簡單的時序控制,實現雙脈衝的輸出。通過這種方式不僅可以基於專用晶片的系統實現方案以及基於中小規模積體電路的系統實現方案所存在的缺陷,而且大大簡化電路複雜度。

    根據三相整流器移相觸發電路的基本原理可知,三相整流器移相觸發電路整體結構包括初始相位模組,自適應相位調節模組,觸發脈衝產生模組,相序的自適應調整功能模組等。其基本結構如下圖所示:

 

圖2.4全控六個閘流體的觸發脈衝相序關係

     在本系統中,CPLD晶片採用ALTERA公司的MAX II 系列,具體型號為EPM570M100C5晶片。開發軟體平臺為QUARTUSII12.1,開發硬體描述語言為Verilog HDL。系統首先由控制輸入訊號產生初始的相位輸出,然後根據系統的自適應反饋訊號和初始相位值輸入到相位自動調節模組,該模組的相位控制輸出輸入到六路脈衝輸出模組,同時外部的三相電源同步訊號也輸入到六路脈衝輸出模組中,並最終產生一個六路脈衝觸發訊號。

2.3.2初始相位模組設計

    由於閘流體分辨為0.024度,而計數器的頻率為0.75MHz,那麼在0~180度的範圍之內,對應的計數器計數範圍為1~7500。因此,使用一個位寬為13的計數器即可實現該功能。通過外部的計數器控制器訊號來控制該13位計數器的正向計數和逆向計數,從而產生不同大小的初始相位。

    這個模組的RTL結構框圖如下圖所示:

 

圖2.5初始相位模組的RTL結構圖

其介面如下表所示:

表2.1 輸出相位輸入輸出結構圖

介面名稱

I/O

位寬

功能

i_clk

I

1

輸入時鐘脈衝

i_rst

I

1

系統復位

i_STEP1

I

1

計數器控制訊號1

i_STEP2

I

1

計數器控制訊號2

o_cnt

O

13

計數器

    該模組實現結構較簡單,其總共佔用CPLD資源為邏輯單元22個。其工作原理如下為當輸入控制訊號i_STEP1為1,i_STEP2為0的時候,計數器將不斷增加,直到計數器計數到7500為止;反之,當輸入控制訊號i_STEP1為0,i_STEP2為1的時候,計數器將不斷增加,直到計數器計數到0為止;其餘情況,計數器保持原資料不變。其對應的Modelsim模擬結果如下圖所示:

 

圖2.6初始相位模組的模擬結果

    如圖2.6所示,當輸入控制訊號i_STEP1為1,i_STEP2為0的時候,計數器將不斷增加。

 

2.3.3自適應相位調節模組設計

    自適應相位調節模組為三相整流器移相觸發電路的核心模組,其包括三個模組,初始相位預置數微調電路,計數器,比較器。其主要功能是通過自動控制改變初始相位,使得後一級模組可以產生對應的六路脈衝訊號。

    初始相位預置數微調電路,其主要功能是根據輸入控制訊號進行步長的調整,每次調整步長為1度,即42個計數器脈衝訊號,通過42個計數器脈衝訊號完成1度的步長調整。初始相位微調電路模組的RTL結構框圖如下圖所示:

 

圖2.7初始相位預置數微調電路RTL結構圖

其介面如下表所示:

表2.2輸出相位輸入輸出結構圖

介面名稱

I/O

位寬

功能

i_clk

I

1

輸入時鐘脈衝

i_rst

I

1

系統復位

i_T0

I

13

初始相位輸入

i_AD

I

1

反饋訊號訊號1

i_RE

I

1

反饋訊號訊號2

o_T1

O

13

步長調整後的計數器輸出

    該模組實現結構較簡單,其總共佔用CPLD資源為邏輯單元29個。通過外部的反饋輸入訊號AD和RE實現初始相位預置數步長的正向調整和逆向調整。輸出訊號T1為微調後的初始輸入相位。

    計數器模組為一個計數到7500的計數器,其輸入控制時鐘脈衝頻率為0.75MHz,計數器模組的RTL結構框圖如下圖所示:

 

圖2.8計數器模組的RTL結構圖

其介面如下表所示:

表2.3輸出相位輸入輸出結構圖

介面名稱

I/O

位寬

功能

i_clk

I

1

輸入時鐘脈衝

i_rst

I

1

系統復位

i_CS

I

1

片選訊號

o_T1

O

13

計數器輸出

    該模組實現結構較簡單,其總共佔用CPLD資源為邏輯單元26個。

    比較模組的主要功能是將計數器的計數值和微調後的初始相位值進行對比,如果計數器的計數值大於微調後的初始相位值,比較器輸出高電平;如果計數器的計數值小於微調後的初始相位值,比較器輸出低電平。

    比較器模組的RTL結構框圖如下圖所示:

 

圖2.9計數器模組的RTL結構圖

其介面如下表所示:

表2.4輸出相位輸入輸出結構圖

介面名稱

I/O

位寬

功能

i_clk

I

1

輸入時鐘脈衝

i_rst

I

1

系統復位

i_T1

I

13

計數器輸入

i_T2

I

13

計數器輸入

o_T3

O

13

比較器輸出

    該模組實現結構較簡單,其總共佔用CPLD資源為邏輯單元14個。

    綜上所述,自適應相位調節模組包括三個模組,初始相位預置數微調電路,計數器,比較器。其工作原理為,首先將輸入的初始相位值進行自動微調,然後通過比較器對比計數器的計數值和微調後的初始相位值如果計數器的計數值大於微調後的初始相位值,比較器輸出高電平;反之,比較器輸出低電平。其對應的Modelsim模擬結果如下圖所示:

 

圖2.10相位自動調節電路及其輸出訊號波形

    圖2.10中,輸出訊號o_T3,其高低電平週期性變化,這說明計數器的和初始相位脈衝的大小發生週期性改變。當輸出o_T3=1的時候,表明o_T1大於o_T2,當輸出o_T3=0的時候,表明o_T1小於o_T2。

 

    六路脈衝訊號產生模組,其整體結構包括一個計數器,六路脈衝訊號產生模組,其整體結構框圖如下圖所示:

圖2.11六路脈衝訊號產生模組

    從圖2.11可知,該模組包括C500模組,C30模組以及SY模組,其功能分別為C500主要實現一個1~500的計數器,計數器的輸入脈衝頻率為0.75MHz,輸出為一個週期為週期為12度,脈寬為0 .024度的週期性脈衝。C30是將C500的輸出脈衝作為時鐘輸入訊號,輸出為六路脈衝訊號。

    其中六路脈衝訊號輸出的RTL結構圖如下圖所示:

圖2.12六路脈衝訊號產生模組RTL圖

其介面如下表所示:

表2.1 輸出相位輸入輸出結構圖

介面名稱

I/O

位寬

功能

i_clk

I

1

輸入時鐘脈衝

i_rst

I

1

系統復位

o_cao

O

1

計數器控制輸出

i_A

I

1

三相電源的方波A

i_B

I

1

三相電源的方波B

i_C

I

1

三相電源的方波C

o_G1

O

1

六路脈衝1

o_G2

O

1

六路脈衝2

o_G3

O

1

六路脈衝3

o_G4

O

1

六路脈衝4

o_G5

O

1

六路脈衝5

o_G6

O

1

六路脈衝6

    其對應的Modelsim模擬結果如下圖所示:

圖2.13觸發脈衝輸出訊號波形

    圖2.13中,輸出訊號o_cao,其根據輸入計數器的週期性判決,產生對應的觸發脈衝訊號。

    當外部三相電源方波輸入介面 A、B、C的輸入訊號為順序排列時,輸出控制訊號為高電平,否則輸出控制訊號為低電平。模組SY根據模組輸出結果控制六路脈衝訊號,併產生對應的雙脈衝訊號。其對應的Modelsim模擬結果如下圖所示:

圖2.14雙脈衝仿測試結果

 

    通過上述幾個章節的介紹,整個基於CPLD的三相整流器移相觸發電路的RTL結構圖如下圖所示:

圖2.15三相整流器移相觸發電路的RTL結構圖

    從圖2.15可知,整個基於CPLD的三相整流器移相觸發電路包括三相整流器移相觸發電路整體結構包括初始相位模組,自適應相位調節模組,觸發脈衝產生模組,相序的自適應調整功能模組等。

整體資源佔用如下所示:

圖2.15三相整流器移相觸發電路的CPLD資源消耗圖

 

`timescale 1ns / 1ps

 

module tops(

            i_clk,

                            i_rst,

                            i_A,

                            i_B,

                            i_C,

                            i_STEP1,

                            i_STEP2,

                            i_clear,清零

                            i_syn,同步

                            o_T0,

                            o_T1,

                            o_T2,

                            o_T3,

                            o_T3_syn,

                            o_cao,

                            o_y1,

                            o_y1_,

                            o_y2,

                            o_y2_,                       

                            o_y3,

                            o_y3_                        

                           

           );

                      

input i_clk;

input i_rst;

input i_A;

input i_B;

input i_C;

input i_STEP1;

input i_STEP2;

input i_clear;

input i_syn;

output[12:0]o_T0;

output[12:0]o_T1;

output[12:0]o_T2;

output      o_T3;

output      o_T3_syn;

output      o_cao;

 

output      o_y1;

output      o_y1_;

output      o_y2;

output      o_y2_;

output      o_y3;

output      o_y3_;

//T0

T0 T0_u(

      .i_clk   (i_clk),

              .i_rst   (i_rst),

              .i_STEP1 (i_STEP1),

              .i_STEP2 (i_STEP2),

              .o_cnt   (o_T0)

      );

             

//T1T2T3

wire AD;

wire RE;

T1 T1_u(

      .i_clk (i_clk),

              .i_rst (i_rst),

              .i_AD  (AD),

              .i_RE  (RE),

              .i_T0  (o_T0),

              .o_T1  (o_T1)

      );      

T2 T2_u(

       .i_clk (i_clk),

               .i_rst (i_rst),

               .i_CS  (1'b1),

               .o_T2  (o_T2)

       );           

T3 T3_u(

        .i_clk (i_clk),

                .i_rst (i_rst),

                .i_T1  (o_T1),

                .i_T2  (o_T2),

                .o_T3  (o_T3)

        );         

///six//  

reg o_T3_syn;    

always @(posedge i_clk or posedge i_rst)

begin

     if(i_rst)

         begin

     o_T3_syn <= 1'd0;

         end

else begin

          if(i_syn == 1'b1 & i_clear == 1'b0)//同步

                      o_T3_syn <= o_T3;

         else

          o_T3_syn <= 1'd0;

     end

end

//C500

C500 C500_u(

            .i_clk (i_clk),

                            .i_clr (o_T3_syn),

                            .i_cs  (1'b1),

                            .o_cao (o_cao)

            );

wire o_G1,o_G2,o_G3,o_G4,o_G5,o_G6;

C30 C30_u(

           .i_clk (o_cao),

                       .i_rst (i_rst),

                       .i_clr (o_T3_syn),

                       .i_cs  (1'b1),

                       .o_G1  (o_G1),

                       .o_G2  (o_G2),

                       .o_G3  (o_G3),

                       .o_G4  (o_G4),

                       .o_G5  (o_G5),

                       .o_G6  (o_G6)

          );

wire i_A;

wire i_B;

wire i_C;

wire o_CAO;

XY XY_u(

          .i_clk(i_clk),

                      .i_rst(i_rst),

                      .i_A  (i_A),

                      .i_B  (i_B),

                      .i_C  (i_C),

                      .o_CAO(o_CAO)

          );

SY SY_u(

         .i_clk (i_clk),

                     .i_rst (i_rst),

                     .i_con (o_CAO),

                     .A1    (o_G1),

                     .A2    (o_G2),

                     .A3    (o_G3),

                     .A4    (o_G4),

                     .A5    (o_G5),

                     .A6    (o_G6),

                     .G1    (o_y1),

                     .G2    (o_y1_),

                     .G3    (o_y2),

                     .G4    (o_y2_),

                     .G5    (o_y3),

                     .G6    (o_y3_)

         );

endmodule

相關文章