【概要】
dsPICが高速動作することを活用した製作例です。 dsPICにパラレルインターフェースの
D/Aコンバータを接続し、プログラムで波形を出力するものです。プログラムで波形を生成
しますから、基本的には任意の波形が出力可能です。
今回の製作例では、下記の4種類の波形を出力できるようにしてみました。
(1) 正弦波
(2) 矩形波
(3) 三角波
(4) ノコギリ波
またパルス出力性能は下記のようになっています。
サンプリング周期 最大400kHz
出力周波数範囲 10Hz 〜 約10kHz
最大分解能 800ステップ(10Hz〜500Hzの範囲)
使用状態は下図のようになります。
液晶表示器に出力周波数と波形の種類
の表示をし、ロータリーエンコーダで周波数
の設定をします。
左下の押しボタンスイッチで波形の種類の
選択をします。
出力は右上のRCAジャック取り出します。
DCレベル出力とACレベル出力となっています。
【全体の構成】
この波形発生ユニットの全体構成は下図のようになっています。
まず使用するdsPICにはモータ制御用の40ピンのものであればどれでも使えます。
周辺には、アナログ入力用のアンプが2系統でAC入力とDC入力用となっています。
パラレルインターフェースのD/Aコンバータ(AD5331)が接続されていて、これに出力バッファ
アンプが2系統接続されています、この出力もAC出力とDC出力の2系統となっています。
このアンプは0Vが正確に出るように、マイナス電源を加えています。この電源生成には
DC/DCコンバータ(TC7662B)を使って+5Vからー5Vを生成しています。
D/Aコンバータ用の電圧リファレンスには4.096Vの電圧標準IC(MCP1541)を使いました。
クロック発振には10MHzのセラミック発振子を使い、内部PLLで最高80MHzまでの動作が
可能です。
液晶表示器が接続できるようにコネクタを用意しています。スイッチにはロータリーエン
コーダとプッシュスイッチが接続されています。
【AD5331の概要】
パラレルインターフェースの高速D/Aコンバータには、アナログデバイス社の
10ビットD/Aコンバータ「AD5331」を使いました。
あいにくパッケージがSOICタイプしかありませんので、変換基板を使ってDIPタイプ
にして使いました。
このAD5331の仕様は下記のようになっています。
項 目 Typ規格 備 考 分解能 10ビット 相対精度 ±0.5ビット オフセットエラー FSRの±0.4% リファレンス入力 0.25〜Vdd 入力インピーダンスは
180kΩ(G=1) 90kΩ(G=2)最小出力電圧
最大出力電圧1mV
Vdd - 1mVレールツーレール特性 DC出力インピーダンス 0.5Ω 電源電圧 2.5V 〜 5.5V 消費電流 115 〜 250μA 低電力モードでは
0.08〜1μA動作速度
出力セトリングタイム
スルーレート
出力周波数帯域
7μsec
0.7V/μsec
200kHz全高調波歪 -70dB 10kHzにて ディジタルインターフェース パラレル接続 CSとWRによる書き込み
LDACによる出力WR、LDAC最小パルス幅 20nsec
【インターフェース仕様】
AD5331の内部ブロックは下図のようになっていて、10ビットパラレルのディジタル
インターフェースとなっています。
またGAINピンで出力バッファのゲインを1倍と2倍に設定ができます。
このディジタルインターフェースの各ピンは下記のような機能となっています。
これで、まずCSをLowにしてチップ選択し、10ビットのデータをDB0〜DB9に出力
してから、WRをLowにして内部Input Registerにラッチさせます。
その後で、LDACをLowにするとInput RegisterからDAC Registerに移ってアナログ
出力されることになります。
AD5331のピン配置は下図のようになっています。
BUFピンでリファレンスのバッファをするかしないかを
指定します。
GAINピンで出力バッファのゲインを指定します。
CLRピンはリセットです。
PDは省電力モードの制御ピンです。
【周波数の設定方法と波形データの生成】
周波数の設定にはロータリーエンコーダでアップダウンさせますが、1Hzごとの設定
ではわずらわしいので、1kHzを境にして、1kHz以下は10Hz単位でアップダウンし、
1kHz以上は100Hz単位でアップダウンさせることにしました。
また、波形の生成そのものは、正弦波の場合にはSIN関数を使って生成しますが、
リアルタイムでSIN関数を実行していると高い周波数では間に合いませんので、
ロータリーエンコーダで設定変更される都度、SIN関数で800分解能で計算し
データテーブルを作成します。
実際の波形出力はこのテーブルデータを順番に取り出してはD/Aコンバータに
出力するだけとしています。
他の波形の場合は、一次式しかありませんのでリアルタイムで演算して波形を生成
します。
【回路構成と外観】
上記の構成で作成した回路図が下図となります。
入力アンプのAC入力側にはオフセット調整ができるようにして0Vの位置が調整
できるようにしておきます。RS232Cの接続には、変換ICとDSUNコネクタが大きいので
外付けとし、コネクタだけ用意しておきます。
電源には3端子レギュレータを使いますが、高精度のアナログ回路なので、多めの
パスコンを配置してノイズ対策をしておきます。
ICSP用のピンはD/Aコンバータと共用になりますので、ICD2のデバッグは難しくなり
ますので、プログラマとしてのみ使うこととします。
DC/DCコンバータは無調整なので特に問題なく使えます。
出力アンプは2系統とし、片方はコンデンサを通して交流出力とし、出力電圧が調整
できるように可変抵抗を付けておきます。
D/Aコンバータ用のリファレンス電圧には、マイクロチップ社の基準電圧ICを使いました。
無調整なので便利に使えます
できあがったユニットの外観です。
基板の外観です。
中央左がdsPIC30F4011で、その右側にあるのが
D/Aコンバータです。さらにその右側が出力アンプ
です。左下部が電源ですがパターン側に実装しています。
電源には、1Aタイプの3端子レギュレータを使いますが、
結構発熱しますのでパターンを放熱代わりとして使います。。
右上が3端子レギュレータ
右下側にDC/DCコンバータ用のチップ型
コンデンサが直づけされています。
これをケースに実装した全体外観が下図となります。
基板とパネル部品との接続はすべてコネクタ
接続としました。
【プログラム】
【出力結果】
実際にできあがった波形ジェネレータの出力を見てみます。
(1) 100Hzの正弦波とFFT
きれいな波形でスペクトラムも55dB以上はありますからまったく問題ない波形です。
(2) 1kHzの正弦波とFFT
これもきれいな正弦波です。
(3) 10kHzの正弦波とFFT
スペクトラムがやや悪化していますが、まだ実用レベルでしょう。
(4) 20kHzの正弦波とFFT
この辺りが実用限界の周波数かと思われます。スペクトラムで40dB程度です。
(5) 10Hzの正弦波
きれいな正弦波です。