- 初めに
WebでDACの自作記事を見ているとPCM5102を利用したDACが音質が
良いとの記事を沢山見受けられます。
なおかつPC5102が安価(420円)で周辺回路も簡単なことからDACを
作製してみました。
費用は、 Raspberry Pi2を含めても8千円ぐらいでできます。
- DAC回路
回路は、PCM5102ベンダ(TEXAS INSTRUMENT) 提供の回路を
参考にしています。
1.電源部
電源はSWアダプターから供給し、Raspberry Pi2とPCM5102の
アナログ電源端子、デジタル電源端子に個別のリップルフィル―
(R3+C17、R4+C16)を介して給電 し、それぞれの電源部からの
ノイズをブロックしています。
2. ストッピング抵抗
Raspberry Pi2との接続部に挿入してあるダンピング抵抗(パルス
波形が振動しているのを抑制し収束させる)は、いろいろと試して
200Ωとしました。
次の波形は、32Bit 、176.4Kの時のBCK波形です。
波形の立上り、オーバーシュート・アンダーシュートも抑制されて
います 。
CRCK、DATAの波形は、ダンピング抵抗値にあまり影響を受けません
でしたが、BCKはダンピング抵抗値に大きく影響を受け、音質にも
影響します。
3.デカップリングコンデンサ
PCM5102の標準回路のままで、オシロスコープでデカップリング
コンデンサ端子の電圧を観測したところ出力音声に応じて電圧が大きく
変動していたことからC6(100μF)を追加し、電圧変動を抑えています。
4.基板作成
基盤は、フリー基板cadのKi-CADで基板パターンを設計し作成しました。 - Raspberry選定
MPDに超軽量なlightMPDを使用し、当初は以前からのRaspberry MODEL Bを
使用しましたが、オーパサンプリング設定(最高音質)やDSD音源を再生すると
CPU使用率が100%となり再生できないためRaspberry Pi2にしました。
- 感想
以前作製した、Wolfson Audio Card で作成したシステムも満足できる音質で
したが、今回のシステムは、音の透明度、静けさが一段と増し、大変満足しています。
420円のPCM5102で、こんなに高音質のシステムができるとは驚きです。
昨年5月より設計と試作を繰り返してきたコントロールアンプ(プリアンプ)が完成しました。
途中で、スマホゲームの数独(ナンプラー)に嵌り2か月、仕事多忙で3か月中座。
試作の結果が良好たったため、3か月ほどそのまま利用。
などが重なり 、完成までに15か月も要してしまいました。
仕様:
- テレビで不要となったリモコンで全ての機能を制御
国内主要3フォーマットに対応(NEC,SONY,家電共) - ボリュームは2ch電子ボリュームIC(NJW1159)をマイコン(LPC1114FN)で制御
片シャネルで 1個のICを使用し、メインボリュームとバランで利用 - 入力:3系統
- 出力:パワーアンプ用、ヘッドフォンアンプ用に2系統同時出力
- 利得は0db
- 小さなスピーカ、深夜の小音量でも低音を豊かにするBassBoost回路を具備
BassBoost定数は、使用するスピーカにより変動するので、BassBoost回路を構成するコンデンサと抵抗は簡単に変更できるように差込式にしました - Mute ON/OFF機能を具備
苦労したところ:
- 絶縁型DC-DCコンバータ(MCWI03-12S033)からのノイズ
オシロスコープで出力100mV程度の出力信号を観測すると、ノイズが重畳し信号がボヤートしてスッキリとした信号になりませんでした。
切り分けたところ、 DC-DCコンバータがノイズの発生源であることが判明し、DC-DCコンバータの入力(+)端子と出力(-)端子間にタンタルコンデンサーを噛ませることで解決しました。 - LCD_ACM1602とEEPROM_AT24C16AのDeviceAddressバッティング
ACM1602とAT24C16Aの制御プログラムを書いていたころは、それぞれ正常に動作していましたが、統合して動作させたところAT24C16Aの特定アドレスにデータが保存できない場合や、ACM1602に意図しない表示が現れる現象が発生しました。
ACM1602のDeviceAddress変更は不可能に近いため、AT24C16Aの利用メモリバンクを制限し解決しました。(そのためAT24C16Aは、半分の容量(8K)しか利用できず)
F特(周波数特性) :
60KHzから減衰が始まります。電子ボリュームICの特性と思われます。
(NJW1159の F特が非公開のため不明)
このくらいからの減衰であればDAC等からのデジタルノイズがブロックされて良いと考えています。
BassBoostは、2Khzから始まり6dbブースト
(現在は4dbブーストで視聴中)
歪特性:
歪は、NJW1159のカタログ値とほぼ一致
(10Khzの特性が他より悪いことも一致)
チャンネルセパレーション:
左右チャネルで其々NJW1159を使ったこと、回路構成も左右チャネルを考慮した設計により良好な結果を得ました。
感想:
歪、チャンネルセパレーションも良好で、長時間にわたり音楽を聴いていても疲れなく心地よいです。
以前のコントロールアンプでは、パワーアンプにより、音像がスピーカ後方や前方に展開されていたりしましたが、今回のコントロールアンプでは、全てのアンプで前方に展開され、音楽に全身が包まれます。
また、低音域も以前のコントロールアンプよりよく出ています。出力バッファ回路の効果が出ていると思われます。
電子ボリュームの減衰特性は、B級ボリュームの特性を参考に、常用音量で細かく調整できるようにアレンジしてあります。(常用音量で細かく調整)
- 初めに
前回は、RaspberryPiのOSとしてRaspbianを利用してハイレゾ音楽再生環境を作成しました。
RaspbianでWolfson Audio Cardを動作させるのには、OSのパッチとOSコンパイルが必要でした。
Raspbianの後継としてRuneAudioを知り、Ver 0.3-alphaでWolfson Audio Cardをサポートしているとの情報を入手しましたので、早速トライしてみました。
なお、ハードウェア構成は変更していません。OSと再生アプリケーションの変更です。
10月29日に 0.3-betaがリリースされました。
Raspbianでの音楽再生も良いのですが、さらに音の透明度と濃密度が増した気がします。
OSの完成度は低いのですが、当面この環境で音楽を楽しみたいと思います。 - 記事更新履歴
11月17日 IPアドレス固定化(static)手順を追加
11月20日 IPアドレス固定化手順に再現性がないため、記事を取消
- 構築手順
構築は、PC(Windows8.1)とRaspberryPiがLAN接続されている環境で行いました。 - RuneAudioの入手
RuneAudioのダウンロードページ からOSを入手します。
ダウンロードしたファイルを 7-zipなどのプログラムで解凍しておきます。 - パッチの入手
RuneAudioのVer2で Wolfson Audio Cardを動作させるためのパッチを入手します。
(このパッチに含まれている音楽出力先を設定するスクリプトを利用します。) - SDカードにRuneAudioをインストール
Win32DiskImagerを利用して、上記1で入手し解凍しておいたイメージファイル(RuneAudio_rpi_0.3-beta_20141029_2GB.img) をSDカードに書き込む
- パッチをSDカードにコピー
上記2で入手したパッチファイル(wolfson4runeaudio.tar.gz) をSDカードにコピーします。 - RuneAudio起動
RuneAudioをインストールしたSDカードをRaspberryPiにセットして電源をON - RuneAudioに接続
0.3-alphaでは、ブラウザからhttp://runeaudio/でRuneAudioに接続できたのですが、0.3-betaでは接続できなくなってしまったため、次の手順でRuneAudioのIPアドレスを調べる必要があります。
RuneAudioにHDMIでディスプレイ、USBでキーボードが接続されている場合は、次のアカウントでログインしてRuneAudioのIPアドレスを確認してください 。
ユーザ:root
パスワード:rune
コマンド:ifconfig
以下実行結果
eth0: flags=4163mtu 1500
inet 192.168.1.14 netmask 255.255.255.0 broadcast 192.168.1.255
ether b8:27:eb:37:be:48 txqueuelen 1000 (Ethernet)
RX packets 190278 bytes 237985910 (226.9 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 115828 bytes 12081604 (11.5 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
192.168.1.14がRuneAudioに割り振られたIPアドレス
ブラウザでhttp://192.168.1.14/に接続します 。
-
設定変更
画面右上の「MENU」をクリックし、プルダウンメニューから「Settings」を選択します。
-
Timezone変更
EnvironmentのTimezoneメニューから「Asia/Tokyo-GMT +9:00」を選択し、「APPLY SETTINGS 」ボタンをクリックします。 -
カーネルの変更
OSカーネルをWolfson Audio Card対応のLinux kernel 3.12.13-rt に変更します。
RuneOS kernel settings のLinux Kernelメニューから「Linux kernel 3.12.13-rt RUNE-RT[Wolfson Audio Card]」を選択しします。
「APPLY SETTINGS 」ボタンをクリックするとOSが再起動します。
ブラウザでhttp://192.168.1.14/に再接続する必要があります。 -
音声出力先変更スクリプトのインストール
Wolfson Audio Cardは、音声出力先として、LineOut、HeadSet、SPDIF、スピーカがあるため音声出力先を変更する必要があります。
RuneAudioにコンソールログインに次のユーザでログインします。
ユーザ:root
パスワード:rune
ログイン後、以下を順次実行します。(#はプロンプト)
#cd /
#tar xvf /boot/wolfson4runeaudio.tar.gz root -
OS起動時の音声出力先変更スクリプト自動実行設定
音声出力先変更スクリプトは、RuneAudioが起動する都度、実行する必要があるので、以下のファイルに設定を記述する必要があります。
ファイル名: /srv/http/app/config/_os/etc/rc.local
変更内容:最終行の「exit 0」の全行の次の内容を記述します。
/root/use_case_scripts/Playback_to_Lineout.sh
Playback_to_Lineout.shは、LineOutから音声出力するためのスクリプトです。他に、HeadSet、SPDIF、スピーカから出力するためのスクリプトも含まれていますので、適宜変更してください。
OSを再起動させれば、すべての作業が完了し音楽再生の準備完了です。 - IPアドレス固定化(static)
RuneAudioのIPアドレスを固定化する場合、 0.3-betaではGUIインタフェースからだと正常に設定できません。以下の手順で設定できました。
- /etc/netctl/eth0ファイの修正
内容は、次の通り。
Description='eth0 connection'
Interface=eth0
ForceConnect=yes
SkipNoCarrier=yes
Connection=ethernet
IP=static
Address=('192.168.1.6/24')
Gateway='192.168.1.1'
DNS=('192.168.1.1')
ExecUpPost='/usr/bin/ntpd -gq || true' -
/etc/netctl/eth0の有効化
以下のコマンドを実行し、最後にRuneAudioを再起動します。
netctl start eth0
netctl enable eth0
sync;reboot
- はじめに
Raspberry Pi + USB-DACを使用した音楽再生サーバは、以前から雑誌や色々なWebページに紹介されていますが、Raspberry PiのLANとUSBは、同一のICでコントロールされているらしく、NAS上に保存されている音楽を再生するには、音質に影響が出そうなので、導入を躊躇していましたが、I2Sインタフェースで接続するDAC(Wolfson Audio Card)が発売になったので購入し、OSのRaspbian上でMPDを動作させ、ハイレゾ音楽再生サーバに仕立て上げました。
構築手順をメモ書きとして残しました - 2014/06/23 ケースに収めました
- Wolfson Audio Cardの特徴
・Wolfson Audio Cardは、 Raspberry Piの拡張インタフェースに直接載せるDAC
・音楽データは、USBを使用せずにI2Sインタフェースで通信
・音楽インターフェースは、LineOut、LineIN、 HeadSet、SPDIF-IN、SPDF-OUT、スピーカ出力と多彩
- Wolfson Audio Cardの購入
Wolfson Audio Card、 Raspberry Piともに千石電子の秋葉原本店2階で購入できます。
1万円以内で購入できます。
その他に、SDカード(16GB有れば十分)、スマホ用電源が必要です。
- ハイレゾ音楽再生(MPD)サーバ構築
ハイレゾ音楽再生サーバの構築は、以下の手順で進めます。詳細は、雑誌(日経Linux 2014.7 , トランジスタ技術 2014.7)に紹介されていますで、該当のページを紹介します。
1.Raspbian導入
2.Raspbianカーネル(OS) の再構築
3.MPDインストール
- Raspbian導入
RaspbianをSDカードにインストールします。
手順は、 トランジスタ技術 2014.7月号に記載されています。
・P.60 「快適! OSのサイズを小さくして起動を高速化」の手順でRaspbianをSDカードにインストールします。
・P.54 「第1部スタートアップ編」写真1のようにTV、キーボード、Mouseを接続し、Raspberry Piを起動します。
・P.57~59 「仕込み作業③・・・OSの初期設定」の手順でRaspbianの初期設定をします。 - Raspbianカーネル(OS) の再構築
Raspbianそのままでは、Wolfson Audio Cardを認識しないので、カーネルを再構築する必要があります。
手順は、日経Linux 2014.7に記載されています。
(作業時間は、2時間程度)
P.80 「カーネルを再構築しよう」 の手順に従い、カーネルを再構築しSDカードに再構築したカーネルをインストールします。
注意事項:
P81の左下部に古いモジュールを削除する記述がありますが、ディレクトリ名が誤っていると思われます。
私の環境では、” /mnt/lib/modules/3.12+"でした。 - MPDインストール
・上記2で作成したSDカードで Raspberry Piを起動します。
・音楽出力先の設定
LineOutからオーディオアンプに接続するので、以下のコマンドを実行します
/usr/local/bin/Playback_to_Lineout.sh
・MPDインストール
output-placeさんのHP(Raspberry Piで作るミュージック(MPD)サーバ)の手順、「①MPDのインストールと設定」、「②NASのマウント」を実施します。
上でハイレゾ音楽再生サーバの構築は、完了です。
音楽の選曲は、次のクラインソフト等が利用できます。
Windows:Gnome Music Player Client
Andoroid: MPDroid、DroidMPD
これは、高入力インピーダンス、高感度、広帯域の電子電圧計を安価に実現するもので、アナログテスタのACレンジで電圧を読み取るものです。
作製結果は、ぺるけさんのHPと、ほぼ同等の性能を実現しました。
ただし、乱視+老眼でアナログテスタの針と文字盤の数値が読みにくく、眼精疲労に悩まされました。
そこで、手持ちのデジタルテスタのDCレンジで電圧を読めるように改造をしました。
性能はそのままで、アナログテスタとデジタルテスタの両方(DCレンジ)で利用できるようになりました。
改造コンセプト:
1.以前から興味が有った、OP-AMPの理想ダイオードで整流する。
2.整流は、半波整流(回路が簡単)で実験。NGな場合は、全波整流。
3.改造がNGの場合は、簡単に元に戻せる。
4.現在のプリント基板の空エリアで実現したい。
回路構成:
1.入力信号は、オリジナル回路の片側テスタ端子とアース端子に接続。
(テスタ出力は、BTL接続で出力電圧を稼いでいるため、同じ電源を流用するために
片側端子とアース端子を利用)
2.OP-AMPの理想ダイオードは、ごく標準的な回路を使用。
OP-AMPは、LME49720を使用しました。他のOP-AMPで実験しましたが、高域特性が
悪く実用に耐えませんでした。
3.ダイオードは、手持ちの高速SWダイオード「1N4148」(50本100円)を使用。
3.出力は、BTL接続で出力電圧を稼ぐ。
4.整流後にコンデンサで平滑しています。
平滑しない場合は、100Hz以下の特性が悪く、かつ出力電圧が安定しません。
実験したところ、100μFが良好でした。アナログテスタで、10Hzを測定しても針が安定しています。
改造結果:
1.整流は、半波整流+平滑で問題ありません。
2.周波数特性は、改造前とほぼ同等です。
3.使用したダイオードの順方向電圧は1Vですが、デジタルテスタ出力を0.1V~10Vまで変化するように、
入力を変え直線性を測定してみましたが、直線を描いており理想ダイオードとして機能いているようです。