FPGA活用回路&サンプル記述集(2) ―― モータやLEDを駆動するパワー回路
tag: 半導体 電子回路 ディジタル・デザイン
技術解説 2009年3月 9日
事例2.パルス波のデューティ比を変えて白色LEDの明るさを調整する回路
森田 一
- 回路図:図2-2
- 主要部品:白色LEDドライバ
- Verilog HDL:リスト2-1
- 外部入力:なし
- 外部出力:pout(PWM出力)
- 内部入力:pw,clk,nreset
- 内部出力:なし
- パラメータ:DIV(PWMの分周比)
- Altera社,Quartus II
PWMはPulse With Modurationの略で,パルス波のデューティ比を変化させて変調する方式のことです.図2-1のようにパルスの周期は固定で,パルス幅を変化させることによって出力の大きさを表現します.
図2-1 PWM変調はパルスの幅を変えて出力の大きさを表現する
図2-1ではパルスの周期を16分割した幅を基準にしてパルスの幅を決めているので,1~16の16段階の値がパルスのデューティ比として表現できます.
簡易的なD-A変換器として使用する際には,出力を平滑化するためのローパス・フィルタを入れます.DCモータの制御の際には,モータ自体がローパス・フィルタとして働くため,あえてフィルタを使わないときもあります.
同じようにPWMでLEDの発光時間を制御することでLEDの調光も可能です.ここでは,米国Catalyst Semiconductor社の白色LEDドライバ「CAT4237」と組み合わせてLEDを調光する例を紹介します(図2-2).
図2-2 FPGAからのPWM出力を利用しLEDの明るさを調整する回路
PWMはマイコンやDSP(Digital Signal Processor)を用いる場合はタイマのアウトプット・コンペアを利用して実現することもよくあります.今回はFPGAを用いました.
● 任意のパルスの作り方
PWMはフリーランのカウンタとコンパレータから構成されます.図2-3のようにフリーランのカウンタの値が,設定された値より小さい期間'1'を出力します.これをVerilog HDLで記述したものがリスト2-1です.この例では,パルスの周期を256分割しているため,
(入力した値+1)÷256
のデューティ比のパルスが出力されます.基準となるクロックをまず分周器divで分周して,フリーラン・カウンタcntに与えています.これを設定値pwと比較し,クロックでたたき直してグリッチを消しています.
図2-3 PWMはフリーランのカウンタとコンパレータから構成される
parameter DIV=20 ; ←clkを分周してPWMの周波数を設定する分周比
input [7:0] pw ;←※1
output pout ;
input clk ;
input nreset ;
reg [7:0] cnt ;
reg [15:0] div ;
reg pout ;
always @( posedge clk or negedge nreset )
begin
if( !nreset )begin←※2
pout <= 0 ;
cnt <= 0 ;
div <= 0 ;
end
else begin
div <= (div == DIV )? 0 : div + 1 ; ←clkの分周
cnt <= cnt + ( div == 0 ) ;←※3
pout <= (pw >= cnt );
end
end
endmodule
注1;この例では1周期を256等分してるため(pw+1)/256のdデューティ比のパルスがpoutから出力される
注2;リセット時に内部レジスタを初期化
注3;clkの分周器divの値が0の時だけcntをインクリメントする.cntの値が外部から設定したpwの値以下の場合に1を出す
tag: FPGA