2018年12月01日

espzero R1.4

espzero の基板の 改修をして R1.4 ということにした。時間もたって、何を変更したか忘れてしまいそうなので、まとめておく。(まだ発注しない。とりあえずのまとめ)
R1.2 からの変更点

espzero_1.4-omake.png

まずは上のおまけ基板から。冶具のボードはもう必要ないのでやめて、PDM テスト用基板にした。

大きい方は、CLK でラッチするタイプ。TSSOP の LVC74 を使う。CLK を反転する のに、XOR の LVC1G86 も使えるようにした。(普通のSOT23-5 1回路インバータも使える)。専用のレギュレータも使う。オペアンプでは、フィードバックをかけるので、電源の変動の影響をあまり受けない。PDM では、フィードバックの役割をレギュレータが担う・・と思うのでスペースがあれば、是非入れたいのである。

小さい方は、LVC1G18 を使う。鳴るのかどうかも怪しいんだが、試してみたくなった。

PDM-1g18.jpg

回路図はこう。CLK が L の期間は Lch のデータが出ているとして、buffer を ON にする。H になれば Hi-Z 。実際は L の期間中に Lch → Rch の切り替えが起きるはずだから、Rch の音も少し混じるだろう。その程度で済めば大成功である。めんどくさいので、レギュレーターは入れなかった。空いたスペースにコンデンサを追加できるだけにした。
ヘッドホンジャックは、裏面に付ける。PJ327A と記載したが、PJ320B も使える。

    PDM1.png

    TFA9881 のデーターシートから。まぁこういう感じだろうと。自分で出力するわけだから、同時に切り替えるとか調整できるかも。

    PDM2.png

    また、TFA9881は、スイッチング(H/L)か、フローティング(Hi-Z) の3つの状態で制御しているように見える。LVC1G18 の回路はアリかも。ただ、最初・最後の状態は、ひとつは Hi-Z で良いが、もうひとつは H/L である。ポップノイズ対策で、平均電圧を徐々に1/2 VCC にする という制御が片側にだけ必要。

あと RC の値は適当。検討してみよう。
まず、抵抗値だが、LVC だから 3.3V で 24mA 流す能力がある。余裕を持たせて 15 mA 流すとすれば、220Ωぐらい。
ヘッドホンが 30Ωとすれば、抵抗値は、180Ω。 LPF のコンデンサは、0.033uF にすれば cutoff 22kHZ 。なのだが、64fs とかのオーバーサンプリングしているので、0.01uF でも多分問題ない。カップリングコンデンサは、HPF になるわけだが、47uF で cutoff 15Hz ぐらい。

音が小さすぎることは多分ないのだが、電源を 5V にして大きくする手はある。5V なら 40mA が最大。なお、3.3V p-p の方形波の実効値は、最大値と同じ値で、1.65 Vrms 。ライン出力にはすこしばかり出力が高い。

    ・・・と書いたが、連続で H/L を出力する場合の話であった。この回路でPDM を使うと半分は、Hi-Z なので、平均出力が半減する。平均電圧で良いのかな? だとすると 0.825 Vrms 。?合成すると 1.65 Vrm なのだから電力が半減? ならば 1.17 Vrms 。・・・もし音が小さすぎるなら、5V にして丁度良いのかも。抵抗値を小さくすることも出来るが・・・120Ω?

ちなみに、ラッチ版だと PWM では使えないのだが、この回路は PWM でも使える。簡略化という面以外に利点がある。例えば Raspi でも一応使える回路にできるのである。




espzero_1.4-amp.png

espzero-amp R1.4

まず PDM は、おまけと同じ回路。LVC74 TSSOP + LVC1G86 XOR に変更。また、専用レギュレータの ON/OFF 制御を入れた(後述)。

次に、ゲインコントロールと 入力切替に LV4052 を使うことにした。もう 6P のスイッチパターンは入れない。

まず、ゲインコントロールだが、セレクタの方が良さそうということで変更。4to1 と 全部 OFF にする E を使って ステレオ 5 段階の切り替えを1個でできる。これはオプションである。付けなければ、全部 OFF でありデフォルトのゲインになる。

    0db OFF (1.5K) 1/2
    -3db 3K (1K) 2/5
    -6db 1.5K (0.75K) 1/3
    -9db 750 (0.5K) 1/4
    -12db 500 (0.375K) 1/5

    全部 OFF では、3.3V p-p に対して 1.5K + 1.5K で分圧する。1/2 である。
    LV4052 で抵抗を追加すると 電圧が落ちる。例えば、750Ωを追加すれば、合成抵抗値は 0.5K で 1/4 。
    db と合ってないが、こんな感じでいこうかと。

    また、余計な回路など入れたくない。パターンがあるだけでも嫌だと言った場合に、パターンカットも考慮した。小さく白く囲んだところが、表裏一か所づつある。

さて、入力セレクタ。一応必須ということにしたが、付けないという選択もあり。その場合、ジャンパして固定にする。・・・ということにしたが、かなり苦しい。

    線で囲んで、信号名が書いてあるところ。単に Stop を外した VIA である。0.6mm φと穴径を広げるのが精一杯で、位置の調整までは出来なかった。


入力セレクタを付けたため、DAC と PDM 両方の回路を組んでも問題なくなった。ただし、信号線を共用する所は同じ。PDM を利用する際は、DAC の BCK を操作しないので DAC が変に動作して ノイズ源になることはない。問題は PDM の方。DAC を使うと PDM にも信号が入ってしまう。出鱈目にスイッチしたらノイズ的にまずいということで、レギュレータを OFF にする対処をすることにした。

セレクタは、DAC 00 PDM 11 なので、セレクタ用の信号線で レギュレータ ON/OFF を兼用している。

制御線は、SD - shutdown と VL0-4 になった。VL はボリュームの意味だったが、意味が変わった。

 VL4 新設 #7 (セレクタ S1)
 VL3 #15 → #19 (セレクタS0)
 VL2 #13 → #21 (E -- H で OFF)
 VL1 #38 → #26 (S1)
 VL0 #37 → #23 (S0)

あとスペースが空いたので、5V の追加コンデンサを 2個→ 3個にしておいた。

    なお、オプションを使わない選択というのは、オーディオマニアのためではない。評価のためである。聞いてわかるぐらい変わるのかどうか? 関係ない要素が入ってこないように できるだけの考慮をしたのである。

    ちなみに、LV4052 の代替品として、MAX4618 がある。
     ・Low Crosstalk: -96dB
     ・High Off-Isolation: -93dB
    とか書いてあるから、十分そうだ。一方 SN74LV4052A は、
     ・Crosstalk: -45dB
     ・Isolation: -45dB
    とか。そもそも他の信号を流さないから、これ自体は重要な項目ではない。だが、それが測定できるぐらいの信号品質はあるのだと思える。というわけで 不満ならば MAX4618 を使えば良い。LV4052 は、CKE8002 とか低グレードアンプを使う場合は、多分気にならないだろう・・・

    ・・・いやだいぶ違うようだ。
    MAX4618 の Total Harmonic Distortion(TBD) 0.017% に対して TI SN74LV4052A は Sine-wave distortion 0.1% 。Nexperia の 74LV4052 なんかは、高速動作なのだが、TBD 1.2% ! 。MAX4618 一択という印象だが、ちょっとお高く 219 円。 SN74LV4052A は 10個でも 388円。

    東芝の 74VHC4052A というのもあった。TBD 0.03% 。10 個 362 円。Crosstalk: -45dB、Isolation: -45dB 。これが良いのでは? ちなみに Maximum frequency response 230 MHz とかで高め、Ron も低め。

    BTLアンプの方を見てみると・・・NCS2211 でも THD+N 0.1 〜 0.2 % のようだ。しょぼいと思われた CKE8002 は、小出力だと 0.07 % とか。どちらもフルスイングさせると 10% とか急激に上がる。・・・というわけなので、74VHC4052A で十分としてしまおう。

    ところで、スイッチを PWM で 高速に ON/OFF するとどうなるのだろう? 1MHz とか多分可能なのだが。
    PDM テスト用の LVC1G18 で同じようなことをしているわけである。0/1 と Hi-Z の高速切り替え。もし結果が良好なら、アナログ信号と Hi-Z の高速切り替えでゲイン調整出来るかも知れない。




espzero_1.4-cnt.png
espzero R1.3

R1.4 は、AMP だけで、espzero は、R1.3 である。LCD の基板に載せたものと変わっていない。が、説明は初めて。

micro SD 周り。

全ての信号線にプルアップを付けられるようにした。また、ホットプラグ時の電圧変動の対処として、VCC との間に、フェライトビーズまたはインダクタまたはダイオードを入れられるようにした。何が良いのか良く知らない。一応 CD32 が入るようになっている。

リポ電池対応

5V をダイオードを通して、DC/DC コンバータに供給し、バッテリーの方は Pch MOSFET を通して接続。ボディダイオードで給電できるが、5V入力がOFF になれば Pch MOSFET が ON になって効率が良くなる。ただし、昇圧まではしないので、5V 端子は 5V とは限らない。3V ぐらいまで低下する可能性がある。

充電IC は、LTC4054(MPC73831/MPC73832)。あまり高速充電はできない。500mA 〜 800mA 程度なので、大容量のバッテリ向きではない。高速充電したければ、外部モジュールを付けられるようにはした。が、外部モジュールの基板は設計していない。ちなみに MCP73833 だと 1A 充電が可能なようである。

あと EN を ピンヘッダに出力しているが、都合が悪い場合 パターンカットと再ジャンパできるようにした。

変更点は以上なので、機能を使わなければ R1.2 と変わらない。




espzero_1.4-ana.png
espzero analyzer R1.3

SDIO と競合しないよう ピンアサインを変更。

 OE #15 → なし
 DIR #16 → なし
 LED #25 → BTN と共用
 LED #26 → BTN と共用
 LED #35 → なし
 ループバック → #35 - #36
 D7 #32 → #40

 ループバック追加 #18 - #22 と #15 - #16 (テスト専用で SD/SDIO と競合)

ボタンと LED は共用になった。ただ、LED に光を当てると起電力が生じる。で、ボタンと共用して誤動作を起こしたことが過去にあった。誤動作を防ぐため、逆向きのダイオードを並列に付けられるようにしてある。

また、ループバックを計 3 本付けられるようにした。追加の2本は SDIO と競合する。テスト用であって、なんのテストに使うかもイメージできていない。

そうだった。PDM 信号をキャプチャーできないかと思って付けたのだった。ラッチが1つあれば、随分楽かも -- って LVC1G374 を別の基板で使うことにしたのだった。改修ネタだ。

    ・・・と書いたが、micro SD を使えなくして、どこに保存するのだ。

    ということで、loopback は、DIN6,7,8 に出力することにした。6,7 は GPIO に抵抗を通じただけ。6 を CLK として ネガティブエッジで 7 を取り込み 8 に抵抗を通じて出力。一応は、抵抗を通しているから DIN8 以外は 普通の入力としても使える。あと DIN6,7 は pullup/pulldown の機能を持たせられる。
    制御線が1本あれば・・・DIN8 もいけるのだが・・・空いていない。
    また、外部の PDM 信号があれば、DIN6,7 を使うことにしておく。(本当はどこでも良い)。デジタルのままキャプチャーすることも出来るが、PCM に変換することも出来るという機能定義も可能。

     ループバック #35 (CLK) → DIN6 , #36 (SD) → DIN7, DIN8
     ループバック追加分 キャンセル

    デジタルでのキャプチャーは、多分 2.8MHz 程度だから、普通に デジアナ機能でキャプチャーできないといけないような気がする。しかし micro SD にファイルを作りながらというのは厳しいような。。。




ところで、キャプチャー方式だが、I2S を使うのは良いとして、DMA を使わず ループで FIFO で取り込み、そのまま QSPI で SPI Flash に送るという方式が可能かも知れない。RAM バッファが必要なくて コードもシンプルに出来る。NOR Flash は、そこそこ書き換え耐性が高く そう簡単には壊れない。それは良いとして ネックは CPU 。割り込み禁止でぶんまわして 10MB/sec だせるかどうか。また、PSRAM 8MB つきの WROVER が バッファの容量的にも書き換え耐性的にも良いのだが、今のところ考慮しない。espzero のサイズには大きくて乗らない。また、GPIO 16,17 だったか PSRAM に回されて使えないというデメリットもある。
QSPI-PROGRAM-FLASH.png
FLASH は、4bit 単位での書き込みが出来る。ただし無限に書けるわけではなく、256B ページ単位。
また、最初に 1bit 単位での コマンドとアドレスの指定が必要で 32クロックかかる。

FIFO が空の状態から初めて 32 clock たてば準備が整う。FULL にならなくて、QSPI のほうが早ければ追いついて、FIFO が空になる。FIFO は 64 段階あるようなので、サンプリングより QSPI のクロックが速ければ良い。QSPI は 80MHz が可能なはずなので楽勝。・・・ではなかった。WRITE は、バッファーに書くだけで、PAGE WRITE すればただちに 次のページを書けるわけではない。実際には 0.7ms 〜 3ms かかりその間 BUSY 状態になる。計算すれば 350 kB/sec 〜 80 kB/sec しかないではないか。全然無理だった。

QSPI-PROGRAM-PSRAM.png

一方 PSRAM の場合、BUSY など存在しない。WRITE は最初に 8+6 clock 必要だが、後は 1KB のページを超えてずっと書き込める。ページ境界を越えての書き込みは クロックを落とさないといけないのだが、133MHz → 84MHz で 問題にならない。

本当に WROVER 良いよね・・・と思うのだが、とにかく載らないのである。いや、載ることは載る。ピンヘッダと干渉しないよう工夫すれば、サイドの端子は付けられる。で IO16,IO17 は WROVER に取られて NC になっている。下側の端子の IO2, IO13,IO15 は接続できないが、いずれも SD/SDIO で使わないようにしていた GPIO。 これをジャンパして IO13 - IO17 , IO15 - IO16 とすれば、SD/SDIO は使えないという制限ができるが、取り付けだけはできる。

・・・とは書いてみたが、WROVER は使わない。使うならば microSD である。20 MB/sec で Write できる microSD もあるのだから スループット自体は良い。問題は、write 時間が不定だから バッファリングしてバックグラウンドで WRITE するしかなく、RAM バッファのサイズが一番の問題になる。これはまた別途検討しよう。



WROVER 対策

対応ではない、対策である。万難を排して WROVER 付けたいということがあるかも知れない。
その時に、できるだけ不具合がないようにしたい。

まず、WROVER で IO16,IO17 が NC になる。重要な機能は割り当てないようにしよう。
AMP ボードでは、VL0 と SD を入れ替えた。ポップノイズ対策は SD を使うので、ゲイン調整より SD が重要である。ANALYZER ボードでは、DIN4,DIN5 が使えなくなる。これは良しとしよう。

さて、万難を排すというのは、どういうことか。

zero+wrover.png

WROVER は、下にあった 10 個の端子がサイドに移動して 下に延びるのである。4 つは使っているので 配線するが、6 つは、SPI-FLASH に接続されているので使わない。PAD も作らない。
そうしたところで、ピンヘッダと干渉するのである。

・・・となると、まず絶縁しないといけない。その上で干渉する部分はピンヘッダを付けないか、下向きに付けるかの2択。付ける場合は、WROVER の前に付けてしまわないといけないし、ニッパで切って上に出てこないようにしないといけない。

ちなみに、今まで作ったボードの影響だが、LCD ボードは IO17 , IO16 を使っている。PHY ボードも IO17 を使う。電源ボードと KBD は、関係なし。




simple_snd.png

ところで DAC を使わないシンプルな サウンド回路を考えているのだが、こんなのはどうか? オーディオ出力ではなくて、警告音とかが鳴らせれば良い。また、とにかく Rspi でも使えてというのが条件。PWM しかないわけだが、モノラルでも良い。というかスピーカーアンプはモノラル。GPIO に電源ノイズが載ると嫌なので、一回ロジック回路を通して波形を整形する。

ESP32 の場合は、PWM でも良いが PDM を使う。クロックを供給しなければ、多分左右の音が混じったモノラルになる。別にはなからモノラルで出力しても良い。

あと、ヘッドホンへは常に出力されてしまうが、スピーカーは shutdown することで止められる。

実は、LCD ボードの回路。PDM と 内蔵DAC (Pi では PWM) の両方を使うような回路だったが、GPIO を節約したい。ESP32 の GPIO は多いようで意外にも割り当てが厳しい。SD/SDIO を常に使えるようにしているのが理由なのだが・・・



付録
espzero_pinx.png
espzero ピンアサイン

 ・ https://gerber-viewer.easyeda.com/
ガーバービューワ(めも)
posted by すz at 15:56| Comment(0) | TrackBack(0) | 日記
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/185108513
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック