Raspberry Pi+MAX98357A
HOME BACK

はじめに

以前からD級アンプに興味があり、Raspberry PiとI2S接続できるアンプ・キットがないものかとネット検索してみたら、Adafruit I2S 3W Class D Amplifier Breakout - MAX98357Aがヒットした。
このキットに使用されているMAX98357Aのデータ・シートをダウンロードしてチェックしてみると単一電源で動作し、3W程度の出力も得られるので、いたずらするのには面白そうである。
このアンプ・キットはモノラル仕様なので、ステレオにするためには2台必要である。
国内でも販売されていたので、在庫のあったマルツから通販で2台購入した。

MAX98357A

このAdafruitのキットには、MAX98357Aとコンデンサー等のチップ部品が半田付けされた基板と接続用のピンが同梱されていた。
ただし、説明書等は一切、同梱されていないので、ネットから入手する必要がある。
キットの説明書(pdf)は以下にある。
adafruit-max98357-i2s-class-d-mono-amp.pdf

とりあえず、このMAX98357Aがどのようなものかを確かめるためにデータ・シートや説明書(pdf)を参考にして、Right Channel用に1台組んでみた。
何故、、Right Channelかと言うとDAC等の特性を計測するためのデータ用のwavファイルがRight Channel用に作ってあるからである。

回路は下記のとおりである。
GAIN端子とVIN端子間の100kオームは、MAX98357Aのゲインを決定するもので、この場合は3dBとなる。
この抵抗がない場合、ゲインは9dBとなるが、当初、9dBとしていたが熱暴走のような状況が現れたので、3dBに変更した。

SD端子に接続されているR1でChannel Selectionが以下のように決定されるが、今回はRight Channel用なので手持ちの抵抗を組み合わせて370kオームとした。
R1 Channel Selection VDD=5V
LEFT=VDD (0OHM)
RIGHT=370k (94*VDD-100)
LEFT/2+RIGHT/2=1.0011M (222.2*VDD-100)

本機は実験的な要素もあるので、既存のDACに強引に組み込んでみた。

Raspbian Jessie Lite

とりあえず片チャンネルだけであるが、ハードの準備が出来たので、音出しをしてみる。
本機を組み込んだ既存のDACはOSとしてVolumioを使用しているので、Adafruitの説明書にも記載されていたHifiberryをI2S driverとして選択したところ、あっさりと音出しができた。
ただし、Volumioのバージョンは1.51PIと古いものなので、新しめのVolumio-2.041を再インストールしてみた。
ところが、I2S driverとしてHifiberryを選択すると問題なく音出しはできたが、NASを組み込んだり、MPDクライアントのGMPCからアクセスしようとすると動作が重くなってしまう。
本機に使用しているRaspberry Piは5年前の初期バージョンなので、最新のVolumioにとっては能力不足の可能性もあるので、別のOSにトライしてみる。

使用したOSはAdafruitの説明書にも記載されていたRaspbian Jessieである。
Raspbian JessieはRaspbian Jessie with PIXELとRaspbian Jessie Liteの2種類があるが、軽めのOSというこで、Raspbian Jessie Liteをダウンロードした。
Raspbian Jessie Liteでは以前のRaspbianとは違い、セキュリティーの観点からデフォルトでSSHが有効になっていない。
有効にするためにはディスプレーとキーボードを接続して
id pi
pass raspberry
でログイン後、
$raspi-config
としてRaspberry Pi Software Configuration Tool (raspi-config)のメニューから
7 Advanced Options
を選択し
P2 SSH Enable/Disable remote command line access to your Pi using SSH
でSSHを有効にする必要がある。
これができれば、以前のメモのようにWin7PCからリモートで設定できる。
筆者は残念ながら後から見つけたが、インストールに関してはRaspbianをヘッドレスインストールする (SSHの有効化)が参考になる。

IPの固定化も以前とは違い、次のように行う。
設定するファイルは/etc/dhcpcd.confで以下を付け加えた。
なお、192.168.0.88は本機に割り振ったIPである。
$sudo vi /etc/dhcpcd.conf
interface eth0
static ip_address=192.168.0.88/24
static routers=192.168.0.1
static domain_name_servers=192.168.0.1

次に /etc/resolv.conf を以下のように書き換える。
$sudo vi /etc/resolv.conf
nameserver 192.168.0.1

Raspbian Jessie Liteインストール直後の音響関係の状態を確認してみる。
$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: ALSA [bcm2835 ALSA], device 0: bcm2835 ALSA [bcm2835 ALSA]
Subdevices: 8/8
Subdevice #0: subdevice #0
Subdevice #1: subdevice #1
Subdevice #2: subdevice #2
Subdevice #3: subdevice #3
Subdevice #4: subdevice #4
Subdevice #5: subdevice #5
Subdevice #6: subdevice #6
Subdevice #7: subdevice #7
card 0: ALSA [bcm2835 ALSA], device 1: bcm2835 ALSA [bcm2835 IEC958/HDMI]
Subdevices: 1/1
Subdevice #0: subdevice

音響関係では以下の設定を行ったが、これにはPOP音低減の機能も含まれている。
/etc/asound.confを以下のように書き換える。
$sudo vi /etc/asound.conf
pcm.hifiberry {
type hw card 0
}
pcm.!default {
type plug
slave.pcm "dmixer"
}
pcm.dmixer {
type dmix
ipc_key 1024
slave {
pcm "hifiberry"
channels 2
}
}

次に、/boot/config.txtに以下を付け加える。
$sudo vi /boot/config.txt
dtoverlay=hifiberry-dac
dtoverlay=i2s-mmap

次はmpd関連の設定を行う。
$sudo apt-get install mpd mpc
$sudo apt-get install alsa-utils
MPDの設定ファイルである /etc/mpd.conf を編集する。
$sudo vi /etc/mpd.conf
最初に bind_to_address という行を探し#でコメントアウトする。
#bind_to_address "localhost"

次の箇所を以下のように編集する。
audio_output {
type "alsa"
name "My ALSA Device"
device "hw:0,0" # optional
# mixer_type "hardware" # optional
# mixer_device "default" # optional
mixer_control "PCM" # optional
# mixer_index "0" # optional
}
最後に以下を付け加える。
mixer_type "software"

リブート後、音響関係を再確認すると
$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: sndrpihifiberry [snd_rpi_hifiberry_dac], device 0: HifiBerry DAC HiFi pcm5102a-hifi-0 []
Subdevices: 0/1
Subdevice #0: subdevice #0
となり、MAX98357Aが認識されている。

次にNAS関連の設定を行う。
$sudo vi /etc/fstab
//192.168.0.95/Music /music cifs username=root,password=samba,uid=mpd,file_mode=0644,dir_mode=0755,iocharset=utf8 0 0
次は / に music ディレクトリーを作りマウントし、/var/lib/mpd/musicへリンクする。
$sudo mkdir /music
$sudo mount -a
$sudo ln -s /music /var/lib/mpd/music

最後にUSBメモリーの自動マウントの設定を行う。
$sudo apt-get install usbmount
$sudo ln -s /media /var/lib/mpd/music

設定が終わったら、MPDを下記のコマンドで再起動する。
sudo /etc/init.d/mpd restart
[ ok ] Restarting mpd (via systemctl): mpd.service

以上の設定で、片チャンネルだけではあるがNASに格納した楽曲を問題なく再生でき、音もそこそこである。
ただし、POP音の低減はあまり効いていないようで、別の曲に切り替える際や停止する際には、そこそこの大きさで「ブッブッ」という音が発生してしまう。

OSとMPDのバージョンは以下のとおりである。
$ uname -a
Linux raspberrypi 4.4.50+ #970 Mon Feb 20 19:12:50 GMT 2017 armv6l GNU/Linux
$ mpd -V
Music Player Daemon 0.19.1

特性

MAX98357Aのようなフィルタ・レスD級アンプの特性計測には、アナログ系アンプとは違ったノウハウがあると思われるが、とりあえず、出力に8オームのダミー・ロードを接続し、その両端の電圧をVTMで計測してみた。
48kHz16bit1kHz0dBFS又は96kHz24bit1kHz0dBFSを再生すると電圧は2.0V、出力は0.5Wとなり、これが最大出力電力である。
赤線が48kHz16bit0dBFSの周波数特性で、黒線は96kHz24bit0dBFSの周波数特性であるが、96kHz24bitでは高域の低下が30kHz前から始まっている。
なお、電源は5VACアダプターであり、その時の残留雑音は1.7mV、念のためリニア電源に切り替えると0.8mVとなった。

下記は歪率特性である。
WG、WSによる歪率の測定により、計測したが、相対的な評価には使えると思われる。

ステレオ化

片チャンネルでのデータ採取も終わったので、いよいよステレオとする。
今回はLeft Channelとなるので、SD端子は直接VIN端子に接続し、Left Channelのゲインも3dBとするため、GAIN端子とVIN端子間は100kオームで接続する。
LRC、BCK、DINは並列に接続すればOKである。

まとめ

試聴はバスレフ箱に入れたフォスターFE103で行った。
0dBFS再生時に0.5W出力であるが、10畳ほどのリビングで聴く分には不足はなかった。
試聴時、ビット落ちを防ぐために音量を100%に設定すると、何となくギスギスした感じがあったので、ほんの少しだけ絞った。
MAX98357AはDSDをサポートしていないと思われるが、念のため試してみたが、再生できなかった。
wav、flac、mp3は問題なく再生できており、 肝心の音であるが、かなりのものであり、たった3mm角のICだけで再生しているとは到底思えないほどである。
MAX98357Aは96kHz24bitをサポートしているが上述した周波数特性はあまり芳しいものではない。
96kHz24bitのハイレゾ・ソースで試聴してみたが、とりあえず問題なく再生できた。
ポップ音の低減措置を施してあるはずであるが、選曲時やプレイリストによる再生のスタート時、終了時にはポップ音が出てしまうが、プレイリストによる再生中の曲の移行時にはポップ音は出ない。

追補

本機は実験的な要素が強かったが、それなりの音が得られたので、余っていた中古ケースに組み込んでみた。
Raspberry Piとアンプ基板の配置が合理的ではなく、I2S結線が長くなっているが、これは元々の穴を再利用したためである。
5V電源ラインには、Raspberry Piとアンプ基板に、それぞれフェライイト・ビーズを挿入してみた。

HOME BACK

Last Update 1/June/2017 by mac