2017年11月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    
無料ブログはココログ

2017年11月 7日 (火)

広帯域アンテナアナライザ その6 周波数誤差

回路変更後、以前作成したアンテナアナライザの筐体に組み込み、バンド切り替えスイッチやロータリーエンコーダを使用して発信周波数の誤差を測定する。

145MHzで発信させてTS-790のCWで受信してみると、設定周波数よりも2KHz低いところで受信した。耳で聞く範囲なので正確とはいえないが、各周波数で誤差を計算してみると

1.9M ~ 7Mまでは誤差が分かりにくかった。
100 / 10M = 10ppm
140 / 14M = 10ppm
220 / 18M = 12ppm
280 / 21M = 13.3ppm
320 / 24M = 13.3ppm
370 / 28M = 13.2ppm
700 / 52M = 13.4ppm
2K / 145M = 13.8ppm

以上の結果から周波数に関係なく13.3ppmのずれがあるようだ。
どちらが本当の周波数に近いかは分からないところだが、水晶発信の誤差の範囲内であるようだ。
 アマチュア無線局には誤差0.025%(250ppm)以内の周波数測定装置が必要とされるが、その範囲内には入っていることだろう。

 ちなみにSi5351には「Register 183. Crystal Internal Load Capacitance」というレジスタがあってD7,D6のビットで水晶発信の内部容量をコントロールして発信周波数を若干可変できる。

 上のデータはCL=8pFだが145MHzで2KHz低かった。
CL=6pFでは2KHz高く、CL=10pFで4K低かった。
これからすると7pFが適当なようだが、できないのであきらめる。

2017年10月30日 (月)

広帯域アンテナアナライザ その5 I2C回路編改

 発信周波数の制御が一通りできるようになったので回路をもう一度検討する。

 I2Cの制御線は元来双方向性だが、少なくともCGMの制御には片方向でよさそうだ。Ack信号を受信できなかったとしても受信したとみなせばよいのだ。
 片方向ならば電圧レベルシフトはたやすく実現できる。プルアップ抵抗とダイオードで5V系から3.3V系へ変換する。
 レベル変換が可能になれば5V系のLCDディスプレイを使用できる。

これらをもとにポートの割り振りを再設定する。
PD:スイッチ、ロータリーエンコーダ、USART
PC:I2C,ADC
PB:LCD

変更後の回路図は以下のとおり。全体の動作確認は未完。
Atmega168p_cgm01_3
Atmega168p_cgm02

2017年10月23日 (月)

広帯域アンテナアナライザ その4 パラメータ算出編2

次に各A,B,Cのパラメータからレジスタに設定する算出プログラムは次のとおり。
これは解説書にあるとおりだが、B/Cの計算結果をdouble型で求めるところがミソである。
また解説書にあるFloor関数は (unsigned long)を使って、整数を求めている。

 実際にMCUで計算して表示してみると、ここでも計算誤差が発生しており、なかなかきっちりとはいかない。
 受信機で受信すると概ね計算値どおりだが、周波数が高くなるほど誤差が大きくなるようだ。

    struct Si5351_Para F_Para;
    unsigned long    MSNP1,MSNP2,MSNP3;

void PLL_Config(unsigned char *CGM_PLL_Config){

    MSNP1 = 128 * F_Para.PA + (unsigned long)(128 * ((double)F_Para.PB / F_Para.PC)) - 512;
    MSNP2 = 128 * F_Para.PB - F_Para.PC * (unsigned long)(128 * ((double)F_Para.PB / F_Para.PC));
    MSNP3 = F_Para.PC;

    CGM_PLL_Config[1] = (MSNP3 >> 8) & 0xFF;
    CGM_PLL_Config[2] =  MSNP3 & 0xFF;
    CGM_PLL_Config[3] = (MSNP1 >> 16) & 0x03;
    CGM_PLL_Config[4] = (MSNP1 >> 8) & 0xFF;
    CGM_PLL_Config[5] =  MSNP1 & 0xFF;
    CGM_PLL_Config[6] = ((MSNP3 >> 12) & 0xF0) | ((MSNP2 >> 16) & 0x0F);
    CGM_PLL_Config[7] = (MSNP2 >> 8) & 0xFF;
    CGM_PLL_Config[8] =  MSNP2 & 0xFF;

}

    unsigned long    MSND1,MSND2,MSND3;

void DIV_Config(unsigned char *CGM_DIV_Config){

    MSND1 = 128 * F_Para.DA + (unsigned long)(128 * ((double)F_Para.DB / F_Para.DC)) - 512;
    MSND2 = 128 * F_Para.DB - F_Para.DC * (unsigned long)(128 * ((double)F_Para.DB / F_Para.DC));
    MSND3 = F_Para.DC;

    CGM_DIV_Config[1] = (MSND3 >> 8) & 0xFF;
    CGM_DIV_Config[2] =  MSND3 & 0xFF;
    CGM_DIV_Config[3] = ((F_Para.div & 0x07) << 4) | ((MSND1 >> 16) & 0x03);
    CGM_DIV_Config[4] = (MSND1 >> 8) & 0xFF;
    CGM_DIV_Config[5] =  MSND1 & 0xFF;
    CGM_DIV_Config[6] = ((MSND3 >> 12) & 0xF0) | ((MSND2 >> 16) & 0x0F);
    CGM_DIV_Config[7] = (MSND2 >> 8) & 0xFF;
    CGM_DIV_Config[8] =  MSND2 & 0xFF;

}

2017年10月16日 (月)

広帯域アンテナアナライザ その3 パラメータ算出編

 その後クロック出力が出るようになったが、次の問題で悩まされ、やっと一つの方法が見えてきた。

 それは周波数と設定パラメータの関係である。
PLL生成に3つのパラメータ、分周に4つのパラメータを準備し、これをもって周波数を生成するのだが、いろいろと制約もあり、一つの計算式で表現するのが困難であった。

 行き着いたところは、周波数をいくつかの帯域に分割して、いくつかのパラメータを与え、その範囲内では同じ計算式を用いてほかのパラメータを生成する方式である。

 以下は求めたい周波数Fから、それを出力するためのパラメータを算出し、算出したパラメータから出力周波数を再計算するプログラムである。
 double型を使って計算しても数Hzの誤差を生じるが、全体からすれば数PPMの誤差であり、水晶発信子の±20PPMに比べると許容範囲ではないかと思われる。

unsigned long Si5351_F_Para(unsigned long F){
    unsigned char i;
    unsigned long Fvco,Fout;

    if((F < 330000UL) || (F > 225000000UL)){
        F = 1000000;
    }

    i = 0;
    while(F_Table[i].Freq >= (F / 1000UL)){        // find freq.
        i++;
    }

    F_Para.Freq    = F;
    F_Para.PC    = F_Table[i].PC;
    F_Para.DA    = F_Table[i].DA;
    F_Para.DB    = F_Table[i].DB;
    F_Para.DC    = F_Table[i].DC;
    F_Para.div    = F_Table[i].div;

    F_Para.MS    = (double)F_Para.DA + ((double)F_Para.DB / (double)F_Para.DC);
    F_Para.PA    = (unsigned char)((double)F / (double)F_CGM * F_Para.MS * (double)F_Para.div);
    F_Para.PB    = (unsigned long)((((double)F / (double)F_CGM * F_Para.MS * (double)F_Para.div)
                - ((double)F_Para.PA)) * (double)F_Para.PC);
    Fvco        = (unsigned long)((double)F_CGM * ((double)F_Para.PA + ((double)F_Para.PB / (double)F_Para.PC)));
    Fout        = (unsigned long)((double)Fvco / ((double)F_Para.DA + ((double)F_Para.DB / (double)F_Para.DC))
                / (double)F_Para.div);

    return Fout;
}

2017年10月 2日 (月)

広帯域アンテナアナライザ その2 I2C回路編

 2線直列インターフェース (TWI:Two-wire Serial Interface, I2C)の説明を読んでみると、簡単なインターフェースなのに複数の機器を接続できるよう工夫されていて良いなと思った。

1.信号線のハンドリングでパケットの開始、終了を区別する。
2.パケットが開始したら、接続された機器を区別するために7bitアドレスを送出する。この際機器に対してReadかWriteかをLSBで同時に指示する。
3.次に機器に対してレジスタ等書き込むアドレスを送出し、その後データ転送モードに以降する。
4.Readの場合は機器から主制御へ、Writeの場合は主制御から機器へデータが流れる。
5.バースト転送モードがあって、データを続けて転送できる。
6.それぞれのバイト転送後、受信側からAck,Nackを返して転送状況を知らせることができる。

といったところだろうか。

  このあたりは説明書「Si5351A/B/C-B」の「4. I2C Interface」や「ATmega48P/88P/168P [データシート]」の「26. TWI - 2線直列インターフェース (2-wire Serial Interface)」に書かれている。

 使用するにはその他に主制御に転送速度を設定する必要がある。初めてなので分周比を大きくしてゆっくり転送してみるとよい。
Atmega168p_cgm01 Atmega168p_cgm02
 回路はいたって簡単2本のワイヤーを接続してプルアップ抵抗をつけるだけだ。
他の部分はまだ動作テストが終わっていないので、そのつもりで。

ある程度の動作も分かったし、ATmega説明書にはサンプルプログラムも掲載されているので、実際に組んでみる。

 しかし、簡単にいかないのが世の常。10日ほどいろいろ悩んでしまった。
I2Cインターフェースのプログラムが悪いのか、Si5351の設定が悪いのか「うんともすんとも」言わないのである。これにはマイッタ。こんな時は一から検証するのが一番。

1.信号は出ているか?
 サンプルプログラムを動かすと何かしらTWの信号が上下している。
拡大するとなんとなくデータとクロックになっている。ふむ。

2.信号はプログラム通り出ているか?
 同じデータを繰り返し送出するようにプログラムを組み直し、メモリーの付いていないシンクロスコープで信号を確認してみる。
 なるほど、これがスタートシーケンスか。で、はじめの機器アドレス送出。ちゃんとWriteモードになっている。Ackも出ているように見えるなぁ。
 送出データを書き換えてみる。信号もちゃんと書き換わって送出されている。
TWIの主制御はうまく働いているようだ。

3.Si5351のレジスタに書き込まれているか?
 「Register 24. CLK3–0 Disable State」のファンクションを見ているとクロックが動いていない時の出力レベルをコントロールできることが分かった。
00: CLKx is set to a LOW state when disabled.
01: CLKx is set to a HIGH state when disabled.

 これをセットしてやると見事にクロック出力がHになったり、Lになったり変化するではないか!

4.バーストモードの書き込みはうまくいくのか?
 Register 24.に書き込むデータを、Register 23.から2バイトのバーストモードで書き込んでみる。これもうまくいった!

 結論1:TWIインターフェースはちゃんと動いている。
 推論1:クロックが出力されないのはレジスタに設定するパラメータが悪い。

〜実験は続く

2017年9月13日 (水)

広帯域アンテナアナライザ その1 構想編

 広帯域アンテナアナライザ(~60MHz)の製作を目指す。

 前回は12MHzまで発信できたが、私が移動運用で愛用するギボシアンテナは50MHzまでカバーするため、60MHzまでは測定したいのである。

 必要になる新しい技術は、2線直列インターフェース (TWI:Two-wire Serial Interface, I2C)

 それにしてもワンチップマイコンの機能の豊富なこと。これまでSPI、USARTと使ってきたが、3番目のインターフェース「I2C」に取り組むことになった。購入したクロックジェネレータのインターフェースがI2Cなのである。

 そういえば液晶ディスプレイにもI2Cインターフェースのものがあった。
このインターフェースはワイヤードORで接続した複数のI/Oを制御できるので、MCUのポートを有効に使用することができる。

 このインターフェースを使うにはワイヤードORで接続する素子の電源をそろえる必要がある。今回の場合クロックジェネレータが3.3VなのでMCUも3.3Vで動作させる。
 LCDディスプレイも3.3Vで動くものが必要だ。これまで使用してきたSC1602BS*Bは5V±5%なので、使用できない。これを機に「I2C接続LCDモジュール」を使用してみようかとも思う。

 回路全体としては、
1.クロックジェネレータを用いた広帯域アンテナアナライザ
2.コントロールはATmega168でI2Cを用いる。
3.PCとのインターフェースはUSB-USART
4.単体でも使用できるようにLCDディスプレイやロータリーエンコーダをつけたい。

 まずはI2Cの動作から使用法までマニュアルをよく読んでみよう。

2017年9月 6日 (水)

焦電型赤外線センサー実験 その1

 センサーの動作実験を目的として、Tiny13との組み合わせで次のような機能を持たせる。

1.センサーが感知するとLEDを点灯する。
2.センサー感度、点灯時間はセンサーの調整に依存する。
3.夜のみ動作し、昼は動作しない。

回路図は暫定で次のようにした。
Attiny13_irsence01

電源部はアダプターで代用し、とりあえずセンサーの動作を見てみたい。

9/13 追記
 センサー出力をダイレクトにLEDドライブTRのゲート抵抗10Kにつないだところ、それなりに人体感知し、感度や点灯時間もユニットのVRで変更できた。ここまで動くのであればMCUは必要ないだろう。折を見て進入経路に設置してみたいと思う。

2017年7月10日 (月)

新しい部品購入(予告編)

1.測定器
 今年のCQ誌1月号に掲載されていた記事の中で周波数ジェネレーターなるものの記載があった。調べてみると秋月に手頃な値段であるではないか。

 以前作成したDDSでは12.5MHzまでだったが、こちらは矩形波オンリーではあるものの200MHzまでの発生ができるとのこと。
 アンテナアナライザの測定範囲を広げたいのでチャレンジしてみることに。

2.センサー
 最近どうも我が家のバラや紫陽花の枝が知らぬ間に切られている様で、家内と不愉快な思いをしている。
 そこで対人センサーを作ってみようかと思い、焦電型赤外線センサーを購入した。
Tiny13で制御して検知〜ブザー鳴動、警告ランプ点灯をやってみたいと思う。

Dscn4857

2017年6月 2日 (金)

CTESTWIN用CWインターフェースの製作 8ストレートキー用

 先日友人のK氏がCTESTWINを使って運用する8J6VLP/6をみて、W氏が大変気に入った様なので、W氏用にCTESTWINのUSBインターフェースを作ることに。

 W氏はエレキーをお持ちですが、パドルがないのでUSBインターフェースの入力はストレートキー仕様の方が都合が良い様です。
 ストレートキー用ということは既にCWの信号が出来上がっているわけですから、CTESTWINのCW信号と合成すれば良いわけです。
 この方式ですと1チップマイコンの出番はありません。ケースも大変小さくできました。
CWジャックはエレキーが標準プラグということでしたので、標準にしました。

Dscn4739
写真の電鍵はハイモンドHK-703


 次はUSB-CWi/fパドル用。自分用に5号機を作りました。
ストレートキーもなかなかいいなと思い始めているので、パドルとストレートキーが同じポートで共用できないか検討中。

Dscn4738

2017/06/04 追記
 本日宮崎コンテストに上記ストレートキー仕様のi/fを使用してみました。
エレキーを使わずにハイモンドHK-703を用いましたが、なかなかいい感じで使用できたのではないかと思います。
 CTESTWINを用いますので、CQやRSTはi/fが、それ以外はストレートキーで対応しました。
四六時中たたいているわけではありませんので、腕も疲れませんでした。

2017/06/08 追記
 USB-CWi/f 5号機の改造:パドル/ストレートキー両用化。
プログラムを修正し、起動時ストレートキーが差し込まれていればストレートキー動作、ストレートキーが差し込まれていなければパドル動作をするように変更した。
 もう一つKeyジャックを追加することもできたのだが、ケースの中が窮屈になりそうだったのでプログラムで対応した。

2017年5月17日 (水)

FT231XS SSOPの半田付け

 さて、このブログでは一般的に使用するようになったUSBインターフェースICのFT231XSだが、実装するにはSSOPパッケージの半田付けという難関をこえる必要がある。

 以前、半田付けが難しいと言っていたが、何もしないと進歩がないので、挑戦したい人向けにノウハウを記録したいと思う。自分もまた参照したい。

1.部品調達
 FT231XS:USBシリアル変換IC @210
 SSOP20ピン(0.65mm)・SOP20ピン(1.27mm)DIP変換基板 @50
 ピンヘッダ 1×40 (40P) @35
 分割ロングピンソケット 1x42 (42P) @80

 いずれも秋月電子通商で入手できる。

2.組み立てのコツ
 変換基板に直にICを乗せてからでは、半田付けが大変難しい。半田があちこちに流れ込んでショートしてしまうからだ。スッポンでも取るのが難しい。何度苦労したことか!
 これを防止するため、今回は予備半田を行って、ICを基板に乗せたあとは一度も半田を追加しないで組み立てたところ、ショートすることなく組み立てることができた。
 予備半田が組み立てのコツとなった。

3.組み立て

(1)ICの予備半田
 半田ゴテを温め、こて先に半田をなじませてからスポンジで余分な半田を落とし、ICを裏返してこて先でなでるようにして予備半田を行う。半田が付いていないように見えるくらい薄いのがよい。

(2)変換基板の予備半田
 変換基盤を固定して、IC取り付けパターンに予備半田を行う。
銅色が半田色になるくらいの薄い量が望ましい。量が多くて盛り上がるとIC取り付け時に位置決めが難しくなったり、ICの足が浮いて半田が付きにくくなる。
 目視でショートしているのがわかるようであれば、スポンジでこて先の余分な半田を落とした後、パターンをなでるようにして余分な半田を落とす。
その後で尖ったこて先をパターン間に沿わせるようにしてショートしている半田を取り除く。
※写真では見やすい様にSOPを見せているものがあるが、SSOPでも同様。以下同じ。
Dscn4724
(3)ショートチェック
 ICを取り付ける前に、隣り合ったパターン間で半田ショートしていないかテスターでチェックする。
ショートがあったら(2)の方法でショートしている半田を取り除く。
ここでショートしているとICを取り付けた後でショートを取り除くことが困難なので、念入りに行う。
Dscn4726

(4)ICの位置合わせ
 ICの足が20本均等にパターンに収まるように両手の指で位置決めをする。

 位置が定まったら左手で(左利きの方は右手で)ICを押さえたまま、1ピンに半田の先端を押し当ててパターンに半田付けを行う。ここで半田を足してはならない。
 ICの位置に問題がなければ、左手はそのままに続けて20ピンを同様に半田付けを行う。
Dscn4725
 1,20がうまくついたようであれば、同様に2,3,19,18も付けてしまう。
端っこのピンは横からでもこて先を当てられるが、2-9,12-19のピンはそうはいかない。
これらは丁寧に足の向いている方向から、半田ごての先端をパターンの上をゆっくり滑らすように足に当てて、パターンと足を温め、その熱で半田を溶かす。

※試しに1-2,2-3,20-19,19-18のショートチェックをしてみよう。ショートがなければなかなかいい線いっていると思う。
Dscn4727
(5)残りの半田付け
 次に反対に持ち替えて、10,11,9,8,12,13を半田づけしていく。
予備半田以外では半田を足してはいけない。
 目視でショートがなければ残りも同様に慎重に半田づけしていく。


(6)ショートチェック
 隣り合ったすべてのピンに対してショートチェックを行う。
Dscn4727_2
ショートが見つかったら、ICの下かICより外側か調べ、外側ならばこて先で半田ブリッジを取り除く。
 ICの下ならば厄介だ。カッターの刃先でショートブリッジを切り落とす。

 どうしてもわからない場合は、ICを取り外してやり直す。しかし、何度もこて先を温めると細いパターンが剥がれ落ちてしまうこともある。
 自信のない方は変換基板は少し余分に手配しておくと良い。
(7)導通チェック
 次にパターン(ランド)とICの足が繋がっているか、テスターでチェックする。
導通がないときは半田が天ぷらになっている可能性が高い。足を少し押すと導通があるときは天ぷらなので、再度こて先を当てて導通させる。
Dscn4728
 テスターの片方はランド1つに対応できるが、もう片方をICの1つのピンに正確に当てるとは難しい。私の場合は、一つ手前のピンとの間において安定させて導通チェックを行っている。
<例>
1-1,10-10,11-11,20-20 これらは1:1で確認出来る。
 2ピンの場合は、2-1,2。 3ピンは3-2,3の様に。
説明しにくいがこうすることでICがわのテスターピンは一つづつ滑らす様に移動しながら導通チェックができる。
Dscn4730
(8)ロングピンヘッダの取り付け
 IC取り付けが終了すれば変換基盤にピンヘッダを取り付ければ終わりなのだが、ピンヘッダが傾いてしまうと面白くないので、相手方の基板に先にロングピンヘッダをとりつけ、ピンヘッダを挿し、変換基板を乗せて傾きが目立たないところで半田付けを行う。
Dscn4731_2

(9)ピンヘッダの半田付け
 ピンヘッダを温めすぎると土台のプラスチックが溶けてしまうので、半田付けの際にはロングピンヘッダに差し込み、熱を少しても逃がせる様、形が崩れない様にして半田付けを行う。
Dscn4732
 ピンヘッダが終わったら、ロングピンヘッダも半田付けを行う。
両方共半田が付いた状態になると、引っ張って取り外しができる様になる。

3.動作チェック
 最後は動作チェックだ。
(1)PCの認識
PCのUSBポートに接続して認識するか確認する。ドライバはFTDI社のVCPドライバを参照のこと。
PCのOSにあったものを使用する。
COMポートを指定して他のポートと重ならない様にする。

 うまく認識しないときは、ICの足が天ぷらになっていることがある。再度コテを当てて天ぷらをなくすとともに、半田ブリッジを作らない様に慎重に行う。

(2)アプリケーションの動作確認
 HamLogや、CTESTWINのリグコントロール機能やCW送出、PTT、FSKなど、うまく動作するか確認する。USBの認識以降は組み込んだ回路によって動作が決まるので、こちらも念入りにご確認願いたい。

4.なかなか便利
 変換基板にピンヘッダをつけたので、動作確認の際、変換基板と周辺回路との切り分けができる様になった。いろいろ作るときに重宝している。
Dscn4733
 ↑なかなか綺麗に仕上がった。

«JCC4604垂水市移動