あなたの天然記念物
ホーム更新雑談Perl鉄ゲタランドナーコースガイド自転車Linuxリンク経歴連絡先

PWM出力で音声出力 (2013.01.14)

背景

以前、内蔵DAで音声出力してみたところ出力電圧が低い上に、外付けのオペアンプの出力範囲が狭くて更に電圧が下がっちゃいました。 それを踏まえて、ポート直結の圧電ブザーで再生することを考えました。 Googleで検索してみるとPWMという方法で圧電ブザーを制御できそうです。 ※見つけたサイトは単音を出力する物ばかりで、私が1BitDAと混同していました。

1BitDAはCPUパワーを食う

ベクターに、小林隆様がリリースされた、PCのブザーで音声出力できる1BitDAがあります。
1bitDAの詳細情報 : Vector ソフトを探す!
説明文書にある通り割り込みを殺してCPU独走状態で再生しますので、ドライバとして用意してアプリケーションと並行動作は厳しいようです。 付け焼き刃のテストプログラムを実行してみるとなんとか鳴りました。 1BitDAは面白いけれど、予想通りCPU全力運転なのであきらめてPWMで鳴らす事にします。

図解

PWMのチャネル1とGNDで圧電ブザーを鳴らせますけれどイマイチ音量不足。 チャネル2を反転出力するよう設定してチャネル1とチャネル2で圧電ブザーを鳴らしてBTL接続(笑)。 これで電圧が倍に! ※嘘は言ってない。 プログラムの動作はこんな感じに。 ①アプリケーション ②ドライバ ③ペリフェラル ④割込処理 4つの処理が並行動作するので慣れない人は頭を抱えると思います。 雰囲気を掴んでもらえれば十分です、こんな訳の分からない処理なんて使う事はありませんから安心してください。 ドライバについて以前書いたページがありますので合わせ読んで頂ければ理解が深まると思います。
あなたの天然記念物 - 鉄ゲタ - ドライバを製作

今回の鉄ゲタは…

LPCXpressoではなく1BitDAです。 テストプログラムがノイズしか出さなくて頭抱えてたら、出力周波数を思いっきり上げてようやく再生できました。 どういう事かと1BitDAに同梱のソースを見てビックリ。 1ビットずつ出力しているのにバイト境界であっても実行クロック数に変化がないよう工夫されてる。 小林隆様、まぢリスペクトっす! ※リンク先は推定で同姓同名の可能性があります。
小林 隆「デジタルでアナログな共同体」:PC Online
今回はソースなし。 別件で公開する中にドライバとして入りますので将来出てくると思います。