PWM SIMPLE DAC ON KURUMI

Pocket

Jpeg
RL78/G13のPWM出力で、圧電スピーカから音を出してみましたが単音で寂しいので和音が出せないか考えました。DACを使えばできそうですが、DACがないので音信号をオーバーサンプリングして、PWMで簡易DACでPIEZO SPEAKERを鳴らす方法をやってみました。
DACの分解能は、大きくするとPWMの周期が伸びてしまうし、8bitより多くほしかったので9bit(512)としました。PWM周期TDR00に511を設定しました。
音は、正弦波とするため、EXCELでサインのテーブルを作成します。テーブルの配列長を決める必要があります。多い方が良いのですが、メモリを使うので今回は、3度間隔の120個としました。
PWMの周期(512)が終わるごとに割り込みを入れてTDR01の値を変えていきます。120個のテーブルを1周する時間がその時の音の高さになります。 32MHzの時は、PWM周期が32MHz/512になるので62500Hzになります。440HzのAの音の場合、62500/440=142となります。
142回で120個のテーブルを1周回すことになります。
テーブルのインデックスは、i=(PWM周期カウンタ%142)*120/142で算出しました。
音階を固定した音は、32MHzクロックで動かすことができましたが、割り込みに音階処理を入れると処理がPWM周期内に終わらず、不具合を起こすので、16MHzクロックに変更しました。C-D-E-F-G-A-Bと1秒ごとに音階を刻むことができました。しかし、音が小さいです。耳を近づけないと聞こえません。
次は、和音に挑戦です。3度上の音を足し合わせます。CとEのDAC値を足し合わせてPWMのTDR01に設定てします。ただ、そのまま足すとDACの上限512を超えてしまう時があるので、元のSIN信号のテーブルを半分の256振幅に変えました。
ここでまた、処理時間の問題が発生しました。信号が2つになったのでテーブルの検索が2倍になったので仕方ないのですが・・・。PWMのクロックを8MHzクロックにしました。
単音の振幅を半分にしたので更に音が小さくなり、正直、音階が上がっていくのはわかりますが、和音かどうか微妙です。PIEZO SKEAKERの前にCRでLPFを入れてみましたが、影響はわかりませんでした。音が小さすぎるのでこの試みは終了とします。

Post Tagged with , ,

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください