2019年4月21日日曜日

CQ hamradio 5月号に紹介されたVN-4002

大変ありがたいことに、先般CQ hamradio 2019年5月号にVNシリーズ(VN-4002)の紹介記事を寄稿する機会をいただきました。

商業誌に寄稿した経験はなくはないですが、作家などの文章書きを生業としているわけではない所詮は素人ですから雑誌の意向に沿った気の利いた文章などはなかなか書けません。にもかかわらず体裁含めきれいにまとめてくださった編集の皆様に感謝申し上げます。


原稿のやり取りの中で、編集者の方のメールに『読者にこのキットの魅力を伝えたい。特徴を箇条書きに。』とありました。

え?『魅力』ってなんだろう・・・考えたことがなかったのでしばらく悩みました。

もともとこのトランシーバーをどうして作りたかったのかっていう最初の動機をたどってみました。それがもしかしたら魅力につながっているかも、ということで。

カムバックした数年前ネットで海外の様々なQRPキットを取り寄せては作っていました。このときから移動用で実用的な無線機を作ってみようと思い、どうせ作るなら小型にしてマイコンを取り入れてメモリーキーヤー内蔵したりなど一台で完結させてしまおうと欲張りな仕様を考えました。

最初はブレッドボードからスタートし、ユニバーサル基板にまとめ、プリント基板を外注した初めての人柱版から現在に至るわけですが、一貫して目指したところはいかに小型にするかということと、十分な受信性能と送信出力、無線機としての機能も充実させるということでした。

実際に頒布を継続している中で、頒布させていただいた方々の使用感を眺めてみると、小型でいてそれにもかかわらず性能が十分であるというところが評価されているようで、このことが一つの魅力なのだろうかと思いました。

文章では表現がなかなか難しく、掲載された記事を見ても大きさなどは例えば実際の市販のハンディ機などと横並びさせた画像を出しておけばよかったとか実際の移動運用レポートをもう少し具体的に挙げるなど何点か反省点はありますが、紹介記事としては十分なのかもしれません。

ともあれ自分がこういったものを作りたい、という思いを忘れずに新しいプロジェクトを進めていこうと思っています。

2019年4月2日火曜日

Si5351Aによる任意周波数の3波同時出力

新年度です。

3月ブログ更新をうっかりしそこなってしまいました・・・(´・ω・`)

とりあえずここのところいろいろと私事やら何やらで更新する気にならなかったという言い訳をしておきましょう。

ところでSiliconLab製の便利なSi5351Aは入手性も良好で、製作例も最近多く見かけるようになってきました。Si5351は3つのバリエーションがあって、Si5351Cにあっては8波同時出力が可能となっていますが、いずれのバリエーションも内蔵されたVCOは2つにとどまっています。

ほら、どれもVCOは2つしかないでしょ?
任意の周波数の2波同時出力の設定は比較的単純で、各VCOの周波数設定を変更するだけで後のMultiSynthの設定は簡単な整数で固定で済ませられます。

VNシリーズの構成は、下のように受信は2波同時(局発、BFO)、送信波1波のみ(送信周波数の信号)で3波同時に出力する必要はありませんでした。

VNシリーズの受信・送信時のSi5351A動作
QCXトランシーバーのように受信機の調整などに使える信号発生機能を検討してみましたが、VNシリーズで実現するためには任意周波数の3波同時出力が必要となります。そうすると、下図のように3波目はすでに使用しているPLLのどちらかを流用するしかありません。
3波目はどちらかのPLLを他ポートと共有せざるを得ない
 VNシリーズではCLK1のTX出力がSG出力になりますが、固定周波数ののBFO(CLK2)とPLLを共有(PLL A)としました。PLL Bでも可能ですが、LOの周波数は可変のためパラメータ計算になにがしかの支障が出ることが懸念されたため周波数がほとんど変わらないPLL Aを選択しました。

さてつぎにいよいよ目的周波数から各設定値の算出方法を考えるわけですが、まずはおなじみの(笑)パラメータと条件のまとめ図をおさらいします。
図の中のa,b,c,fvcoはBFO周波数設定ですでに規定されているので、これらのパラメータの条件は満たされています。次に上の図の2つの式をもとに、fout値を代入することによってパラメータd,e,fを算出する計算式を導きます。

ここからはPCよりもずっと直感的で自由度の高い『直接紙に書く』方法が一番です。下の画像は実際に紙に書いて導き出した記録です。

(クリックすると拡大して見れるかもしれません)
書き文字が読みにくくて恐縮ですが(汗)、左下の赤線で囲ってある計算式がd,e,f値のそれぞれの算出式です。これらの算出式の導き方については上の画像を見てぜひ考えてみてください。算出式はプログラミング言語の四則計算のルールに沿って記述しているので、この結果を見ながら実際にファームウエアのコードに新しい関数として記述していきます。

void Si5351A_ex_fset(long freq_ex){
 long a=0, b=0, c=1000000, d=25, e=0, f=0, fbfo=0;
 

 if(TX_freq < 10000000) fbfo = BFO_freq;
  else fbfo = BFO_R_freq;     // -> BFO frequency check

 a = fbfo + (calib * (fbfo / 100000)) / 100;
        // display frequency adjust to real frequency
 b = a % 1000000;
 a = (char)(a / 1000000);


 if(a > 0 && a < 36){
  while(a < 16){
   a <<= 1;
   c >>= 1;
   d <<= 1;
  }
 }


 f = freq_ex / 100;
 d = (250000 * (long)a) / f;
 e = (250000 * (long)a) % f + ((250000 / c) * b);


 ms_set(1, d, e, f, 0);
}


上のコード前半ではBFO周波数値からパラメータa,b,cを割り出しています。この部分はシステムの起動時にはすでに計算されており、各変数をグローバル変数としてコードを省略することも可能です。

コード後半の赤字部分がd,e,fの算出式で、最後に得られた数値をms_set()関数に代入してSi5351Aに転送します。やってみると意外と簡単な式に収まっていますが、各パラメータの条件の制約からこの方法では100Hzステップより細かくできませんでした。

それでも任意の周波数で同時に3波発生可能となったので、何か応用できるものはないだろうかと思案中です。