2019年10月6日日曜日

ネットワークオーディオプレーヤーの製作 (3) DACのI/V変換と出力

前回はES9038Q2M DAC基板について書きましたが、今回はその基板から出てきた信号をI/V変換して出力するところまでを書きます。下図の赤枠の部分です。



回路図の該当部分だけ切り取ったものがこちら。


オペアンプでI/V変換を行い簡単なLPFを通して出力するという超シンプルな回路ですね。
I/V変換抵抗と並列にコンデンサを入れる回路をよく見ますが、それをやると電流帰還オペアンプが使えなくなる(※)ため今回は採用しませんでした。
オペアンプは数種類試しましたが、MUSES8920やAD812(電流帰還型)が良さそうです。

電源は「通電してみんべ」さん発案のディスクリート三端子レギュレータを使いました。


このレギュレータでは、(ツェナーダイオードの電圧)+(2SC2240 or 2SC970のVbe)が出力電圧となります。
ツェナーダイオードには公称より電圧が低めの選別品(公称5.1V→4.80~5.07V, 公称4.7V→4.40~4.63V)を用いており、Vbeと合わせて出力電圧約15Vとしています。
高い電圧のツェナーダイオードを1本使うのではなくわざわざ低電圧品を直列にしているのは、ノイズ低減のため(高電圧品はノイズが多い)と、温度特性を良くするため(ツェナーダイオードは5-6V品で最も温度変化に対する電圧変化が小さくなる)です。

さて、実際の基板がこちら。


突貫工事で設計して部品配置をよく検討せず発注してしまったので、なんだか
ス カ ス カ 
の基板になってしまいました。反省して基板設計をやり直したので、今度別の基板を発注するときにでもついでに作り直します…
また、帰還抵抗が付いていないように見えますが、基板の裏側のICソケットの足に1608の薄膜抵抗を直付けしています。

次回はネットワークオーディオプレーヤーの核であるラズパイまわりについて。

※Analog Devices. MT-034: Current Feedback Op Amps. p.4
 https://www.analog.com/media/en/training-seminars/tutorials/MT-034.pdf

フライパン1つで作る広島のお好み焼き

高校卒業まで18年暮らした広島市を離れて早x年、東京の1K狭小キッチンで懐かしのお好み焼きづくりにチャレンジした話。
鉄板やホットプレートは持っておらず台所のコンロはIHが1口のみという環境のため、フライパン1枚でやってみました。


  • 器具
フライパン(26cm)1枚
コテ(ヘラ)2本


  • 材料(必須のもののみ)
薄力粉40g
キャベツ葉3-4枚分
もやしひとつかみ
豚バラ3-4枚
1個
和風粉末だし適量
お好みソース適量


  • 手順
  1. キャベツを千切りにする。
  2. 薄力粉40gに水80gを入れ、よくかき混ぜておく(生地の素)。
  3. フライパンを中火で熱する。焦げ付きやすいフライパンの場合は薄く油をひく。
  4. フライパンに2.で作った生地の素の7割程度を入れ、薄く円状に広げて生地を作る。
  5. 生地に和風粉末だしをふりかけ下味をつける。
  6. 生地にキャベツ、もやし、豚肉の順に具材を乗せる。ここで塩コショウで下味を付けても良い。野菜と豚肉の間に天かすやイカ天などを入れても良い。
  7. 豚肉の上から、4.で残しておいた生地の素をかける(つなぎ)。これを忘れると後で全くまとまらず苦労するので注意。ただし、つなぎを入れすぎてキャベツの中にまで浸透させてしまうとベチャベチャのお好み焼きが完成するので二度注意…
  8. 最下層の生地に焼き色が付いてきたら、コテでひっくり返す。
  9. 上からコテで押しながら、全体に火が通るまで5-6分待つ。ふわっとしたお好み焼きが好きな場合は押さなくても良い。
  10. 全体に火が通ったら、そのままの向きで(ひっくり返さず)一度皿に乗せる。
  11. 焼きそばの麺を焼く。お好みソースなどで味を付けてもよい。
  12. 麺が焼けてきたら、お好み焼き本体をそのままの向きで皿からフライパンに戻す。
  13. 5-6分焼く。
  14. 全体が焼けて馴染んできたら、そのままの向きで再度皿に避難させる。
  15. 生卵を割ってフライパンに落とし、お好み焼きの大きさに整形する。
  16. 卵が固まらないうちにお好み焼き本体をそのままの向きでフライパンに戻す。
  17. 卵が固まりお好み焼き本体と馴染んだら、ヘラでひっくり返す。
  18. お好みソースを塗り、好みに応じて青のりやネギ等をかける。
  19. 皿に移して完成。食べやすいようにコテで適当に切れ目を入れておく。


  • コツなど
表面に塗るソースだけに頼らず、内部にしっかり下味を付けておくとおいしくできます。
ひっくり返したときに多少形が崩れても、慌てずヘラで整形すれば大抵何とかなります。
単純そうに見えて、加熱時間・焼きそばの焼き方・下味など味を左右する変数がかなり多いので、繰り返し焼いて自分の好みのスタイルを確立させましょう!

2019年10月1日火曜日

ネットワークオーディオプレーヤーの製作 (2) 中華ES9038Q2M基板の改造・マイコン制御

ネットワークオーディオプレーヤーの製作シリーズ第2回はDAC部についてです。
(第1回はこちら→ネットワークオーディオプレーヤーの製作 (1) 概要
下図の赤枠の部分です。


DAC基板には、最近流行っている中華ES9038Q2M基板を改造したものを使います。以前ヘッドホンアンプに組み込んだものを取り出して再利用することにしました(ヘッドホンアンプ用には別の基板を新たに導入)。

この基板の詳細・改造経緯については過去記事に詳しく書いたのでご覧ください→ES9038Q2M DAC内蔵ヘッドホンアンプの製作 (1) DAC基板の改造

このDAC基板をそのまま流用することもできるのですが、実は基板上でDAC ICをI2C制御しているマイコン(ATtiny24A)の動作にいくつか不満がありました。その不満というのが以下の3点です。

  • PLLバンド幅の調整ができない
音質への影響が大きい部分(ES9016で経験済み)なので、自分でいじりたいです。

  • マイコン内蔵ADCを使った音量制御の方法が気に入らない
元の基板ではADCの入力電圧が小さいほど音量が大きくなるという制御。何か危なっかしいので逆にしたいです…

  • I2C通信が常時行われている(っぽい)
設定を変更したときだけ通信すればいいのでは?オーディオ機器なのでできるだけノイズの要因は減らしたいものです。


というわけで元の基板に付いているマイコンは取り外してしまい、自前のマイコンを使ってDAC ICを制御することにしました。
(参考記事: 表面実装部品取り外し専用のコテ先を自作


上の画像の左下がマイコン跡地です。

そして、代わりに作ったマイコン基板がこちら。秋月C基板です。



ピンヘッダで設定できる項目を増やすべく、元のマイコンよりピン数の多いATmega328Pを使用しました。
ちなみに私はマイコンにわか勢で、基本的にマイコンそのものやプログラミングにはあまり興味はなく、道具として使うだけです。ということで、楽にプログラミングしたいのでマイコンにArduinoのブートローダ(8MHz, 3.3V版)を書き込み、基板にUSB-シリアル変換モジュールを外付けできるようにしました(プログラムの書き込みやデバッグ時のみ使用)。つまり、この基板は実質的にArduino Proです。

さて肝心の中身ですが、上記の通りI2C通信です。ES9038Q2MはI2C用に100以上のレジスタを持っており、最初に見たときこれは大変だと思ったものですが、データシートを熟読すると実際にマイコンから変更すべき部分はごくわずかであることが分かりました。
マイコンからいじっているレジスタは以下の通り、たった9つです。
Register 1: Input selection
Register 2: Mixing, Serial Data and Automute Configration
Register 7: Filter Bandwidth and System Mute
Register 8: GPIO Configuration
Register 11: SPDIF Select
Register 12: ASRC/DPLL Bandwidth
Register 14: Soft Start Configuration
Register 15: Volume Control
Register 27: General Configuration

以下のような機能を実装しました。

  • ピンヘッダによる入力、フィルタ、PLLバンド幅の切り替え
マイコン内蔵抵抗でプルアップしたピンをジャンパーピンでGNDに落とすかオープンにしておくかによって設定を変更する方式です。入力はI2S(ラズパイ)・光・同軸の3通り、フィルタは7通り、PLLバンド幅は15通りの設定が可能です。

  • ADCによる音量調整
マイコン内蔵の10bit ADCに入力する電圧を可変抵抗器により変化させることで音量調整を行います。
ES9038Q2Mは0dBから-127.5dBまで0.5dBごとに255段階の音量調整ができるようになっていますが、実際に120dB以上も音量を絞ることは考えにくいです。そこで、
・ボリュームを絞り切ったとき(ADC出力=0または1)では-127.5dB
・ADC出力≧2では-63dBから0dBまで0.5dBごとの制御
としました。
また、プログラムに入れたLPFもどきの処理と基板上のCR LPFのおかげで、ノイズなどにより設定値がコロコロ変わることもありません。
可変抵抗には大型の密閉タイプ(東京コスモス RV24YN 10kΩ)を使い、信頼性を高めています。また、1MΩでADC入力をプルダウンしているので、ブラシの接触不良などの不具合で可変抵抗がADC入力から切り離されても音量設定が大暴れすることは無くミュートがかかるだけで安全です。


I2C通信はDAC起動時と設定に変更があったときのみ行われるようにしました。

これで、上に挙げた3つの不満点は解消されたことになります。
DACとマイコン部の回路図は下の通りです。


まあ、本記事はソフトの話がメインだったので回路図には大したおもしろみはありませんが…(そう言うなら書いたコードを出せ、というご指摘はもっともですが諸事情によりご容赦ください)

最後に、恥ずかしながら私がはまった落とし穴を共有しておきます。
まず、ESSのデータシートに載っているデバイスのI2Cアドレスは8bitであり、ArduinoのWireライブラリを使う際は末尾のR/Wを取って7bitに変換する必要があるので要注意です。
次に、Register 14について。ここはデフォルト設定だとDACの出力端子がGNDに落とされ何も信号が出てこないので、最初に変更しておく必要があります。最初このレジスタを見落としており、なぜ音が出ないのかとしばらく困っていました。しかもこの部分は旧版のデータシートではReservedになっているので、古いデータシートを信じていると絶対にこのICを動かすことはできません(ファームウェアの更新があった?)。

次回はDAC出力のI/V変換から出力まで。