ラベル arduino の投稿を表示しています。 すべての投稿を表示
ラベル arduino の投稿を表示しています。 すべての投稿を表示

2022年8月2日火曜日

NK-28AM 28MHz AM Transceiver (CB modify)

 

NK-28AM

 最近28MHzAMが結構話題になっている。そんな時、断捨離中に物置にCB機があった。
これなら簡単に改造できると思い改造することとした。とはいっても回路図もなく、結構難儀をした。色々NET検索をしたら、幸いにも回路図や、PCBパターン図、サービスマニュアルが入手できた。

【STARKERⅦ】
 このCB機はUNIDEN製でアメリカ仕様のようである。
送受信回路は概ね標準委近い回路である。その中でも色々工夫がされている。参考になるところも多い。
 VFOはPLL(uPD2816C)CB専用であり、CH数、CH9などが設定されている。この為流用はできない。ここはDDSに変更した。
 受信部は、第一中間周波数10.695MHz、第二中間周波数は455kHzと標準的。第一が10.695MHzとなっているのは、PLL基準が10.24MHzなので、455KHzにダウンコンバートするためこの周波数となっている。
 uPD2816Dの入力はせいぜい2MHz程度のため、VCOの出力をこのレベルに落とす工夫がされている。まず、uPD2816Cから基準の1/2(5.12MHz)が出ているので、これの3倍高調波(15.36MHz)を作りVCOとMIXし1MHz台を作り出している。
 受信はVCOを第一ミクサーに直接入力。送信はVCOにやはり基準の10,24MHzを入力し作り出している。これにより1クリスタルで全てを作り出している。お見事。
 送信は 2SC2076-2SC1957-2SC1306と定番。受信回路では、本格的(?)なノイズブランカ、ANLがあり、さらにAMスケルチ(Sメータレベルを利用)も着いている。
 さらに送受信は、リレーを使用せずダイオードスイッチで全て行っている。特にスピーカーの切り替えは、マイクのトークスイッチで、送信時スピーカーのコールド側を切るという技が使われている。最初音が出ない、故障かと思ったが、マイクを接続しておかないと音は出ないのである。賢い。
 以上概略である。

Block Diagram

メイン回路図

VFO回路図

【Modify】
 さて改良であるが、PLLが流用できそうもないので、DDSを使ったVFOとした。至ってシンプルなものである。特に説明は不要と思われるが、改造の要点をまとめておくのでBlock Diagramと参照頂ければと思う。

  1. DDSは、Arduino nanoでAD9850を制御。ロータリーエンコーダーで周波数変更。周波数ステップは、100Hz,1kHz,10kHz,100kHzの4段でUP,DOWNスイッチで変更。AMなのでkHzとした。VFOはA,Bの2チャンネル。電源OFF時の周波数も含めてEEPROMに書き込んでいる。
  2. 表示回路は、MAX7219を使用した7セグメント8桁で周波数を表示。0.96inchOLEDでVFO A/B周波数とステップを表示した。でも小さくて読めない。(老眼では)
  3. DDS出力を受信第一ミクサー(2SK19)に直接入力(-7dBm)。送信ではミクサーTA7310に10dBアッテネーター経由(-17dBm)で入力し10.24MHzとミックスして目的周波数を作っている。
  4. 送受信の同調回路は、概ねコアの調整でOKであった。ファイナル2SC1306のコレクタに入っている100pFだけ撤去した。
  5. メーターランプをLED化した。
  6. 概ね元の機能は維持しているが、ΔTUNEのみ無効となっている。AMということと、DDS化したので不要と思われる。

リンク
  回路図、arduinoスケッチ
  受信風景 (YouTube)

 【感想】
 受信は意外に高感度であり、音質もよい。内部ノイズも少なく、アンテナを外すとほとんど何も聞こえない。
 送信は4W強。Eスポさえ出れば十分使える。必要ならばリニアを接続すればいい。
結構実用機に仕上がった。

各局 28MHz AMでQSOしましょう!!









2022年5月23日月曜日

DDS & PLL Tester

 無線関連の自作を行っているが、最近DDSやPLLを使用することが増えてきている。そんなときトラブルが発生したとき、原因調査でDDSやPLLが壊れていないか調べることがある。
 今までは、ブレッドボードで試験回路を作って調べていた。マイコン制御であるため、試験プログラムもいくつか作っていた。ということで、各種DDS,PLLを簡便に試験できるテスターを作ってみた。

【 HardWare 】
 ハードウェアといっても、ユニバーサル基板にArduinoとTFT-LCD、DDS等を乗せるためのpinソケットだけの簡単なものである。
唯一の特徴はタッチパネル付きのLCD(2.8inch)を使用したことでしょうか。

【 SoftWare 】
 今回のスケッチは、過去作成したものに継ぎ足しで作ったのでわかりにくいと思うがご容赦。 
 単純にDDS,PLLを選択し、リファレンスクロックと出力周波数をテンキーで入力することにより動作するという単純なものである。





【 Device 】
 試験できるDDS、PLLは以下のもの。
 DDS       AD9833,AD9834,AD9850,AD9851
                AD9833はサイン波、三角波、方形波を選択できる
   PLL        Si5351
                Si5351はCLOCK0,CLOCK1,CLOCK2を選択できる

【 操作 】
    (1) タッチパネルDeviceを選択
  (2) Ckockを入力しEキーをタッチ
            0を入力しEキーを押すと規定値が設定される
            AD9833-25MHz,AD9834-75MHz,AD9850-125MHz,AD9851-30MHz
            Si5351-25MHz
  (3) 出力周波数を入力しEキーを押す
            0を入力しEキーを押すと規定値が設定される
            出力周波数は 1MHz
  (4) 信号が出力される
    (5) RestartでTOPに戻る。


 以上簡単な構成である。スケッチで最も面倒なのは、タッチパネルのキャリブレーションと思う。ALL BAND TRANSCEIVERで説明しているので参考にされたい。

 スケッチ、回路図(PDF)     Sketch & Schematics

以下に回路図と各種DEVICEの画像を乗せておく。















2021年8月9日月曜日

ALL BAND TRANSCEIVER (5)

今回はこのTRANSCEIVERの中枢であるコントローラーについて簡単に解説します。

Microprocessor 

 今回のコントローラーは、以前BlogにUPしたVFO Ver8.0を基にカスタマイズしています。
 MPUは、Arduino Due を使用しました。今回のプロジェクトでは、ALL BANDで多機能であるため、I/Oが多く、十分なメモリ容量でスピードが速いものを必要としました。
 主な仕様は以下の通り


Specification
Microcontroller AT91SAM3X8E
Operating Voltage : 3.3V
Input Voltage (recommended) : 7-12V
Input Voltage (limits) : 6-20V
Digital I/O Pins : 54 (of which 12 provide PWM output)
Analog Input Pins : 12
Analog Outputs Pins : 2 (DAC)
Total DC Output Current on all I/O lines : 130 mA
DC Current for 3.3V Pin : 800 mA
DC Current for 5V Pin : 800 mA
Flash Memory : 512 KB all available for the user applications
SRAM : 96 KB (two banks: 64KB and 32KB)
Clock Speed : 84 MHz

TFT Color LCD with Touch panel


 今回のコントローラーで一番苦労したところが、タッチパネルのコントロールであった。
LCDは、ドライバーがILI9341でSPIインターフェース。これにタッチパネルが付いたものである。

Specification
Display Color    RGB 65k color
Screen size       3.2inch
Driver              ILI9341
Resolution        320x240 pixel
Interface          4 wire 
SPI 
Touch panel     Resistive touchscreen
Touch Driver    TSC2046

Arduino Due周りの結線図を再度掲載する。DueとLCDの接続を赤くしてある。

 特に苦労した部分について簡単に記載します。

USB Port
Dueは2つのUSBポートがある。一つはPrograming Portで主にプログラムの書き込み、消去等にしよう。もう一つはNative Portで主にユーザープログラムで使う。
 今回は筐体背面に両方のポートを付けた。Programing用とCAT通信用としている。
 CATはメーカーによってコマンドが違うためどれかに決める必要がある。今回はHamLogの周波数設定程度なので、Yaesu FT-991,Kenwood TS-2000に対応できるようにした。(コンパイル時に選択)
 スケッチは、mainルーチンで外部からUSB経由でシリアル信号を受信したかチェックし、文字列を判読し、情報を返信する単純なスケッチである。以下は参考スケッチです。

---------------------------------------------------------
byte CATbyte = 0;

void setup(){

    SerialUSB(38400);}

void main(){


CATbyte = SerialUSB.available();
if (CATbyte >0){CATset();}

}

//----- CAT Controll(FT-991) -------------------------
void CATset(){
  String CATinput = SerialUSB.readStringUntil(';');
  SerialUSB.flush();
  if (CATinput == "FA"){
    SerialUSB.print("FA");
    String freqtcat = freqt;
    int mojicat=(freqtcat.length());
    if (mojicat <9){
      for (int i=9; i > mojicat; --i){
        SerialUSB.print("0");
      }
     }
    SerialUSB.print(freqtcat);
    SerialUSB.print(";");
  }
  if(CATinput == "MD0"){
    String modecat = String(mode);
    SerialUSB.print("MD0");         
    SerialUSB.print(modecat);
    SerialUSB.print(";");   
  }
  else{
   SerialUSB.print("?;");
  }
}
----------------------------------------------------------

Touch panel
 タッチパネルの処理には非常に苦労をした。製作までにかなりの時間を要したが、逐一記載すると非常に大変なので、結果だけを書くことにする。

タッチパネルには今回抵抗膜方式のもので、タッチしたときの抵抗変化で位置を特定する方式である。タッチパネルのドライバーはTSC2046、LCDはILI9341、MPUはArduino Due。
 初めにタッチパネルのキャリブレーションが必要である。押した位置の抵抗値をLCDのPixelに変換する。これにより位置判断が可能となる。
 キャリブレーションのスケッチは以下のライブラリーのサンプルスケッチにある。
https://github.com/marekburiak/ILI9341_due
[ uTouchCalibration.ino]が目的のスケッチである。
 55行を今回のハードウェアに変更する。
   URTouch  myTouch(30, 28, 26, 24, 22);
            ↓
   URTouch  myTouch(6,5,4,3,2);

 73行を使用するLCDの方向に合わせる。(90 or 270)
tft.setRotation(iliRotation270); // landscape
 

これをDueに書き込むと右の画面が表示される。画面のどこかをタッチすると次の画面が表示される。




この画面で左上ハイライトされた+をタッチする。中央の[PRESS]が[HOLD]に代わり[RELEASE]に変わる。すると今度は左中央がハイライトする。同じようにタッチして8か所すべてが終了すると最終の情報画面に変わる。


CAL_X
CAL_Y
CAL_Z
これがキャリブレーションで得られた情報である。




 この情報はIDEのシリアルモニタにも出力される。
 
ここで、今回使うタッチパネル用ライブラリー
http://www.rinkydinkelectronics.com/library.php?id=93にあるURTouchを使用する。


このライブラリー内にある[URTouchCD.h]をエディターで開きオリジナルのXYZをコメントアウトし、シリアルモニタのXYZをコピー&ペーストし保存する。
 これで使用するLCDのキャリブレーションが終了する。LCDを変更した場合はそのたびにキャリブレーションが必要となる。


参考スケッチ
実際のスケッチの抜きだしなのでよくわからないかもしれない。mainルーチンでパネルが押されたかどうか検出しx,y情報をサブルーチンに渡し処理を行う。URTouchライブラリーのexampleスケッチなど参考にしてください。

-------------------------------------------------------------
void main(){
  if (myTouch.dataAvailable())
    {
    myTouch.read();
    int x = myTouch.getX();
    int y = myTouch.getY();
    ProcessKeyTouch(x, y);  
}

//----- Touch -----------------------------------------------
void ProcessKeyTouch(int x, int y)
{
//  SerialUSB.end();
  ucg.setFont(ucg_font_fub11_tr);
  if (x >= 5 && x <= 5+key_width){               // Menu
    if (y >= 210 && y <= 210+key_height){
      key_rows = 2;
      menu_sub();
    }
  }
  if (x >= 5+1*80 && x <= 5+1*80+key_width){       // Band Set
    if (y >= 210 && y <= 210+key_height){
      key_rows = 3;
      band_set();
    }
  }
  if (x >= 5+2*80 && x <= 5+2*80+key_width){    // Step UP
    if (y >= 210 && y <= 210+key_height){
      fstepmem=fstepmem+1;
      fstepset();
    } 
  }
  if (x >= 5+3*80 && x <= 5+3*80+key_width){    // Step Down
    if (y >= 210 && y <= 210+key_height){
      fstepmem = fstepmem-1;
      fstepset();
    } 
  }
  if (x >= 5 && x <= 67){        // VFO
    if (y >= 10 && y <= 30){
     key_rows = 1;
     vfo_menu();  
    } 
  }
  if (x >= 77 && x <= 122){      // Mode
    if (y >= 10 && y <= 30){
      key_rows =2;
      mode_menu(); 
    } 
  }
  while(x != -1 ){
      myTouch.read();
      x = myTouch.getX();
      //y = myTouch.getY();  
  }
}

一部省略して書いたので少々わかりにくいかもしれませんが、ご容赦

以上 これでALL MODE TRANSCEIVERの解説は終了の予定。質問や、聞きたいことなどご要望があれば追記するかもしれません。メールまたはコメントにてお知らせください。

DE JA2NKD Ryuu


2021年7月24日土曜日

ALL BAND TRANSCEIVER (4)

 今回の ALL BAND TRANSCEIVER で色々な課題があった。今回解説するBAND,MODEの制御もその一つである。
 タッチパネルで選択したBANDやMODEは数値化され制御を行う。具体的には変数 [BAND] 変数[MODE]に選択した数値情報が収納される。

 上図でPHOT1でBANDをタッチ、PHOTO2で希望BANDをタッチすると変数[BAND]にBAND番号が収納される。この変数を2進数にして各BITのHigh,Lowを調べI/Oに出力をしている。
全部で14BANDなので4BITバイナリーでD14,15,16,17に出力している。
sketchでは、
void DIO_BAND_set(){
  int bitdata = 0;
  int port_num = 0;
  for (int j=0; j<=3; j++){      // ポートをLowにリセット
    digitalWrite(14+j,LOW); 
  }
  for (int j=0; j<=3; j++){  
   bitdata = bitRead(band,j); // 変数[band]の各Bitを調べる。
    if (bitdata == 1){
     digitalWrite(14+j,HIGH);   // 1なら当該ポートをHighにする
    }
    else{
      digitalWrite(14+j,LOW); // 1以外なら Lowとする。
    } 
  }
}

Modeも同様にしてD18,19,20,21に出力している。

 Aruduino DueのD14-21ポートに出力されたBAND,MODE情報は、以降の処理に使いやすいように(FXMA108)で3.3Vから5Vにレベル変換をしている。
 BAND情報はD14-17から出力されレベル変換後TC4515デコーダーを使用し、各BAND個別信号を出力している。このTC4515はActiv Low 選択された信号がLow、それ以外がHighとなる。このためPNPデジタルトランジスタ(RN2201)を利用し選択された受信用BPFに電源を供給するようにしている。
 送信も同様にBPF選択を行っている。送信ではさらに TD62084というSink Driverで出力のLPFリレーを制御するようにいている。

MODEも同様であるが、選択数が少ないのでデコーダーに74HC238(3INー8OUT)を使用いた。これはActiv HighなのでNPNデジタルトランジスタ(DTC144)を使用しColinsフィルター切替を行っている。

尚、BAND情報は、Linear と Transverterのためにバッファ(74HC125)経由でDINコネクタに出力している。

 さすがにALL BAND TRANSCEIVERともなると、フィルタ、BPF、LPFの切り替え処理が非常に煩雑となることを実感した。今回極力手持ち部品を使用したため、どうも一貫性のない回路となった感じである。ご容赦願いたい。

今回は、あまり日の当たらない部分の解説なので、少々つまらなかったもしれませんが、備忘録としてUPしておくこととした。

DE JA2NKD Ryuu







 




2021年7月4日日曜日

ALL BAND TRANSCEIVER (3)

 ALL BAND TRANSCEIVER (3)

送信部


❶ マイクアンプ  
  マイクアンプは、コンプレッサーTA2011SとOPAMP(LM741)を切り替えるようになっている。またSSB送信試験用に1kHz発振回路を組み込んでいる。これで口笛による調整から解放される。この3回路をOPAMP(NJM7043)でミキシングしSSBはPSN回路に、FMはFMキャリア回路に送っている。
 
❷ AF-PSN回路 
以前blogに掲載した50MHzPSN送信機と同様の回路で dsPIC33FJ64GP802を使用し位相のずれたAFを作っている。このdsPICのソフトはTJ-Labの上保さんの作成されたものであるが、非常に優秀である。
 
❸ 直交変調器
 これも50MHzPSN送信機と同様MAX2452を使用している。特に調整回路がないのでキャリアバランス等の調整は行っていない。AFレベルを調整しても効果がなかった。何とか40dB程度である。他にも直交変調器のICはあるようだが、ほとんどがGHz用であり、HFに使えそうなものは見つからない。またDBMやスイッチを使ってディスクリートで組むこともできるが、回路規模が大きくなってしまう。その点MAX2452は外付け部品もなく簡単である。また運用してモニターしいただいているが、おおむね音質はよく、キャリア、逆サイド等は認められないとの評価をいただいている。この直交変調器にSi5351によるVFOを直接入力している。このVFOの周波数は運用周波数の2倍を入力している。50MHzであれば100MHzとなる。これで全バンド ダイレクトにSSBができる。
 
❹ 前置増幅器 
MAX2452の出力は非常に小さいのでMMIC(MSA-0886)で25dB程度増幅している。

❺BPF
直交変調器で出来たSSB信号をBPFを通すことによりスプリアスを除去させている。BPFは「トロイダル・コア活用百科」の2ポールBPFを使用した。

 ❻前置増幅器
 目的出力を得るにはまだ低いので再度MMIC(MSA-0886)で再度25B程度増幅する。オールバンドにはMMICが得意だ。
 
❼プリアンプ 
ファイナルをドライブするため100mW程度に増幅する必要がある。三菱の高周波パワーFETRD00HHS1を使用している。アイドリングは50mA

❽パワーアンプ
RD16HHF1プッシュプル。出力は10W以下なので十分すぎるが、全バンド安定して増幅するために採用した。ドライブレベルを調整し概ねMAX 8W 程度の出力としている。バンド差が大きく出てくるかと思ったが、意外にそろっている。

❾LPF
λ/4 5次LPFで「トロイダル・コア活用百科」を基本として設計している。

❿FMキャリア水晶発振器
ジャンク水晶67.18235MHzを基本波発振させ3逓倍し67MHz台としている。これにバリアブルキャパシタダイオードにマイクアンプからのAF信号でFM変調を行っている。オーバートーン発振ではほとんど変調がかからないので注意。

⓫FM用ミクサー
⓫の水晶発振信号とVFOを混合し目的のFM信号としている。以降はSSBと教養である。

⓬オシレータ回路
今回周波数の安定度、正確性を確保するためにオシレーター回路に拘った。必要とする周波数は、70.455MHzの第一中間周波数を455kHzに落とす70MHz、455kHz前後のSSBキャリア信号及びVFOである。
 70MHzhDDSAD9851を使用している。このDDSクロックは10MHzのTCXOを基準としてVCXO30MHzを PLLを組み安定化し供給している。またVFO(Si5351)用のクロック25MHzも30MHzクロックのAD9851で作っている。455kHzキャリアは10MHz基準のAD9850から作り出している。これらはすべて固定周波数なのでArduino-nanoを使用しコントロールしている。10MHzは外部からGPS基準信号等が入力できるようにしている。詳細は下部回路図を参照願いたい。こだわりのOSCである。

⓬VFOコントローラー
 今回はマルチバンドトランシーバーなので以前blogに掲載したタッチパネル付きVFOコントローラーを基本として採用している。ただこのトランシーバー用にカスタマイズしている。
 コントローラーにはAruino-Dueで、メモリー容量、スピード、I/O数等十分な性能がある。難点はどうしても大きいことであろう。特徴としてtっちパネルを採用し、多機能でありながら機械的スイッチの数を大幅に減らすことが可能となった。

⓭CATコントロール
Arduino-DueはUSBを2回路積んでいる。1個はプログラミング用、もう一つは外部機器との通信に使用できる。これを利用しパソコンと接続し「Turbo HAMログ」でデータ入力時に周波数を自動的に表示できるようにした。基本的な通信g理解できたので、トランシーバーを外部からコントロールできるようにすることも可能である。今後発展させていきたい。

 以上オールバンドトランシーバーの概要です。詳細については 省略させていただきます。

DE JA2NKD









 

 

2021年6月21日月曜日

ALL BAND TRANSCEIVER(1)

 Nowadays, SDR is the mainstream.

But I like analog systems. Since I first started amateur radio 50 years ago, I've always wanted "Collins". Recently, the "Collins Filter" has finally been discontinued.

Covid-19 occurred two years ago, and from last year, "Stay home" began to be shouted. This allows you to spend a lot of time on homebrew. On this occasion, I decided to make a transceiver using the "Collins filter" that I had longed for for many years.

For VFO, I used the touch panel type VFO controller that I posted on my blog before.

It was finally completed two years after it started. But the pandemic has not yet converged.


Specifications

Receiver
Circuit Type                    SSB/CW/FM/AM: Double conversion  Super heterodyne
Sensitivity                      SSB:2.4kHz CW:500Hz FM:12kHz AM:6kHz
Intermediate frequency  1st:70.455MHz,2nd:455kHz
Frequency range            Ham band (1.9,3.5,7,10.14,18,21,24,28,50)
                                    General (0-60MHz Receive only)
Audio Output                 2W into 8 Ohms

Transmitter
Modulation types            SSB(J3E),FM(F3E),CW
Power Output                5-8W
FM Deviation                 ±5kHz
Microphone Impedance  600 Ohms

Others
Power Consumption       Rx 1.0A    Tx 3.7A  (Maximum)
Supply Voltage              13.8V
Dimensions                   W:430mm  H:100mm  D:450mm
VFO                             Si5351 PLL
Controller                    Arduino Due
LCD                            3.2inch TFT with Touch Panel

Internal View


Block diagram

Video(YouTube)    https://youtu.be/toFvZ_4qtKs

I will upload the commentary to the blog little by little in the future.

DE JA2NKD


2020年8月17日月曜日

Attention about Rotary encoder library

 Recently, there was a inquiry that the rotary encoder did not work in the sketch of arduino.

Upon investigation, I found that the library of rotary encoders I'm using has been updated. For the new library, you need to add the instructions(r.begin();) as follows:

void setup() {
     r.begin();
    PCICR |= (1 << PCIE2);
    PCMSK2 |= (1 << PCINT18) | (1 << PCINT19);                                                                                
    sei();
}

No error will be issued without this command, but it will not work.

It may need to be changed depending on the library you are using.

If that doesn't work, try this change.

Let's enjoy homebrew.

73's      de JA2NKD    Ryuu

2020年8月8日土曜日

TRIO TR-5000 External VFO

 ※ 2020.08.30 Corrected the schematic

TRIO(KENWOOD)TR-5000  1968年販売開始されたAM,FMトランシーバー。OMならご存じではなかろうか。
受信はVFO,送信はクリスタルというスタイル。当時はこれでも結構QSOができた時代である。最近ではクリスタルの特注も難しい(特にHC-6Uタイプは)。
SDRが主流となってきた昨今いまさらAM,FMとも思うが、ノスタルジアだろうかAM通信もまだまだ愛好家が頑張っています。SDRではだれが作っても同じ性能のものになってしまいます。アナログ機器は作り手によって性能が大きく変わる。そこが楽しい。
 そんなことで、今回物置からTR-5000を引っ張り出し、外部VFOを製作しました。
ただの外部VFOでは面白くないので、周波数表示と送受信トランシーブVFOとした。


【構想】
・できるだけ本体は改造しない。
・トランシーブ操作
・周波数表示
・Arduino nano
・Si5351




【回路】
 受信用VFOの出力コイル2次側からFET(2SK241)ソースフォロワーで取り出す。出力は-25dBmくらいなので、MMIC(SGA-6386)で0dBm程度まで増幅する。これをさらに増幅、波形成型し74HC90で1/10に分周しArduinoによる周波数カウンターに入力する。
 カウンターの入力回路はJE1UCI冨川OMがICOM BEACONエレクトロニクス工作室No.134で発表されている回路を使用させていただいた。この回路は感度もいい。調整は2SC1815のコレクタ電圧を2.5Vにする。
 Arduinoに入力された信号はゲートタイム1秒でカウントし、LCDに表示する。また送信時(PTT ON)にカウントした周波数から送信周波数を計算し、Si5351PLLで送信出力を生成し外部VFO入力(外部クリスタル)に出力する。例えば
受信周波数 50.600.000の場合 VFO=50.6-41.58+1.65=10.67MHz
カウンタ入力=10.67/10=1.067MHz
なので表示数は(1.067*10)+39.93000=50.600MHzとなる。
送信周波数は24逓倍なので 50.6/24=2.108333MHzとなる。(Si5351出力)
 これで受信周波数によるトランシーブ操作VFOとなる。
 一つ問題がある。Arduinoの基準クロックは16MHzであるが、正確ではない。またSi5351の基準クリスタル25MHzも正確ではない。そこで、この補正を行うため、ロータリーエンコーダーを使いキャリブレーションできるようにしてる。
 操作は、運用周波数を受信し、CALスイッチをONにし、エンコーダーでメーターの振れが最大になるようエンコーダーを回す。これで送受信が一致して運用できる。電源を入れて1回操作をすれば大きくずれることはない。AM,FMなので問題ない。
 また、プログラムの中でカウンタの補正も行っている。既知の周波数を入力し表示周波数を見る。この比率で補正計算を行っている。
 例えば正確な10MHzを入力し10.00500MHzとなったら、計数0.9995を補正値とする。
 古い機器を再生させようと思っているOM諸氏の参考になれば幸い。

Arduino Sketch & Schematics(tr5000_counter.zip) Download
73's







2020年6月30日火曜日

VFO Controller 8.0 (Aruduino Due with touch panel)


多機能のVFOを製作しようと考えると、どうしてもスイッチが多くなる。例えばVFO7.1では12個のスイッチを使用した。こうなるとパネル製作も一苦労である。今回タッチパネル付きのTFTを使用し外部スイッチの削減を試みた。最近のメーカー製トランシーバーやSDRもほとんどがタッチパネルを採用している。どうせ作るなら盛り沢山の機能を搭載することにした。最近の私にとっては、ちょっとしたチャレンジである。尚、このVFOはアナログトランシーバー向けのVFOです。
【Hardware specification】
  • VFO  Si5351a PLL
  • TFT  2.8inch TFT with Touch Panel
  • MPU   Arduino Due
  • EEPROM 24LC64
【Software specification】
  • MODE  LSB,USB,CW,FM,AM
  • BAND  1.9-50MHz (Japanese Ham band),0-60MHz(General caverage
               Transverter mode(144MHz,430MHz,1.2GHz)
  • VFO     A-channel B-channel every band
  • VFO Type  Up-conversion Down-conversion chooseable
  • Memory  50channel 
  • CAT  CAT Controll (Frequency,Mode) for Ham Log Software
【manual】
[VFO-A]をタッチ
 サブメニューが開きます。
A/B VFO-AとVFO-Bが入れ替わります。
A->B Aの周波数をBにコピー
B->A Bno周波数をAにコピー
SPLIT メインが受信 サブが送信となりスプリット送信が可能となります。




[USB]をタッチ
 サブメニューが開きLSB,USB,CW,FM,AMの変更ができます。
[BAND]をタッチ
 サブメニューが開きます。希望のBANDをタッチすれば移動します。
[GEN]はGeneralで0-60MHzまで連続可変できます。送信はできません。
[TRV]はトランスバーターでサブメニューが開きます。144MHz,430MHz,1.2GHzが選択できます。この場合書くBAND毎にオフセット周波数を設定できます。イニシャルでは28MHz帯が出力されるように設定してあります。
[MENU]をタッチ
 サブメニューが開きます。
[M/R] メモリチャンネル呼び出し。1-50CH UP/DOWNで選択
[M/W] メモリーチャンネル書き込み。1-50CH UP/DOWNで選択。書き込みは上書きされます。
[PLLSet] Si5351aのクロック周波数を設定します。UP/DOWNスイッチでVFO出力を10MHzにセットし記憶します。
[CLAR]をタッチ
Cralifire(RIT)メニューが開きます。
[CLAR-R] 受信用Clarifire
[CLAR-T] 送信用Clarifire
[OFF] Clarifire 停止

[V-Type]をタッチ
VFOをUPConversionにするか、DownConversioにするかを設定します。BAND毎に設定可能です。

【Make】
 今回MPUにArduino Dueを使用。nano,UNOではメモリー容量が足らないことからの選択である。DueはEEPROMがないため24LC64というI2CのEEPROMを付加した。構成はI2C制御のSi5351、24LC64 SPI制御のタッチパネル付きTFT(driver ili9341)及びロータリーエンコーダーといたって簡単な構成である。またDueには2個のUSBが搭載されており、1つはプログラミング用 もう一つは外部との通信用に使える。今回これを使用し簡単なCATコントロールを搭載した。現状HamLogに対応している。
 注意点としてDueは3.3V動作なのでI/Oも3.3Vである。このおかげでTFTとダイレクトでの接続が可能である。半面 外部とのインターフェースも3.3Vが上限であることに注意が必要である。バンド情報、モード情報等の出力は3.3Vとなる。まだたくさんのI/Oが余っているので、追加機能も可能。


【Software】
 スケッチその他ライブラリー等はDownload Siteに掲載してある。
 タッチパネルを使用するには、最初にCalibrationが必要である。このやり方についてはライブリーの説明を読んで対応してください。Calibration スケッチもSiteに一括して掲載してある。

【CAT】
 CAT Controlle を搭載しました。ただし現状最低限でHam Logに周波数とモード情報を送ることができるだけです。今後機能を増やそうかとも思いますが、今のところ必要性を感じていません。多くの希望でもあれば対応するかもしれませんが。まあ、そんなことはないと思いますが。(笑)

 出来立てなので、まだBUGがあると思います。何かあればコメントでもお寄せください。

73's de JA2NKD

2021.05.13 回路図 修正




2019年8月24日土曜日

RF 2-Tone Generator

 Si5351は違う2種類の周波数を発振させることができる。ひょっとしてこれでRF2tone発振器ができるのではと思いついた。(誰でも想像すると思いますが)しかし小さなICで比較的高出力であること、また出力が矩形波であることから、高調波、PLLノイズ等が多く、発振器自体のIMにはあまり期待はできないと思った。しかし一度実験してみようとこのプロジェクトを開始することとした。


 高調波、低調波を減らすにはローパス、ハイパスではなく、バンドパスが必要である。それもかなり狭帯域としたい。そこで思いついたのがクリスタルフィルターだ。手持ちのクリスタルフィルターを見てみると10M15Aという15kHz/3dBのFM用のものがあった。10kHz離れならば問題なく、20kHzでもなんとかなると思いこれを使ってみた。
Inside

 クリスタルフィルターで歪まないようにSi5351の出力に10dBのアッテネーターを付け合成した後、このフィルターを通して出力している。結果は出力-20dBm IMは70dBc近辺となった。どうにか最低の合格ラインとすることができた。これならばある程度のIM3測定で使えるのではないだろうか
 できれば0dBm出力、IM80dBcはクリアしたいところである。この場合は各出力を合成前にフィルターを挿入し、増幅した後合成すれば達成できると思う。今回は前記の簡易型とした。

 10.7MHzのフィルターに対してきりの良い周波数(20kHzならば、10.690,10.710)となるはずであるが、SI5351のずれとフィルターのずれがあるので、周波数をずらして対応している。スペクトラムアナライザー等で2周波の出力が同じになる位置を探し出すところが、やや面倒かもしれない。10kHz以上の帯域を持ったフィルターがあれば別周波数でも可能である。


 Arduinoは、ATmega328にブートローダーを書き込んだもの(UNO互換)を使用して省スペース化を図った。もちろんNANOでもOK。Si5351はAdaflute互換の中華製を使用した。

 回路とスケッチはダウンロードサイトにあります。

 SI5351は150MHzまで出力できるが、フィルターという固定周波数の素子をいれているため、周波数可変はできません。しかし簡単に発振させることができることと、中華製で安価に入手できることから活用しない手はない。

Generator OUT

0-100MHz Spectrum

20dB Wide band Amplifier Measurement

 

2019年7月24日水曜日

Remake VFO Controller Ver 7.10 (Arduino + Si5351)


   注)改定情報を末尾に記載(Ver 7.20)
 Arduinoを使用したVFO-controllerを製作してから3年経過した。世界各国から色々なコメントを頂き感謝感謝です。この間、受信機等の製作に合わせてそのたびに色々な種類のcontrolerを作ってきた。これには結構なパワーが必要であり、無駄も多くなっている。
 今回このことを反省し、各種機能を取り込んだcontrollerを製作した。今後色々なシステムに合わせて改良しやすいように考慮したつもりである。ただプロセッサーにArduino-nanoを使用しているため、多少動きが良くないところもある。これは今後の課題としたい。
【特徴】
 今回の特徴としてバンドというイメージがないことである。VFOは1-54MHzまで連続して可変する。最近のメーカー製リグでは当たり前であるが。スケッチを変更すれば、この範囲は変更できる。バンド切り替えがない代わりにBPF,LPF等の選択を行うようにしている。適切なBPFが選択されていないと送信できない措置も行っている。このことから60MHz位のLPFを使用すればGENERALレシーバーとして使用できるメリットがある。できれば周波数に合わせて自動的にフィルターが選択できればいいのであるが、フラッシュメモリーが不足であることと、処理スピードが遅くなりうまく表示できない。もう1ランク上のプロセッサーが必要である。
 2つ目の特徴として、メーカー製リグでは当たり前であるが、2VFO(A,B)を持ち、A=B,A/B、SPLIT機能を設けた。メモリーは最大30チャンネルとした。メモリーからVFOへの移行も可能。
 3つ目の特徴としてtransverter対応としている。このモードは28MHzをベースとして144,435MHzに対応できる。VFOとしては28MHzと動作し、表示を144,430とする機能であり、同時にtransverter制御用の出力を用意した。
 ハードウェアの特徴としてI/O増設のためI2C用の PCF8574 を2個使用しスイッチ用に8ビット、BPF,MODE情報の出力用に8ビット増設している。
 VFO発振にはSi5351を使用し、54MHzまで対応できる。また昨年ブログに掲載したdsPICを使用したPSN送信機にも対応できるように考慮している。この場合受信周波数の2倍の周波数が必要となるので最大54MHzの場合108MHzの出力となる。

【Specification】

  • Rx Frequency Range     1MHz-54MHz
  • Tx Frequency Range     1MHz-54MHz (Ham band only)
  • Emission Modes           CW,AM,LSB,USB,FM (Max 5 modes)
  • Frequency Steps          10H,100H,1kH,10kHz,100kHz,1MzH
  • Memory Chanel           1-30 Chanel
  • BPF           1-15 (MAX 15)
  • meter          S-meter , PO-meter
  これら仕様は最大値で、カスタマイズして小規模用に容易に変更できるようにしている。
【Function】
  • VFO-Mode
          VFO A=B      Copy VFO-A to VFO-B
          VFO A/B       Main VFO Change A to B  B to A toggle
          VFO SPLIT    Main-VFO Rx   Sub-VFO TX 
  • Memory-Mode
          Memory Wite     1-30CH(Friquency,Mode,Step,BPF,SPLIT)
          Memory Read    1-30CH
          Memory to VFO  Memory Cnanel copy to VFO
  • Transverter-Mode
          144MHz,430Mhz   Base friquency is 28MHz
                                     144Mhz - 146MHz (28MHz-30MHz)
                                     430Mhz - 440MHz (28MHz 38MHz)
  • Tune
    Tune   送信機調整用に例えば1kHzを音声回路に送れるように送信時に
         1kH発振ができるようにI/O出力を用意
  • Si5351 Adjust-Mode
    Turbo-switch+Power ON でAdust-modeになり,25MHzが出力される。
    周波数カウンターに接続しUP/DOWNスイッチで調整できる。
  • Turbo
    エンコーダーでの変化を10倍にする機能。
    STEP 10Hzの時に、Turboを押しながら回すと100Hz STEP
    STEP 100Hzの時に、Turboを押しながら回すと1kHz STEP

【MEMO】
  ロータリーエンコーダーを回したときに周波数表示が多少ぎこちない。これはArduino-nanoのSPI速度の問題と表示アルゴリズムのもお題だと思われる。これにはより高速なプロセッサーが必要と思う。近い将来STM32やArduino-mega,Due等に乗せ換えたいと思う。またキャラクタLCDを使用したライトなものも用意したいと思う。
動作の詳細はマニュアルと回路図を参照してください。スケッチ&manualをダウンロードサイトにUPしてあります。

73's JA2NKD






改定(2019.10.22):回路図 修正 スケッチ 修正
改定(2019.12.02):回路図 修正 スケッチ 修正 Ver.7.20
改定(2020.03.22):回路図 修正