&size(24){&color(darkgreen){''波形発生器''};}; //#navi ~''CONTENTS'' #contents ---- ~''REFERENCES'' -http://www.niigata-power.com/indexj.html ---- **概略仕様 [#q7208feb] -ネクストプランニング(025-256-5868渋谷)の引き合い -20Vpp(-10Vp〜10Vp, 0〜20kHzの正弦波を発生させる。 -電源はDC24V -7セグ5桁とテンキー12個くらい -ひずみ率は1%以下 -周波数設定は0.005%以下 (20000Hzと20001Hzとが区別可能なこと) **主要部品 [#zda8ff29] |~ITEM|~MANI.|~PARTS|~UNIT|~QTY|~REMARK| |CPU|AKIZUKI|AKI-H8|3,800|1|| |BOARD|OLIMEX|DDS|7,000|3|| |SW|ALPUS|SKECAF|90|12|336-7788(5)| |SW-TOP|ALPUS|SK2AA00180|150|12|441-8124(5)| |PS|COSEL|ZUW1R52415|1,330|1|464-3522(1)| |7SEG|Agilent|HDSP-F151|410|5|赤色| |SCF|LT|LTC1062CN8|1,200|1|| |RAM|Cypress|CY62128-70SC|390|1|| |OP|NS|LM358N|75|1|| **キーボードの選定 [#zdd32d98] -DMC社製PCMK-DTK-12, ミスミ扱い, 1,700円 -In2Tec製4234A1, RS扱い, 3,400円 -いずれも自由度が低いし高価なので、普通のSWにすることを検討。 -7セグと高さを合わせるなら、13mm **7セグの選定 [#y63293bd] -10mmのものだと、厚みが13mmくらい **ケースへの取り付け [#ged97530] #ref(casing.jpg) **システム設計 [#u9d519e4] ***I/O本数について [#j061e845] ***D/A変換速度について [#m3b4395a] -変換時間最大10us(負荷容量20pF時) -最大周波数が20kHzだから、周期は50us。 -最大周波数付近では3角波になる ***周波数の可変範囲と分解能 [#j1db1297] -ITUでDMAを起動してメモリ内のデータをDACに送る -ITUのクロックは、内部クロックの1/1=62.5usから1/8=0.5us。 -DACの最大変換速度の10usを出すには、ITUを1/1クロックでカウントして、カウント値は160に設定。 -DACの分解能は8ビット。 -DMA転送するデータ長を4, 8, 16, 32, 64, 128, 512, 1024バイトとして、DACの最大変換速度で変換すると |~データ長|~周期|~最高周波数|~最低周波数|~0.5%分解能の下限(カウンタ値200以上)|~ひずみ率| |4|40us|25kHz|61.035Hz|20kHz|42.87%| |8|80us|12.5kHz|30.518Hz|10kHz|14.78%| |16|160us|6.25kHz|15.259Hz|5kHz|1.113%| |32|320us|3.152kHz|7.629Hz|2.5kHz|0.8113%| |64|640us|1.5625kHz|3.815Hz|1.25kHz|0.7531%| |128|1280us|781.25Hz|1.907Hz|625Hz|0.7531%| |256|2560us|390.6251Hz|0.9537Hz|312.6Hz|0.1413%| |512|5120us|195.3125Hz|0.4768Hz|156.25Hz|| |1024|10240us|97.65625Hz|0.2384Hz|78.125Hz|| -設定例 --10Hzに設定するには --データ長1024を使う --10Hzの周期=100msを1024で割ると、97.656us。 --ITUで97.656usを設定するには、1/1クロックで、カウンタ値は1562とする。 --カウンタ値を1563とすると、ITU起動は97.625usになる。 --97.625usで1024バイトをDMA転送すると、99.968msの周期になる。 --周期99.968msは、10.003Hzになるので、10Hz, 11Hz, 12Hzも設定可能といえる。 --20kHzに設定するには --データ長4を使う --20kHzの周期=50usを4で割ると、12.5us。 --ITUで12.5usを設定するには、1/1クロックで、カウンタ値は200となる。 --カウンタ値を201とすると、ITU起動は12.5625usになる。 --12.5625usで4バイトをDMA転送すると、50.25usの周期になる。 --周期50.25usは、19900Hzなので、周波数の設定間隔は100Hz程度になる。 -ひずみ率のシミュレーション --データ長8の場合 #ref(wav-sim.JPG) --データ長128の場合 #ref(wav-sim2.JPG) **システム設計2 [#n71bab24] -矩形波発生回路と遮断周波数可変LPF(SCF:Switched Capaciter Filter)とで構成 ***SCFの選定 [#e778cf41] -UAF42AP --BB, DIP14, 6-18V, 0-100MHz, 311-580, 1, 4200 -LTC1062CN8 --LT, DIP8, 3-18V, 0-20MHz, 633-880, 1, 1200 ***ひずみ率 [#hd389359] -LTC1062とすると、-30dB/Octなので、ひずみ率3% -シミュレーション --シミュレーション用に設計した、5次バタワースフィルタの特性 #ref(sp-scf.JPG) --矩形波を入れたときの波形 #ref(wv-scf.JPG) ***矩形波の分解能 [#lb0be3dc] -システムクロック16MHz(T=62.5ns)をITUで分周する。 |~クロック分周比|~最大周波数|~最小周波数|~20kHz分解能| |1|8MHz|122Hz|| |2|8MHz|61Hz|| |4|8MHz|30.5Hz|| |8|8MHz|15.3Hz|| -ITUのカウンタ値20000のとき20kHzになるようにして、ITUをカスケードで接続する。 --2段目のクロックが1.25nsになり、800MHzになる。→不可能 -現実的な周波数分解能 --20kHz発振時のカウンタ値は、1/2周期ずつカウントするので25us。 --もっとも細かくカウントするには、システムクロックの周期0.0625usでカウントする。 --このときのカウント値は、25/0.0625 = 400 --ここで、カウント値399のときの発振周波数を求める。 --1/2周期は、399*0.0625 = 24.9375なので、周波数は20050Hzになる。 --すなわち、発振周波数20kHz付近では、50Hz単位の設定となる。 -PLDを外付けにした場合 --クロックは80MHzが楽 --クロックの周期が0.0125usになるので、20kHz時のカウント値は4000になる。 --ここで、カウント値3999のときの発振周波数を求めると、20005Hz。 --すなわち、発振周波数20kHz付近では、5Hz単位の設定となる。 **システム設計3 [#e530ed11] -%%44kHzあたりでDACに正弦波データを送り続ける。%%→88.2kHzは必要 -後段にはSCFを入れる ***サンプリング周波数 [#l1e69dd1] -ITUで作れる44kHzあたり -システムクロックは16MHz。すなわち62.5ns。 -44kHzは周期で22.727us。 -ITUのカウントとしては22.727 / 0.0625 = 363.632 -ITUのカウンタに363を設定すると。 -周期は363 * 0.0625 = 22.6875。すなわち44.0771kHzになる。 ***メモリ長 [#c9638c48] -44kHzで1Hzを出すには。1/(1/44000) = 44000バイト必要。 -20000Hzと20001Hzとの差を出すためには? #mimetex(6$, \sin{(2\pi f_1 t)}-\sin{(2\pi f_2 t)} \ge \frac{1}{256}) -これをtで解けば良いんだけど。どうするんだろう? -周期で行くか? -20000Hzと20001Hzとの差を出すためには? -DACのサンプリング周波数を88.2kHzとすると #mimetex(6$, \frac{1}{20000}N-\frac{1}{20001}N \ge \frac{1}{88200}) -Nについて解くと #mimetex(6$, N \ge 4535.37) -すなわち、4536個以上のデータを送ると、1サンプル以上の差が出る。 -従って、DACのサンプリング周波数が88.2kHzの場合は、1200h以上のデータ長が必要となる。 -最初と最後の連続性を保つデータの生成方法 ++波形データをcos波にする ++1200h相当分作成する ++後ろから最大値を求め、データの最後とする。 ***ひずみ率 [#a6566725] -20kHz時のシミュレーション -DACレート88.2kHz、LPF30kHzでシミュレーション -上から正弦波、DAC出力波形、出力波形、DAC出力トリガ -出力のひずみ率は0.428% #ref(sim-sys3.JPG) -1kHz時のシミュレーション -出力のひずみ率は0.00002544% #ref(sim-sys3-1k.JPG) **システム設計4 [#s4d092b1] -DDSは1Hzステップの設定が可能だった。 -http://akizukidenshi.com/catalog/items2.php?q=DDS&s=score&p=1&r=1&page=#K-00059 -出力を20VppにするアンプがあればOK -DDSとPIC16F84Aを組み合わせて、シリアルで周波数を設定するようにする。 -キーボード側はどうしよう?キットも利用可能?ダイアルで設定するようになる