FPGA活用回路&サンプル記述集(1) ―― アナログ信号入出力回路
tag: 半導体 電子回路 ディジタル・デザイン
技術解説 2009年2月23日
● センサの電圧を読み取る方法
図1-3にA-Dコンバータへセンサの電圧を入力する回路を示します.±10V,8チャネルのセンサ出力に対応するため,アナログ・マルチプレクサ「DG408」(米国Maxim Integrated Products社)を使用しました.アナログ・マルチプレクサの信号セレクト入力は,CMOSレベルで直接FPGAからの制御が可能です.またアナログ入力は±10Vまで対応可能です.
図1-3 複数のアナログ入力から一つのチャネルだけを選択する回路
A-Dコンバータの入力は0?3Vなので,±10Vを0?3Vに変換するための反転増幅OPアンプを配置しました.また,マルチプレクサからの入力が0Vのとき,A-Dコンバータへの入力電圧が1.5Vになるようにオフセット電圧発生用OPアンプを配置しています.それぞれ可変抵抗を配置し,調整できるようにしています.
出力電圧Vout=-Rout(Vin/Rin+Voff/Roff)
となります.リスト1-2に制御例を示します.
module dg408cnt(ck,res,adbusy,adrs,adtrg);
input ck;
input res;
input adbusy;
output adtrg;//ad trg
output [2:0]adrs;//MPX adrs
//wtimer (2us)
reg [1:0] wtimer;
reg adtrg;
reg ads;
reg [2:0] adrs;
wire adrsup;
wire snoend;
assign snoend = (wtimer == 2'd3); ←※3
assign adrsup = (~adbusy && ads); ←セレクト信号の切り替えトリガ信号
always @(posedge ck)begin
if (res) wtimer <= 2'b0;
else if (adbusy) wtimer <= 2'b0;
else if (~snoend) wtimer <= wtimer + 2'b1;
end
//adtrg
always @(negedge ck)begin
if (res) adtrg <= 1'b0;
else if (adbusy) adtrg <= 1'b0; ←A-Dコンバータ変換開始トリガ信号生成
else if (snoend) adtrg <= 1'b1;
end
//ads : adbusy delay
always @(posedge ck)begin
if (res) ads <= 1'b0;
else if (~adbusy) ads <= 1'b0;
else ads <= 1'b1;
end
//adrs
always @(negedge ck)begin
if (res) adrs <= 3'b0;
else if (adrsup)
if (adrs == 3'd7) adrs <= 3'b0; ←※4
else adrs <= adrs + 3'b1;
end
endmodule
リスト1-2 アナログ入力信号をマルチプレクサ制御するためのVerilog HDL記述
注3;A-D変換完了後の待ちサイクル設定(A-D変換完了時3サイクル待ってセレクタを切り替え)
注4;アナログ・マルチプレクサ・セレクト信号生成.0から7まで順次カウントアップを繰り返し
tag: FPGA