2023年9月8日金曜日

 最近 X(Twitter)に投稿することが多く、BlogへのUPが少なくなりました。
どうも根気がなくなってきました。(@ja2nkd)

最近の自作

真空管 50MHz AM送信機

50MHz AM受信機



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の画像を乗せておく。















2022年1月1日土曜日

Happy New Year !!

 Happy New Year 2022
あけましておめでとうございます。本年もよろしくお願いいたします。
今年は、断捨離を兼ねて極力シャックにある部品を活用し、使える無線関連機器を作ろうと思っています。乞うご期待

皆様にとって良い年でありますよう祈念しております。
                            DE  JA2NKD Ryuu



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