- DACいらずのワンチップ構成
AN2246にはキャリア周波数を低下させないで、2つ(以上)の8bitPWMを連携させ高分解能化させる方法が述べられています。今回はこれを利用しました。外部にDACや分圧用の抵抗等を接続せずに~16bitの分解能PWMを生成し、音声出力としています。
ブレッドボードは接触不良の原因になるのでこんな感じに組んでみました。
また、利用するデジタルブロックが多いためPSoC1では29x66を利用するしか方法がありません。*1
原理はAN2246に記述されていますし、DSPに搭載されているHRPWMも同様の原理で動いている場合が多いです。
- 前回との変更点
- 使用ブロック数の増大によりCY8C29466を採用。
- 前回までAN2199を参照し、PWMをSCブロックでアナログ出力していましたが、今回はスイッチトキャパシタのノイズ減衰シミュレーションが上手く行かず採用を見送りました。(リンギングが強くシミュレーションできなかった)
- そこでPGAでパルスの振幅を減衰させ、帯域幅を狭める事により試聴に耐えうるSN比にしました。アンプに接続する場合はLPFが必要になる事もあります。また、CTブロックへRefMuxユーザモジュールを配置し、AGNDを出力させることにより外部のOP-ampを利用する際のアナログGNDに利用できます。各自工夫してください。
- 機能の増加によりmain.cがカオス化していたので機能ごとにプログラムを分離しました。
- ダウンロード
ソースコード、エンコーダを同梱しております。
http://sourceforge.jp/frs/index.php?group_id=4509
- 転載など
AN2246をそのまま使っているようなものなので、個人のリスクで、どうぞご自由にご利用ください。不利益、損害に一切責任は持ちません。転載に関してはSorceForgeのページかこのブログにリンクしてください。
- 現状で知られている不具合
- SD内に16以上のファイルがあると暴走する
- DPCMデータの予期せぬオーバフローが稀に起こる(エンコーダ側での対策が必要)
- ついでに言ってみた
音源のサンプリング周波数は14kHzまでです。更新周期をPWM8_3で制御してるので、PWM周期を増減させて各自工夫してください。
ま、そんな感じでてきとーに作ってみました。
*1:28xxx系も使えたかな?未確認