ラベル FPGA FMチューナ1作目 の投稿を表示しています。 すべての投稿を表示
ラベル FPGA FMチューナ1作目 の投稿を表示しています。 すべての投稿を表示

2010年8月26日木曜日

FMステレオチューナ: 測定してみた

ASUSの高性能サウンドカードXonar D2X入手を機に測定してみました。このカード、サウンドカードとしては割高ですが192kHz S/PDIF入出力に対応しています。
今回は、FPGA FMステレオチューナの光デジタル出力をサウンドカードの光入力に接続し、WaveSpectraで特性を観測します。チューナの入力ソースとしてはFM放送波、信号発生器、自作FMトランスミッタの3つとしました。なお、使用したFPGAソースはR1.3版です。


FM放送波
NHK-FMの時報です。放送局の電波を直接ではなく、CATVで83.5MHzに変換された信号を受信しました。チューナー内の高周波バンドパスフィルタは、この83.5MHzに調整しています。以後、信号発生器、自作FMトランスミッタも同じ周波数に合わせています。

時報での歪み率THDは約0.1%ですが、THD+Nは約2%と奮いません。つぎに無音時のデータでは、スペクトルの最大値は2.9Hzで-50dBとなっています。これは、放送波あるいはFM受信機の周波数ズレによりAFC追従範囲を越えDC領域のリークが出ているものと推定しています。このためTHD+Nが悪化しますが、アナログ出力ではDCはカットされるのでこの問題はないはずです。
次にS/Nですが、無音時のレベルがDCリーク問題でよくわかりませんので、カーソルでピークを探すと約-86dBです。通常は全帯域のRMS値で読みますが、この例のスペクトラムなら数dB悪い結果となるでしょうか。 そして、100%変調時のレベルが後述するFMトランスミッタの例より-7dBであるとすれば、差し引きでS/Nは79dB。実効上70dB程度を確保できていそうです。



時報



無音時



信号発生器
HP8657Aを使いました。ステレオSGではないので単なるモノラル受信でのデータです。モノラルですので変調度100%変調(周波数偏移±75kHz)としています。
2次、3次高調波は、HP8657A内蔵の低周波発振器の特性らしく、外付け低周波発振器を利用すればさらに良くなります。無変調時のRMS値と比較するとS/Nは約94dBです。低い周波数に大きめのノイズがあるのでA特性等の聴覚補正フィルタを併用すれば、みかけのS/Nがよりよく見えそうです。


1kHz 100%変調


無変調



FMトランスミッタ
ステレオSGの代わりに自作FMトランスミッタを使います。チューナあるいはトランスミッタのどちらの特性を測っているのかよくわからなくなりますが、少なくともそれぞれがよりよい性能を持っていることが類推できます。低周波信号源は、FMトランスミッタ内のROMデータを使っており、片チャンネルあたりの変調度は45%変調(周波数偏移±33.75kHz)相当としています。従って、モノラルモードでは90%変調相当のレベルとなっています。

ここで信号発生器でのRMSレベル値と比較すると 0.96dBの差となります。理論値(100%÷90% -> 0.92dB)と概ね一致していました。

さてモノラルモードの特性ですが、THD 0.06%、S/NはRMS値の比較で87dBでした。スペクトルを見るとトランスミッタのノイズ特性に”難あり”ですね。


モノラルモード 1kHz 90%変調




モノラルモード 無変調


ステレオモードの特性ですが、THD 0.004%、S/NはRMS値の比較で79dBでした。THDがモノラル時より良くなっているのは、ステレオパイロット信号が加わったことによるD/AあるいはA/Dコンバータでのディザリング効果の結果でしょうか???何だこりゃって感じです。
ところで、FPGA FMチューナの作者の方は、先日のハムフェアの展示でTHD 0.0015%を叩き出していました。 まだまだ修行が足りません。

ステレオモード 1kHz L:45%, R:45%, パイロット10%変調


ステレオモード 無音


セパレーションは、Lチャンネルのみを45%変調相当レベルとして、L・Rチャンネルのレベルを測定しました。RMS値の差を取ると55.6dB。FMチューナの設計値では70dB程度あることになっていますから、FMトランスミッタのどこかが悪いと言うことになります。

 ステレオモード 1kHz L:45%, パイロット10%変調(Lchを観測)


 ステレオモード 1kHz L:45%, パイロット10%変調(Rchを観測)

FMステレオチューナ: 操作表示部のAVRソース

前回に続き、操作表示部のAVRソースを掲載します。現状では、初期の機能を実装できておらず、プリセットボタンを押すと、所定の放送局に切り替わるだけでしかありません。はっきり言って未完成。本来なら公表できるシロモノではありませんが、ここは趣味のブログですので・・・。ちなみに初めてのAVRプログラムなので、ネット上のサンプルを断片的にコピペしてます。今、よく見たらvolatileの使い方を勘違いしていますね。なお、ロータリーエンコーダ周りはChaNさんのWeb資料を使わせて頂いています。



#include
#include

void sample_sw(void);
void LED_disp(void);
void led7seg(uint8_t num);
uint32_t bin2bcd(uint16_t n);

2010年8月13日金曜日

FMステレオチューナ: FPGA基板と操作表示部との接続

FPGA FMステレオチューナのその後です。今からみると、コードの選定や配置に不満点がたくさんあります。手を入れたところとしては、まずプリアンプ。特にアンテナケーブルを接続していないときに異常発振気味だったので、とりあえずアンプICの部品面側に銅箔テープを貼り付け、両面基板チックにしてみました。また、電源基板の放熱板が触れないほどに熱くなるので、苦肉の策として薄い銅板で放熱板とケース本体を接続しました。これでも62度(周囲30度)まで上昇します。


 基板全景


 プリアンプ基板


 電源基板

 
そういえば、操作表示部とFPGA基板との接続について紹介していないことに気がつきました。2つの基板の間は4本の信号線(とアース線)で接続しています。
操作表示部 SCLK端子 → FPGA 10ピン(SCLKIN)
操作表示部 SD端子 → FPGA 17ピン(SDATAIN)
操作表示部 EN端子 → FPGA 28ピン(SENIN)
操作表示部 RD端子 → FPGA 30ピン(SDATAOUT)

次にFPGAのVHDLソースです。もともと受信周波数の設定値(定数)が書かれていた const.vhdを次のように書き換えています。ここでは操作表示部から渡されたシリアルデータをシリパラ変換し、const_out として上位のモジュールに渡します。あと、FPGAからIQ信号を操作表示部に渡そうとしているんですが、これは動作確認していません。ちなみに、このVHDLソースは、Verilogで書いたものをVrilog-VHDL translatorを利用して作成しました。私のVerilogソースがいい加減だったらしく、変換後のソースに手を入れる必要がありました。
・・・半年以上たつと、改めてソースを見ても何を書いていたんだか忘れてしまっていますね。

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;

entity const is

port(

        SCLKIN    : in  std_logic;    -- Serial Clock
        SDATAIN    : in  std_logic;    -- Serial Data
        SENIN    : in  std_logic;    -- Serial Data Enable
        IFIN    : in  std_logic_vector(17 downto 0);    -- IF(I)
        IFIN2    : in  std_logic_vector(17 downto 0);    -- IF(Q)
        OTR_LED    : in  std_logic;   
        ST_LED    : in  std_logic;  
        CLK        : in  std_logic;
        RST        : in  std_logic;
        SDATAOUT    : out std_logic;   
        const_out    : out std_logic_vector(27 downto 0));     -- Frequency Set

end;

architecture Behavioral of const is
    signal qr    : std_logic_vector(15 downto 0);
    signal spc_stat    : std_logic_vector(1 downto 0);
    signal SCLKIN2    : std_logic;
    signal SDATAIN2    : std_logic;
    signal SENIN2    : std_logic;
    signal qs    : std_logic_vector(31 downto 0);
    signal psc_stat    : std_logic_vector(1 downto 0);
    signal const_out_int: std_logic_vector(27 downto 0);

begin


    v2v_pr_0:process (CLK)
    begin
        if (CLK'event and CLK = '1') then
            if (RST = '1') then
                SCLKIN2 <= '0';
                SDATAIN2 <= '0';
                SENIN2  <= '0';
            else
                SCLKIN2  <= SCLKIN;
                SDATAIN2 <= SDATAIN;
                SENIN2 <= SENIN;
            end if;
        end if;
    end process;



    v2v_pr_1:process (CLK)
    begin
        if (CLK'event and CLK = '1') then

            if (RST = '1') then
                qr  <= "0000000000000000";
                spc_stat <= "00";
                const_out_int  <= X"119C71C";

            elsif (SENIN2 = '1') then

                if (spc_stat = "10") then
                    spc_stat  <= "00";
                end if;

                if (SCLKIN2 = '1') then
                    if (spc_stat = "00") then
                        qr <= qr(14 downto 0) & SDATAIN2;
                        spc_stat  <= "01";
                    end if;
                else
                    spc_stat <= "00";
                end if;

            else

                if (spc_stat = "00") then
                    if (qr = X"0000") then
                        const_out_int  <= X"119C71C";                        -- 82.5MHz
                    else
                        const_out_int  <= (qr & X"000");
                    end if;

                    spc_stat  <= "10";
                    qr <= "0000000000000000";

                end if;

            end if;

        end if;
    end process;

    const_out <= const_out_int;

    v2v_pr_2:process (CLK)
    begin
        if (CLK'event and CLK = '1') then
            if (RST = '1') then
                qs <= X"00000000";
                psc_stat <= "00";

            elsif (SENIN2 = '1') then

                if (SCLKIN2 = '1') then

                    if (psc_stat = "00") then
                        psc_stat   <= "10";
                    end if;

                    if (psc_stat = "01") then
                        qs   <= (qs(30 downto 0) & '0');
                        psc_stat  <= "10";

                    end if;

                else
                    if (psc_stat = "10") then
                        psc_stat  <= "01";
                    end if;

                end if;

            else

                if (psc_stat = "01") then
                    qs    <= (OTR_LED & ST_LED & IFIN(17 downto 3) & IFIN2(17 downto 3));
                    psc_stat <= "00";

                end if;

            end if;
        end if;
    end process;

    SDATAOUT <= qs(31);

end Behavioral;




const と上位モジュールとの接続(ispLEVERの例)



追加した入出力端子をユーザ制約に追加(ispLEVERの例)


次回は、AVRのソースを紹介します

2010年8月8日日曜日

FMステレオチューナ: Lattice Diamond 設計ソフトウエア

久しぶりにFMステレオチューナに手を入れようとしています。前回の記事から半年たち、Latticeの設計ソフトウエアはispLEVERの後継のDiamondがダウンロードできるようになっています。もちろん無償版も提供されています。


Diamond設計ソフトウェアの紹介ページ


ファイルをダウンロード・インストール後、Diamond無償版ライセンス手続きページからVerilogあるいはVHDLのどちらかひとつを指定してライセンス申請します。Host  NICとは、PCのLANアダプタのMACアドレス(Physical Address)を記入します。これは、コマンドプロンプトで ipconfig /all して確認できます。


ライセンス取得手続き




 MACアドレス(Physical Address)を確認


2009年12月23日水曜日

FMステレオチューナ: 操作表示部(3)

 気分屋に見えるラティスのispLEVERの振る舞いと付き合いながら、選局ができるところまでようやくたどり着きました。ボタンを押すと、放送局が切り替わる。当たり前の動作ですが苦労して作り上げてきたので嬉しくなります。


操作表示部を仮組み


 操作表示部の基板からFPGAチューナに基板に渡す選局データは現状で次のようになっていますす。(変更する予定です)
 これらの配線は、本来ならマイコンのシリアル対応ポートに接続しなくてはいけないのですが、設計時にはそういったことを考えてなくて汎用ポートに適当に繋いでしまいました。そのためプログラムがメンドクサイことになってます。やってみて初めてシリアルポートのハードウェアが埋め込まれている理由が理解できました。

シリアル転送タイミング


上の波形をAVRで再現



ロジアナで波形を観測



ロジアナで観測


 Cで適当に組んだプログラムなので、意図したタイミングとはちょっと違います。でもそれに合わせて受信側でなんとかしましょう。

 最後に課題です。
  • シグナルメータの実装:FPGAチューナ基板のIQ信号から演算結果をドットマトリクスLEDに表示
  • ロータリエンコーダ、プッシュボタンの操作フィーリング改善:チャタリングが取り切れてない
  • プリセットメモリの実装:現状ではプリセット周波数はプログラム中でベタ書きしている
  • 3端子レギュレータの放熱:熱くて触っていられないほど。少し大きめの放熱器を連結するか、銅板でシャーシと連結して改善できないか
  • プリアンプが発振気味:片面基板のせい?銅テープを貼り付けてアースを強化して収まってくれるといいなぁ

2009年11月9日月曜日

FMステレオチューナ: ケース加工、少し進捗

制御基板の取り付け用のスペーサが足らず、まだ完成途中。




フロントパネル














ケースの中身
電源でかすぎです














ハードウェアはほぼ完成に近づきましたが肝心なソフトはこれからです。AVRで周波数指定データを送り出すところまではできた、つもりなので次はFPGAボード側のHDLの作成です。VHDLとラティスのツールを使うのは気が重いです。
それと、アンテナ端子を開放しているとプリアンプが発振気味です。参ったな。


さてケースの加工についてですが、APB-1のケース加工で加工位置のズレが目立ったので、今度はCADで作成した加工図をシール紙にして貼り付けました。




パネル材料に加工図を貼り付け















パネルの穴開け加工後
位置は合ってるようですが
斜めだったりするのはご愛嬌










今回のパネルは2mm厚。パネル表面には、フィルムラベルを貼り付けますが、穴あけの断面は正面から見えてしまします。そこで断面部分だけ塗装することにしました。補修用のラッカー塗料を使って見ましたが、どろっとしていてめちゃくちゃ塗りにくいです。それで隣にうすめ液が並んでいたのか・・・





断面部分だけ塗装

















パネルの外観はCorelDRAW Essentialsで作成。Visioみたいなソフトで割安に買えます。文字や図形の位置を数値指定して描画させるなら、Visioより少しラクに感じます。
でも加工図を作成するのは非常にしんどかったのでCorelDRAW を使わず安易にCADに頼ってしまいました。



パネル外観














作成したパネルデザインをフィルムラベルに印刷します。高価だけあって非常に美しい仕上がりです。色は他の手持ちのオーディオ機器との調和を考え、ベージュ系を意識しましたが、単なるグレーになりました。ディスプレイ表示とはだいぶ違うものですね。




エーワンのフィルムラベルに印刷











フィルムラベルをパネル材料の貼り付け、細工用のカッターナイフで不要な部分をくりぬきます。けっこう空気が入ってしまいました。位置合わせも大変でした。良い方法はないものでしょうか。




パネル加工後















使用したラッカー塗料と

フィルムラベルのくりぬきに使った
カッター
ナイフ

2009年10月18日日曜日

FMステレオチューナ: AVR覚え書き




とりあえずLEDが点灯
先は長いね












最初の作業の覚え書き(CPU: ATMEGA64, 書き込み機: AVRISP II

ダウンロード時には登録を求められるも、AVRWikiの『最新情報』をよく見ると、
   登録不要なリンク先が書いてある
  • AVRISP IIをPCのUSBに接続
  • AVRStudioにドライバが含まれているのでドライバは自動的にインストールされる

AVRStudioの覚え書き
  • まず、"Project" → "Configuration Options" でデバイスとクロック周波数を指定する
  • Cで開発するには、Makefileをソースと同じフォルダにあらかじめ置いておく
"Build" → "Export Makefile" で作成
  • ソース作成後、"Build" → "Build" でプログラムデータ(hexファイル)が生成される
  • "AVR"アイコン(Connect to the Selected AVR Programmer)をクリック
  • "Program"タブの"Flash"項でhexファイルを指定して、"Program"をクリック。


ATMEGA64では、ISPをMOSI, MISOに接続してはいけない

 Setting mode and device parameters.. OK!  Entering programming mode.. FAILED!  Leaving programming mode.. OK!

というメッセージが出てISPに失敗します。
FAQによると、ISPクロック周波数が、AVRのクロック周波数の4分の1以下にセットせよと書いてあるが、設定を変えてもダメ。ググったところ、MISO, MOSIの罠なんて記事が。
なんでもATMEGA64のMISO, MOSI端子はSPI接続用で、ISP機能のMISO, MOSIはPE0, PE1に割り当てられています。みんな、はまっているんやね。





  ATMEGA64のピンアサイン
  MOSI, MISOはPB2, PB3
  (これはSPIインターフェース)






















  ISPのピンアサイン
  MOSI, MISOはPE0, PE1
  











初期設定はATMEGA103互換モード
紛らわしいので、Fuseビットを操作して互換モードを解除。
AVR Studioの操作画面では、ヒューズをイメージしているらしく、チェックありはヒューズが飛んだので論理0。チェックなしは、ヒューズがつながっているので論理1。違和感ありあり。




ヒューズビット表示
チェックあり: 論理0 (L)
チェックなし: 論理1 (H)
















すごく参考になったページ

2009年10月12日月曜日

FMステレオチューナ: 電源(2)


1.ドロッパ型電源

 回路としてはすごく基本的でカンタン!と思っていましたが、まじめに考えると難しく思えてきました。手元にあった「トランジスタ技術SPECIAL N0.28 特集 最新・電源回路設計技術のすべて」の解説記事を見ながら、ひとつひとつのパーツの仕様を考えていきます。

  • 電源の仕様
この電源には、チューナ基板本体と外付けプリアンプ基板を接続します。
    電源電圧はチューナ基板に合わせ5Vとします。負荷電流は450mAを予定していますが、
    余裕を考え、仮に1.2倍として600mA程度とします。

  • 電源トランス
電源トランスの2次側電流容量は、電源出力の平均電流の1.5~1.7倍を選定するそうです。
    従って電源出力を600mAとすれば、トランス2次側電流容量は900mA以上必要と
    言うことになります。

    電源ハムの影響を極力避けるためリーケージフラックスが小さいトロイダルトランスとして、
    RSコンポーネンツでアイルランドNuvotem Talema社製70000Kシリーズ
    基板実装タイプを購入しました。ブルーの小型トランスで、よくオーディオの自作でも
    使われています。

Nuvotem Talema社トロイダルトランス(カタログより)


    他にもAmveco社の製品がDigi-Keyで入手できます。

    さて、この製品の仕様は1次電圧115Vで規定されています。
    これを100Vで使用したらどうなるのでしょうか。
    2次側の電圧は、1次側に比例するので100/115になります。
    電流は、トランスの巻線の太さで決まるので上限は変わらないはずです。
    ただ鉄損(コアの損失)と銅損(巻線の抵抗による損失)が減少するので厳密には
    僅かに多めに取れると思いますが、安全を考えて、やはり変わらないと考えることにします。
    
    今回は、細かいことを考えずに 70041K を選んでしまいました。仕様は次の通りです。

      容量: 10VA
      1次電圧: 115V

      2次電圧: 9V 556mA ×2巻線

      2次開放電圧: 10.8V
      効率: 82%

    1次電圧を100Vとしたときの、2次電圧は 9V×100V/115V=7.8V。(定格電流時)
    2次巻線はカタログに『Primaries and secondaries for parallel or series connection』
    とあるので、少々抵抗を感じますが並列接続します。接続時には極性に注意しないと
    短絡してしまいます。電流は 556mA×2=1,112mA となります。

    ところで、トラ技SPECIALの記事によると、トランスの電圧変動率ε を求めておくと、
    回路定数を求めるのに便利ということで計算しておきます。

電圧変動率ε
V'2: 2次側開放電圧
V2: 2次側定格電圧

    上の式より、(10.8V-9V)/9V=0.2 となります。これは1次電圧は115Vの場合ですが、
    100Vの場合はわずかに改善されるものと思いますが、同じと考えておきます。

    この電圧変動率εから、2次側短絡時の1次側の電流を求める事ができます。

2次側短絡時の1次側の電流I1s

    この場合、(7.8V×1.112A/100V)×(1+0.2)^2/0.2=0.62A となります。

    2次電流を1次側に換算するには。(V2/V1)×(1+ε) を掛ければ、求める事ができます。
    たとえば、3端子レギュレータの出力が短絡した場合に1次電流を求めてみます。
    使用した3端子レギュレータμPC2405Aには、1.2Aで動作する過電流制限回路が
    内蔵されているので、このときの1次電流は (7.8V/100V)×(1+0.2)×1.2A=0.11A となります。
    
    次に、トランスの出力はブリッジ接続されたダイオードで整流された後、平滑コンデンサで
    比較的フラットな電圧となりますが、負荷が接続されるとコンデンサの充放電のため
    リプル成分をもち変動します。

    一方、3端子レギュレータは、入力電圧は出力電圧よりも高くする必要があり、その電圧差は
    最小入出力間電圧として規定があります。従って、平滑コンデンサのリプル電圧の下限は
    最小入出力電圧をクリアしている必要があります。

    平滑コンデンサの平均電圧とリプル電圧の概算値は、次式で計算できるそうです。
平滑コンデンサの平均電圧(概算値)
Io: 出力電流
Vf: ブリッジダイオード1素子のドロップ電圧


リプル電圧の振幅(概算値)
f: 交流周波数
C: 平滑コンデンサ容量

    上式より、平滑コンデンサの平均電圧
    7.8V×0.9×(1+0.2)×√2 - 3×0.6A×(7.8V/1.112A)×0.2 - 2×0.5V = 8.39V
     ※但し、商用電圧変動による電圧低下を90Vとみた

    リプル電圧の振幅
    3/4 ×{0.6A/(2×50Hz×0.0066F)} = 0.68V
     ※但し、条件が厳しくなる50Hzを想定した

    リプル電圧の下限は、Vc - 1/2 ×ΔV より、
    8.39V - 1/2 ×0.68V = 8.05V となります。

  • 整流ダイオード
ブリッジ型に接続する全波整流回路としました。
   定格電流が電源出力の平均電流の1.25倍を選定するそうです。トランスとダイオードで
   この倍率が異なる理由として、「トランスの巻き線抵抗がほぼ純抵抗であるのに対して、
   ダイオードは順方向ドロップ電圧と抵抗の合成になっているため」と説明されています。(?)

   電源出力の平均電流を0.6Aとすれば、ダイオードの定格電流は 0.6A×1.25=0.75A 以上の
   ものを選定すれば良いことになります。
   また、尖頭逆電圧VRMは、次式を満たすものを選定します。

ダイオードの尖頭逆電圧

   2×√2×1.1×7.8V×(1+0.2)=29Vとなります。
    ※「1.1」は、商用電圧変動の最大値110V。

   今回、秋月電子で販売しているPanJit Semiconductorのショットキーバリアダイオード
   1N5822を選定しました。定格は40V 3Aで、ドロップ電圧が0.525V(@3A)と
   一般のシリコンダイオードよりも低いのが特長です。

   小さいとはいえ、電圧ドロップがあるので発熱します。リード線を長めに実装したり、基板の
   パターンを広めに取るなど配慮が必要です。

  • 平滑コンデンサ
コンデンサには大きな充放電電流(リプル電流)が流れているため、
   コンデンサの等価直列抵抗成分(ESR)による発熱が生じます。このため、コンデンサには
   充放電電流の実効値の最大値(許容リプル電流値)の規定があります。

平滑コンデンサのリプル電流(単位A)
Io: 出力の平均電流


平滑コンデンサ容量の目安(単位F; ファラド)


平滑コンデンサの耐電圧


    平滑コンデンサのリプル電流
    1.12×0.6A = 0.67A
 
    平滑コンデンサ容量
    (2.5×0.6A) / (7.8V×50Hz) = 0.0038F = 3800μF以上
     ※但し、条件が厳しくなる50Hzを想定した

    平滑コンデンサの耐電圧
    1.55×7.8V×(1+0.2) = 14.5V以上

    これらの条件をもとに、手持ちの都合もあり日本ケミコンKMHシリーズの
    3300uF 50Vを2並列としました。定格リプル電流も1.85Aですし問題ありません。

  • 3端子レギュレータとヒートシンク
3端子レギュレータには、最小入出力間電圧が小さいμPC2405Aを選定しました。
   最小入出力間電圧は標準0.5V、最悪値1Vです。
   出力電圧は5Vなので、リプル電圧の下限は6V以上必要です。
   リプル電圧の計算値は8.05Vなので余裕があります。可能なら、電源トランスの2次電圧を
   より低いものに交換すれば、効率あがり発熱も有利となります。

   次に発熱について検討します。
   最も不利な条件として、商用電圧変動で110Vとなった場合の平滑コンデンサの平均電圧
    7.8V×1.1×(1+0.2)×√2 - 3×0.6A×(7.8V/1.112A)×0.2 - 2×0.5V = 11.04V

   従って、3端子レギュレータの電力損失
    (11.04V -5V)×0.6A = 3.6W

   この電力損失の放熱のため秋月電子のヒートシンクを使用します。ただ、このヒートシンクの
   仕様はサイズが30×30×30であることのほかは、熱抵抗すらわかりません。
   そこで形状が似ているリョーサンIC-3030-STLを参考にします。
   この仕様書のグラフによると、3.6Wの場合、50度の温度上昇があることがわかります。

   これは、負荷電流に若干の余裕を見ているとはいえ、もうワンサイズ大きなものにしたほうが
   良いような気がします。実際に温度上昇を確認して対応を考えることにします。

  • ACインレット
ケースからAC電源コードを直接引き出すのは不格好なのでACインレットを使い、
   電源コードを分離できるようにします。たまたまジャンクでACノイズフィルタとヒューズホルダを
   内蔵したトーキン(現NECトーキン)製のものを入手できたのでこれを使います。

  • ヒューズ
電源トランスの1次側に挿入され、AC入力から3端子レギュレータ入力までの間で起きる
   短絡事故によるケーブルやトランスの焼損を防ぐために使用します。
   電源トランスの2次側で短絡事故が発生したときに溶断しますが、電源投入時の突入電流や
   3端子レギュレータの出力短絡時の過電流(1次側換算0.11A)では切れないものを選定します。

   電源投入時の突入電流としては、電解コンデンサが充電されるまでの、数サイクル(30ms程度)
   の間、電源トランス2次側短絡(1次側換算0.62A)と同様の電流が流れます。

   これらの条件から、
   『電流容量は0.11A~0.62Aで、30msにおける溶断特性が0.62A以上のもの』
   をヒューズの仕様書により選定することになります。

   今は、手持ちの都合で0.8Aのヒューズを使用することにしていますが、
   これでは大きすぎてトランス2次側が短絡しても飛ばずトランスを保護できないことがわかりました。

2009年10月11日日曜日

FMステレオチューナ: ケーブルの圧着

 基板間を結ぶケーブルのコネクタを圧着します。

 今までは、基板用コネクタのピンははんだ付けしてきましたが、エンジニアPA-09という圧着器を導入したので使ってみることにします。ところが、圧着器を目の前にして、ピンをどのようにセットすればよいのかよくわかりません。PA-09でググってみたところ、PA-09の使用レポートを紹介しているページに写真付きで解説がありました。おかげでちゃんと初圧着に成功です。

 PA-09には、4種類のダイスが付いていますが、コネクタや使用するケーブルによって適切なサイズを選ぶ必要があります。製品の説明書に電線サイズごとのダイス選定表がついていますが、エンジニアのページにはコネクタメーカ・製品別の選定表が掲載されています。

・・・エンジニアのWebを見ていたら、固着したネジやナメたネジを回せる『ネジザウルス』が発売されています。CG動画まで掲載されていて力が入っています。確かに画期的。これ、ひとつ工具箱に入れておきたいなぁ。





PA-09で圧着


















プリアンプ接続用の
同軸ケーブルも圧着

2009年10月10日土曜日

FMステレオチューナ: Lattice XP2用 USB対応書き込み機

 パラレルポート付きPCを求めて彷徨うのは面倒ですので・・・、USB対応の書き込み機を製作することにしました。

 製作したのはなひたふ電子で紹介されているトランジスタ技術2008年7月号付録のNEC78K CPUボードを利用したものです。この書き込み機は、Lattice純正のダウンロードケーブルとは互換製がないため、専用の書き込みツールを使うことになります。

 製作に際しては、NEC78K CPUボードの入手がカギとなりますが、幸いマルツパーツが同じ仕様のボードを継続販売(型番M78K0F0730)しています。





NEC 78K0マイコンボード

















製作
 なひたふ電子のページを参考に、74LCX244を使って3.3V系へのレベル変換を行う追加基板を製作しました。汎用的に使うことは考えず、ディジタルデザインテクノロジ誌の付録基板にそのままザクッと差し込めるものにしています。




回路図














プリント基板のアートワーク















完成写真
マイコンボードに、USBコネクタ
とポリスイッチを追加















完成写真















ソフトウエアインストール方法

  • NECエレクトロニクスから78KのUSBシリアル変換ドライバをダウンロードし、任意のフォルダに解凍しておく。
  • 解凍したファイル
DRIVER/win2k/necelusbvcom.inf
    をエディタで開き、"PID_01CD" を "PID_FFFD" に変更する。(2chの記事を参考にしました)
     ※変更しないと「ドライバが見つからない」と言われます。

    2009.10.12追記
    マルツパーツからもドライバをダウンロードできます。
    この場合、上記のPIDが修正済みです。(インストールの確認はしていませんが)
  • 書き込み機にUSBケーブルを接続すると、ハードウェアの更新ウィザードが起動する。
ドライバのフォルダ
    DRIVER/win2k/
    を指定する。
  • なひたふ電子のWebページからXP2専用JTAG書き込みソフトウエアをダウンロードし、解凍する。
  • USB-JTAGのファームウエア書き込みのため、初回に限りDOSプロンプトから解凍したファイルを実行する。
> xp2jtag -detect

    このプログラム起動時には、ファームウエアのダウンロードに続き、
    FPGAデバイスの検出を行います。FPGAに接続しなくてもダウンロードは可能です。



書き込み方法

 FPGAへの書き込みは、コマンドプロンプトで次のように入力します。

  > xp2jtag -auto ファイル名

 ただし、ファイル名は絶対または相対パスで指定します。





FPGAに書き込み

















書き込み作業中