2016年4月29日金曜日

2SK241 IFアンプからプロダクト検波へ

Si5351Aを局発、BFOに使用した7MHz帯CW受信部試作中です。

今回、2SK241を3石使い3段のIFアンプとプロダクト検波からAF出力回路まで作ってみました。

IFアンプは単独で測定しやすくするため、後段の2段分を別基板でモジュールとして組みました。


また、調整箇所を少なくしようと初段と同様に非同調のL負荷増幅回路としました。今回手持ちの68μHのマイクロインダクタを使い、4MHzにおける交流負荷抵抗は1.4kΩとなります。

増幅素子である2SK241は界隈ではおなじみですね。これはデプレッションモードのFETで、ゼロバイアス(VGS=0V)でA級動作可能であることから部品点数が少なく出来ることと、内部がカスコード構造になっているため帰還容量が極めて少なく、ソース接地でも周波数特性が良好ということらしいです。

ただ、すでにディスコンとなっていて現時点では新たに入手するのが難しくなってしまいました。幸い自分のところには20本程度ストックがあったので今回使ってみたというわけです。なお他に代替品もいくつか存在していましたが、いずれもディスコンで入手難となってしまいました。高周波増幅回路をディスクリートで作るというのはもはやマイナーなのでしょうか。しかし辛うじて使えそうな現行の石もひとつ見つけたので、それはまたネタとしておいおいと。

話がそれましたが、2段増幅回路単独の特性をAPB-3で測定してみました。


 TG出力(-50dBm)とスペアナ入力を20dBのアッテネーターを介して接続(-70dBm)して測定したグラフをリファレンスとし(0dBライン)、2段アンプを接続して9Vで動作させた結果です。

5MHzでピークとなりました。(60.33dB)このピークはインダクタの自己共振が効いているのでしょうか。試していませんが、負荷Lのインダクタを小さくすると増幅率ピークの周波数は高くなるかもしれません。

増幅率が充分なのを確認したところで、親基板に取り付けDBMで検波したAF出力を1石のTrアンプで増幅し外付けのスピーカーアンプ入力につなげ、局発とBFO入力も先に作成したSi5351A入り基板の各出力を接続して実際の信号を受信してみました。



AGCがないので強い信号は飽和していますが、感度やフィルターの効きはまずまずといった感じです。

次にAGC回路を実装して受信機らしくしたいところですが、2SK241アンプのAGCは調整が難しいらしいのではたしてどうなることやら。

2016年4月26日火曜日

Si5351A 7MHzCWトランシーバー受信部作りかけ

Si5351A制御と操作部が一応ひととおり完成したところで、次にアナログ部分の試作に入ります。

机上で設計してからすべてを試作すると色々と大変ですし、またDDSのときに一度頓挫してしまった苦い経験から確認しながら少しずつ作っていこうと思いました。

まずは受信部から、シングルスーパーを想定して最初にプリアンプ、周波数変換、クリスタルフィルター、中間周波増幅初段部分まで作りました。

Si5351Aの出力レベルが充分高いので、ミクサーや検波にはDBMを使用することにして挿入損失を見越して2SK241の1段プリアンプを置き、通過帯域300Hzの4MHz5poleのクリスタルフィルターを通してプリアンプと同じく2SK241で1段増幅したところで一度区切りました。

クリスタルフィルターは以前実験したときにも使用した、4MHzのHC49US小型水晶振動子を5本使ったラダー型のものです。aitendoで10本150円でした。

 この手のものは以前秋月で購入したものと同様に端子間容量が1.7pFと小さく、ネットワークアナライザで測定した直列共振・並列共振周波数差が4kHzほどと狭く、Qも高いためFilterDesignで割り出した通過帯域300Hzのフィルターは、入出力インピーダンスが1.4kΩで高めの上にグラウンドと並列に挿入する容量も小さく、やはりSSB用など通過帯域が広いフィルターにはこの手の水晶振動子は不向きであろうと再認識しました。

フィルターモジュール 100円ちょっと
FilterDesignで測定したXTALの各パラメータを入力して割り出しました
通過帯域はやや広めの400Hz程度でした
測定条件が整っていませんが、挿入損失は約10dBといったところでしょうか。通過帯域も若干300Hzよりは広くなりましたが通常の運用にはこれで充分でしょう。

 この状態でVFO部の局発出力を接続してIF出力をFT817NDのアンテナ入力につなぎ、4MHzにダイヤルを合わせ、適当なアンテナをつないでワッチしてみました。

クリスタルフィルター付きのクリコン(死語?)といった感じ


 817直接受信よりも信号強度が強くまずは一安心。後日SGとスペアナで確認しようと思います。

次は中間周波増幅後段と検波回路へ進めます。

2016年4月19日火曜日

Si5351A VFOの続き

7MHzQRP TRX用に開発していたSi5351A&TRX制御プラグラムがほぼ書きあがったので、改めてSi5351Aの動作検証しました。

各クロック出力に0.01μFのカップリングコンデンサをつなぎ50Ω抵抗で終端。オシロで観察するといずれの出力(CLK0:BFO用4MHz、CLK1:TX用7MHz、CLK2:局発用3MHz)も±1Vの矩形波となり、オシロ内蔵のLPFで波形整形すると約0.7Vrmsの正弦波が観察されました。約10dBmの出力となります。

APB-3によるスペアナモードでの観察でも基本波は10dBm出力だったのですが、CLK2局発信号を20MHzスパンで見てみると...


高調波やBFO用波形以外に基本波や高調波周辺約370kHz毎にスプリアスが観察されました。 基本波に対して最大-50dBと無視できない大きさでしたが、BFOの4MHzやTX用の7MHz出力では見られません。ただ、BFOも4MHz以下に周波数を徐々に下げると同じような柱が目だってきました。

そこでプログラムをチェックしたところ、Si5351Aの設定パラメータの規定範囲を逸脱した場合このような現象になるようでした。ただPLL自体は仕様より結構広くロックするようでした。

設定パラメータをおさらいすると...

1.VCO周波数設定(PLLA, PLLB)

 fvco = fXTAL x (a + b / c)
    a...15~90, b...0~1048575, c...1~1048575, fXTAL = 25MHz or 27MHz

2.VCO分周設定(MultiSynth0,1,2,...)

 fout = fvco / (d + e / f)
    d...4~900, e...0~1048575, f...1~1048575

となります。

プログラムでは2.の分周設定を1/100に固定し、希望周波数のMHzオーダーの4倍を1.のaに代入。それからMHzオーダー以下1Hz桁までをbに代入、cを固定値250000に設定しbを可変することによって最小1Hzオーダーで可変できるようにしていました。

この方法では4MHzや7MHzであれば、aの値は各々16、28で規定範囲内に入っていますが、3MHzの場合は12と規定範囲下限の15より下回ります。この設定でも見かけ上3MHz台は出力できますが、スペアナで見るとご覧のように酷い状態になってしまいました。

そこでTX用以外はa,bの値をさらに2倍してa値を規定範囲内に収め、2.のVCO分周設定を1/200にプログラムを変更することによって妙な近接スプリアスは解消しました。

当たり前のことですが、リファレンスの規定外で使用すると何かしら不具合が起こることは覚悟ですね。というか反省^^;

プログラムはメッセージ記録・再生機能と設定メニューを実装することで一応の完成と相成りました。

次はいよいよアナログ部分に進みたいと思います。

2016年3月31日木曜日

オシロ刷新

年度末仕事や無線以外でも色々と忙しない日々でしたが、やっと落ち着いてきたので気持ちを切り替える意味でオシロスコープを買い換えることにしました。

購入当時秋月で30,000円ちょっとという安値につられてOWON社製のポータブルDSOを使ってきましたが、エントリーモデルということもあってかディスプレイがSTNカラー液晶という前世紀的なパネルで、表示が非常に見づらいうえに応答性もよくないものでした。

それでも、電子工作には非常に重宝しいろんな場面で活躍してくれました。

また表示とは別に、帯域が25MHzと短波帯程度の高周波を観測するには少々心もとないと感じていたこともあり、この際もうワンランク上以上の機種に乗り換えようと考え、同じ秋月でOWON社製のDS7102という100MHz帯域モデルを購入しました。

プローブ較正は測定毎に行ったほうが良さそうです。周囲温度変化で結構ズレます
パネルはもちろんTFTでひとまわり大きめで非常に波形が観察しやすいです。しかも本体がかなり薄くて、机の上のスペースが若干広くなりました(笑)

で、早速Si5351Aユニットの出力波形を観察すると・・・

FFT表示や各種フィルター機能も搭載されています(使う場面は少ないですが)
 7MHzの矩形波がくっきり映っています。やはり帯域が広いのでこのくらいの周波数でも波形再現性が違いますね。

唯一のデメリットとしては、冷却用のファンの音でしょうか。以前のモデルはファンレスだったので結構気になります。でも測定のときだけ電源を入れるのでこの程度は良しとしましょう。

他にもFFTやらいろいろと機能が入っているようですが、それはおいおいと。

2016年3月21日月曜日

Si5351A VFO/BFO TRX制御システム進捗とPIC24Fプログラム備忘録

長いタイトルだ(笑)

PIC24Fを使ってSi5351A制御とCWトランシーバー用の制御システムを構築中ですが、ブレッドボードだと電気的、機械的に不安定になるため、この時点でユニバーサル基板で仮組みしてみました。

これだけで7MHzのQRPp送信機(但し高調波出まくり)
PICとSi5351Aモジュール、LCD、ロータリーエンコーダ、タクトスイッチを配置し、各々の端子とPICのポート間を被覆リード線などでつなぐ方式にして、ポート変更などにも対応できるように工夫しました。

あとは、信号出力端子、パドル入力端子、ICSP端子、電源端子を設けて電源は3.3Vの3端子レギュレータを介して各デバイスに3.3Vを供給しています。

 ソフトウエア的には、7MHz帯シングルバンドのCWトランシーバーを想定して送信用信号出力(CLK1,7.0MHz~7.2MHz)、BFO信号出力(CLK0,4MHz)、LO信号出力(CLK2,3.0MHz~3.2MHz)とし、送信時はCLK0,2出力を止め、受信時はCLK1出力を止めるようにしました。

周波数可変は10Hzと100Hzステップ切り替え式ですが、エンコーダの回転速度に応じてステップが大きくなるようにしています。また周波数変化時にはPLLの分周レジスタを計算しなおして設定しI2CでSi5351Aに送っていますが、受信機でモニターしている限りでは体感速度的にもたつきはありません。そのほかRIT機能、周波数メモリ関係も入れました。

キーヤープログラムはKeyer Mini-V2のコードを参考にしながら新たに書き直しています。IambicBモード固定で、WPMはエンコーダで設定します。(1WPMステップで10-60WPM)

また、サイドトーン(CWオフセット周波数に同期する)、システムビープ用にPWMモジュールを使用しました。

あとは、SメータやPowerメータ用にA/D変換とバー表示 を実装しています。


今のところここまでで、残るはメッセージメモリ関連と各種設定メニューを組み込めば大方完成です。

閑話休題。

 PIC24と8bitPICとでは、C言語プログラミングする上で移行しやすくなっていて有難いのですが、いくつか悩んだところがあったので備忘録的にまとめてみました。

1.コンフィギュレーション
 プログラムの頭のほうには各デバイスのコンフィギュレーションを記述するのですが、定番のRA5ポート(MCLR)以外にも設定を入れないとI/Oポートとして使えないピンがあります。
最初気がつかずRA4とRB4をI/Oとして設定しましたが、いずれも動作しませんでした。これらのピンにはセカンダリ発信器用の発振子を繋げるところでもあり、調べてみるとデフォルトで発振子のピンになっているようでした。このため、コンフィギュレーションでは明示的に設定文を記述しなければI/Oポートとしては使えません。(SOSCSRC = DIG)

PIC24FV32KA302 config文例:

#pragma config BWRP = OFF, BSS = OFF, GWRP = OFF, GSS0 = OFF
#pragma config FNOSC = FRCDIV, IESO = OFF, SOSCSRC = DIG, OSCIOFNC = OFF, POSCMOD = NONE
#pragma config FWDTEN = OFF, WINDIS = OFF, BOREN = BOR0, LVRCFG = OFF, PWRTEN = OFF
#pragma config I2C1SEL = PRI, MCLRE = OFF, DSBOREN = OFF, DSWDTEN = OFF

2.内部弱プルアップ指定
  ポートにスイッチをつなげるときなどに便利な内部プルアップで、部品点数を少なくするには都合の良い機能です。この設定についてはプルアップ以外にプルダウンなども指定できるICNレジスタ群というのがあり、プルアップの場合はCNPUxレジスタで目的のポートに相当するビットを1にすればよいのですが、ポート番号とCNxが同じではありません。ちょうどアナログチャンネルANxのように。
これも、ピン割り当て表とCNPUxレジスタ表をにらめっこして設定しなければならずいささか面倒です。

3.EEPROMの扱い
 もともとPIC24でEEPROMを内蔵しているものは少ないです。そのため内蔵していないPIC24ではプログラムメモリでEEPROMをエミュレーションして使う方法が記されています。しかし今回使っているPIC24FV32KA302では512バイトの本物のEEPROMを内蔵しています。エミュレーションでも良いのですが、書き替え耐用回数がまるで違うので本当のEEPROMにしたほうが安心ではないかと思ってこのモデルを選択しました。
EEPROMは16bit(2バイト=1ワード)を1つのアドレスに割り当てられているわけですが、実際は偶数のアドレスだけに割り振られています。理由はリファレンスにいろいろ書かれていますが(ファントムバイトがないとかなんとか・・・うーん、よくわかりません^^;)、とにかく偶数で割り当てられている(アドレスのLSBが常に0)ということを頭に入れてアクセスするということです。
XC8のように便利な読み書きマクロはみつからないので、リファレンス見ながらbuilt-in functionをつかって自分でマクロ関数や普通の関数を作らなくてはいけません。

関数例:

int __attribute__((space(eedata),aligned (2))) ee_data[] = {/*初期値(int型)*/};

//【EEPROM1ワード読み】
unsigned int eedata_read(int index){
    unsigned int offset;
    TBLPAG = __builtin_tblpage(&ee_data);
    offset = __builtin_tbloffset(&ee_data);
    offset += 2 * index;
    return __builtin_tblrdl(offset);
    }

//【EEPROM消去(1,4,8ワード選択)】 
void eedata_erase(int index, unsigned char words){
    unsigned int offset;
    switch(words){
        case 1: default:
            NVMCON = 0x4058;
            break;
        case 4:
            NVMCON = 0x4059;
            break;
        case 8:
            NVMCON = 0x405A;
            break;
            }
    TBLPAG = __builtin_tblpage(&ee_data);
    offset = __builtin_tbloffset(&ee_data);
    offset += 2 * index;
    __builtin_tblwtl(offset, 0);
    asm volatile ("disi #5");
    __builtin_write_NVM();
    while(NVMCONbits.WR){}
}

//【EEPROM1ワード書き込み】
void eedata_write(int index, int data){
    unsigned int offset;
    int temp;
    NVMCON = 0x4004;
    TBLPAG = __builtin_tblpage(&ee_data);
    offset = __builtin_tbloffset(&ee_data);
    offset += 2 * index;
    temp = data;
    __builtin_tblwtl(offset, temp);
    asm volatile ("disi #5");
    __builtin_write_NVM();
    while(NVMCONbits.WR){}
}

基本書き込み前に該当アドレスの内容を消去してから書き込みします。

 4.そのほかA/D変換も基本は8bitPICと同じですが、チャンネルの自動切換え設定や測定結果を格納するバッファが17個あったりといろんな場面を想定しているために設定項目が多く、どのように設定すればよいのか最初戸惑ってしまいます。


便利なライブラリがあればまぁ楽ですが、何かトラブルがあると結局ライブラリの中身を見なくてはいけない場合があったり、探しても見つからないときは既存のもので自分で出来る範囲で作り上げるしかありません。しかし、こうして回り道しようが格好悪かろうが何とかなったときの達成感は何ものにも替えがたいものがありますね。