2016年1月31日日曜日

PSoC 5LP Prototyping KitでPCM5102Aをサンプリング周波数384kHzで使う。

PSoC CreatorのProject
https://github.com/ryood/I2S_FG/tree/master/PSoC/I2S_FG/PrototypingKit_DDS.cydsn

PSoCのI2SコンポーネントのDATASHEETではClockの設定の項では


となっていて、192kHz/16bitまでしか選択できない様に書いてあるので仕様外かもしれない。

※WSは2ch分なのでtws=32bitsだと1chは16bitになる。

配線

PSoC 5LP Prototyping KitでPCM5102Aを使ってみる。」のブレッドボード図に周波数設定用のロータリーエンコーダをつないだ。

384kHz/24bit

CPU Clockを72MHz、I2Sコンポーネントに入れるクロックを36MHzに設定。
DMAのBUFFER_SIZEを6(byte)に設定。


ch1:SCK ch2:WS
Fsck / Fws = 17.90MHz / 373.1kHz ≒ 48
なので24bitを2ch分送信できているようだ。


ch1:SDO ch2:WS

WSがLとHで同じデータが送られているようだ。


ch1:ROUT ch2:LOUT

だいたい10kHzに設定して出力。

384kHz/32bit

CPU Clockを48MHz、I2Sコンポーネントに入れるクロックを48MHzに設定。
DMAのBUFFER_SIZEを4(byte)に設定。


ch1:SCK ch2:WS
Fsck / Fws = 23.90MHz / 373.7kHz ≒ 64
なので32bitを2ch分送信できているようだ。


ch1:SDO ch2:WS

これもOK

1kHz

ch1:ROUT ch2:LOUT

10kHz

192kHz

I2SのSCKが373.7kHzなので出力周波数がずれているが
1kHz * 373.7kHz / 382kHz ≒ 978.3Hz
10kHz * 373.7kHz / 382kHz ≒ 9.783kHz
192kHz * 373.7kHz / 382kHz ≒ 187.83kHz
なのでだいたいOKだと思う。

I2Sに入力しているクロック

47.81MHz

メモ:

波形テーブルを作るのがめんどくさかったのでとりあえず16bitのデータに下位bitを0で埋めて出力したので実質16bitのデータ。32bitに拡張しつつ予めバイト順を入れ替えておく。

Flashメモリが余っているので波形テーブルの要素数も増やしてみる。

100kHz超えのサイン波を中心に考えて出力にLPFを入れる。←三角波、ノコギリ波は妥協するかLPFをON/OFFできるようにする?

表示用に3.3V駆動のLCDを使いつつノイズにも気をつける。←これもON/OFFできるようにする?

出力レベルの調整はアナログ信号をPOTで減衰させる。←適当な抵抗値を考える。入れる場所をLPFの前段、後段で実験

出力レベルはPSoC内蔵の基準電圧とADCで測定できる?

AVDD-AGNDの電圧を測ると3.10V程度まで低下している。電源には「5V/3.3Vの安定化電源」を使っているのに電圧が低下する原因がわからない。電源からの出力電流は70mA程度。電圧安定度をオシロで見てみる?