実験用低周波発振器の予備検討

2025-03-04:記述を一部修正

出先でトランジスタ増幅回路の実習をさせようと思ったら,低周波発振器がなくて往生しました.ネット上ではXR2206のファンクションジェネレータキットが1000円前後で売られているようですが, 買って作った人のblogに掲載された波形写真とかを見てみると何かおかしい感じがします.オシロで波形を見て「これは正弦波ではない」とわかるようなのはさすがに使うことができません.そこで手軽に持ち運びできる小型の低周波発振回路を検討してみました.

4〜5台は作らないといけないので,簡単で装置間の個体差がないことが望ましいです.およそ次の仕様が満たせれば良いものとします:

  • 周波数:1000Hz / 400Hzの2波切り替え(出先の実習ではf特を測る時間余裕がないため)
  • 出力レベル:10mVpp〜4Vpp程度に可変可能
  • 出力インピーダンス:50Ω
  • 歪み率:1%以下
  • スプリアス:全域で最大出力に対し–40dBc以下

この程度であれば,PICマイコンから正弦波データを出力してDA変換すれば良さそうです.部品棚の肥やしになっているPIC16F84Aが10個はありますので,朽ち果てさせずに使うことにします.

回路図です.20MHz水晶振動子でクロックを作ります.計測用の発振回路ですので,INTOSCを持つPICマイコンを使用する場合でも周波数の精度や安定性を考えるとクロック源は水晶発振回路の方が望ましいと考えます.PORTBから8bitの正弦波データを出力してR-2R DACでアナログ信号に戻し,遮断周波数2kHzのLPFに通します.R-2RにはBOURNSの集合抵抗4310R-R2R-103LF(これは7〜8年前に買ったもの)を用いましたが,4610X-R2R-103LFの方が今は安く買えるみたいです(Digi-KeyやMouser等にある).予備検討では実装していませんが,LPFの後段にレベル調整とバッファを配置する予定です.オペアンプは入出力rail-to-railのものを使用します.LPFの遮断周波数を2kHzと高めに設定しているのは,1kHzと400Hzで出力レベルになるべく差を持たせないためです.正弦波データは64倍のオーバーサンプリングとするので,この遮断周波数でも問題ありません.またLPFの5.1kΩは,設計値15kΩに対してDAC出力インピーダンスの10kΩを差し引いた値です.回路はレベル調整用のボリュームや電源端子,出力端子も含めて秋月B基板サイズに余裕を持って収めることができます.実機ではこの他に5Vレギュレータも搭載予定です.

プログラムは,正弦波1周期を128ポイント(64倍オーバーサンプリング)の8bitデータにした配列を無限ループで逐次PORTBに出力する単純なものです.オシロスコープで周期を測定しながら,__delay_us()NOP()で周波数を追い込みました.ソースコードとhexファイルは実機ができた際に公開します.

 

1kHz出力時の波形とLPF出力FFT結果です.波形図の方は,黄色のCH1がDAC出力端子(回路的にはDAC出力ではなく,LPF入力抵抗の15kΩを10kΩ:5.1kΩで分割した点の電圧),青のCH2がLPF出力です.スプリアスは–50dBc以下です.400Hz出力とのレベル差は–0.4dBです.

400Hz出力時の波形とLPF出力FFT結果です.こちらもスプリアスは–50dBc以下になりました.

レベル調整の確認をしたら基板を起こして発注することにしましょう.