前回の続きです。
前回といっても、去年のハナシで、週刊どころか、月刊、いや季刊ぐらいのスパンですけれども・・・。0xF9C7
#まぁ、Audi R8をカイゾーしたり、車検に出したりとか、いろいろ、いろいろありましてね。
前回は、「タイニー・ファランクス」に、7.0インチのTFTディスプレイを取り付け、HDMIスプリッターで信号を分岐させました。
んが、以前に書いたとおり、HDMI経由のオーディオ出力は、信じられないぐらいノイズが乗った、ダメダメな音質でした。
#正確には、HDMIのオーディオ信号が悪いのではなく、TFTディスプレイの基板に載っている、デコーダー以降のオーディオ回路が、ダメダメな訳ですが。
と、いうことで、
Jetson TX2用に、別途、オーディオ出力を用意することにしました。
追加した回路は、こちら。
Adafruitの「I2S Stereo Decoder - UDA1334A Breakout」(6.95ドル)です。
こちらに、以前に作製した、Texas InstrumentsのD級アンプ、「TPA2006」を組み合わせます。
回路は、秋月の「TPA2006使用 超小型D級アンプキット」(300円)を使用しました。
このTPA2006は、チップ周辺に接続するインダクタやコンデンサなどの特性を吟味することにより、高級オーディオに匹敵するぐらいの音質が得られるようです。
と、いうことで、無駄に、高音質化を図ってみました。0xF9F8
D級アンプ専用の電源を用意するとともに、電源を起点として、“一筆書き”のように配線にしてあり、途中で不要な分岐をしないようにしています。
また、アナログ系とデジタル系のGNDを、完全にアイソレートしています。
さらに、スピーカー出力の正負の信号は、シンメトリーになるよう部品を配置し、配線しています。
で、ですね。
当初は、Jetson TX2のマザーボード上の「Expansion Header」(J21, 40pin)から必要な信号を拾っていたのですが、トラブルが発生してしまいました。
UDA1334AをI2S接続するため、Expansion Headerに出ている「I2S0_SCLK」「I2S0_LRCLK」「I2S0_SDOUT」の各信号を取り出し、動作確認をしていました。
Jetson TX2側は、「jetson-io.py」を使って「i2s0」を有効にしただけで音声が出たため、しめしめと思っていたのですが、D級アンプのゲインを調整するため、いくつか抵抗を取り換えているうち、音声にノイズが入り始め、終いには完全にノイズだけになってしまいました。
切り分けにかなり手こずったのですが、どうやら、Jetson TX2からの1.8Vの信号を3.3Vに変換する双方向レベルシフター(TXB0108)が、静電負荷に弱いらしく、ブレッドボードから伸びたテストピンを何度か抜き差ししているうち、壊してしまったようです。0xF9FC
Notes: | 3. These pins connect to TI TXB0108 level translators. The voltage level at the header pins can be selected by J24 to be 1.8V (2-3) or 3.3V (1-2). Due to the design of these devices, the output drivers are very weak so they can be overdriven by another connected device output for bidirectional support. |
よく読んでみると、確かに「Jetson TX2Developer Kit Carrier Board Specification」にも、「TXB0108は非常に弱いので注意せよ」と書いてありました・・・。0xF9D3
で、ですね。
壊れてしまっては仕方がないため、マザーボード上に表面実装されているTXB0108を、熱で剥がして交換するという荒ワザもありますが、これはリスクが大き過ぎるため、別の方法を取ることにしました。
都合の良いことに、近くにある「GPIO Expansion Header」(J26, 30pin)からも、I2S接続に必要な信号を取り出すことができます。
ただし、このピンヘッダに出ている信号(I2S1)は、1.8Vのため、UDA1334Aに接続するためには、3.3Vに変換してやる必要があります。
TXB0108に代わるレベルシフターとして、Texas Instrumentsの「SN74AVC4T774」を使うことにしました。
TSSOPの16pinパッケージ(0.65mmピッチ)であることから、秋月の「DIP変換基板 SSOP16 0.635mm」(30円/枚)を使ってピッチを変換し、画像のようなドーターボードを作製しました。
このような感じで、マザーボード上にドーターボードを取り付けました。
ドーターボードとオーディオ基板との間は、信号にノイズが乗らないよう、シールドケーブルを作製しました。
基台の下段に、オーディオ基板を設置し、スピーカーを接続したところです。
んが、しかし・・・、
テストボイスを再生してみると、ジャリジャリと、すんごい雑音がします。
状況からして、このノイズは、デコーダー以降の、アンプの問題ではないと想定しました。
試しに、ビットレートの高い音声を再生してみると、原音はかき消され、ほとんど雑音になってしまいます。
どうやら、I2S信号は非常にノイズに弱いらしく、信号発生源とデコーダーとの距離が長くなってしまうと、シールドケーブルを以てしても、デコーダー側で同期が取れなくなってしまうようです。
#インピーダンス整合をしっかり取れば、また別の結果になったと思いますが、アナログ屋さんではないので、そこまでは追い込みませんでした。
よってからに、基台の下段でデコードするのは諦め、Jetson TX2用のドーターボードを作り直すことにしました。
このような感じで、GPIO Expansion Headerの直近に、SN74AVC4T774を介して、UDA1334Aを配置するようにします。
UDA1334Aがドーターボード上に移ったことから、音声信号は、ステレオミニプラグケーブルで、オーディオ回路に接続します。
これに伴い、オーディオ回路上に、ステレオミニジャックを新設します。
せっかくなので、ノイズ対策として、TPA2006用の電源回路の出力側に、秋月の「EMI除去フィルター 0.1uF」(35円/個)を入れておきました。
ついでに、D級アンプのゲインも、標準の3倍(100kΩ)から10倍(30kΩ)に変更しておきました。
余談ですが、こちらは、今回、比較のために購入した、ユニバーサル基板に取り付けることができる、ステレオミニジャックです。
一番左は、Adafruitの「Breadboard-Friendly 3.5mm Stereo Headphone Jack」(0.95ドル)です。その名のとおり、ブレッドボード用ですが、足をミニペンチで真っ直ぐに戻すと、ぎりぎりユニバーサル基板に取り付けることができます。
左から2番目は、SparkFunの「TRRS 3.5mm Jack Breakout」(4.50ドル)で、左から3番目は、同じくSparkFunの「Audio Jack Breakout」(1.05ドル)に「Audio Jack 3.5mm」(1.60ドル)を取り付けたものです。
いずれもブレッドボード用で、ピンヘッダが片側(右側や後ろ側)にしか付いておらず、ユニバーサル基板に取り付けた場合には、ジャックがグラついて安定しません。
いろいろ購入しましたが、けっきょく、秋月の「3.5mmステレオミニジャックDIP化キット」(150円)を採用することにしました。こちらは、後ろ側に加え左右側面からも変換基板を支持することができます。
基台の下段に、作り直したオーディオ基板を設置し、スピーカーを接続したところです。
リヤパネルを取り付け、Jetson TX2の起動を確認します。
ハードウェアができたところで、ソフトウェアの設定です。
$ aplay -l
**** ハードウェアデバイス PLAYBACK のリスト ****
(略)
カード 1: tegrasndt186ref [tegra-snd-t186ref-mobile-rt565x], デバイス 0: ADMAIF1 CIF ADMAIF1-0 []
サブデバイス: 1/1
サブデバイス #0: subdevice #0
(略)
はじめに、aplayコマンドで、接続されているデバイス名を得ます。
$ alsactl init tegrasndt186ref
$ amixer -c tegrasndt186ref sset 'I2S2 Mux' MVC1
$ amixer -c tegrasndt186ref sset 'MVC1 Mux' ADMAIF1
$ amixer -c tegrasndt186ref sset 'MVC1 Vol' 10667
デバイス名「tegrasndt186ref」を初期化した上で、I2S2をMVC1を介してADMAIF1に接続します。
MVC1(Master Volume Control 1)のボリュームは、0~16,000の範囲で設定することができ、音声が歪まない程度の大きさ(2/3, 66.67%, 10,667)に設定しました。
と、いうことで、完成。0xF9CF
いつものように、これまでの歩みを、動画にまとめてみました。
で、ですね。
上手く動いたのは良いのですが、Jetson TX2を起動した時や、オーディオ出力を使うアプリケーションを切り替えた時に、スピーカーから雑音がすることがあります。
TPA2006には、#SD(Shut Down)信号というものがあり(“#”は負論理の意)、これをLにすることで、意図せぬタイミングでのスピーカー出力を抑止することができます。
そこで、Jetson TX2のExpansion HeaderのGPIOから、スピーカー出力を制御できるよう、回路を追加しました。
GPIOのピンに直接接続しても動きますが、また壊してしまうのが怖いので、マザーボード上の回路に影響を与えないよう工夫しました。
NchのMOS-FETによるインバータを2段に接続し、制限抵抗を入れることで、マザーボードへの流れ込み電流を僅少にしています。
ついでに、だいぶ前に作製してあった、DCモータのコントローラ(弐号機)も、作り直しました。
モータに電源を供給するDC-DCコンバータは、以前に秋月で売られていた「HRD05003」です。(すでにディスコン)
外付け抵抗で回路定数を変更し、12Vから3Vを取り出しています。電流は、5Aまで供給することができます。
電源の開閉は、TrossenRobotics「ArbotiX-M」の5V系ではなく、nVIDIA「Jetson TX2」の3.3V系で制御できるよう、回路を見直しています。
こちらも、NchのMOS-FETとPchのパワーMOS-FETを組み合わせて2段にし、インバータとハイサイドスイッチを構成しています。
(つづく)
Post Comment