Github:
https://github.com/ryood/I2S_FG
PSoC 5LPを24.576MHzの水晶を使って98.304MHz駆動
I2Sのクロックを384kHzにするためにPSoCの駆動クロックを98.304MHzにした。コアの温度が心配なのでなんちゃって放熱器をつけた。DieTempコンポーネントでダイの温度を測れるようにもした。室温20度で10分経過後32℃だったので放熱器の効果は多少はありそうだ。(放熱器なしの場合は35℃だった)
参考:「PSoC 5LPを98.304MHz駆動する」
UIを改良
通常モードでロータリーエンコーダを回転すると周波数の上位2桁を増減できるようにした。周波数変更はほとんどの場合ロータリーエンコーダで設定できると思う。
キーパッドで1Hz単位で入力可能。
ノコギリ波を出力
とりあえず上昇型のノコギリ波を出力できるようにした。DDSなのでノコギリ波の下降波形や三角波、矩形波もテーブルを作れば出力できるがめんどくさいので保留(^q^;
ノコギリ波はLPFをかけると波形がなまるので状況に応じてDACの出力をそのままや本体に入れている1次LPF使う。
PSoC 5LPのFlashメモリが256kBなので5波形入れるつもりでテーブルサイズは32768から8192に変更。テーブルサイズが波形に与える影響は気が向いたら調べるつもり。
出力波形
作成した4次バターワースLPFを掛けて波形を見てみた。
使用したOPAMPはNJM4580(GBW=15MHz)
10kHzサイン波を出力してLPFありとなしを比較。
ch1:LPFあり ch2:LPFなし
DAC出力のガタガタはほぼ取れてだいぶ綺麗になった。
「スマホのファンクションジェネレータの波形」とほぼ同じ条件で波形を見てみた。
10kHzサイン波
20kHzサイン波
波形の崩れはほとんどなさそうだが、若干線が太いのでまだノイズが乗ってそうだ。
10kHz サイン波 FFT(10kHz/div) 可聴帯域付近
2次、3次の高調波歪はほとんどなさそうだが、25kHz、50kHz、75kHzあたりに歪(?)のピークがある。原因不明(@@:
10kHz サイン波 FFT(2.5MHz/div) 高周波数帯域
24MHz付近にノイズが乗っている(おそらくPSoCの駆動クロックのノイズ)。
2.5MHzあたりにもノイズ(原因不明)。
20kHz サイン波 FFT(10kHz/div) 可聴帯域付近
やはり25kHz、50kHz、75kHzあたりにピークがある。基本波の周波数に無関係なので歪ではなくて何らかのノイズだと思う。
20kHz サイン波 FFT(2.5MHz/div) 高周波数帯域
10kHzの時と同様、2.5MHzと24MHz付近にノイズ。
192kHz
192kHzまで出力できる。ピッタリハマれば綺麗な正弦波を出力できる。
150kHz
ただし192kHzの整数分の1ではない周波数では波形ごとにサンプリング・ポイントがずれるため、波形が崩れる。
48kHz
ch1:フィルターあり ch2:フィルターなし
48kHzは192kHzの1/4だがフィルターを通しても波形に歪が残っている。
思ったこと
クロックノイズがアナログ回路に乗らないような工夫が必要だが基板の製造方法を含めたノイズ対策を検討する必要がありそう。
高周波数のノイズを遮断するためには別に専用のLPFフィルターを入れるとか、あまり周波数帯域の広くないオペアンプを通してみるとか何か方法があるかもしれない。
今まで全く手をつけてこなかったがRadio Frequencyの世界にも少し手を出してみたほうがいいかもしれない(@@;
単純なDDSの波形生成ではサンプリングレートに近くなると(周期性を持った)波形の崩れが目立つようになる。単波形の歪はキレの良いフィルターを通せばなんとかなるかもしれないが、波形の崩れの周期性はどうすればいいかよくわからない。PCのWaveGeneやiPadのFunction Generatorではナイキスト周波数付近までちゃんとした正弦波が出ているので何か方法はあると思うがよくわからない。
もしかしてマシンパワーにものを言わせてリアルタイムで波形生成していたりするのかなあ?リアルタイム生成なら周期性は出ないと思う。Intel Coreや、おなじARMでもCortex-Aなら(特にGHzクラスで動作するFPUが載っていたら)現実的な範囲なのかも。
高周波数のノイズはまだ残っているが、操作性はWaveGeneやiPadより良いので現状でしばらく使ってみるつもりだ。
0 件のコメント:
コメントを投稿