デジタル周波数シンセサイザ基板をエクセルから動かす

投稿日 2022/01/26

AD9834_DDS01.jpg

CQ出版トライアルシリーズ「デジタル周波数シンセサイザ基板」と付属基板

​SMAコネクタは後で取り付けた

オプションでベース基板(LCDとプッシュボタン)、ログアンプ、

プログラマブルアッテネーターが用意されているが、

この基板だけで任意周波数発振器として十分使える

久しぶりに「デジタル周波数シンセサイザ基板」をおもちゃ箱から引っ張り出してきました。この基板はCQ出版社の書籍 トランジスタ技術増刊トライアルシリーズのひとつで「すぐ使えるデジタル周波数シンセサイザ基板 DDS搭載」です。トライアルシリーズは基板やCD付きで何種類か販売されています。なかなか興味深いものが多いようです。

この「デジタル周波数シンセサイザ基板」にはアナログデバイセズ社のDDS AD9843を搭載しています。20MHzまで1Hz刻みで発振できるシンセサイザーです。20MHzというと高周波の実験ではちょっと物足りないと思いますが、オーディオアンプの周波数特性や、アマチュアの無線機でVFO(可変周波数発振器)として使えると思います。オプションのベース基板、ログアンプやアッテネーターを装備すればネットワークアナライザもどきにもなるようです。

今回は書籍に付属のCDに含まれているエクセルのサンプルを動かしてみました。ただし、このサンプルは、ベース基板やログアンプ等のオプションを装備していることが前提の簡易ネットワークアナライザになっています。当局はオプションを購入してませんので、そのままでは動きません。

そこでエクセルのVBAで書かれたプログラムを改造し、オプションの要らない単なる周波数発生器、スイーパーにして見ました。といっても、簡単です。

「デジタル周波数シンセサイザ基板」のDDSを制御しているPICマイコン 18F14K50に書き込まれているファームウェアはCOMポートからテキスト文字列のコマンドを送れば動作するようになっています。1MHzを発振させたい場合は、文字列"1000000S"を送ります。TeraTermでCOMポート#を設定すればすぐ行えます。

1KHzアップしたい場合は"1000U"。ダウンさせたい場合は"1000D"と打ち込みます。ただ、これではスイープできませんので、エクセルのVBAでプログラミングして使うわけです。そのためにはVBAからCOMポートを制御する必要がありますが、書籍の付属CDに「EasyComm」というソフトが入っています。昔「EasyGPIB」というのがありました。当局も真空管の試験システムでエクセルから「EasyGPIB」でGPIBを操作し、測定器を制御しています。「EasyComm」はそれのCOMポート版のようなものです。

「EasyComm」の​使い方は簡単で、エクセルにインポートしておけば、ec.COMn = # でCOMポート#を指定し、ec.ascii = "1000000S"というように文字列を送るだけです。最後にec.COMn = 0でCOMポートを開放します。VBAはループ処理はお手のものですので、スイーパーにする場合は、周波数を変えながらループさせればよいわけです。

AD9834_DDS02.jpg

「デジタル周波数シンセサイザ基板」で455KHzを発振させてみた

基板にUSBコネクタをつなぎPCと接続しておきます。このときCOMポート#が決まるので、デバイスマネージャー等で調べておきます。付属のCDにエクセルのサンプルが入っているので起動します。alt +F11でVBAの開発画面を出します。そのままではネットワークアナライザのソフトになっているので少々複雑です。しかし、よく見るとec.ascii = で周波数の設定して、ログアンプの出力を読んでいるだけと言っていいようなものです。「EasyComm」はすでにインポートされています。余計な部分を消して単なる周波数発生器、スイーパーに改造します。

AD9834_DDS03.jpg

​周波数スイーパーのエクセル画面

Dim i
Dim count
Dim freq
Dim stop_freq
Dim period
Dim updown As String

Sub Freq_Out()

    ec.COMn = Range("B1").Value
    ec.Ascii = Range("B3").Text + "S"

    MsgBox RecieveString

    ec.COMn = 0

End Sub

 

Sub Freq_Sweep()

    ec.COMn = Range("B1").Value   
    ec.Ascii = Range("B9").Text + "S"

    count = Range("B11").Value
    period = Range("B12").Value

    Do
        ec.Ascii = Range("B10").Text + "U"
        count = count - 1
        Range("B13").Value = count
        ec.WAITmS = period
    Loop While count <> 0

    MsgBox RecieveString

    ec.COMn = 0

End Sub

Sub Freq_Sweep_W()

    ec.COMn = Range("B1").Value

    freq = Range("B16").Value
    stop_freq = Range("B17").Value
    step_freq = Abs(Range("B18").Value)
    period = Range("B19").Value
    
    If stop_freq > freq Then
        count = (stop_freq - freq) / step_freq
        updown = "U"
    Else
        count = (freq - stop_freq) / step_freq
        updown = "D"
    End If 
    
    ec.Ascii = Range("B16").Text + "S"


    Do
        ec.Ascii = Range("B18").Text + updown

        ec.WAITmS = period      
        count = count - 1
        Range("B20").Value = count
    Loop While count <> 0

    MsgBox RecieveString

    ec.COMn = 0

End Sub
 

EasyCommを使用した簡単な周波数発生器、スイーパーのVBAプログラム

マクロ名

freq_out:指定周波数の発振

freq_sweep:指定周波数から指定刻みで指定ステップスイープ

freq_sweep_W:指定周波数から指定周波数までを指定刻みでスイープ

スイープをカウンターで確認

開始周波数 1000000MHz(1MHz)

ステップ 100000Hz(100KHz)

カウント 100回

間隔 100ms

​最終周波数は11000000Hzになります

(JF1VRR)