AD9833でファンクションジェネレータを作る11 DCカット、出力カット

published_with_changes 更新日: event_note 公開日:

labelAD9833 labelESP32 labelファンクションジェネレータ

11 付加機能

頭の中で妄想をしつつ開発プロジェクトを進めているうちに、波形選択と周波数スイープに加えて、他の機能も付加したくなってきました。思いつきでやってる悪い癖です。
  • DCのオフセット調整はあるけど、一発でDC成分をカットしたい。
  • 出力が出っぱなしじゃなくて、スイッチを押したら出力するようにしたい。
  • オペアンプの電源が電池なら、スイッチがないと放置で電池がなくなる。
まとめるとこのようになります。モニター用にLEDの点灯も考えました。
負荷機能InputOutputESP32
IN Port
ESP32
Out Port
a) Wave selectTact SW2 x photo coupler, 1x LED11排他処理回路
b) 周波数スイープTact SWSoftware, LED11
c) DCカットTact SW2 x photo coupler, 1x LED11排他処理回路
d) 出力オンオフTact SW1 x photo coupler, 1x LED11
e) オペアンプ起動システム起動1 x photo coupler1

a) Wave selectとb) 周波数スイープについては、既に検討しました。

11.1 DCカット

DCカットについては、出力部にコンデンサを入れ、これを通す/通さないを波形選択と同様に以下の回路で行います。U10とU11を排他的にzeroPin信号によって切り換えます。

11.2 出力オンオフ

①normal(固定周波数)modeと②sweep modeについて、分けて考えます。

① normal mode のとき

Analog DevicesのAD9833 - FAQに次のような記述があります。

DDSの出力を停止させるにはどのような方法が良いのでしょうか。

Q:   AD9833において連続でデータ変更しながら、周波数を変え、最後に出力を停止するために、周波数制御ワード、FREQ0のLSB側レジスタ、MSB側レジスタの順で書き込んで周波数を少しづつ変えています。最後にLSB側、MSB側の0-14bitをすべて0にして出力の変化を止めております。Voutの出力を止めるのは、どのような制御が最良かアドバイスお願いします。

A:   AD9833には二つの周波数制御レジスタが用意されています。このデバイスの出力周波数を変更する場合、二つのレジスタのうちFSELECTビットで選択されていない周波数レジスタに次に出力させたい周波数のデータを設定しFSELECTでこの周波数を設定したレジスタに切り替えてください。選択されて動作している周波数レジスタの値を直接変更すると、MSB側、LSB側のレジスタ書き込みの間に一時的に意図しない周波数が出力されます。また出力をミッドスケールで停止させる場合にはRESETを行っていください。ゼロにする場合にはDACをパワーダウンしてください。 任意の出力電圧で停止させる場合には周波数制御レジスタにゼロを書き込んで下さい。

自分勝手に解釈すると、

  • ふたつのレジスタがあるので、そのとき使ってないレジスタに次に出力させたい周波数のデータを設定しておき、切り換える。
  • ”ミッドスケール”の意味は不明ですが、リセットで出力を停止できる。
という方法かと思います。ふたつ目のリセット方式で検証実験をしてみると、次のような動作でした。
    1).    リセット WriteRegister(0x100); // Write '1' to AD9833 Control register bit D8. を実行
        DCオフセットした電圧一定となる。

    2).    両電源を停止
        電圧がほぼゼロVで電圧一定となる。

この結果から、1). の方法を使うことにしました。

② sweep mode のとき

周波数スイープでは、割り込みを使ってもリセットが実現できませんでした。割り込みの優先順位かもしれないと思って、スケッチ上の記述順を変更してみましたが、ダメでした。いろいろ試行してみましたがダメでした。

周波数スイープ中にそれを中断して、(出力を停止しておき、)再度、最小周波数からスイープさせることを実現させたかったのですが、normal modeに一度戻って、再度sweep modeにする以外に今のところ方法なしです。つまり、停止状態からスイープさせるには、次の方法を取ることにします。

    1)(sweep modeではなく)normal modeで、出力ボタンを押して出力を停止させておく
    2)sweep modeにする

③ sweep mode の更なる細工 (GPIOの割り込みは長押しではダメ)

sweep modeへ切り換えるスイッチの短押し/長押しで出力の待機/出力をしたいと思いました。そのスケッチを書いてみたがうまく働きません。おそらく外部割込みの長押しはできないのだろうと思います。

ネットで方法を探していると、こんな書き込みを見つけました。

 割り込み処理をシステムでも多用しているっぽくて、割込み処理に長い時間をかけるとシステムの割り込み処理全体に影響を及ぼす可能性があるので推奨されません。

例えば、ボタンを押しっぱなしにした時のwhileループを割り込み処理中に挟んだりしたら、恐らくwatchdogタイマーにやっつけられてしまうと思います。

11.3 sweep modeと出力オンオフについてのまとめ

Normal / SweepスイッチLED(緑)出力スイッチLED(黄)出力波形
Normal(デフォルト)消灯ON(デフォルト)点灯所定の周波数での波形で出力
Normal(デフォルト消灯OFF消灯DCオフセット電圧一定値で出力
Sweep点灯ON(デフォルト)点灯周波数スイープ
Sweep点灯OFF消灯スイープ前の周波数で波形出力

11.4 オペアンプの電源スイッチ

オペアンプの電源は9Vの電池です。これは回路の構成上オペアンプにいつも繋がり電力を消費してしまいます。これを防ぐため、下記のような回路構成にして、システム(ESP32)の電源が入ったらフォトカプラが働き9V電源回路を導通するようにします。

    VCC : 9V電池のプラス極        VEE : 9V電池のマイナス極
    3V3 : システム電源

ここで、使用するフォトカプラはTLP785で、コレクタ電流が50mAとdatasheetにあります。この回路の両電源がまかなうオペアンプはサイン波用に1個(2回路)、矩形波用に1個(1か2回路)、ミリバル用に2個(4回路)で、40から50mAが必要になります。(DC電源の表示電流は定格時に42mAでした。)
実験していくと、フォトカプラTLP785だけでは電流不足でした。もっと大きな電流を流せるフォトカプラを持っていないので、コレクタ電流150mAの2SC1815を追加します。

ベース電流 ( 9 - 0.7 )V / 2KΩ ≒ 4mA とします。
このとき、datasheetのコレクタ電流特性をみると、十分なコレクタ電流が流せます。

試しに、LTspiceで計算してみると、フォトカプラのアノード・カソード間電流I(R4)が38mAに対して、ベースIb(Q1)に4mA流れたとき、2SC1815のコレクタ電流I(R3)は150mAが問題なく流せています。

ついでに、両電源のグランド安定化のために入れているボルテージフォロア用オペアンプがネックにならないかも観ておきます。LTspice好きなので。

両電源負荷の変動でU5A/Bに許容値を超える電流が流れないことの確認です。U5A/BにはLM358(出力電流: Short-Circuit Output Current 40mA)を使います。
汎用の両電源評価回路として下記の回路を使います。負荷(VCC,VEE)を流れる電流(上から2つ目、3つ目のグラフ)を150mAにしたとき、オペアンプを流れる電流は1.8mAに満たない値でした。(上から5つ目のグラフ)





Powered by Blogger | Designed by QooQ

keyboard_double_arrow_down

keyboard_double_arrow_down