| はじめに |
| ロジアナもどきでちょっと練習してみましたが、ちゃんとしたものを作ってみよ〜 趣味の手作り真空管アンプの特性を見てみたい。と目標を立てて、周波数特性のグラフを 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コンパイラ(秋月) |