FPGA活用回路&サンプル記述集(2) ―― モータやLEDを駆動するパワー回路

浅井 剛

事例4.パワー・デバイスをスイッチするためのデッド・タイム生成回路

浅井 剛

外部回路
  • 回路図:図4-1
  • 主要部品:IGBT
HDL記述
  • VHDL記述:リスト4-1
  • 外部入力:なし
  • 外部出力:PGATE,NGATE
  • 内部入力:RES_n,CLK,DTIME,START,PULSEOUT
  • 内部出力:なし
  • パラメータ:なし
評価環境
  • 製品に搭載実績のある回路を本誌に抽出.


 PWM(Pulse Width Modulation)のパルス信号を用いてIGBT(Insulated Gate Bipolar Transistor)などのパワー・デバイスをスイッチングすることがあります.図4-1に主回路も含めた構成を示します.右側にあるIGBTが交互にON/OFFを繰り返してインバータの出力を生成します.この種のデバイスはターンOFF遅延が大きく,この遅延を考慮しないと上下アームが同時にON状態となって短絡し,デバイスを破壊してしまいます.

zu04_01.gif
図4-1 デッド・タイム生成部と外部ドライバ,IGBTとの接続

 これを回避するために,一方が確実にターンOFFするまでもう一方をONさせないように制御する必要があります.この時間をデッド・タイムと呼びます.市販マイコンに搭載している汎用のタイマ・モジュールでも両アームの駆動パルスを一括管理できるものもあります(相補PWMサポート).これは,あくまでもレジスタ設定を間違いなく行った場合の話であり,もしマイコンが暴走したら動作は保証されません.

 PWMの指令値(パルス出力信号)からデッド・タイムを付加した上下アームのゲート駆動信号を生成する際は,さまざまな意味でハードウェアの方が安心です.

 図4-2にデッド・タイム制御モジュールDEADCTLのステート・マシンを示します.S0~S3を循環するだけのステート・マシンも見かけますが,これは停止中の上下両方のアームをOFFにする制御を外部で行っているものです.今回はその停止中の状態(SIステート)も含めています.

zu04_02.gif
図4-2 デッド・タイム生成部のステート・マシン

 リスト4-1にデッド・タイム制御モジュール(DEADCTL)のソース・コードを示します.図4-2で解説したステート・マシンとデッド・タイム確保用のカウンタから構成しています.

library ieee;
  use ieee.std_logic_1164.all;
  use ieee.std_logic_arith.all;
  use ieee.std_logic_unsigned.all;

entity DEADCTL is
  port(RES_n    : in  std_logic;                    
-- システム・リセット
       CLK      : in  std_logic;                    
-- システム・クロック
       DTIME    : in  std_logic_vector(8 downto 0); 
-- デッドタイム設定値
       START    : in  std_logic;                    
-- 動作開始信号
       PULSEOUT : in  std_logic;                    
-- パルス入力
       PGATE    : out std_logic;                    
-- 上側アーム・ゲート制御信号
       NGATE    : out std_logic                     
-- 下側アーム・ゲート制御信号
  );
end DEADCTL;

architecture RTL_DEADCTL of DEADCTL is
signal DCOUNT : std_logic_vector(8 downto 0);
signal DCOUNTE, DCLR, DEND : std_logic;
signal CSTATE, NSTATE : std_logic_vector(2 downto 0);
begin
-- デッド・タイム・カウンタ本体
  process(CLK, DCOUNTE, DCLR, DCOUNT)
  begin
    if CLK'event and CLK = '1' then
      if DCLR = '1' then
        DCOUNT <= "000000000";
      else 
        if DCOUNTE = '1' then
          DCOUNT <= DCOUNT + "000000001";
        end if;
      end if;
    end if;
  end process;

-- デッド・タイム・カウント終了フラグ生成
-- コンカレント文でも記述可能
  process(DCOUNT, DTIME)
  begin
    if DCOUNT >= DTIME then
      DEND <= '1';
    else
      DEND <= '0';
    end if;
  end process;

-- デッド・タイム制御ステート・マシン本体
USM:
  process(RES_n, CLK, NSTATE)
  begin
    if RES_n = '0' then
      CSTATE <= "000";
    else
      if CLK'event and CLK = '1' then
        CSTATE <= NSTATE;
      end if;
    end if;
  end process;

-- 次ステートのエンコーディング+ゲート制御出力生成
  process(CSTATE, START, PULSEOUT, DEND)
  begin
    case CSTATE is
      when "101"   => -- S1(DeadToP)
        DCLR <= '0'; DCOUNTE <= '1'; PGATE <= '0'; NGATE <= '0';
        if DEND = '0' then
          NSTATE <= "101"; -- S1(DeadToP)
        else
          NSTATE <= "111"; -- S2(Pon)
        end if;
      when "111"   => -- S2(Pon)
        DCLR <= '1'; DCOUNTE <= '0'; PGATE <= '1'; NGATE <= '0';
        if PULSEOUT = '1' then
          NSTATE <= "111"; -- S2(Pon)
        else
          NSTATE <= "110"; -- S3(DeadToN)
        end if;
      when "110"   => -- S3(DeadToN)
        DCLR <= '0'; DCOUNTE <= '1'; PGATE <= '0'; NGATE <= '0';
        if DEND = '0' then
          NSTATE <= "110"; -- S1(DeadToN)
        else
          NSTATE <= "100"; -- S0(Non)
        end if;
      when "100"  => -- S0(Non)
        DCLR <= '1'; DCOUNTE <= '0'; PGATE <= '0'; NGATE <= '1';
        if PULSEOUT = '0' then
          if START = '0' then
            NSTATE <= "000"; -- SI(Idle)
          else
            NSTATE <= "100"; -- S0(Non)
          end if;
        else
          NSTATE <= "101"; -- S1(DeadToP)
        end if;
      when others => -- SI(Idle)
        DCLR <= '1'; DCOUNTE <= '0'; PGATE <= '0'; NGATE <= '0';
        if START = '0' or PULSEOUT = '0' then
          NSTATE <= "000"; -- SI(Idle)
        else
          NSTATE <= "101"; -- S1(DeadToP)
        end if;
    end case;
  end process;
end RTL_DEADCTL;


リスト4-1 DEADCTLのソース・コード

あさい・たけし
(株)ネクスト・ディメンション

組み込みキャッチアップ

お知らせ 一覧を見る

電子書籍の最新刊! FPGAマガジン No.12『ARMコアFPGA×Linux初体験』好評発売中

FPGAマガジン No.11『性能UP! アルゴリズム×手仕上げHDL』好評発売中! PDF版もあります

PICK UP用語

EV(電気自動車)

関連記事

EnOcean

関連記事

Android

関連記事

ニュース 一覧を見る
Tech Villageブログ

渡辺のぼるのロボコン・プロモータ日記

2年ぶりのブログ更新w

2016年10月 9日

Hamana Project

Hamana-8最終打ち上げ報告(その2)

2012年6月26日