3端子レギュレーターの復讐
XC6202でビート音が出る(2/1/10)
関西に用事があって3日ほど家を空けていた。前にも書いたが、完全な電子工作依存症にかかっていて、帰宅すると取るものもとりあえず、PCルームにこもる。ブレッドボードと沢山の電子部品、工具に囲まれると不思議に気分が落ち着いてしまう。困ったものだ。
SDカードを使ったリニアPCMプレーヤーの第三版(3号機)は、出かける直前に1台目が完成している。早速2台目の製作にかかる。ハンダ付けだけなので作業が早い。ほどなく実装が終了した。ケースを作るのを待ちきれず、1台目のケースを使ってテストする。
SDカードを入れて試聴する。何事もなく音が出た。おやあ、無音時にビートが入る。ブレッドボード上のプレーヤーでたまに発生するクォーン(600hzくらいか)という連続音である。大きい音で聞いているときは気にならないが、音が小さくなるとはっきり聞こえる。
しかも始動時にSDカードをアクセスするとき、小さな「キュルキュル」というデジタルノイズまで音になって聞こえる。これはまずい。売り物ではないが(差し上げた方は気を遣って部品代を下さった)、これでは、人さまに差し上げるわけにはいかない。
あわててトラブルシューティングを開始した。1台目と変えたところは、秋月で最近売り出した3.3V用の3端子レギュレーター(XC6202)だけである。原因は、これしか考えられない。これまでのTA48M33Fの半額なので量産用に買い込んだ。
プレーヤーの消費電流は、50mA程度のはずである。電源が不安定になってオペアンプあたりが発振(微量の)しているのだろうか。しかし、このXC6202 は、150mAまで出力できるはずで、この程度で電源が不安定になるのは理解できない。
念のため、もういちどプレーヤーの消費電流を測る。なんと前のパラレルLCDよりさらに少ない35mAしか流れていない。ミニLCDは、通常のLCDより消費電流が少なく、インターフェースもI2Cなので電流が流れないのだろう。
レギュレーターが悪いとは思えないので、原因究明のため、ブレッドボード上のプレーヤーに、XC6202を持ち込んだ。うはあ、この新しい3端子レギュレーターXC6202は、ブレッドボード上でも、はっきりしたビート音が出る。
そういえば、ブレッドボードではテストしていない。前のレギュレーターTA48M33Fに戻す。ビート音は消えた。TA48M33Fは、ブレッドボードでは、電池容量が少なくなったり、配線の具合でたまに出ることがあるが、この時は完全に消えている。
XC6202の最大出力電流は、150mAである。余裕のはずである。しかし現実には500mAまで出力できるこれまでのTA48M33Fでは発生せず、XC6202ではビート音が出る。
原因はともかく実機のレギュレーターを前のものに戻すことにする。DIP部品は、例のサンハヤトの特殊ハンダでも取り外しは難しい。ピンを殆ど失う形でやっとのことで取り外し、元のTA48M33Fに換装する。祈る気持ちで電源を入れる。これでビート音が出たら最悪の事態だ。
ああ、良かった。完全にビート音は消えた。勿論、SDカードのアクセス音もしない。胸を撫で下ろす。やれやれ。これまでの半額だと言うので喜び勇んで買った3端子レギュレーターXC6202は無駄になったけれど、とりあえずは現状復帰した。
どうも、がた老AVR研究所は、3端子レギュレーターと相性が悪い。研究所の最初の犠牲者は、入力と出力を間違えられて淡い煙とともに往生したレギュレーターだったし、半田ごての熱で始めて壊した半導体も7805だった。今度も10ヶ近く買った3.3V用のレギュレーターが無駄になりそうな気配である。これまでの復讐をされているのかもしれない。
PWMの分解能(2/3/10)
レギュレーター騒ぎが一段落して、関西に行く前に書き込んだChaNさんの掲示板を覗いて見て驚いた。私の留守の間に、当研究所のリニアPCMプレーヤーのことがいくつか話題になっていて、なかにはMega328のフューズビットの問い合わせまで入っている。
その後、ご本人は当ブログに書いたあった設定を見つけられたようだが、今度はこの設定では危ないというコメントが入っている。実はこの問題のHighバイトのビット5(SPIEN SPI動作許可/不許可)は、AVRSPやAVRISPのようなシリアルライターでフューズビットを書いている限り、ここに1を書いても0を書いても関係ない。
データシートには、このビットは、シリアルプログラミングでは設定できないと明記してあり(パラレルで書くときしか設定できない)、AVRSPではどちらになっているか表示もされない。
掲示板にすぐコメントを上げようと思ったが、少し考えて止めた。というのは、問題は既に解決し、日も経っていることもあるが、以前の掲示板に余計なコメントを上げてしまったという反省があったからである。
当研究所のブログは、どこのサイトから飛んできたかが記録されていて見ることが出来る。先日見るともなく、それを見ていたらChaNさんの掲示板からのアクセスが目立ったので、久しぶりに覗いてみた。そのときのことである。
ChaNさんが最近公開した8ピンAVRのSDカードプレーヤーの音質に関して、当ブログのリニアPCMのことが引き合いに出されていた。ChaNさんのわずか8ピンのAVRプレーヤーの音質向上について、よせばいいのに議論に加わり「止めた方が良い」みたいなコメントを出してしまったのだ。
コメントを出した後、すぐ後悔する。趣味でやっている電子工作に、投資対効果も無駄もそもそも有り得ない。自分のやりたいことをやるのが趣味なのだから、こういう価値基準こそ意味がない。
私の場合は、一種の職業病である。この前も書いたが、目的と手段を混同することを異常に恐れる。常に自分が何をやりたいか(目的)を確認しながら、作業(手段)をしていないと落ち着かない。趣味の電子工作でも、この癖が抜け切れない。
何かプロジェクトを起こす時は、必ず目的を決める。その目的に向かって何が必要かを考え、その解決策をあれこれ考える。8ピンAVRのプレーヤーを作った人が、「もっと良い音を聞きたい」と悩んでいるなら、ついMP3デコーダーチップを使うことを勧めてしまう。
ChaNさんのプレーヤーの真髄は、あの8ピンのAVRだけでSDカードを読み、8ビットながらステレオで音を出してしまうところにある。LPFも何もついていないのでそれなりの注意は必要だが配線が極めて簡単なので、初心者にもとっつきやすい。
最近、公開された版では、何とモノーラルながら16ビットPCMを再生してしまう。配線図を見たら、5~10KΩの抵抗でゲインを落とし、上位バイトの1/256の下位データを追加している。ま、固いことを言えばきりがない。半固定抵抗かなにかにして音を聞きながら、適当に調整すれば、というところだろう。いや参った。この遊び感覚はプロ中のプロにして始めて出来る技である。
それにしても、いったいPWMの分解能と本来の忠実度とはどういう関係にあるのだろうか。サンプリング周波数が44.1khzだとしてリニアPCMのような16ビット分のPWMをだすためには、22.7μs(44.1khzのサンプリング期間)のあいだに65535段階(16ビット)のパルス幅を制御する必要があり、このとき必要なクロックは3Ghzに達する。そんな馬鹿なことはどこでもしていない。
8ビットPWMだけでデジタル的に分解能を8ビット以上にあげる方法は、ウェブではここのサイトが実験しているが、16ビットを謳うPWMの実装例は見つけられない。このあたりを分かり易く解説してくれるサイトも見つけることが出来ない。
そもそもリニアPCMのサンプリング値自体が量子化ノイズを含んでおり、サンプリング周波数近くになってくると、たとえ16ビットで精密な値を得たとしても、元の波形が復元できるわけではない。何をもって分解能とするか、リニアPCMのサンプリング値ではなく、原波形に戻って解析する必要がある。とすると、やはり時間軸ではなく、周波数軸(正弦波の集合)から分解能を考える必要があるようだ。
やはり、昔勉強した周波数軸からのサンプリング理論を理解しないと、最近のDA変換のしくみは理解できない。直感では無理である。1ビットDACなどの内部はリニアPCMの入力を盛大なオーバーサンプリングで一旦波形を滑らかにしたあとPDMのパルス列にしているはずだ。いやこれも時間軸からの見方だな。勉強することがまた増えてしまった。
(TDMの実装は、ここのサイトが詳細でわかりやすい)
アナログとデジタルの電源分離で解決したが(2/4/10)
リニアPCMプレーヤーのビートの問題は、元の3端子レギュレーターTA48M33Fに戻して事なきを得た。しかし、本来の問題が解決したわけではない。出力電流が150mAあるというので採用したXC6202だったが、30mA程度の出力で電源レギュレーションか何かの原因でオペアンプあたりを発振させてしまった。
しかし、プレーヤー量産に備えて沢山買ってある。こいつだけが悪いわけではない。前のTA48M33Fもブレッドボードで、たまにビートがでることもある。謎である。真の原因を探るため、色々実験してみた。
まず、オペアンプの発振を疑って、ボルテージフォロワーを普通の1.5倍程度の反転増幅器に変えて見たり、出力にコンデンサー(0.1μF)と抵抗(20オーム)の直列で構成される発振止めのZobelフィルターを入れてみる。全く変化なし。うーむ、発振ではないのか。
次はレギュレーターだ。レギュレーターの両側のコンデンサーを色々かえて試してみる。データシートの指定では、このXC6202は両側に1μFをつけろとある。これを100μFにする。指定外の方がビート音は少し小さくなった。電解コンデンサーや積層セラミック、タンタルと種類も換えてみる。これは全く変化がない。
今度は、電源からのノイズ混入を疑って22μHのインダクターと100μFのコンデンサーでデカップリング回路を作りオペアンプやDACの電源に入れる。これも関係がなかった。
本来は、デジタルの電源と、アナログの電源は独立させるべきである。ここで以前、FPGA基板を動かす時に買った可変出力の3端子レギュレーターLM317を思い出した。こいつは確か2Vくらいからの定電圧を作ることが出来る。しかも1.5Aまで出力を取り出せる。
アナログ電源を供給する電源のリファレンスとしては申し分がない。早速、部品箱からとりだしブレッドボードで3.3Vを出す回路を組み上げる。分圧抵抗を2kと、3.7kにする。オペアンプの電源を、この余裕たっぷりのLM317から供給した。これでオペアンプは発振しようがないはずだ。
ありゃりゃあ、ビート音が消えない。これはどうしたことだ。デジタル部はXC6202である。電源レギュレーションによるオペアンプの発振(微量の)という仮説はもろくも崩れた。それならというので、LM317で全体の電源を供給する。
驚いたことに、かすかなビートが残るのだ。TA48M33Fでは全く聞き取れなかったビートが明らかにしている。XC6202が容量不足だと言っていたが、何のことはない1.5Aを供給できるレギュレーターでもビートが発生した。
わけがわからなくなってきた。デジタル部からのノイズが廻っているのだ。これはレギュレーターの容量不足ではない。しかしレギュレーターによって出たり出なかったりする。万策尽きて投げ出そうと思った時、ふと気がついた。DACの電源である。考えてみたら、DACは立派なアナログディバイスである。オペアンプだけでなく、ここも電源を独立させなければ意味がない。
DACのBU9480Fだけを独立した電源LM317から供給する。おおお、これだ。ビートはぴたりと止まった。今度は、逆にXC6202でオペアンプとDACの電源を供給する。これも全くビート音はしない。デジタル部のノイズがDACのアナログ基準電源にまわってビートが出ていることに間違いないようだ。
しかし、何故、XC6202や、LM317で共通に電源供給するとビートが発生し、TA48M33だと共通にしてもビートが消えるのかがわからない。謎が残る。どなたか解明できる方はおられるだろうか。
| 固定リンク
「AVR」カテゴリの記事
- ソフトI2Cはクロックストレッチまで手を出してあえなく沈没(2017.09.02)
- オシロのテストどころかソフト開発で大はまり(2017.07.26)
- 超音波方式の人感センサーI2C化と新しいオシロ(2017.06.29)
- motionの動体検知はRaspi3の電源が安定しない(2017.04.16)
- 赤外線学習リモコンはデータ再現で挫折したまま進まず(2016.07.21)
「電子工作」カテゴリの記事
- 生存証明2(2022.10.19)
- 生存証明(2022.01.23)
- パソコン連動テーブルタップの修理を諦めて自作(2021.02.16)
- 半年ぶりのブログ更新に漕ぎつけた(2019.09.19)
- 研究所活動は停滞したままでCCDカメラ顕微鏡導入など(2019.02.08)
コメント
がた老さんどうも。
バージョンアップが無いのはちょっと残念です。
自分の分は勿論治しておりますので(笑;)。
数行追加+パッチ数箇所です。
勿論、公開も可能です。
でもあくまで対処療法です(汗;)。
投稿: shuji009@愛読者 | 2010年3月 1日 (月) 20時07分
shuji009@愛読者さん、情報ありがとうございました。
>そんな訳で"fmt "は、後ろにおいやられておりました。
すみません。このあたりは手抜きで、fmtチャンクを無視して(WAVEヘッダーの直後に必ずあるとみなす)、いきなりデータを取りにいっています(dataチャンクだけはまじめに探している)。LISTというのはWAVEフォーマットのオプションチャンクのようです。必須とされるfmtチャンクの前に来るとは思っていませんでした。
>次回のバージョンアップでは考慮お願いします。
申し訳ありませんが、今のところバージョンアップの予定はありません。ソースがありますのでご自分でお直しになってはいかがですか。それがオープンソースです。
投稿: がた老 | 2010年3月 1日 (月) 19時09分
今朝、気がついたのですが、windows純正の
メディアプレーヤv11.0.5721.5268(OS Windows XP)で
wav変換したもので試験したら、
NO SUPPORT RATEとの表示がでたので、該当のwav
ファイルのプロパティを見たら・・・問題無し・・・
なんで?と思ってバイナリエディタでみたら、
"fmt "の部分に"LIST"なんて文字が入っていました。
どうもIDタグのような情報を持っているようになって
いました。
そんな訳で"fmt "は、後ろにおいやられておりました。
取りあえず、対処療法的にソース変更しましたが、
次回のバージョンアップでは考慮お願いします。
CD2WAV(32)で変換なら勿論問題はありませんが。
尚、LISTチャンクのサイズは固定ではありません。
PS
(ハンドル名替えました)
投稿: shuji009@愛読者 | 2010年3月 1日 (月) 11時01分
マルチプロセッサ方式による、赤外線リモコン入力・・・
週末予定でしたが、ちょっと試してみたら、意外に
あっさりと動いてくれました。
サブプロセッサ(結局手持ちと容量の関係でMega168pを
使用しました)の出力をスイッチ1~3にパラレルに
入れる方式にしましたので、メイン(644P)のプログラム
には手を入れずに、動作させています。
サブではボタンのエミュレータをやっている訳ですが、
ボタンでは操作の難しかった連続演奏が簡単にできる
ようになりました(1曲の演奏と連続演奏は別のボタンに割り当てています)。
赤外線リモコン特有の操作性の悪さがまだ残っています
が、調整とソフトウェアの改良でなんとかなりそうです。
投稿: 愛読者 | 2010年2月21日 (日) 17時19分
すんさん掲示板にも書いていますが、私は
据え置きタイプを作ろうと思っています。
ものぐさなので、赤外線リモコンでも操作しようと
悪戦苦闘中ですが、そら。さんからのアドバイスも
ありまして、マルチ・ディスプレイの次は、
マルチ・プロセッサ方式で実現する予定です。
アイデアはまとまりましたので、後はハードと
ソフトの実装だけです。でもがた老さんが書かれて
おられたように、操作系なのでちゃんとした仕様を
書いてから作成しようと思っています。
来週末までには報告できると思います。
投稿: 愛読者 | 2010年2月20日 (土) 14時02分
愛読者さん ご報告ありがとうございました。
>以下の掲示板に書いておきます
おや、すんさんの掲示板ですか。ここのサイトもお世話になりました。やあ、馴染みのみなさんが沢山登場しておられますね。話題にしていただいてありがとうございます。
こちらは、今オペアンプを交換してうまくいかず悩んでいます。ボルテージフォロワーなんてピンコンパチだと思っていたらそうじゃないんですね。いずれ本記で。
投稿: がた老 | 2010年2月18日 (木) 18時18分
昨日作ったものは、ポートをあまり考えていませんでし
ので、整理をして、連続した空きポートを作り、カラー
液晶(TFT)と2MBytesのFlashROM(漢字フォント入り)を付け
ました。
FlashROMは、まだ試験していませんが、TFTの試験は、
簡単にしました。
以下の掲示板に書いておきます。
http://www.style-21.jp/board/form9.cgi?action=res&resno=15719&id=ekousaku&rno=15719#15719
時間の遅れ等はありませんでしたが、音質への影響は
わかりません。
投稿: 愛読者 | 2010年2月18日 (木) 15時27分
がた老さん、ありがとうございます。
取りあえず、マイコンをATMega644pにしてブレッドボードを昨夜作ったので、ソフトウェアの単純移植を行いました。
ポートが同じようで実は結構違うので苦労しましたが、
mLCDへの表示と再生(連続演奏も)できましたので報告させて頂きます。
投稿: 愛読者 | 2010年2月17日 (水) 18時40分
一発で音出し成功おめでとうございます。何もしないでうまく行くと言うのも苦労したときとはまた別の大きな快感ですね。
ソフトの流用、公開については、ChaNさんと全く同じスタンスです。元々がChaNさんのソースを使わせてもらっています。商用であろうが何であろうが自由に使って結構です。ただし、著作権は放棄していないこと、無保証であることにご留意ください(これも同じ)。
投稿: がた老 | 2010年2月17日 (水) 00時21分
本日、ブレッドボードで3号機を作成しました。
流石に、DACが指定通りのBU9480Fでしたので、
一発で音が出ました(mLCDのI2Cがオープンドレイン
なので、プルアップ抵抗が必要だということをうっかり
忘れて表示をしなかったというのは、秘密です 汗;)。
前回どうしても取り切れなかったアナログノイズは、
電源をデジタルとアナログの2つに分けたお陰です。
今回のブログは本当に参考になりました。
尚、DAC以降は手抜きで、シリーズの抵抗+電解コンデンサーの先にステレオのミニプラグを付けて、PC用
アンプ付きスピーカで鳴らしています。
閑話休題
以下の3つのお願いです。
別途現在I2CをAVRとPICでやっていますので、mLCDの
ソースを参考にさせて貰うかも知れませんが、よろ
しいでしょうか?
また、このプレーヤのマイコンを別のマイコンに
替えて実験もしたいのですが、その際現在のソース
を利用してよろしいでしょうか?
商用利用はしませんが、ネット(掲示板やMixiの
日記等)に作成していること等を書く予定ですが
よろしいでしょうか?
お忙しいと思いますが、よろしくお願いします。
投稿: 愛読者 | 2010年2月15日 (月) 22時27分
愛読者さん、コメントありがとうございました。
そうですか、シリアルライターでもAVRISPMKIIでは書けてしまうのですか、それは失礼しました。これは怖いですね。自分で自分の首を絞めてしまうわけですから。私は、当初からChaNさんのAVRSPを愛用して他のライターをあまり知りません。ライターに凝る趣味が無いものですから。
プレーヤーのMega328の現在のフューズビットは、この前の掲示板でご紹介されたとおり(リニアPCMプレーヤー2号機のあとかたづけとソース公開 09/10/16記事)、
FL=11100111 FH=11110111 ですが、これは,
FH=11010111 にしておくのが安心ですね。
投稿: がた老 | 2010年2月11日 (木) 11時55分
がた老さん、ChaNさん掲示板では、申し訳なかったですm(_ _)m。
ところで、AVRISPIIを使用していますが、SPIENは、
書込できます・・・・直接HEXで書き込めば、できて
しまうのです。
私はそれで2つの328PのFUSE bit飛ばしをしてしまいました(汗;)。s****先生に復旧して頂きましたので、問題無しですけど(笑)。今後のことも考えて、Arudinoのレスキューシールドもありますし。
前回は、結局その話抜きに、3個目の328Pで気を付けて
設定しましたので、問題が無いように書いてしまい、
申し訳無かったです。
できましたら、今後は、現在のFuse bitの設定をソースか回路図に書いて頂けるとどんくさい私のような人間がでてこないと思います。
よろしくお願いします。
投稿: 愛読者 | 2010年2月11日 (木) 01時14分
kugaさん、いつもコメントありがとうございます。
残念ながら、ご指摘の措置は本文にありますように、既にいくつか試して見ましたが、効果はありませんでした。インダクターや、コンデンサーの定数を増やしたり(220μH、100μF)、場所を変えてみたりしましたが駄目でした。コンデンサーの容量によっては反ってビート音が大きくなったりします。ブレッドボード上なのでどうしてもリード線が長くなり、別の誘導を受けているのかもしれません。アースの位置だけでも音が変化します(SDカードアクセスの音はかなり小さくなりますが)。余裕のあるLM317で発生するのは設計が古いからなんでしょうかね。いずれにしてもビート音そのものは、最大ボリュームにして気が付く程度の大きさなので、最終的には電源の分離とあきらめています。
投稿: がた老 | 2010年2月10日 (水) 12時16分
DACの電源3.3Vがマイコンの動作等に伴い汚れている(変動)しているのが原因でしょうから
マイコンにつながっているロジック用3.3Vは汚れている前提で
DACの電源には100uH程度のインダクタ経由で供給し、10-47u程度の電解をDAC側にパスコンとして追加するといいと思います。
L/CでDAC電源ラインにローパスフィルターを構成するわけです。
ICによる差は、各ICの負荷電流変化に対する過渡応答特性の差だと思います、
TA48M33だと現在の構成の場合負荷変動に対する過渡電圧変動が小さくて音には現れないのでしょう。
投稿: kuga | 2010年2月 9日 (火) 20時11分
とおりすがりさんコメントありがとうございます。BU9480Fの回路図の指摘の方と同じ方だとすると、そのときは失礼しました(返事をすっかり失念)。
あれはやっぱり測定用の負荷ですかね。確かにZobelフィルターにしては定数が大きすぎます。
DACの電源のノイズ除去ですが、ご指摘のあたりは一応みんなやってみました。ブレッドボードの回路はこれまで公開している3号機のものと同じで電源だけが5Vアダプターです。実機にはチップコンの0.1μFが最初から入っています。大容量コンデンサーも効果なしでした。
不思議なのは、TA48M033F(正式名)は全くしないのに、何故、LM317TとXC6202でビート音が出るのかという謎です。DACの電源をブレッドボード上であちこち移すと音が大きくなったり小さくなったりします。コンデンサーの定数を変えると音が変わります。昔からこういうノイズ取りは苦労しました。TA48を使うか電源を分ければすべて解決なんですが、何となく気分が悪いですね。
投稿: がた老 | 2010年2月 9日 (火) 19時18分
DACの電源ラインが怪しいということなら、DACの電源端子とGNDの間に0.1uFのセラミックコンデンサと10~50uFくらいの電解コンデンサを並列に入れてみたらどうでしょう。このとき、セラミックコンデンサのリードは短くして、DACとの配線長を可能な限り短縮するのがコツです。つまりノイズ源と思われるDACの直近でノイズを処理してしまうわけです。
投稿: とおりすがり | 2010年2月 9日 (火) 02時02分
コメントありがとうございました。
回路図はありませんが、ブレッドボード上はすべて5Vのレギュレーターから降圧して3.3Vにしていますので、電位差は1.7Vあり入出力の電圧差ではないと思います。ブレッドボード上のジャンパーの位置や差込具合で、TA48M33でもビートが出る時があり、このあたりがカギかなと思っていますが、まだ未解明です。又何かお気づきでしたら、よろしくお願いします。
投稿: がた老 | 2010年2月 8日 (月) 21時47分
回路図が見られないので分かりませんが。
安定な出力に必要な入出力電圧差がXC6202にとって小さすぎるのではないでしょうか。
TA48M33→50mV
XC6202→200mV
投稿: NPC1 | 2010年2月 8日 (月) 13時31分