FPGA活用回路&サンプル記述集(2) ―― モータやLEDを駆動するパワー回路
tag: 半導体 電子回路 ディジタル・デザイン
技術解説 2009年3月 9日
● ステッピング・モータとの接続
FPGAの出力ポートはそのままステッピング・モータを駆動できません.図5-2のように三洋半導体製「2SD1828」などのトランジスタをドライバとして使用します.また,ステッピング・モータのコイルの逆起電力を吸収するために,必要に応じてCRスナバや,例えば米国ON Semiconductor社の「1N5822」などのダイオードをコイルに並列に入れます.
図5-2 ステッピング・モータの駆動回路
ステッピング・モータのコイルへの電源およびグラウンドはFPGAと別系統とし,FPGA側にノイズが流れないように注意することも大切です.フォトカプラなどでFPGAからの制御信号を分離する方法もあります.ただし,コストに影響するため,やみくもにフォトカプラを使用するのは得策ではありません.
● 駆動信号の生成
今回は2相駆動を採用します.この場合,各相の制御信号は図5-3のようになります.A相とA相,B相とB相はおのおの反転された信号です.また,A相とB相は位相が90°ずれた信号と考えられます.
図5-3 ステッピング・モータの駆動パルス
従って,図5-4のような回路で実現できます.ところが,この回路のままではフリップフロップのクロックがFPGAのグローバル・クロックとは異なったものになってしまうので,グローバル・クロックに同期させたものがリスト5-1の記述です.表記上,A相をap,B相をbp,A相をan,B相をbnとしています.
図5-4 駆動パルスを生成するための回路
input stp ; ←stpが1パルスが入るたびに1ステップ回転する
input cw ;
input clk ; ←回転の向きを指定する
input nreset ;
output ap, an, bp, bn ;
wire stp ;
reg stp_i, stp_ii ;
reg a, b ;
assign ap = a ;←※4
assign bp = b ;
assign an = !a ;
assign bn = !b ;
always @( posedge clk or negedge nreset )
begin
if( nreset<= 0 ) begin
stp_i <= 0 ;←※5
stp_ii <= 0 ;
a <= 0 ;
b <= 0 ;
end
else begin
stp_i <= stp ;←※6
stp_ii <= stp_i ;
if ( stp_i ==1 && stp_ii ==0 )
begin
a <= (cw)? !b : b ;←※7
b <= (cw)? a : !a ;
end
end
end
endmodule
注4;A相,B相は,内部のレジスタの状態をそのまま,A相 B相は内部のレジスタの状態を反転してアサインする
注5;リセット時の内部レジスタの初期化
注6;stp信号をclkの1クロック分に整形する
注7;内部レジスタa,bを1ステップ分cwで指定した方向に変化させる
もりた・はじめ
Column もう一つの制御プログラム
tag: FPGA