lynxeyedの電音鍵盤

MBDとFPGAと車載で使うデバイスの備忘録

PSoCのPWMを高速化・15bit化しましたよ

  • DACいらずのワンチップ構成

AN2246にはキャリア周波数を低下させないで、2つ(以上)の8bitPWMを連携させ高分解能化させる方法が述べられています。今回はこれを利用しました。外部にDACや分圧用の抵抗等を接続せずに~16bitの分解能PWMを生成し、音声出力としています。
f:id:Lynx-EyED:20100611012426j:image
ブレッドボードは接触不良の原因になるのでこんな感じに組んでみました。

また、利用するデジタルブロックが多いため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系も使えたかな?未確認