2014年11月11日火曜日

STM32F0 DISCOVER Case

program writerと使うべく、STM32F0ボードをケースに収納した。ケースは、秋月電子 P-00358 95x65x23である。書込み用I/Fケーブルと押しボタンSWの穴がある。
基板固定は、ホットボンドのみ。
背面の様子。    

2014年10月25日土曜日

SoftRock RxTx Ensemble Kit(2)

送信部の組み立ても終わり、自作ケースに収納した。プリント基板を使い、オリジナルを模造して艶消しの黒色塗装をした。ケースで注意すべき所は、アースによるループを作らない事だ。全てアースから浮かせてある。(オリジナルと同じ)


Softrock RxTx Ensemble 40m/30m/20mを実装した様子。

送信部組み立て後、不具合が発生し回収。
不具合
 1.PA段のバイアス電流が43mA。
    (基準値 55mA)
 2.g4zfqサイトの試験は、7.05Mhz
   500mW。(期待値 1W以上)  
不具合回収
 1.バイアス電流55mAに調整。
  (R41に100オーム並列に接続した)
 2.T3コイル巻き直し。
  (メガメコアの巻き方による)

メガネコアの巻き方


エッジを十分取り除く。
 
線を通す
 
楊枝で線を固定しながら、必要回数巻く
(前段階が省略してある)
この方法で巻けば、線を穴に密着させられるので、余裕を持って巻くことが出来る。 

結果

パワーが出なかった主原因であるT3コイル交換後、7.05Mhz 2.06W(1W位に抑えて使うのが良いと思う)であった。バイアス電流について色々議論が有るが、精神安定上、55mA±10%位の範囲内に入れば良いだろう。

2014年10月6日月曜日

SoftRock RxTx Ensemble Kit

 SDR Transceiver Kitを購入した。購入理由は、安価な事とSoftRockが多く出回っている為である。このKitをパソコンと組み合わせる事で、オールモード 1W トランシーバーとなる。Kitは、送料を含め$102.55(日本までの送料)である。支払いは、PayPal。注文して手元に届くまで、8日間であった。郵便物追跡は、US postのみ確認(国内追跡出来なかった)できた。PCB写真は、受信部まで組立てた状態(製作途中)。
 トランシーバー全体の構成。PCのサウンドボードは、入出力ともステレオ対応が条件。マイクとスピーカ用ドングルは、特に条件は無い(まだ、総合結線してないので、何とも云えないが)。この結線の通りであれば、PTTは画面のボタン操作。実用的な物とするには、多少、手を加える事も必要かと思う。












PCB処理ブロックは、この様になっている。製作に関するドキュメントは、細かく書いた物がHPにある。製作ドキュメントを読んでも、勉強になる。


2014年9月12日金曜日

Arduino I2C Module

LCDのパラレル通信をI2C通信に変換するModuleである。また、LCD自体にI2C機能を含めたModuleも販売されている様だ。I2Cを使えば、配線の省力化、I/Oポートの削減に有効である。Arduinoから簡単に使う事が出来る。BASCOMでも使えるが、FREE版ではメモリー制限によって厳しいかも知れない。入手先は、AliexpressでLCD I2Cで検索すれば、見つかる筈だ。価格は、US$1.2/piece位。 
Arduino UNOで試験をした。ライブラリー入手先が販売サイトに書かれてある。無論、Arduinoサイトからも入手できるが、販売サイトに書いて有る所から入手した。ダウンロードしたファイルに、回路図も含まれているが、入手したModuleと異なる。 
I2C Moduleから回路図にした。アドレス設定は、A0、A1、A2のパットで行う。初期値は、A0、A1、A2が全てOPENの為、27Hである。     












PROGRAM

ダウンロードしたプログラムに書いて有るアドレスは、20Hである。I2C Moduleにジャンパーをしない限り、プログラムを書き直さなければ、動作しない。この為、アドレスを27Hに書き換えた。

//YWROBOT
//Compatible with the Arduino IDE 1.0
//Library version:1.1
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,16,2);  // set the LCD address to 0x27 for a 16 chars and 2 line display

void setup()
{
  lcd.init();                      // initialize the lcd

  // Print a message to the LCD.
  lcd.backlight();
  lcd.print("Hello, world!");
}

void loop()
{
}


2014年8月24日日曜日

50MHz AM TRX ケース

50MHz AM TRX Ver2基板をケースに収納。ケース本体は生基板で、上板と底板がアルミを使った。底板のアルミ板以外、廃材を活用。上板の共板としてPP板を使っているが、パンチングメタル材ではケースをエンクローズ出来ない為、PP板を使う事で、音質改善を行った。 
実装での問題は、マイクコードにRF回り込みが発生。基板のマイク入力部とマイクコネクタにパスコン(セラミックコンデンサ103)を追加した。この様な対策は、実装技術なので、回路図に現れなく、ビギナーを悩ませるかも知れないが、定石なので知っていても損はない。 

2014年8月2日土曜日

50MHz AM TRX Ver.2

50MHz AM TRXである。2012/12/17公開のTRXバージョンアップ版で、AD9850 DDS VFOを使い、1ボード化した物である。VFOは、7月公開したもので、LCDレス。受信部は、TA7853+LA1600ダブルスーパー。送信部は、TA7358を使い低電力変調し、RD06HVF1により最大キャリア4W(AM変調時 1Wキャリア出力)を得ている。送信部のバッファ段(2SC2053)出力側にT型フィルタを入れているが、スプリアス低減とQRPP対応(ファイナル段スキップ)である。バッファ段の出力は、最大キャリア出力(無変調)200mW~300mWあるので、AM変調時50mW~75mWである。VFOは、6m AMロールコールで使える様、チャンネルスイッチに50.55MHzと50.60MHzを設定した。VFOにLCDが無いが、何ら問題は起きてない。PCBは、数回トリミングした結果、ジャンパーが多いのが唯一不満。 
回路図である。終段RD06HVF1は、TS-590Sバッファ段を参考にし、ID=350mAで調整。NFB回路(470Ω+103)を入れているが、無しでも問題なく動作する筈だ。プロトタイプは、NFBなしで試験した。 
PCBサイズ 103×102。中央下の6φ穴で、7805をケースに固定(放熱)している。    

2014年7月8日火曜日

50MHz AM VFO


 FRQ+10.7MHzの50MHz帯AM用VFO。、公開済みAD9850 50MHz AM VFOのPCBを小型化した物で、製作中 1ボードTRXのVFO部分。LCDレスでも、プロトタイプのテスト、試験用LOとして十分かと思う。






AD9850 DDSモジュールを外した状態。

         
レギュレータ 7805は、裏側に取り付け、ケースに放熱。
回路図。IOポートは、PCBパターン引き回し都合で、変更。













PCB 42 x 67













program

AD9850 50MHz AM VFOのプログラムをLCD関連、RIT関連を削除した。これにより、メモリー機能がない。周波数データは、EEP ROMに保存しているので、メモリー機能の追加は、簡単。

'********************************************************
'AD9850 DDS VFO program ver.1.0
'  50.500Mhz to 50.700Mhz Limitted!
'  Copyright (C)2014.JA2GQP.All rights reserved.
'                                       2014/7/7
'                                           JA2GQP
' BASCOM AVR 2.0.7.5(DEMO version) Compiled
'--------------------------------------------------------
'  Function
'     1.Lower heterodyne
'     2.FRQ + 10.7MHz
'     3. Protection operation at the time of transmission
'     4.Channel ch0(50.60MHz),ch1(50.55MHz)
'********************************************************

$regfile = "m88adef.dat"
$crystal = 1000000                                          '1Mhz clock

'--- config port ---

Config Portb.0 = Output                                     'STEP LED 1k
Config Portb.1 = Input                                      'ENC B
Config Portb.2 = Input                                      'ENC A
Config Portb.3 = Input                                      'ch1
Config Portb.4 = Input                                      'STEP
Config Portb.5 = Input                                      'TX

Config Portd.0 = Output                                     'W_CLK .
Config Portd.1 = Output                                     'FQ_UD
Config Portd.2 = Output                                     'DATA
Config Portd.5 = Output                                     'Frq LED Mid .
Config Portd.6 = Output                                     'Frq LED Low
Config Portd.7 = Output                                     'Frq LED Hi

'--- port pullup ---

Portb = &B00111110                                          'Bit 1-5 pull up

'--- debounce set ---

Config Debounce = 1

'---Frequency Parameter(50.500Mhz to 50.700Mhz Limitted!)

Const If_frq = 10700000                                     'IF frequency
Const Lw_frq = 50500000                                     'Lower limit operation frequency
Const Hi_frq = 50700000                                     'Upper limit operation frequency
Const Def_frq =(lw_frq + Hi_frq) / 2                        'Operation center frequency
Const Def_frq1 = 50550000                                   'ch1=50.55MHz
Const Def_frq2 = 50600000                                   'ch0=50.60MHz

'--- constant data ---

Const Lw_vfo = Lw_frq - If_frq                              'VFO lower limit(RX)
Const Hi_vfo = Hi_frq - If_frq                              'VFO upper limit(RX)
Const Def_vfo = Def_frq - If_frq                            'VFO ch0
Const Def_vfo1 = Def_frq1 - If_frq                          'VFO ch1
Const Scal = 34.35973837                                    '2^32/125.000Mhz
Const Dds_cmd = &B00000000                                  'DDS command

'--- define subrutine ---

Declare Sub Enc_sub                                         'Encorder
Declare Sub Dds_sub                                         'DDS
Declare Sub Stp_sub                                         'STEP
Declare Sub Rx_sub                                          'RX
Declare Sub Tx_sub                                          'TX
Declare Sub Chsw_sub                                        'Channel SW check
Declare Sub Eep_rd_sub                                      'EEP read

'--- define memory ---

Dim Vfo_dat As Long                                         'VFO freqency data
Dim Dds_dat As Long                                         'DDS frequency data
Dim Sng_wrk As Single                                       'main channel
Dim Lng_wrk As Long                                         'Long work1
Dim Enc_stp As Integer                                      'Encorder step
Dim Flg_tx As Byte                                          'TX flag
Dim Frq_eep0 As Eram Long                                   'EEP frequency ch0
Dim Frq_eep1 As Eram Long                                   '              ch1
Dim Stp_eep0 As Eram Integer                                'EEP STEP ch0
Dim Stp_eep1 As Eram Integer                                '         ch1
Dim Flg_enc As Byte                                         'Encorder dir flag
Dim Byt_cmd As Byte                                         'DDS command
Dim Byt_wrk As Byte                                         'Byte work
Dim Byt_chn As Byte                                         'Channel

'--------------
'Main roution
'--------------

Main:
   Flg_tx = 0                                               'TX flag reset

   Call Chsw_sub                                            'Channel SW check
   Byt_wrk = Byt_chn
   Call Eep_rd_sub                                          'EEP initial

   Do
      If Flg_tx = 0 Then
         Debounce Pinb.2 , 0 , Enc_sub , Sub                'Encorder
         Debounce Pinb.4 , 0 , Stp_sub , Sub                'Step
         Call Chsw_sub                                      'Channel SW check

         If Byt_wrk <> Byt_chn Then
            Byt_wrk = Byt_chn
            Call Eep_rd_sub                                 'EEP load
            End If

         If Vfo_dat =< Lw_vfo Then                          'VFO lower limit check
            Vfo_dat = Lw_vfo
            Portd.6 = 1                                     'Frq LED Low on
            Else
               Portd.6 = 0
               End If

         If Vfo_dat = Def_vfo Then                          'VFO Def Frq check
            Portd.5 = 1                                     'Frq LED Mid on
            Else
               Portd.5 = 0
               End If

         If Vfo_dat >= Hi_vfo Then                          'VFO upper limit check
            Vfo_dat = Hi_vfo
            Portd.7 = 1                                     'Frq LED Hi on
            Else
               Portd.7 = 0
               End If

         If Enc_stp = 1000 Then                             'STEP LED 1k check
            Portb.0 = 1                                     'LED on
            Else
               Portb.0 = 0
               End If

         End If

      Debounce Pinb.5 , 1 , Rx_sub , Sub                    'RX
      Debounce Pinb.5 , 0 , Tx_sub , Sub                    'TX

      Dds_dat = Vfo_dat
      Call Dds_sub
   Loop
End

'-----------------------------
'Encoder check,Create DDS data
'-----------------------------

Sub Enc_sub
   If Pinb.1 = 1 Then
      Vfo_dat = Vfo_dat + Enc_stp
      Else
         Vfo_dat = Vfo_dat - Enc_stp
         End If

   If Vfo_dat =< Lw_vfo Then                                'VFO lower limit check
      Vfo_dat = Lw_vfo
      End If

   If Vfo_dat >= Hi_vfo Then                                'VFO upper limit check
      Vfo_dat = Hi_vfo
      End If
End Sub

'-----------------------------
'AD9850(DDS) Data write
'-----------------------------

Sub Dds_sub
   Sng_wrk = Dds_dat
   Lng_wrk = Sng_wrk * Scal
   Byt_cmd = Dds_cmd                                        'DDS command

   Reset Portd.1
   Shiftout Portd.2 , Portd.0 , Lng_wrk , 3
   Shiftout Portd.2 , Portd.0 , Byt_cmd , 3
   Set Portd.1
End Sub

'-----------------------------
'Step
'-----------------------------

Sub Stp_sub
   Select Case Enc_stp
      Case 10000:
         Enc_stp = 1000                                     '1k
      Case 1000:
         Enc_stp = 10000                                    '10k
         Vfo_dat = Vfo_dat + 5000                           'round 10k
         Vfo_dat = Vfo_dat \ 10000
         Vfo_dat = Vfo_dat * 10000
      Case Else:
         Enc_stp = 10000                                    '10k(initial)
         End Select
End Sub

'-----------------------------
'RX
'-----------------------------

Sub Rx_sub
   If Flg_tx = 1 Then
      Flg_tx = 0                                            'TX flag rest
      End If
End Sub

'-----------------------------
'TX
'-----------------------------

Sub Tx_sub
   If Flg_tx = 0 Then
      Flg_tx = 1                                            'TX flag set
      End If
End Sub

'-----------------------------
'Channel SW check
'-----------------------------

Sub Chsw_sub
   If Pinb.3 = 0 Then
      Byt_chn = 1
      Else
         Byt_chn = 0
         End If
End Sub

'-----------------------------
'EEP set
'-----------------------------

Sub Eep_rd_sub
   If Frq_eep0 =< 0 Then                                    'EEP VFO data check
      Vfo_dat = Def_vfo                                     'Initialize VFO data
      Frq_eep0 = Def_vfo
      Frq_eep1 = Def_vfo1
      Else                                                  'Restore VFO data
        Select Case Byt_chn
            Case 1:
               Vfo_dat = Frq_eep1
            Case Else:
               Vfo_dat = Frq_eep0
               End Select
            End If

   If Stp_eep0 =< 0 Then                                    'EEP STEP data check
      Enc_stp = 10000
      Stp_eep0 = Enc_stp                                    'Initialize STEP data
      Stp_eep1 = Enc_stp
      Else                                                  'Restore STEP data
        Select Case Byt_chn
            Case 1:
               Enc_stp = Stp_eep1
            Case Else:
               Enc_stp = Stp_eep0
               End Select
            End If

End Sub