昨年秋に入手後寝かしつけていたデジタル通信用トランシーバADX-Sを組み立てました。現バージョンはWARC帯が加わり7バンドとなってます。あと簡易CATがファームウエアに付加されたようです。

以下、極私メモです。

基準周波数補正について

周波数発生部分はみんな大好きSi5351。1MHz基準の1Hzオーダー補正がもとめられています(負荷容量10PF)。±10ppm精度のデバイスなので限界はあるでしょうが、帯域がシビアなデジタルモード用のトランシーバですからがんばってみます。というか、がんばって力尽きた顛末のメモです。

手元のなんちゃって測定器に頼ると勘違いしそうなので、無線機(yaesuFT817)のJTDXの表示数値を参照基準にしてADX-S側を合わせることにしました。
普段使っているロングワイヤーアンテナの同軸を分岐させて受信比較するという作戦です。

作成マニュアルの調整指示とは違いますが、運用上迷惑がかからないという視点からすれば、わたしのとほほな計測環境ではこれがいまのところ穏当かなと思っています。

コンディションと時間帯の関係で受信可能局が多い14Mhz帯で行いました。本当は一番周波数が高い28MHz帯で行うのがいいです。
受信感度は1,2dB程度ADX-Sが低いですが受信局の取りこぼしはありませんでした。無調整でその程度に収まっているのは素晴らしいです。

室温18度ぐらいの環境でADX-Sを数時間通電したのち、調整モードー>受信モードを4、5回繰り返し受信周波数単位で1Hz程度の「ずれ」?で収めました。これだと28Mhzの場合でも2,3Hzの差に収まっているはずです。

マニュアルではキャリブレーションモードに移行後、2分ウォームアップして調整を開始すべしと書かれていますが、実際は10分程度ドリフトが目立ちました。調整時間の大半は待ち時間です。

si5351の周波数補正係数はタクトSWを押すごとに100増減設定されます。今回は増減値を25に減らして行いました(コードのCalibrationメソッドのcal_factor=cal_factor+100..あるいは-100.の部分を25に書き換えるだけ)。気持ち的に微調整したかったんです。

問題の手持ち測定器の数値ですが、上記調整後に確かめたのが次の表です。

APB-3(多目的計測器) 周波数測定モード1000009前後
LeCroy(現テレダイン) waveace1002(デジタルオシロ) measureモード999988前後
Kuranishi 6560B(周波数カウンター。現役です!)999987
FeelTech FY6600(信号発生機) MEANSモード(10S設定)999986後半
いずれも3日程度通電してからの計測。ただし夜は10度以下になる物置ですので気休め。

APB-3は10ほど高く、それ以外は12,13Hzほど低いところに「不時着」してます。
後者3点の収束具合を見ると、参照基準のFT817の周波数表示も疑うべきです。差がすべて無線機側の問題だとすればHF運用機種のFT450D(FT817と周波数表示はほぼ一致)の14Mhzでは150Hzほど違って交信していたということになります。法的には問題ないとはいえ、狭帯域の交信では気になる数値となります。。。
とはいえ、基準周波数発生器がないので、事実は今のところ闇の中という次第です。

今度、プリミティブな方法ですけど、pskreporterの受信周波数報告数値とFT-450Dでの交信ログ数値を対照してみます。少しは精度のある周波数発生器を整えて比較することが今後の課題です。

【2024-03-30追記:GPS/PPS信号を基準とした1MHz出力(u-blox u-center CFGによる1MHz出力)と比較した限りですが、無線機側の周波数「ずれ」はせいぜい1,2Hzで、多くは測定器の「ずれ」であるような「印象」です。この点は別記事でメモします。】

受信可能帯域について

調整中に20mのFT-8運用帯域超え(14.0774あたり)の領域でCQを出している局に出くわしました。3000Hz超の局を見たのは初めてでした。フィルターが効いているyaesuの通信機では見えず、ADX-Sのみの「受信」でした。ADX-Sはフィルタ(PFB455JR)の中心周波数455KHzからIFをずらすことで帯域カットを目途していますがフィルタ特性がブロードのため見えた模様です。

フィルタの直列接続でどうなるか最近友達になったNanoVNAで測ってみました。PFB455JRは昨年秋にADX-Sを入手したときに買い込んだので(100個単位の販売でしたのでしこたまになりました)剣山にするほどあります。下のグラフが1個、2個、4個の結果です。

2、3個に増やすと結構絞ることができそうです。4個だと減衰が少し気になる感じです。いずれにせよ実測に基づいてIF値を調整する必要があるので、これも今後の課題です。

現在の周波数帯とモードを液晶表示する

ADX-Sの表示インターフェースはLED4個だけ。シンプルです。
運用中の周波数は、通電直後に該当するLEDが3回点滅することでわかります。
つまり・・・そのタイミングを見逃すと、<いったいわたしはどこにいるの?>状態となります。
ドジなわたしは間違いそうなので液晶で常に情報を見られる様にしておきます。他にも調整数値を見るなどの用途がありそうです。

ファームウエアのコードは短いので液晶機能を付加してもメモリ的に問題なさそうです(今のところ)。

液晶は小型OLED SSD1306モジュールを使いました。取り付け場所は真下にArduino nanoがあるパネル右下にしました。

nanoには長いピンヘッダがついていて、そのピンに追加基板を合わせて液晶接続します。拡張を想定してヘッダを長くしているのでしょう。

蛇目基板に、表側パネルにつっかえない程度の低めのピンソケットをつけ、GND,3.3V,SCL,SDAの4線をnanoのGND,3.3V,A5,A4のピンの場所に配線します。適当な高さのソケットがない場合はICソケットの流用もいいと思います。ソケットは強度をつけるため二連のものを使ってます。またソケット部はピンから外れますので、基板裏に厚めの両面テープを貼り、上からの力を支える様にしています。
今後の取り外しが楽なように最小限のピンのみハンダ付けしました。

パネルに4ピン分+液晶固定四隅を穴あけします。現物あわせでがんばります。
サイズを測って一発勝負すると失敗するのが素人工作あるあるです。
パネルは両面基板ですので、ピンと接触しないよう穴は大きめにして、座繰りで絶縁部分を広げます。

スペーサーのかわりに樹脂ナットを使ってます。

Arduinoコード修正は、まだやってません。上の写真も一種フェイクです。ファームウエアの修正が少ないようにしたいと思います。使用ライブラリなども含めて、この点、別記事で補足します

追記:コードを追加変更して次の様な表示にしました。

液晶機能追加コード

簡単なコード修正です。運用時の周波数・モード表示と、周波数補正時の補正係数の表示ができる様にしています。
大元のADX_S_V1.3.inoと液晶追加版のコードのdiff ( -bw)結果をコメント付きで掲載します。

137a140,149
> //*************************[ OLED ]****************
> #include "SSD1306Ascii.h".    <<ーー文字専用ライブラリ
> #include "SSD1306AsciiAvrI2c.h"<<ーー文字専用ライブラリ
> #define I2C_OLED_ADDRESS 0x3C
> char* mode_char[]={     <<ーーモード表示用ポインタ配列。書き換え時にWSPRのRが残らないようにJS8以下空白を1つ入れている(条件分岐でclearしなくてもいい)
> "WSPR","JS8 ","FT4 ","FT8 "
> };
> String cal_factor_rom;<<ーーキャリブレーション表示用文字列格納
> SSD1306AsciiAvrI2c oled;
> 
140a153,155  <<ーーsetupメソッド内で基本設定する
>   oled.begin(&Adafruit128x32, I2C_OLED_ADDRESS);
>   oled.setFont(Adafruit5x7);
>   oled.set2X();<<ーーみやすい様に二倍表示にしています。

430a447,452 <<ーーーloop内でモードと周波数表示する
>   //oled display mode and freq
>   oled.setCursor(0,0);
>   oled.print(mode_char[mode]);
>   oled.setCursor(0,2);
>   oled.print(String(freq));  

926a948,949<<ーーー以下、Calibrationメソッドの中で補正係数表示
>   cal_factor_rom = "rom:"+String(cal_factor);<<ーーromに格納されている補正係数
> 
931c954,955
<       cal_factor = cal_factor - 100;
---
> //      cal_factor = cal_factor - 100;
>       cal_factor = cal_factor - 25;<<ーー微調整したいので係数増減を100から25に減らしています
935c959,960
<       cal_factor = cal_factor + 100;
---
> //      cal_factor = cal_factor + 100;
>       cal_factor = cal_factor + 25;

942a968,971<<ーーromとタクトSW変更後の補正係数値表示
>     oled.setCursor(0,0);
>     oled.print(cal_factor_rom);<<ーーrom値
>     oled.setCursor(0,2);    
>     oled.print("cur:"+String(cal_factor));<<ーー変更後の値

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です