10年ほど前にポータブル・オーディオ・プレーヤの一号機を自作して以来、いくつかの MP3応用機器を製作してきました。しかし、元々外で音楽を聴く習慣がなかったので、専ら車載機として使い続け、それ以降はポータブル機は製作しませんでした。一号機では記録メディアとして当時使えるメモリ・カードの関係でスマートメディア(SM)を採用していました。しかし、その後SDメモリ・カード(SDC)が台頭して SMは消えてしまいました。このように記録メディアが一気に陳腐化してしまったため、後継機を製作することにしました。
車載用ならそれに特化した設計でも良かったのですが、今回もある程度の小型化を追求してポケット・タイプとしてみました。構想から製作まで 2〜3年放置していたせいか、いろいろ機能が加わって当初考えていた仕様とは大きく異なったモノに仕上がっています。
製作の動機が記録メディア置き換えなので、記録メディアを SDCに置き換えて設計すれば良いのですが、そう単純にもいきませんし、それに面白くありません。また、10年も経過するといろいろ状況が変わっています。一番困るのが部品のディスコンで、当時使用した MP3チップ・セットは既に入手困難になっています。それに代わる現在の定番品(VS11xx)は、オーディオ性能(特に SNR)があまり良くなく、静かな室内でヘッドホンで聴くには難ありなレベルです。もちろん、屋外とか車載用なら全然問題になりませんが、SNRを気にするならそれらの使用は避けたいところです。
変わったのは回路部品だけではありません。記録メディアもその容量を日進月歩で増大させ、当時の 1000倍近い記憶容量になっています。記録メディアのサイズも、ポータブル機器の小型化にともない、人の手で扱える限界近くまで小さくなっています。いやぁ、半導体メモリの進歩は凄いものですね。これほど容量があるなら、音声データを圧縮する必要など無いのではないでしょうか。そう、MP3フォーマットというデータ圧縮技術でやっと実現できた MP3プレーヤでしたが、もはや音声データの圧縮は必要とされていないんですね。当時あれほどもてはやされた MP3ですが、今は「音が悪い」などと逆に嫌われる始末です。私の場合は MP3 192kbps以上なら非圧縮との違いを聞き分けられませんけど、オデオのプロは分かるそうです :-P
さて、これで設計方針は大体固まりました。まず、リムーバブル・メディアとして最も小型のmicroSDカードを使用します。対応する音声データの形式は、非圧縮リニアPCM、いわゆる普通の WAVファイルとします。一枚のカードに記録できるトラック数が増えると、アルバム名・曲名の表示が欲しくなってきます。これには最近入手しやすくなってきた有機EL(OLED)ディスプレイを使用します。最近話題になったのがワンチップFMラジオICで、これも加えてみます。電源にはLiPo電池を組み込んで使用します。

図1に製作した PCMプレーヤのブロック図を示します。このプレーヤの技術的特徴は、ソフトウェア制御でオーディオ DACを駆動していることです。音声信号を出力するには、そのサンプリング周期に従い一定の周期で DACへ音声データ送信しなければなりません。一部のマイコンにはデジタル・オーディオ信号を入出力できるペリフェラルを持つものもありますが、今回使用したマイコンにはそのような気の利いた機能はありません。そのため、DAC制御は汎用シリアル I/Fとソフトウェアで行う必要があります。
DAC出力はボリウムでレベルを調整したあとバッファ・出力します。レベル調整は DAC前段(つまりデジタル演算)で行っても良いのですが、そうすると通常使う音量で SNRが低下してしまいます。なぜなら、DAC出力レベルを絞っても DACで発生するノイズは一定だからです。DAC出力を常にフル・スケールとし、後段のボリウムで音量調整すれば、これによる SNR低下は抑えられます。VS10xxのSNRが悪いのはこの点が影響していて、DACのSNR自体あまり良くないところに輪をかけて悪化しているというわけです。これらも DAC出力を 0dB固定にしてボリウムを使えば十分使えるようになるはずです。
バッテリにはLiPo電池を使用しています。交換できる構造とはせず、ケース内に組み込んで使用します。当然ながら充電制御回路が必要になるので、これも搭載しなければなりません。
表示器には128×64ドットのモノクロ OLEDモジュールを使用しました。OLEDモジュールは LCDモジュールと違いとても薄いので、狭いスペースにも組み込むことができます。しかし、OLEDは自発光素子なので反射型LCDに比べて消費電力が大きいのが欠点です。
基板はメインと表示部に分かれていています。写真2・図2に製作したメイン基板の基板と回路図を示します。
電源は電池電圧を LDOレギュレータで落としてデジタル回路用とアナログ回路用の 2系統を生成します。デジタル電源はマイコン、メモリ・カード、表示部に供給し、アナログ電源は DACとラジオICに供給します。これは、デジタル回路(特にメモリ・カード)で発生する電源ノイズがアナログ電源に入らないよう完全に分離するためです。同様に、出力アンプには電池電圧を直接供給してヘッドホンの駆動電流でアナログ電源が揺れないようにします。デジタル電源をONにする要因は、PLAYボタンと MCUポートのいわゆるソフトウェア制御とします。この辺の制御は一号機と同じですが、充電状態でも ONになるようにしています。アナログ電源とアンプ電源はポート制御だけです。LiPo電池の充電は専用の充電制御ICBQ2057Cで行い、マイコンは介在しません。
マイコンにはアトメルのATmega644Pを使用しました。これは 64Kバイトのプログラム・メモリと 4Kバイトの RAMを内蔵しています。最大動作周波数はスペック上は 13.3MHz@3.3Vですが、適当な水晶の手持ちが無かったので 10%オーバーの 14.745MHzで使用しています。この程度なら趣味で使う分には問題のない範囲です。
DACにはあえてデジタル・フィルタ(DF)を持たないロームのBU9480Fを使用しています。DF内蔵DACは、BCK/LRCKのほかに DFの動作のため 256, 384または 512fsの動作クロック(OCK)を必要とするので、汎用I/Fでは使いにくいのです。別に OCKを用意できたとしても、ソフトウェア制御のデジタル・オーディオ信号は BCK/LRCK/OCKの位相関係が不安定なので、多くの DACはそのような信号を受け付けてくれません。これを選んだのは、入力フォーマットが標準フォーマット(後ろ詰め)で IISのようなビット遅れも無いため、ソフトウェア制御で扱いやすいからです。
DAC出力はボリウムでレベル調整した後、出力アンプ(BurrBrownのOPA2353)で増幅・出力されます。電源電圧が 4V以下と低いので、RROでない普通のオペアンプは使えません。低電圧用のヘッドホン・アンプICがあるなら、その方がよいでしょう。また、ヘッドホン・コードをラジオ受信のアンテナとして使用するため、ヘッドホン・ジャックはインダクタで RF的にフロートしておきます。
ラジオ受信機能には、FMラジオ・チューナICのRDA5800Cを使用しています。最初は NS953Mで設計したのですが、受信感度があまり良くなかったのでこれに交換してみたところ、かなり良い結果が得られました。ラジオのオーディオ出力は DAC出力と合成して出力されます。ラジオが動作していないときはアナログ・スイッチでオーディオ回路から切り離されます。
写真3・図3に製作した表示部の写真と回路図を示します。基板に載っているのは OLEDモジュールの駆動電圧(9V)を生成する DC-DCコンバータと LED、光センサ(CdS)です。光センサは外部の明るさに応じてディスプレイの明るさを見やすいレベルに制御することが目的で、最近の携帯機器では標準的に搭載されている機能です。OLEDモジュールはガラス基板単体なので、コントローラは COGになっています。厚さは僅か 1.7mmで基板とほぼ同じです。しかし、それでもスペースが足りなかったので、基板を切り欠いて埋め込むようにしています。
基板を組み込むケースには、タカチのPB-1という、75×50×20mmのプラスチック・ケースを使用しました。材質がポリスチレンで割れやすいので、加工には注意が必要です。素材が透明なので、シールドも兼ねて内側から導電塗料で塗装しています。導電塗料にはカーボン系(漆黒色)とニッケル系(暗灰色)があり、ニッケル系の方が低抵抗でシールド効果が高いようです。塗装するときは一回で塗ろうとするとケースが溶けてしまうので、薄く2〜3回に分けて塗るようにします。もちろん、ディスプレイの窓になる部分はポリエステル・テープ等でマスクしておく必要があります。
操作スイッチは誤って押されないようにケースの横に配置しました。スイッチのマウントは、タクト・スイッチの頭を直接出す構造が手軽ですが、基板の位置決めがシビアになり、外観にも難があります(図4)。このため、一号機と同様にボタン(Φ5真鍮丸棒にニッケル・メッキ)を介してスイッチを押す構造にしました(図5)。このようにすると操作性が良くなり、組み立て・部品レイアウトなど構造上の自由度も高まります。
本機のキモであるソフトウェア DAC制御です。まず、サンプリング・クロック(LRCK)は TC1の PWM機能で生成します。PCMデータは USART1(SPIモード)を使って DACに送ります。LRCKが Lレベルの期間は左チャネル、Hレベルの期間は右チャネルの PCMデータを DACに送るので、LRCKの立ち上がりと立ち下がりで割り込みを発生させて、PCMデータを FIFOから読み出し、USART1のデータ・レジスタに書き込んでやります。このほか、ビープ音の合成も行っています。この処理の CPU負荷は、サンプリング周波数 48kHzのとき 4MHz相当となり、残り 11MHz弱がメモリ・カード読み出し等の処理に使えることになります。これなら手持ちの 27MHz水晶(13.5MHz動作)でも良かったかも知れません。なお、DAC制御用にいくつかの CPUレジスタを固定して割り当てているので、全てのモジュールでそれを宣言しておく必要があります。
PLAYボタンを押すと電源が入り、再生を開始します。カードが交換されていない場合は、前回再生中だったトラックの先頭から再生を開始します。音声ファイル(トラック)は、メモリ・カードのルート・ディレクトリに置かれたディレクトリ(アルバム)に格納します。アルバム数は 20、アルバム当たりのトラック数は 99まで対応します。アルバムは、ディレクトリ名でソートされます。トラックはファイル名でソートされますが、アルバム内にプレイ・リスト(.m3u/.wplファイル)を見つけた場合はそれに従います。
再生中は PLAYボタンでポーズ/再開します。NEXTボタンを押すと次のトラックに移動します。アルバムの最後の場合はそのアルバムの先頭トラックに移動します。NEXTボタンの長押しで次のアルバムに移動します。PREVボタンを押すと再生中のトラックの先頭から再開します。ダブル・クリックで手前のトラック(先頭の時は最終トラック)、長押しで手前のアルバムに移動です。
音声再生中は、FIFOがアンダーランを起こさないように FIFOのデータ数を見ながら音声データをメモリ・カードから読み出して FIFOに転送する必要があります。ユーザI/Fなどの処理はその合間を縫って行います。
ラジオ機能とプレーヤ機能は、動作状態から STOPボタンの長押しで相互に切り替わります。選局は NEXT/PREVボタンで行い、プリセット・モードと自由選局モードがあります。選局モードは PLAYボタンで切り換えます。プリセット選局用の設定は EEPROMに書き込んでおきます。書き換えるときは、設定ファイルをルート・ディレクトリに置いておきます(更新されていた場合のみ読み込む)。
本機は128x64ドットの OLEDディスプレイを持っているので、日本語表示も可能です。しかし、日本語フォントはデータ・サイズが大きくマイコンのフラッシュ・メモリに入らないため、ファイル(12ドット FONTX形式)としてメモリ・カード上に置いておきます。これなら事実上無制限にフォントを格納できることになります。もしも何らかの原因でフォントを読み出せないときは、全角文字が豆腐になるだけで動作には支障が無いようにしています。なお、ディスプレイ基板が無くてもその他の機能の動作には影響ありません。
写真4に表示レイアウトを示します。アルバム名、アーティスト名とタイトルは日本語対応になっています。アルバム名はそのディレクトリ名(LFN)で表示します。アーティスト名とタイトルはそのトラック(WAVファイルの INFOチャンク)から取り出しますが、無い場合はタイトルにファイル名(LFN)を代わりに表示します。しかし、コード・ページ 932(シフトJIS)で LFNサポートを有効にすると、FatFsモジュールだけでも ATmega644Pのフラッシュ・メモリがパンクしてしまいます。そこで、スペースを食う Unicode変換テーブルを圧縮することでトータル 40Kバイトほどに抑えることができました。
文字描画は可変幅で処理しているので、等幅に比べて日本語で 1割、英字で 2割増し程度の長さを表示できます。ディスプレイの輝度制御は、OLEDはコマンドで、LEDは PWMで行います。ポケットに入れたときなど真っ暗なときは、OLEDの電源を OFFにして消費電力を抑えます。消灯中でもトラックの変わり目や何か操作したときは一時的に点灯させます。
そのほか、消費電力を抑えるため LCDとは違った工夫が必要になります。たとえば、LCDでは表示内容にかかわらずバック・ライトの電力は一定ですが、自発光素子の OLEDでは発光面積に比例して電力が増えます。OLEDでは黒地を基本にした画面デザインが多いのはこのためです。
画面の右上にはバッテリ・レベルを表示します。電池が消耗してきたら、警告音を鳴らして電池アイコンを点滅させます。さらに低下したら STOPコマンドを発行して自動OFFします。充電中は充電アイコンを表示します。また、OFF状態でも充電中のときはマイコンに電源が供給され、LEDをゆっくり明滅させて充電中であることを示します。
10年ぶりのポータブル・オーディオの製作ということで、いろいろ楽しめました。思ったより出来が良かったので、車載用として使うのが惜しくなり、陳腐化した一号機を改修して車載用として使い続けることにしました。結局、二号機を作った意味が無かったような気もしますが、十分楽しめたので良しと言うことにしましょう。
肝心のオーディオ性能ですが、実際に測ってみたところ、SNR:95dB、THD+N:0.055%という結果になりました。DACの生の性能をほぼ引き出せているようです。電池持続時間は約20時間となりました。
