2010年2月20日土曜日

USB FMトランスミッタ: お手上げ!


Si4710を使ったFMトランスミッタですが、うまく動かせないでいます。
ソフトとハードの両方の問題を抱えているようで、ひとまず作業ストップ。
とりあえず、現時点までの成果を備忘録がてら掲載します。


問題点

  • Si4710をアナログ入力とした場合、Lチャンネルの音がまったく出ない。
ミューティングは利いていないはず。
    QFNのはんだ付け不良でLチャンネル入力がつながっていない?
  • Si4710をデジタル入力とした場合、送信出力が出ない。
コマンドが不正?
    QFNのはんだ付け不良でDCLK入力がつながっていない?


基板の外観

 製作後の設計変更や修正でジャンパが増えてしまいました。


基板おもて



基板うら

回路図
 画像をアップしたら、見にくくリサイズされてしまいました。

回路図


電源
PCからUSB経由で電源の供給を受けます。USBのVBUS端子の電圧は5Vで、ローパワーデバイスは100mA、ハイパワーデバイスは500mA(USB2.0)までです。500mAまで使用するには、PCのUSBコントローラと通信して使用電流を設定する必要があります。今回は、動作の自由度を考えてPCM2707をセルフパワーとして設定していますが、PC側で電源を遮断されることもなく、実際にはUSBから電源供給を受けるバスパワーとして動作させています。
 それに、(高級なPCはともかく)現実的にはUSBコントローラ側で詳細に電流を管理しているとは思えず、実際にはセルフパワー扱いでも100mA以上の電流が取り出せるのではと思っています。(巷で売られているUSB携帯充電器とかUSB扇風機にコントローラチップが入っているとは思えません)
VBUS端子の5Vを、LDOの3端子レギュレータで3.3Vに安定化して、各負荷に供給します。クリスタルオシレータモジュールも3.3V動作のものを選定しています。なお、回路がショートしたりしてもPC側に影響を与えないよう、念のためポリスイッチを電源ラインに挿入しています。
なお、USBの規格書は、usb.orgからダウンロードできます。が、ドキュメントが膨大でとても読み込めません。


USB miniBコネクタ
 HDDケースにもともとついていたコネクタはUSB miniBコネクタでした。今まで使ったことのあるBコネクタは4ピンですが、このminiBコネクタは5ピンです。どうもUSB On-The-GoというUSB2.0を補足する規格に対応した"ID"端子が追加されている模様で、ホスト側(ID端子をGNDに接続)あるいはデバイス側(ID端子はオープン)かの判別に使われるそうです。とりあえずオープンにしておきます。

USBの信号電圧
 VBUSは5Vですが、2つの信号線D+, D-の信号電圧は3.3V系です。USB機器が接続されたことをPC側に伝えるためD+端子のプルアップは3.3V系のロジックに接続します。

音楽信号を伝送中のUSBの波形


高周波回路
 Si4710に内蔵されたバリキャップと外付けのコイルとで同調回路が構成されています。このコイルから2pFのコンデンサで出力を取り出すわけですが、2pFのインピーダンスはFM帯でも1kΩくらいあるのでかなり出力が低下します。図面では、さらに10dBのアッテネータを挿入しているので、出力レベルは実測で77dBuV(出力115dBuV設定時)くらいでした。
アンテナ出力のSMAコネクタには、基板エッジ用なるものを選びました。まさかこんな都合の良い製品があるとは・・・。
基板エッジ用コネクタ(Molex社データシートより)


I2Cインターフェース
Si4710の設定はI2Cインターフェースで行うので、制御用にAtmelのAVRチップ、ATMEGA8Lを使います。当初、SPIインターフェースで行うつもりでしたが、手持ちのISPライタで当該機能を有効にするヒューズビットの書き換えができないことがわかり急遽I2Cインターフェースに変更しました。今後の製作でもI2Cを使う予定があるのでこれを機会に覚えます。

 また、I2Cインターフェースは、バスラインをプルアップする必要があります。このプルアップ抵抗の決め方は、AVRのデータシートに記載されていました。SCLクロック周波数が100kHz以下なら、最小 (Vcc - 0.4V)/3mA から 最大1000 ns/Cbです。AVRの電源電圧は3.3Vなので、最小値は(3.3V-0.4V)/3mA = 約1kΩ。AVRの入力ピン容量は10pF、Si4710は50pF、I2Cバスの静電容量はよくわかりませんが、仮にこれらの合計を100 pFとすれば、最大1000 ns/100pF = 10kΩとなります。今回は、間をとって4.7kΩとしました。


SPIインターフェース
 PCM2707のROMに書かれたUSBディスクリプタ情報の書き換えを、SPIインターフェース経由で行います。前述のとおり、AVRに組み込まれた専用ハードは使用しませんでした。


AVRのクロック
 Si4710をデジタル入力で使用するには、サンプルレート値を設定する必要があります。ところが、PCM2707からはそのような情報が直接的には出てきません。そこで、I2SのLRクロック周期を測定することにしました。
 AVRには校正済みのRC発振器が内蔵されていますが、校正前の公称精度は±3%と役不足なのでクリスタルを使用しました。


AVRのISPコネクタ
 AVR-ISPの標準コネクタは、2.5mmピッチの6ピンタイプです。しかし、このコネクタは高さが高過ぎてケースに入りません。そこで高さの低い、日本圧着端子製造(JST)PHシリーズ(2mmピッチ)を選定しました。Digi-Keyで割安に買えるので今後の工作には同じメーカのXHシリーズ(2.5mmピッチ)やVHシリーズ(3.96mmピッチ)を使っていこうと思っています。ちなみにXHやVHがTDKラムダやコーセルの基板単体タイプの電源で採用されていることを意識しています。



0 件のコメント:

コメントを投稿