2018年11月09日

espzero -- Raspi zero サイズ基板3種

espzero_1.2a_top.png

久々の基板設計。前記事でぐだぐだ書いて来たのだが、自分でもよく分からないので、ここでまとめようと思う。

まずこれらは何か?右から Raspi zero 用のDAC+アンプ基板。Raspi zero サイズの ESP32 ボード ー espzero 。当然ながらアンプ基板と接続することが出来る。左は espzero 用ロジアナ+簡易オシロボード。もはや Raspi zero と接続しても意味がない。なお、ハードウェアだけでソフトはない。というより、ソフトを作るための開発ボード。

左上は、冶具。Raspi zero と espzero の接続を楽にするためのもの。右上はおまけ。Raspi や espzero に DC ジャックを付けるためのもの+ シリアル,I2C 信号線引き出し。以下説明をまとめていく。
eagle ファイルとガーバー
 ・suzbrd_espzero-v1.2a-out.zip (92mm x 80mm)
 ・suzbrd_espzero-v1.2a.zip

ファイル名から分かる通りバージョンは v1.2a 。基板には R1.2 と記載している。説明はこのファイルについてのものである。

注意!改修が必要な部分が発見された。後ろでまとめて記載。

zip の ガーバーファイルをそのまま発注することが出来る。ただし、ルーター面付けしているので、elecrow とか寛容な業者を使うべきである。
 ・ https://gerber-viewer.easyeda.com/
また、zip ファイルをここに upload すると中身を確認することが出来る。

espzero_amp ボード
espzero_1.2a_amp.png

ノンオーバサンプリング DAC TDA1387 を使用した スピーカー・ヘッドホンアンプである。Raspi zero と接続できるようにしている。上のオモテ面だけで基本機能は完結する。裏面の部品はすべてオプションである。

表面:
4つの IC があるが、BTL スピーカーアンプ x2 , 2回路オペアンプ, DAC TDA1387 を使用する。DAC の出力をボルテージフォロワで受けて、低インピーダンスにして、BTL アンプに入力する。BTL アンプ自体が2次のアクティブフィルタにもなっている。ヘッドホン出力の場合、BTLの片側のアンプ出力 を抵抗、カップリングコンデンサを通してヘッドホンジャックに接続する。

裏面:オプション1
電源を安定させるため、大容量コンデンサを接続できる。その場合突入電流が流れすぎないように、D3 にダイオードを入れる。必要なければ D3 をジャンパする。大容量と言っても 6.3mmφ 表面実装が 2 つと 2012 のセラコンがひとつ。気分的なものかも知れない。
多分 6032 サイズのタンタルコンデンサも載る。6.3V 220uF 。

    突入電流を抑止するには、D3 にインダクタを入れた方が良いかも知れない。

裏面:オプション2 PWM 入力
PWM としたが、アナログ入力である。電圧レベルは 0 - 3.3v を想定している。これを 1/2 分圧して オペアンプに入力。入力はミキシングではなく、ジャンパまたは 6P スイッチで切り替える。オプション3を使う場合、分圧抵抗値は適当ではダメなので注意。

裏面:オプション3 入力レベル切り替え
アナログスイッチ 4066 を使用して、4レベルの入力レベル切り替えが出来る。2つ使用して 16 レベルにすることも可能。

裏面:オプション4
BTL アンプは、SHUTDOWN 端子の 極性が2通りある。推奨しない方のタイプを使う場合、GPIO に 3.3V 以上がかからないように、プルアップ、プルダウンの両方を付けなければならない。プルダウン 10K Ω + プルアップ 10kΩ とか。(1:1 で十分)

裏面:オプション5
4極ヘッドホンジャック PJ393 を使用する場合 裏面に付ける。(R1.3 ではヤメ)

以上が概要である。続いて詳細編

BTL アンプ:
 ・低グレード CKE8002B 2W@4Ω 1.5W@8Ω PSRR 60db 20個 $0.82
 ・高グレード NCS2211 1.5W@4Ω, 1.0W@8Ω PSRR 75db 10個 583円 @mouser
 ・その他 LM4991 3W@3Ω 2W@4Ω 1.5W@8Ω PSRR 64db 10個 $4.69
 ・逆極性 LM4890 または その互換品 XPT4890, NS4890 など

     ・BL6212 (aitendo) 100円 -- PSRR 62db 逆極性
     ・HXJ8002, MD8002A など -- CKE8002 と同程度
     ・FT690M 1.0W@8Ω PSRR 64db (逆極性)

この BTL アンプはオペアンプでもあるので、アクティブフィルタを構成している。入力は カップリングコンデンサを通した 1.5V pp を想定しているので フルスイングさせるために 3.33 倍のゲインが必要になる。

SHUTDOWN は GPIO に接続し、制御できるようにしている。デフォルトは ON 。BTL アンプは 普通 ポップノイズ対策がされているので、 特別なことはする必要がない。

なお、デフォルト OFF にする場合、オプション4を使う。

 ・http://sim.okawa-denshi.jp/OPttool.php

ここの計算サイト「オペアンプ多重帰還型フィルタ」を利用させてもらい、RC 値を決定。

CKE8002B は、aliexpress で安く買えるのだが、NCS2211 は高くないもののデジキーや mouser で買わないといけなさそう。何か他の部品を購入するついでに入手したい。

オペアンプ
 ・低グレード MCP6002 1MHz
 ・高グレード MCP6022 , LMV722 10MHz

フルスイングはしないし、入力がそんなには高インピーダンスというわけでもないため、割となんでも良さそうだが、ボルテージフォロワで使うので 0V 付近の入力特性に注意。あと、入力にコンデンサをいれて RC LPF を構成、BTL アンプと合わせて 3次にはなっている。

DAC TDA1387

ノンオーバサンプリングばかり強調されるが、ΔΣでない 昔の R2R DAC である。出力は オフセットされた 電流出力。オフセット値はなんだかよく分からないが、1mA pp である。1.5KΩでプルダウンすると 1.5V pp になるはずなので、ボルテージフォロワで受けて、出力にカップリングコンデンサを通すことにした。

オプション3 入力レベル切り替え
アナログスイッチ 74HC4066PW を使用予定。(74LVC4066PW の方が良さそう)

プルダウン抵抗値を小さくしていけば、入力レベルが小さくなっていくということで、アナログスイッチで抵抗の接続を ON/OFF する。元々の 1.5KΩは生かし抵抗を並列に追加していく。

一応抵抗値は、1.5K , 3K , 6K (12K + 12K), 12K を考えたのだが、あまりレベルを小さくは出来ない。スイッチを同時に ON にしないならば、3 段階、5 段階になってしまうが、レベルの自由度は高くなる。

    0db NC (1.5K)
    -3db 3K (1K)
    (-6db 1.5K (0.75K) )
    -9db 750 (0.5K)
    (-12db 510 (0.375K) )

    3 段階、5 段階は、こんな値が良いのかも。


ヘッドホンジャック
 ・低グレード PJ320B
 ・高グレード PJ327A
 ・裏面 PJ393 (4極) (R1.3 でヤメ)

 PJ327A.png
pj320b_.jpgpj393.jpg
好みの問題だと思うが、PJ327A, PJ393 は金メッキであり、高グレードということにしておく。
さて、BTL アンプをフルスイングさせると出力が大きすぎるので、抵抗を入れる。これも好みの問題だと思うが 100 - 150 Ωで良いのではないかと。抵抗値を大きくすれば、カップリングコンデンサの容量は小さくて良くなる。220uF までは必要なく 47uF - 100uF でも良いかも知れない。
抵抗を入れるのであれば、高い電圧はかからないので 4V 耐圧品で良いと思われる。

    180Ωでも良いのではないか?という気もしてきた。その場合 47uF で十分。

カップリングコンデンサは、6.3 φまでの 電解コンデンサ(SMD, リード) が使える。SMD タンタルコンデンサ(3528 サイズ) も想定している。もう一段大きい 6032 6.3V 220uF もいけそう。

最近は積層セラコンでも、2012 サイズで 10V 耐圧 X5R 47uF (473M) というものがある。使ってみないとわからないが、歪むので、あまり良くないという話。いやこれも好みの問題で、ノイズさえなければ、歪んだ方が良いというひとがいるかも知れない。また 47uF で良いならば、SMD タンタルコンデンサは、3215 サイズ 6.3V 耐圧もある。


espzero ボード
espzero_1.2a_cnt.png

espzero_amp ボードを利用できる ESP32 ボードとして設計。ESP32 は I2S 出力以外に 8bit DAC を持っている。この DAC を利用できるように espzero_amp の PWM 入力に合わせている。IO マトリックスを利用して PWM も割り当てられるし、RMT を使った ΔΣも想定。ESP-IDF では、LED-PWM を使用した ΔΣは既にサポートされている。RMT を使えないかという話題も出ているようである。RMT ドライバも入っているし、組み合わせて実装することは現時点で可能に思える。

ESP32 は、SD/SDIO HOST, SDIO Slave の機能があり、Raspi も SD/SDIO HOST の機能があって、GPIO に出力されている。espzero では、ピン割り当てを合わせてある。また、MicroSD ソケットを裏面に付けられるようにしてある。これだけを付けて Raspi と接続することも可能である。ただ、線を引きまわして分岐もさせているので、50MHz の高速動作で問題が出る可能性がある。Linux ドライバに対して 25MHz とかクロックを落とすような設定をしなければならない可能性がある。

適合するソケットは2種類ある。ひとつは aliexpress で "microsd socket" で検索して出てくる安物。PUSH-PUSH タイプで型番は分からないものの eagle ライブラリを見つけたので採用した。特徴は 2つのポッチ、4つの固定用タブ (うちひとつは内側にオフセット)。もうひとつは、Molex 50090 で スロットではなく、がっちり固定するタイプ。正規品はかなり高価であるが、安価なのが見つかったので採用。

    一つ目は TFC-WPB-08 という型番 (TFC-WPBP08-08 ?) 。Molex 50090 みたいなのは TFC-WHC-08 らしい。

    microsd-china.jpgmicrosd-lock.jpg
    microsd-molex.jpg  ← Molex 50090(本物)

    MicroSD は、単純にソケットと直結しただけなので、動作に問題がある可能性が高い。まず、ホットプラグ。
    挿したときに突入電流が流れて、一時的に電圧低下が起きる。コンデンサを付けているが、フェライトビーズかインダクタを通して MicroSD の VCC に接続するのが良いらしい。

    あとプルアップ。すべての信号線に 10kΩ のプルアップを入れるべきらしい。GPIO のプルアップ機能が有効なら必要ないと思ったが、ブートの動作に関係するピンがあるとまずい。

    (R1.3 でプルアップ抵抗を付け、なにか直列に付けられるパターンを入れた。SOD123 サイズ。CD34 も付く。)

電源コネクタは MicroUSB 。適合するのは、ZX62M(表面),ZX62R(リバースタイプ 裏面)である。aliexpress で売っている安物は 2個ポッチが付いているのが多いが、DRC でエラーになってしまうのでフットプリントを作れていない。ただ、ポッチを削り取ることで表面に付けられるとは思う。

DC/DC コンバーター
適合する IC は多数ある。
 ・SY8089A 2A 1MHz KVxxx 10個$1.5
 ・SY8009A 1.5A 1.5MHz ADxxx
 ・SY8008C 1.2A 1.5MHz ACxxx 10個$1.2
 ・SY8008B 1A 1.5MHz ABxxx

 ・NCP1529 1A 1.7MHz DXJAYW 10個$1.1
 ・MT3410L 1.3A 1.5MHz 10個 AS11 10個$0.9 (〜 6V)

これらの FB 電圧は 0.6V 。3.3V 出力にするには、68K + 15K で出力を分圧するとか。微調整したり、コンデンサ付けたりできるように、抵抗パターンは 2個づつにしてある。
また duty 100% をサポートしているので、低電圧になったときに MOS-FET を通して導通する。バッテリー駆動をするには都合が良い特性になっている。

インダクタは 2.2uH 。CD54 を使う予定。定格は 2.8A とか。0420 のメタルアロイ型 -- キャラメルのような外見 -- も付く 。こちらの方が高性能で高価。

ボタン

サイドに2つ、裏面に2つ付けられるようにした。サイドの型番は TD-15EA とか。aliexpress では "tact switch smd side" で検索。裏面は小型の 2ピンタイプ TD-85XU とか。aliexpress で型番が出てくることはあまりないので注意。"tact switch smd 2pin" で検索して 3x4 mm のもの。

    tactsw-side.jpgtactsw-2pin.jpg

サイドは EN と GPIO0 で、シリアルだけ接続すれば、ファームウェアの書き換えが出来るようにしている。シリアルは DC ジャック基板から取り出すことも出来る。裏面は SERVER_VP と SERVER_VN に接続。ひとつは MicroSD の detect とも接続している。これはオプションであり頻繁に使うことを想定していない。OTA 指示用? また、パターンを利用して、SERVER_VP と SERVER_VN を引き出すことも可能である。あと、Raspi と接続するのに便利な冶具も作った -- 詳細は別途。

ESP32 は OTA が可能である。こなれてくれば、OTA ばかり使うのではないかと思っている。そのため、USB シリアルなどは付けない方針。


espzero_analyzer ボード
espzero_1.2a_ana.png

ロジアナと簡易オシロの機能。LED とボタン、OLED も付く。ハードを作っただけで、これだけで何かできるわけではない。また、Raspi に付けて不具合は起きないが機能を利用できないだろうから、あまり意味がない。

ロジアナ部

LVC245PW を通して 8bit ロジアナにすることを想定している。測定範囲は、2V 〜 5.5V ぐらい。ESP32 で利用できる機能は、I2S とか RMT とか。

I2S は、パラレル入力して DMA が出来る。タイミングに内部クロックを使えるかどうか分からなかったので、信号線とは別に GPIO を 2 つ接続して ループバックできるようにしてはある。
RMT は信号の ON/OFF 期間を測定することが出来、FIFO に 32 ビットの結果を格納していく。クロックは(多分) 80MHz が可能である。

簡易オシロ

ESP32 には ADC が2つある。2チャンネルの入力にそれぞれを割り当て、連続入力できるようにしてある。ESP32 の ADC は信用ならないが、波形を見るぐらいは出来るはず。設定次第だが、数 Msps が可能なようだ。ADC に対して 入力切替 をしなければ、変な値が取れてしまうこともないと思われる。

それぞれの ADC 入力には、オペアンプを接続してある。負帰還で使い -5V 〜 10V の測定範囲を想定。
負帰還にはコンデンサも接続できて LPF を構成できるようにしてある。2回路オペアンプを使用するが、上記の 10 MHz 品で良いのではないかと。

その他
ボタンは上記のサイドタイプ。OLED は I2C 接続で、よくある小型のタイプ。3cm 角ぐらいで、丁度基板に被さるようにコネクタ位置を調整してある。

オペアンプ専用電源 (3.3V)
TAR5SB33 または、MIC5205 。ノイズ低減用コンデンサを付けられる SOT23-5 タイプ。NOISE 端子に付ける コンデンサの値はそれぞれ違うので注意。

仮想グランド専用電源 (1.8V)
 ・低グレード XC6206P ±2% ,100 ppm/℃
 ・高グレード MCP1700 ±0.4% , 50 ppm/℃

1/2 VCC ではなく、専用電源にした。MCP1700 などは精度が高く温度特性も良い。レギュレータなのでダミーロード必須。

これらの電源電圧で、Ri = 47K Ω、Rf = 10K Ωの負帰還にすると 入力範囲は -5V 〜 10V ぐらいになる。
だいたいの用途はこれで良いと思うので、入力切替は付けなかった。また、ADC がどのような感じで使えるか見極めたいのである。素直な回路に留めておこうと考えた。

おまけ基板
espzero_1.2a_opt.png

DJ ジャック取り付け基板

2x5 のピンヘッダで Raspi, espzero の #1-#10 に接続する。DC ジャックは、下側に取り付ける。一応 I2C とシリアルを取り出せるようにしている。

DC/DC コンバータを取り付けると、9V - 20V の AC アダプタが使える。使わない場合は VIN と 5VOUT をジャンパして 5V ACアダプタを使う。
DC/DC コンバータは、aliexpress で "MINI 360 DC" を検索。やたらに安い。3A 出力ということになっているが、連続供給できるのは、2A 弱のようだ。インダクタが貧弱そうに見えるがメタルアロイ型で 実は高級品。10uH と大きな値でサイズが小さいので無理があるのかも。放熱の問題もある。せめて、下の基板との間になにか挟んだ方が良い。1mm 厚のシリコンシートとか。他には、エアコン用の粘土とか。品を選ばないといけないが、絶縁で高温に対応したものがある。なお、DC ジャックの足は短く切って 表面に出ないようにしないといけない。

なお、電流を連続して流しすぎると、サーマルシャットダウンが働いて、秒ぐらい OFF になりまた ON になるという動作を繰り返す。

ブリッジ(冶具)

2x5 の ピンソケット を取り付けて、 Raspi, espzero を接続するためのもの。1枚しかないが、#1-#10 と #31-#40 をそれぞれ接続する。長さは、内側で 40mm , 外側で 46mm 。

#8,#10 (TXD, RXD) あるいは #38,#40 (espzero EN, GPIO) をクロスにすることが出来る。
なお、#1 も接続してしまうが、3.3V 出力同士の接続になるのでうまくない。これにもジャンパを入れた方が良かった。接続が必要ないのであれば、ピンソケットのピンを抜くとか パターンカットしたほうが良い。



ピンアサイン
espzero ボード
espzero_1.2a_cnt_pin.jpg

基本 Rasi と互換になるように設計した。が、非互換の部分がある。水色のところである。
右から #11 は NC - 割り当てられなかった。#23,#24 は入力専用GPIO 。#37 GPIO0 でブートセレクト機能があるので、電源ON のときの状態に注意。また、ボタンに接続されているので、動作中にボタンを押すとまずい場合がある。最後 #38 EN -- GPIO ではない。

白と緑は、GPIO で、自由に機能の割り当てができるが、専用の機能もある。緑は DAC 出力が出来る。Raspi の PWM 出力に合わせてある。白〇 は、SD/SDIO でこれも Raspi に合わせ、かつ オプションの MicroSD ソケットに接続してある。

espzero amp ボード
espzero_1.2a_amp_pin.jpg

I2S の BCK, LR, DAT は、Raspi の I2S 出力に合わせた。PWM 入力も Raspi の PWM ピンである。SD は BTL アンプの SHUTDOWN で H にすると アンプOFF (逆論理の場合もある)。VL3-0 は オプションの 入力レベル 切り替えで 3が MSB 。

Raspi では、問題が起きないが、肝心の espzero ボードでは問題がある。#24 SD だが、入力専用ピンになってしまった。espzero ボードのほうを変更するつもりはないので、SHUTDOWN を使うならば、#26 とジャンパして #26 に変更する必要がある。また、入力レベル切り替え #38 VL1 は、EN ピン。使わなければ問題ないが、もし使うのであれば、裏面のパターンをカットして、#32 につなぎかえる。他の VL ピンもすべて SD/SDIO ピンと重なっている。例えば espzero ボードに SD カードを接続して使う場合、入力レベル切り替えを使ってはならない。

もし、次の版をつくるなら、SD, VL3-0 ピンは移動したい。(・・・と書いたが、入力専用ピンの位置が間違っていた。)
 SD #24 → #24 (変更なし)

 VL3 #15 → #19
 VL2 #13 → #21
 VL1 #38 → #26
 VL0 #37 → #23

espzero analyzer ボード
espzero_1.2a_ana_pin.jpg

電源は 5V,3.3V の両方を利用している。5V はアナログ系のレギュレータ用。
#31, #32 は、ADC 入力で、別々の ADC に接続される。#35 LED は IO0 と被っている。使わないほうが良い。#36,#38 は、信号名が記載ないのに、なにやら接続がある。ループバックのつもりでパターンを入れたが EN だったので使えない。必要ないはずなのである。もしループバックが必要になるなら、#37 - #40 間に 2012 の抵抗を入れるつもり。#27 OE, #28 DIR は接続してみたが、いらない。

これも espzero ボードの SD/SDIO と被っている。もし SD カードにログを取るとかの利用が有用なら、次版では、ピンの移動を考えたい。
 OE #15 → なし
 DIR #16 → なし
 LED #25 → BTN と共用
 LED #26 → BTN と共用
 LED #35 → なし
 ループバック → #35 #36
 D7 #32 → #40
そういえば、LED に光を当てると起電力が生じる。で、ボタンと共用して誤動作を起こしたことがあった。g動作を防ぐには、逆向きのダイオードを並列に付けるらしい。



ESP32 での ADC, パラレル入力の使い方。

実は見込みだけで基板を設計している。ちゃんとできるかどうか確認しておこう。

ESP32-ADC1.jpg

テクニカルマニュアルに載っている ADC 周りのブロック図。
ADC1,ADC2 に接続されている入力をそれぞれ逐次測定して DMA で送り出すことが出来る。scanning mode というのが3つあって Double mode を使うと ADC1,ADC2 を同時に測定する。この場合 16bit のデータに チャネルと ADC の 5bit の情報が付加され、ADC データは 11bit になる。

さて、DMA だが、I2S を使う。
ESP32-I2S1.jpg

これは、I2S の I/O 部分。ADC も DAC も LCD も カメラも I2S を使う。I2S をマスターしないと話にならないし、逆に I2C を使えれば応用が効く。

I2S は DMA が出来るが、CPU で FIFO とやり取りすることも可能である。キャプチャは、FIFO を使うほうが良いような気がする。その FIFO だが 32bit 単位。先の ADC double モードでは、2つの ADC の 16 bit データが 32bit にパックされる。いや 32bit x2 というのも RX_FIFO_MOD の設定で可能なような・・・TX_FIFO_MOD というのもあり、
 ・シングルチャネル 16bit
 ・ダブルチャネル 16bit
 ・シングルチャネル 32bit
 ・ダブルチャネル 32bit
の4種類がある。シングルチャネル 16bitでは、2 つのデータを32bit にパックするようだ。
FIFO のサイズは、どうも TX 64 段、 RX 64 段。デジアナの場合、シングルチャネル 16bit を使えば良さそうである。

ここまでは分かった。ADC の場合は問題なくできそうである。では デジアナは?採取タイミングとかどうなるのだろう?

TX_SLAVE_MOD, RX_SLAVE_MOD という 設定 bit がある。これで、同期信号の方向を決めるようだ。シリアルの場合、BCK_in(out)/WS_in(out) の2つを使うが、パラレルの場合は WS_in(out) が カメラ での PCK (ピクセルクロック)に相当する。他に H_SYNC,V_SYNC,H_ENABLE という3つの入力がある。

この入力は、GPIO MATRIX を通して任意の GPIO に割り当てられるが、GPIO48 を指定すると常に 0, GPIO56 を指定すると常に 1 が入力される。要するにこれを切り替えることで、操作が出来、 実際の GPIO を割り当てなくとも良い。割り当てた場合は、トリガに利用できる(かも)。そして ADC にも有効に出来るかも知れない。

結局、RX_SLAVE_MOD=1 で I_WS_in のタイミングでのパラレルのキャプチャが出来る。どのピンを使うかも自由である。極性の指定も多分あるだろう。I_WS_out もあるのだから 内部タイミングも出来ると思うのだが ... 説明が見つけられない。

面倒になってきた。ループバックが1つあれば、PWM でタイミングを作れ、RX_SLAVE_MOD=1 だけでもいける思うので、内部タイミングは課題ということにしておこう。



ESP32 のクロック

ESP32-I2S2.jpg
 PLL_D2_CLK : 160MHz
 APLL_CLK : I2S 専用 PLL
 I2Sn_CLK : Master CLK
APLL は、Audio で 正確な周波数にしたいとき使うようだ。しかし、内蔵ADC,内蔵DAC を使う場合は PLL_D2_CLK を使えとも書いてある。以降 PLL_D2_CLK のみ考える。

 N: REG_CLKM_DIV_NUM [7: 0]
 b: I2S_CLKM_DIV_B[5:0]
 a: I2S_CLKM_DIV_A[5:0]
 M: I2S_TX_BCK_DIV_NUM[5:0],I2S_RX_BCK_DIV_NUM[5:0]

この分周方法は良くわからない。CLK を間引いて微調整するのだろうか? それでは困るので b/a を 0 か 1 と考えよう。BCK の最低クロックは、10kHz ぐらい。ADC 2ch だと WS = 1/2 BCK のような気がする。パラレル入力だと 1ch で WS = BCLK 。

I2S は、サンプリング間隔を決めているだけで、ADC や DAC が動作するクロックは別にある。ADC は、80MHz を分周したクロックで動作し、n クロックでデータを採取する。分周比も n もパラメータで自由に設定できるが、正しいデータを採取するためには適切な値を設定しなければならない。デフォルトは 1/1 n=8 だったと思う。n=8 はないと思うのだが・・・適当なのだろうか?

DAC は、8MHz x SENS_SAR_SW_FSTEP[15:0]/65536 のクロック。良く分からないのだが、コサイン波 (CW) generator というのがあり、それと同期するための クロックのようだ。とにかく、8MHz 近くまでは設定でき、このクロックの整数倍の間隔でサンプリングすると良いのだろう。

これぐらい高速であれば、ディザというか ΔΣで 中間値の表現が出来る。DSD に 2.8MHz 1bit があるのだから、 8bit だからダメということにならないのではないか。

さて、簡易オシロの実装だが、リングバッファを 100KB とか用意して FIFO 使ってループでデータを取得。同時に余計なデータを取って圧縮する。開始条件前からデータを取得しておいて、開始条件のデータが上書きされる前に終わり。後は解析するなり、ホストに転送するなりする。

簡易オシロをそう作ったなら、ロジアナも同じように実装するのだろう。ただ変化が多くないだろうから、圧縮したいところ。周波数が上がってくれば、それも無理になるから見極めが難しい。また、外部クロックとかトリガをサポートして、ただ バッファに詰め込むだけをするのが良いのか、いろいろ考えられる。

結局はソフトが必要になるから、 PulseView の他の機器の機能をみながら決めていくのだろう。

こんなところで。ここでは、ハードウェアにどういう機能があるか、あるいは必要かということに留めて、深くは追及しない。


PDM
ESP32-I2S3_PDM.jpg
コサイン波(CW)ジェネレータ も知らなかったが、他にも付加機能があった。

I/O だけ見て、デジアナに使えるかと思ったが、違った。パラレルのデータを 取り込みデジタルフィルターをかけて 1/64 , 1/128 にダウンサンプリングして I2S で取り込むというもの。逆もある。PCM データを オーバーサンプリングして 48×128 kHz 24 bit データーに変換して出力。1ch しかないようだし、ピンも沢山使うし、一体何に使うのか分からないがなんかすごい。

いやなんか違うみたいだ。ググると 1bit 出力で DAC として実験しているひとがいる。多ビットにはしない? その上ステレオ? 気になる ・・・もうすこし調べてみよう。

とりあえず PDM 入力D級アンプ MAX98356 の説明

    デジタルPDM (パルス密度変調)入力D級パワーアンプで、D級の効率を備えたAB級オーディオ性能を提供します。このICは、単一の利得選択入力(GAIN)によって設定される5つの選択可能な利得設定(3dB、6dB、9dB、12dB、および15dB)を提供します。

    MAX98356は、ステレオパルス密度変調(SPDM)入力信号をDACに直接供給します。PDM_CLKの立上りエッジのデータは左チャネルデータとみなされ、PDM_CLKの立下りエッジのデータは右チャネルとみなされます。

あぁ、そういうものなのか。64fs とか 128fs だから DSD と同じレベルの出力が可能ということか。
とにかく 1 bit だけ考えておけば良いようだ。で、入力も出来ると。

    上の図 良く見たら最上位ビットの1bit だった。

ということは・・・ 受信した DSD のデータをうまく出力できれば、I2S で取り込めて、もう1つの I2S で DAC に出力することも可能! 要するに bluetooth のなんとかプロトコルに対応できるのかも。あるいは、自分で外部に出した PDM データを取り込んで DSD フォーマットに変換することも。ハードウェア的には、2 対のループバックがあると嬉しいのかも知れない。

出力された PDM データを取り込むのは 2 つ SPI-slave があればいけそうな気がする。

    PDM_latch.jpg

    ラッチとインバータがあれば、PDM 出力を受けられるか。ラッチは、74LVC74 とか。インバータは 74LVC1G14 を持ってる。LVC は ±24mA 流せるから、そのまま D級アンプになるかも。

    24mA しか流せないわけだから、100 Ω か 150 Ω 抵抗が必要。ヘッドホンならカップリングコンデンサ 47 uFぐらいか。LPF は、抵抗が入っているから RC にする。0.1uF でも大きすぎる。0.47uF か 0.22uF あたり。BTL にして、小さなスピーカーも鳴らせる。その場合カップリングコンデンサは不要。

    と書いたが、ラッチとか アンプより大きいし、下手したら高い。困ったものである。

    しかし、PDM があると知った以上、次版で載せようと思う。ただ、場所も信号線もない。
    裏面のヘッドホンジャックをなしにすれば・・・場所は作れる。信号線のほうだが、TDA1387 と排他実装にしようと思う。

      なんとか入った。信号線は他にないわけではないのだが、配線が厳しい。TDA1387 から引っ張ってくるほうがまだ楽なのであった。電源は専用のレギュレータを使えるようにした。ノイズ的に違うのかどうか?

      IC は、SOP14 の 74LVC74 か 74HC74 。Clock frequency を見ると HC は 15MHz ぐらいで LVC が 100MHz -- どちらも間に合うが、精度の問題があるから速いほうが良い。あとインバータは SOT23-5 の 74LVC1G07 とか 74LVC1G14 とか 、間違って買った SC70 も一応使えるようフットプリントを修正。

      出力は、1.5K Ωを通して、TDA1387 の出力にパラ接続。1.5K Ωでプルダウンしているから 1.6V pp 。 電流は 3KΩ駆動だと 1mA しか流さない。HC の駆動能力は 5V 電源でも 4mA 。LVC は 24mA 。HC は余裕がないから、期待した波形にならない可能性がある。



Raspi 用 LCD を espzero につなげられるか?

SPI LCD なら普通につながるはず。問題は
 ・https://www.raspberrypi.org/documentation/hardware/raspberrypi/dpi/
Raspi の DPI を使った LCD 。

DPI-Raspi.jpg

当たり前のように無理なのである。N.C. にしているところのピンを使っているのはまだ良いのである。未使用ピンからジャンパすれば良い。しかし #38 EN だけは無理。H レベル固定で良いなら良いが、red[6] になっているから、さすがにダメ。・・・せめて、ジャンパできるように、EN を無接続にするための何かを入れたい。

別に使いたいわけではないのだが、どうしても使えないというのは面白くないので。


リポ電池対応
5v-Lipo.jpg

 ・https://www.olimex.com/Products/IoT/ESP32/ESP32-POE/open-source-hardware

Olimex ESP32-POE の回路図見てたら、バッテリー対応をこんな風にやっていることに気が付いた。
5V をダイオードを通して、DC/DC コンバータに供給し、バッテリーの方は Pch MOSFET にしている。
内部にダイオードがあるのでスイッチされなくともなんとか電源を供給するが、5V の電圧がちゃんと落ちればスイッチが入って、導通する。
DC/DC コンバータの供給電圧は 3.3v 以上とは限らない・・というより 一瞬 2.5V ぐらいまで落ちるかも。それでも duty 100% に対応しているので、低抵抗で電源を供給する。

M5Stick は、一回 5V に昇圧する 回路だったが、M5Stick Camera なんかは、(多分) こういう方式に変わっている。

回路スペースがあるなら、リポ電池対応をいれてみたい。といっても MCP73833 ではなくて、昔からある LTC4054(MPC73831/MPC73831)、サイズ的に無理そうだし。MCP73833 とか高機能なものが必要であれば、MINI 360 のパターンを使って モジュールを追加できるようにはしようと思う。

ちなみに、なぜ ESP32-POE の回路図 を見てたかというと、イーサのボードも設計してみたかったから。LAN8720A のイーサボードは安価に買えるから、頑張って作る必要などないのだが、作ってみたいのである。

ESP32 で、高速に通信できるのは、SD/SDIO だが、PHY チップを自由に使えれば、対向で直接接続することも可能。ピンが重なってないから、高速通信の手段を 2 つ持てるのである。だからどう?という気もするが。一応マスターしておきたい。

PDM モノラル

PDM-mono.jpg

実は、いろいろと espzero につながる基板を検討しているのだが、LCD はあっても良いかなと思っている。LCD は種類がありすぎるのだが、1.8 インチ SPI 接続のものが、サイズ的に良いかんじで、入手性も良さそう。LCD だけでは能がないので、ボタンとスピーカーぐらいは付けようかと。

で、PDM だが、モノラルなら ラッチ1つで済む。いや、ラッチもいらないと言えばいらないのだが、ちゃんと整形した方形波にしたい。1回路ラッチにもいろいろあって、出力を OFF にできる 74LVC1G374 というのもある。これを使うと 内蔵 DAC 出力と直結して、どちらかを使うということができる。

直結すればインピーダンスが下がるので、ボルテージフォロワはなしにする。で、ちょっとゲインをかけて BTL アンプで出力。ちょっと音を出したいだけなので、5V BTL では音が大きすぎると思うが一応。


ちょっとメモだけ
 ・https://github.com/karawin/Ka-Radio32
 ・https://github.com/MrBuddyCasino/ESP32_MP3_Decoder/blob/master/README.md
posted by すz at 22:11| Comment(0) | TrackBack(0) | espzero
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

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


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

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