目次

簡易ファンクションジェネレータ

 手元にEEPROM、バイナリーカウンタ、OPアンプがあった
 ので、簡易ファンクションジェネレータをつくりました。

 デジタル方式のファンクションジェネレータのブロック図は、以下です。



 ブロック図から回路図を作成し、半田付けして
 次の基板となりました。



 D/Aコンバータは、R-2Rの抵抗ラダーにしています。



 ROMの中に波形パターンを入れておけばよいので
 ROMのアドレスをカウンタを使って生成します。
 手持ちの74HC4040でアドレスを生成します。

 カウンタを動かすには、クロックが必要なので
 手持ちの10MHzのセラロックを利用し、74LS193
 で分周して、74HC4040のクロックとします。



 74LS193は、周波数デバイダで利用していますが
 アドレスを与えて、ROMが出力するデータを記憶
 するためのトリガークロックも生成します。

 タイミングチャートで示すと、以下となります。



 クロックの立上りエッジで、波形データをラッチし
 立下りエッジでROMのアドレスを+1します。

 1つの波形だけでは、ファンクションジェネレータ
 にならないので、DIPスイッチで波形を選択できる
 ようにし、音で確認するため、アンプをつけます。



 波形は、スクリプト言語を利用して作成します。

#-----------------------
# file name gensin.tcl
#-----------------------
# initialize amplitude
set mulx 127
# generate pi
set pi2 [expr 2*(atan(1) * 4)]
# clear string
set tmp ""
# generate code
for { set j 0 } { $j < 64 } { incr j } {
  # calculate
  set valx [expr int($mulx * ( sin((2 * $j * $pi2) / 64) + 1)) ]
  # concatenate
  set i [format "0x%02X," $valx]
  # concatenate
  set tmp "$tmp $i"
  # judge
  if { [expr $j % 8 ] == 7 } {
    puts $tmp
    # clear
    set tmp ""
  }
}

 8ビットデータバスのROMに入るように、正弦波を
 振幅が8ビットで納まるようにしてあります。
 また、1波形は64分割してあります。

 より精度の高い波形が必要であれば、1波形を256や
 1024分割しておけばよいでしょう。

 ROMライターには、インテルHEXフォーマットかモトローラ
 Sフォーマットが必要になります。変換は、フリーソフトが
 たくさんあるので、そちらを利用します。


目次

inserted by FC2 system