はじめに
ロジアナもどきでちょっと練習してみましたが、ちゃんとしたものを作ってみよ〜
趣味の手作り真空管アンプの特性を見てみたい。と目標を立てて、周波数特性のグラフを
Excelで描くというものです。開発はBASICとExcelVBAを使います。C言語に抵抗がある方にも易しく
できると思います。
H8/3048F用BASICコンパイラ  たぶん¥2,000.也。
3052でもランタイムルーチンにパッチが必要で、3048用のフォルダと3052用のフォルダを
分けて、コンパイラも分けておきます。ターゲットマシンによって、コンパイラ自身を使い分けて
MOTファイルを作ります。
間違ってコンパイルしても、シリアル通信以外はほぼ正しく動作しますので、通信部分でおかしな
状態に陥ったら、起動したコンパイラの場所(フォルダ)を確かめなおして再コンパイルします。
かくゆう私もつい、ディスクトップのショートカットでコンパイラを起動して、何度もデータが受信できず
ハマってしまいました。途中で気がつき正しいフォルダのコンパイラでMOTをつくりするっと通信ができた
という経験を持っています。(今回がそうです)パッチの当て方は、CD-ROMのテキストファイルにヒントが
記載されています。
いかがなものでしょう、それらしく、あくまでそれらしくです。90Hz近辺のとんがりはなぜだか分かりません。
でもいいんです、こんなので。だって趣味ですもの。
以下に全体のブロック図を示します。ほとんどが半完成品です。ちっちゃい部分が手作り(いい加減)です。



まず、H8で秋月のDDSをコントロールし、その出力をちょっと増幅します。DDSの出力があまりに小さいのです。
単体でテストしていたので、すでにケースに組み込み後に判明し急遽5V単一電源で動くオペアンプということで
OPA350を使うことにしました。(ちょっと高いけど)
アンプの出力は、8オームのダミーロードで受け、その一部を整流回路に引き込みます。
アンプの出力信号を、コンデンサで直流成分をカットし、ダイオードで整流し、さらにコンデンサでリップルを
除くようにします。当初この状態でAD変換していて、10Hzから順調に電圧が増加していくことを確認しましたが
30KHzを超えて、アンプの特性が限界になり、電圧が下がるはずが下がりません。ずっとフラットで?
コンデンサに溜まった電荷の影響です。この電荷を消費するために、100オームくらいの抵抗でグランドに
落とします。このあたりは、コンデンサの容量と抵抗値の兼ね合いで、さらにAD変換のタイミング考える必要が
ありそうです。最終的には、DDSの発信を停止し、AD変換で0Vまで下がるまで繰り返し測定し、
充分下がったところで次の周波数の測定を行う様にしています。
また、高利得のアンプであれば、オペアンプ無しでも測定は不可能ではありませんでした。オペアンプを使う場合
そのオペアンプ自身の周波数特性に気をつける必要があります。せっかくDDSからフラットな信号を出しても
オペアンプで周波数特性を乱しては、測定の意味がありません。
今回では、50Hz以下では出力にへたりがあり、この部分の調整が必要であると感じています。
S/Wで補正する方法も考えられますね。

これは、当初のオペアンプの回路です。Outから−入力に100Kとなっていますが、ここは50Kの半固定で
ゲインコントロールしています。入力のカップリングも取り外しました。片電源の反転増幅ですが、
入力インピーダンスを上げるために、非反転回路のほうがよいとのこと。この辺は今後調整します。
ちなみにOPアンプはOPA350です。かなり高価です。なんでもいいんじゃないかと思いますが。
rail to trailのOPアンプで挑戦してください。
また、DDS基板のC5の値も大きくするよよいそうです。
次にAD入力部分です。


少し手抜きですが、ダミーロードからコンデンサ経由で信号を取り出します。直流分はカットされ、
信号成分だけになるはずです。ここをダイオードで整流します。その後のコンデンサは平滑の目的です。
最後にRがありますが、前述の電荷を開放するためのものです。
ここは、ポート4のビット4につないでいます。
1.DDSのコントロール
 H8のポートAの0,1,2のビットを使っています。
 データはビット0、ストローブがビット1、クロックがビット2としているはずです。ソースから読み取れます。
1.1データ部(製作C、【基板端子の名称】ADATA シリアル入力用 データ DDT
 DDSのマニュアルの技Bのページにシリアルデータの例が出ています。
また技Cの裏にコマンド表が出ていますので確認してください。コマンド 1 としてDDS−LSIの出力をONする。(リセット直後は出力OFF)と記載されています。
最初は、このコマンド 1で出力ONにして、コマンドCからFを使って出力すると思っていましたが、リセット直後は確かに発信していませんが、データ書き込みこれを出力するというコマンドC以降を1回使えば、発信を始めます。今回はコマンドFを使いました。全ビットオンで単純だからです。
さて、データ部分の、アドレス(3ビット)は、チップセレクトに合わせます。通常は1,1,1ですね。次にコマンド(4ビット)は今回はコマンドFを使用するのでこれまた1,1,1,1です。続く26ビット(0から25ビットまで)LSBが下位になりますね。ここに発信させたい周波数を2進数で設定します。

1.2クロック(製作C、【基板端子の名称】BSCKシリアル入力用クロック DCK
 マニュアルの技Cの裏にDCKのタイミングチャートがあります。ここで、1周期100nSec以上、Hi、Lowの時間が25nSec以上と読み取れます。最短時間が書かれています。今回適当にプログラミングしたら、どうもタイミングに問題があるようで、ところどころに1mSecのウエイトを入れました。遅い分には問題ないようです。またこのチャートからクロックの立ち上がりで、データビットを読み込むように見えます。
従って、データをセットした後で、クロックをLowの状態からHiの状態にして25nSec以上保てということでしょう。あえて、こんな極限の短い時間でなくとも余裕で作ってみました。
データがLowのときとHiのときで動作を変えてあります。Bit(n)は送信データの内のある1ビットです。それが1ならば、
Port_Hiをそうでなければ、Port_Lowを呼び出します。
If Bit(i)=1 Then Gosub !Port_Hi Else Gosub !Port_Low

' ビットオンのときのデータとクロックビットの出力
:!Port_Hi Poke &hFFFD3,&h6 ' Data Bit Hi Clock Low
wait 1
Poke &hFFFD3,&h7 ' Clock Bit Hi Clock Bit Hi
wait 1
Return
' ビットオフのときのデータとクロックビットの出力
:!Port_Low Poke &hFFFD3,&h2 ' Data Bit Low Clock Low
wait 1
Poke &hFFFD3,&h3 ' Data Bit Low Clock Bit Hi
wait 1
Return
先にデータビットを出力してから1mSec後にクロックビットをHiにしています。

1.3ストローブ(製作C、【基板端子の名称】BSTBシリアル入力用ストローブ DST
 上記と同タイミングチャートです。通常常時Hiで最終ビットを送り出したあとでLowになって次のコントロール信号のため再度Hiにします。
負論理のストローブ信号です。
Poke &hFFFD3,&h0 ' Data and Clock Bit Low,STB Low
wait 1
これらを組み合わせて、DDSのコントロールを行います。

H8側のプログラムソースです。

Excel側のブックです。

実際の測定方法ですが、まず測定器の電源をONにすると、基準電圧の測定が始まります。
1KHzの連続信号が出ていますので、4Vを超えない程度にアンプのボリュームを調整します。
OKならどれでもいいですからボタンを押します。すると10Hzから自動的に測定が始まります。
測定が終わるとデータの転送準備ができたメッセージが出ます。ここで、PC側でExcelを起動しておきます。
測定器のボタンを押すとExcel Waitのようなメッセージが出ますので、Excelのメニューの簡易測定器の
周波数特性データ受信をクリックすると、自動的に受信が開始され、データの受信後に
周波数特性グラフが現れます。
H8/3052と秋月DDSでオーディオ用周波数測定
Basicコンパイラ(秋月)