« 2009年2月15日 - 2009年2月21日 | トップページ | 2009年3月8日 - 2009年3月14日 »

2009年2月22日 - 2009年2月28日の1件の記事

2009年2月26日 (木)

SDカードプレーヤーの実装はケースが小さすぎて難航

勉強することがまだ山ほどある(2/19/09)
 SDカードプレーヤーの実装は、秋月電子で手頃な小さなプラケース(92×64×22 ポリカーボネート製 ¥100)を手に入れたが、どういうわけかあんまり進んでいない。ちょっとスランプに入ったようだ。意欲が前ほどわかなくなってしまった。アナログ回路を改善しようと色々手を加えたが、ことごとくうまく行かなかったのが原因かもしれない。

 まず、音量調整をボルテージフォロワの前でやろうとVRを前段に持ってきたのだが、VRを回すと猛烈なノイズが出てうまく調整できない。VRを少しまともなものに換えてみても同じ。原因は良く分からない。どうもオペアンプの直流のところで可変抵抗を入れるとノイズが出るようだ。ACにしようとするとカプリングコンデンサーを増やさなければならないし、音質や実装のことを考えるとこれはやりたくない。

 それでも、ウェブを見ていたらACのボルテージフォロワの回路があったので試しに動かしてみた。しかしこれは全く動かなかった。良く回路を見てみたらオペアンプの反転入力側がグランドになっている。そうかこれは両電源用の回路だ。単電源の回路にするには、ACが入ってくるのだから、また中位電圧を作ってやる必要がある。ここには大容量のパスコンが必要だ。また部品が増える。

 電源電圧を下げて、音が割れる理由もわからない。DACの出力は、Vccの1/2がACの0V地点で、上下にデコードされて0からVccがダイナミックレンジになる。DACのVccとオペアンプのVccは同じである。電圧が変っても違いはないはずだ。何故Vccを下げると歪んで聞こえるのだろうか。オペアンプの電圧の低いところは直線性が悪いからなのか。オシロで方形波でも見ればわかるのだろうか。準備が面倒なのでどうも今ひとつやる気が起こらない。

 DACのBU9480Fのデータシートで出力段に入っているCR直列回路も良く分からなかった。ウェブ上の回路例などではDACのあとに時々入っているときがある。負荷とは並列に入っているのでフィルターの働きはしない。これは何だろうと首を傾げていたら、別のところで同じような回路を見つけた。出力アンプの終段についていることが多い。この回路はZobelフィルター/ネットワークと言って、高周波数域での負荷インピーダンスを下げて出力側を保護するものらしい。しかし定数がかけ離れている。zobelは抵抗が10Ω程度、コンデンサーは0.1μF前後だが、BU9480Fについているのは、10KΩと1μFと大きい。

BU9480Fの出力インピーダンスは10KΩなので、理論的にはこの抵抗値と1μFで16Khz以上(カットオフ周波数)の出力に対してインピーダンスを一定にする働きがあるようだが、これも良く分からない。ブレッドボードに入れて試してみたが、音は全く変わらなかった。DACからオペアンプをつないでいる直列抵抗も10KΩ以外にすると音が割れたりノイズが出たりする。音は皮肉なことに少なくとも今の状態が一番音が良い。アナログは残念ながら、まだまだ手探り状態だ。勉強することが山ほどある。Photo

 ケースへの実装は、ほんの少し進んだ。電池フォルダーの端子処理が一番の課題だったが、これは端子側に接する板に穴を2つづつあけ、0.5ミリの燐青銅線をそこに入れるようにして端子にするとうまくいきそうである。実際にドリルで基板に0.8ミリの穴を1ミリ離して2つ開けてU字に曲げた線を入れて電池を押さえてみた。うむ、これなら立派な端子になりそうだ。

 ケースに必要な部品をレイアウトしてみた。欲張ってかなり小さめのケースを選んだため、予想したとおり、これまでにない高い密度になりそうだ。まあ、折角の実装だ。挑戦してみよう。

Beagle Boardに興奮(2/23/09)
 アナログの資料集めにウェブをさまよっていたら、とんでもないハードウエアを発見して興奮している。7センチ(3インチ)四方のボードに、ARMの最新プロセッサーと、グラフィックチップを内蔵したCPUに、映像出力、シリアル、SDカード、USBが付いて、値段がたったの149ドルである。イーサネットはUSB経由で動く。輸入パーツショップを通して既に日本でも¥17000程度で手に入るらしい。実際に動かしている人のレポートがある。

 このあいだ、Linuxを動かすためにSHの評価ボードを\8000で買おうかと考えていたが、こんどのボードはこの2倍の価格と言っても、中身が全然違う。OpenGLという3Dをサポートするグラフィックエンジンがはいった本格的なビデオチップが内蔵されている。これは驚いた。このボードだけでちょっとしたノートPCが出来てしまう。USBがついているのでペリフェラルは全く気にする必要がない。電源は5V単電源だけで動く。しかも自分でいじれる。Beagleboard

 モバイル業界で最近騒がれている、Googleの携帯端末のエンジン部分らしいが、何と言っても一番すごいところは、この上で動く、OS、ミドルウエア、アプリがすべてオープンソースということだ。もちろんLinuxも動く。組み込み系の世界でも革命が始まったようである。ソフトもさることながら、ハードとしてみてもこれは破格の値段である。これだけのCPUパワーを持ったボードは雑誌の広告で見る限り、これまで10万以上はしていたし、こんなに豊富なインターフェースのついたボードはこれまで見たことがない。なにしろビデオインタフェース内蔵なのだ。ウェブの情報の中で印象的だったのはYouTubeの動画だ。このボードの威力が良く分かる。説明は英語だがわかりやすい。

 今日は秋葉に寄って、PCMプレーヤーの部品を買ってきたのだけれど、暫く手に付かず、珍しくウェブにかじりついて情報収集に夢中になっていた。現在のbeagleボードはまだ完全でなく、この春リリースされる予定のリビジョンCというのが良いらしい。がた老AVR研究所としては、ハイエンド組み込みシステムの研究のため是非一台手に入れたいものだ。遅れがちな実装がこんなことでまた進まない。

果たして入るのか心配(2/24/09)
 SDカードプレーヤーの実装に必要な部品がほぼそろった。まず、SDカードソケットは秋月の廉価版の\150のものを使う予定だったが、これは安いけれどプッシュイン・プッシュアウト(押してセット、再び押してエジェクト)でないので、SDカードをケースからかなり出す必要があり持ち運びに不便だ。千石で定番のヒロセのものを買った。これはサンハヤトの変換基板や、このあいだの雑誌付録のSTARMにつけたものと同じタイプで、千石の方がこの前買った店よりかなり安い(\210)。隣にマイクロSDのソケットがあったのでこれも買う(\160)。Sd

こいつは小さくて今度の実装には使えると喜んでいたのだが、帰って調べてみると、やはり小さすぎて手配線でしっかり固定するのは難しそうだ。ソケットは普通の部品と違って力がかかる。しっかり固定する必要がある。基板でもおこして接続ピンをすべて固定するならともかく、汎用基板では空中配線になってしまい、2箇所の固定ピンのハンダ付けしか強度がない。これではどうも自信がない。

 使用する基板は両面基板である。これはSDカードソケットを表につけて高さを稼ぐためと、SDカードが裏返して装填されるのを嫌ったためである。変なところにこだわりがある。今日は、久しぶりに工作台をだして基板の加工を始めた。基板がケースに入るよう2辺を切り落として整形し、予定した部品の実物を置いてレイアウトしてみる。

 これは厳しい。電池がケースの1/3を占めるので、圧倒的にランドが足らない。それにヒロセのSDカードソケットが秋月の安いものよりかなり大きく、オーディオジャックや可変抵抗器などかさの大きい部品が載るので全部が入りきるか心配になってきた。Sdplay2

 タクトスイッチのスペースはとても基板上には確保できない。前にやったように別の小さな基板を上蓋に固定してそこへまとめることにする。これはスイッチのストロークが上側ケースに足らなくてどうしようかと考えていたところなのでちょうど良かった。

 何とか入りそうだ。LCDは上蓋に固定しない。ピンヘッダーでベースの基板に固定する。これでケーブルを減らせる。高さが微妙だが、いざとなったらピンヘッダーソケットを削っても良い。これはうまく行きそうだ。方眼の拡大図をつくってアートワークに着手する。

 ブレッドボードのプレーヤーは快調に音を出している。秋葉で1枚¥350で買った2GのSDカードに今度はベートーベンのピアノ協奏曲「皇帝」を入れて見る。うむ、大編成のオーケストラが良く鳴っている。これは実用になりそうだ。

 ご機嫌で、今までのSDカードの整理をして選曲していたときバグを見つけた。一番最後までリストを見にいって逆戻りすると最初の数曲が見えなくなるバグである。あわててUARTを復活させて変数を全部表示させ、バグを追う。やはりファイルリストの最後の処理が間違っていた。これはいけない。ソースを公開した後である。

 テストしていたSDカードのWAVファイルの数が、たまたまファイルリストの数の倍数だったので発見が遅れていた。典型的なテストケース不足である。

前回公開したソースリストに次の修正をあててください。
バグ修正(2/26/09):
現象: 最後のWAVファイルがファイルリストの途中にあると表示が不正確になる。
修正ファイル: SDPLAY328.C 
場所: 行ナンバー338付近(行ナンバー表示はTeraPadが便利)

スイッチCを見てリストを進めるところの以下のステートメント

if(ls_top+2 > crnt_end ) の部分を

if(ls_top+1 > crnt_end && !(crnt_end+1 == crnt_eof))
に修正してください。

| | コメント (2) | トラックバック (0)

« 2009年2月15日 - 2009年2月21日 | トップページ | 2009年3月8日 - 2009年3月14日 »