周波数応答解析ツール(FRAT)の組立
自作・実験工程のメモとして
26.May.2019
91項・92項・93項を追加して更新しています。
1つ前のページで、「STM32F103でAD9959を動かす」を掲載したテーマの続きで、ある程度目途が立ったので「周波数応答解析ツール」(Frequency response analysis tool:以下 FRAT と略す)として組み立ててみました。
テーマ表記で「・・・ツールの組立」としているのは、主要な部分が複数のユニットとして売られているもので、それを組み合わせて仕上げていることから製作ではなく組立としています。
なお、「STM32F103でAD9959を動かす」ですでに紹介している部分は省略いたします。
本ページではFRATのハードウエア(以下、H/W・HW)部分を中心に掲載し、パソコン(PC)用のソフトは別ページを予定しています。
わざわざ自作しなくても現在では、200MHz以上の周波数帯までスペクトラムも測定できる簡易的なものが AliExpress や eBay で売られているため、それを購入した方が安価で機能面も充実していますが、趣味として自分で作ってみるという無駄な部分を楽しむテーマとして掲載します。
また、このFRATはご承知の通りFRMSのまねごとですが、命名に当たって同じ名前を付けるわけにもいかず、読みやすい名前は無いかと「Google翻訳」を使って組み合わせました。
大層な表記「解析:analysis」を入れていますが、語呂が良さそうな「フラット」と読みたいために無理やり"A"を探して命名しましたので、ご了承ください。(平という意味のフラット(Flat) とは綴りが違っていたので残念です。)
FRATを、Windows PCで操作する続編の「周波数応答解析ツール(FRAT)用PCソフトウェアの開発」を掲載しました。(2019/06/02)
基板セット頒布終了しました。(2019/11/30)
上面から見た「FRAT」、2枚目のAD9959ボードとして入手した品を使って組み立てたものです。
デバッグ中のWindowデスクトップソフトのキャプチャー画面
Edit by bluegriffon3.0.1
STM32 AD9959 DDS AD8307 Log AMP Arduino STM32duino Program sketch SPI 「周波数応答解析ツール」 FRAT
以下のブロック・ダイアグラムは、実配置と同じように並べています。
一番の中心は「STM32F103C8T6」を載せたコントロールボードで、前出の「
STM32F103でAD9959を動かす」では穴あき基板に組みましたが、安定した動作や操作性を考え基板を発注しました。
その他の3モジュール
■ダイレクト デジタル シンセサイザ(以下、DDS)
■ローノイズ アンプ(以下、LNA)
■対数アンプ(以下、LogAMP)
は市販されているものから選別しただけとなります。
■.ブロック・ダイアグラム
動作概要
1.STM32F103C8T6を載せたコントロールボードは、パソコン(PC)とのやり取りや、DDS(AD9959)にSPIで周波数データ送出の他、振幅制御のパラメータも送り込みます。
2.また、LNAが5Vではなく12Vを必要としたために、コントロールボードには5Vから12Vへの昇圧回路を載せています。
3.そのほか、振幅制御のパラメータを調整するLCD・SWを使った編集プログラムを組み込んでいます。
4.DDSボードは、100KHzから200MHzまでの測定周波数全域において、できるだけ同じレベルで送出できるよう200MHzのレベルを基準に、-15dBm前後に調整してLNAに渡しています。
5.LNAは、最初の増幅度20dBから始まり30dBも試してみましたが、レベル配分に無駄が少ない25dBの品を見つけ+10dBm前後のレベルで解析対象に送り込んでいます。
6.LogAMPはAD8307を採用しています。この「入力dBm 対 出力電圧」の特性が本ツールの基準となり、出力電圧をそのまま読み取っています。
7.動作に必要な電流は、0.46A(5V)を実測値として確認しています。(USBスティックの簡易電圧・電流メーターを使用)
今回の基板設計は、とにかく作り直しが無いように、上手く機能しなかったら基板上で別の手が打てるようにしました。
そのため、回路図や基板のパターンが複雑になっていますが、組立前に「使う」「使わない」を決めてソケット等をハンダ付けしていけば、最小構成ではとてもシンプルなものになると思います。
1.回路図(Schematic)
クリックでPDFファイルが開きます。
各部分の詳細は、以下の説明へ
2.外付けUART
外付けUART(以下、extUART)にはFT231XSを採用し、回路はデータシートに沿って素子の定数を決めています。
なお、STM32のUSB端子が有ることから、このUARTを使う場合は、JP2の1-2間オープン・3-4間ショートで使用します。
また、使用しないときはJP2の1-2間ショート・3-4間オープンとし、1-2間のショート・オープンでextUARTの有無を判断しています。
このUSBからの電圧5Vは、0.75Aのリセッタブル・ヒューズを通して3-4間のショートでSTM32に供給されるようになります。
この時には、STM32のUSB端子には何も接続されていないことが条件です。
なぜ、本来あるSTM32のUSB端子でシリアル通信が可能なのに、このデバイスを追加したかと言うと、スケッチの書込み中に何度もUSBシリアルが認識できなくなることが有り、解消できるかな?!という期待と、スケッチのシリアル書込みにも使えることから載せています。
(スケッチのシリアル書込みに使用できることも確認済みですが、STM32のUSB端子のみで十分と思います)
ただ一つのメリットは、STM32のUSB端子をUARTとして動作させるデバイスドライバの導入が不要ということぐらいと思います。
試しに、ノートPC(Windows 10 1903)で実験しましたが、当然FT231Xのドライバ導入のみでFRATの動作を確認しています。
3.LCD回路とI2C端子
編集に使用するLCDは、aitendoのLCDを基板上に設置しました。
このLCDは電源ON時にリセットをかけないと表示しないため、リセット用のRCを付けています。
なお、同LCDの使用頻度が少ないと思われるため、この回路を使用せずI2Cの外付けLCD(3.3V仕様)を使用するための端子も用意しています。
またextUARTと同様に、「使用/不使用」の判定とともに電源供給も、JP3ジャンパーで切換られるようにしています。
(なお、JP2・JP3の「ON/OFF」ショートピンの距離をそれぞれ3.81mm離しているのは、誤接続予防のためです。)
4.2種類のAD9959端子
成行からAD9959のモジュールを2種類用意してしまいましたので、気兼ねなく両方を試せるように2種類のピンヘッダーを用意しました。
5.12V昇圧回路と電圧選択
上の回路は簡略化した状態ですが、LNAに12Vが必要となりブレッドボードで事前実験(MAU104)したときに、それなりのノイズが発生していましたので、5V・12Vラインへのノイズの影響を避けるために、入出力にコイルを入れています。(実験時のDSOの波形を、以下に添付しておきます。)
念のため、ストロベリーLinuxのLM2733を使ったDC-DCのパターンも入れています。
(LM2733を使用する場合は、電圧可変範囲が12Vから36Vとのことですので、調整時に12Vを大きく超えないように注意が必要です。また、12Vラインの1uFの耐圧も同じく。)
ブレッドボード上の測定 上記回路の
(1)〜(4)
処置しないときの5V入力ラインへの影響度合い(実験値)
約6uS毎(166KHz?)にパルス性のノイズが発生しています。
MAU104のスイッチング周波数範囲の倍に相当するような気がします。
観測ポイント(1)
他の波形もそうですが、DSOの特性なのか7.5から8uS毎にノイズが見えます。
また、交流レンジですが、電圧倍率を上げていくと0V点がズレていきます。
観測ポイント(2)
MAU104の入力側は、一番上の画像と同じようなノイズが出ています。
観測ポイント(3)
12V出力にも40から50mV(pp)のノイズが出ています。
ブレッドボード上だからかも知れませんが、ここに低ESR電解コンデンサを入れても目に見える効果は確認できませんでした。
観測ポイント(4)
コイルを通過後は、目立たなくなりました。
また、回路上にはJPを設けて各電源端子に出力される電圧や経路を選択できるようにしました。
結局は最小限の構成で済む見込みですが、以下に考えた真理値表を置いておきます。
現在は一番上のジャンパー状態で使用しています。
2番目の組み合わせは、12Vのノイズの影響がLogAMPに有ったときに、12Vから三端子レギュレータで5VをつくりLogAMPに供給できるように用意しています。
3番目の組み合わせは、LNA用の12Vが不要な場合に5Vに切換られるよう用意しました。
6.2種類の電源端子
回路上にやたらと電源端子が多いと思われるかも知れませんが、各5V及び12Vの端子は、スクリュータイプの端子とXH(JST)コネクタのフットプリントを同じ場所に重ねています。(排他的利用)
XHコネクタを使ってみようと思い圧着ペンチも購入しましたが、最初の1台はスクリュータイプで簡単に済ませました。
7.4種類の操作スイッチ(アナログ入力)
アナログポート1つを使い4つのキーの状態を読み込んでいます。別基板にする意味も無いので基板上にパターンを置いています。
各SWは基板上では [0] [1] [2] [3] のシルクで表しています。
(C8は不要)
8.基板のイメージ
寸法線入り画像に入れ替えました。(2019/06/04)
サイズは、約98mm x 69mm
9.コントロールボードの部品表
BOM
Reference |
Value |
Footprint |
数 |
手配先 |
注文番号 |
最小数 |
C1 |
0.01uF |
20x12_HS |
1 |
汎用品 |
|
|
C2,C3,C4,C6,C7,C9,C12 |
0.1uF |
20x12_HS |
7 |
汎用品 |
|
|
C10,C11,C14,C15,C16,C17 |
1uF |
20x12_HS |
6 |
汎用品 |
|
|
C5,C13 |
4.7uF |
20x12_HS |
2 |
汎用品 |
|
|
F1 |
1206L075THYR |
.pretty:SMD32x16 |
1 |
rs-online |
895-1628 |
10 |
J1 |
USB_Micro_B_G32 |
自作FP_Micro-B_G32 |
1 |
AliEx. |
G32 |
20 |
L1,L2 |
L_CD32-470K |
自作FP:CD32_L |
2 |
aitendo |
CD32 |
10 |
R4,R5,R13 |
100R |
20x12_HS |
3 |
汎用品 |
|
|
R6,R10,R11,R12 |
10k |
20x12_HS |
4 |
汎用品 |
|
|
R7,R8,R9 |
1k |
20x12_HS |
3 |
汎用品 |
|
|
R1 |
2.2k(LED用1K〜2.2KΩ) |
20x12_HS |
1 |
汎用品 |
|
|
R2,R3 |
22R |
20x12_HS |
2 |
汎用品 |
|
|
R14 |
6.8k |
20x12_HS |
1 |
汎用品 |
|
|
SW1,SW2,SW3,SW4 |
SW_Push |
SW_PUSH_S_mm |
4 |
秋月 |
P-03647 |
1 |
U1 |
FT231XS |
SSOP-20 |
1 |
秋月 |
I-06713 |
1 |
U2 |
STM32F103(BP) |
STM32F103(BP)NoSilk |
1 |
汎用品 |
|
|
U3 |
I2C_LCD_ATD1602CP |
自作FP[ATD1602CP] |
1 |
aitendo |
ATD1602CP |
1 |
U4 |
MAU104 |
自作FP_MAU104 |
1 |
秋月 |
M-04132 |
1 |
U5 |
DC-DC_LM2733_module |
自作FP_LM2733 |
1 |
StLinux |
12061 |
1 |
U6 |
L78L05_TO92(LP2950L-5.0V) |
TO-92_0.8mm |
1 |
秋月 |
I-08973 |
1 |
|
STM32用細ピンヘッダ |
細ピンヘッダ1x40 |
1 |
秋月 |
C-06634 |
1 |
|
STM32用細ピンソケット |
細ピンソケット1x40 |
1 |
秋月 |
C-10073 |
1 |
J4 |
Conn_02x07_Odd_Even |
.pretty:DIL-7x2 |
1 |
秋月 |
C-10901 |
1 |
J5 |
Conn_02x10_Odd_Even |
DIL-02x10_odd_even |
1 |
秋月 |
C-13176 |
1 |
J7,J8,J9 |
Conn_01x02 |
XH-A_1x02_P2.50mm_V |
3 |
秋月 |
C-12247 |
1 |
J11,J12,J13 |
Screw_Terminal_01x02 |
TerminalBlock_P5.08mm |
3 |
秋月 |
P-02333 |
1
|
C8は、削除しています。
灰色の網掛けは、「extUART」や別系統の5Vを組まない場合は不要です。(C,Rにも網掛けを追記:2019/06/04)
黄色と 薄緑 の網掛けは、 それぞれ何方かを選択します。(U4とU5・J4とJ5・[J7,8,9]と[J11,12,13] )
ピンクの網掛けは、 STM32用に細ピンを使ったため書きだしました。
(通常のピンヘッダでも構いませんが、高さが0.5mm違ってきます)
その他、汎用のピンヘッダ・ピンソケット・接続の線材類は省略しました。
本FRAT(H/W)とPCソフトとのやり取りは、2010年に掲載の「
SD330 コントローラ製作」のころからアイコムのCI-V信号を流用していましたので、そのCI-Vに沿って決定しました。
ただし、今回はCI-Vのような双方向線ではなく送信・受信が分かれているため、ソフトの処理が簡単になっています。(自分自身が送信した信号を必ず受信することのプログラム上の処理等が不要)
以下の3種類のシリアルデータでやり取りをしています。
方向 |
意味 \送出順? |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
PC> |
123,456,789Hzを発振要求 |
FE |
FE |
01 |
23 |
45 |
67 |
89 |
FD |
PC< |
発振要求に対するADC値の応答 |
FE |
FE |
40 |
95 |
FD |
|
|
|
PC< |
要求周波数が範囲外時の応答 |
FE |
FE |
99 |
99 |
FD |
|
|
|
発振要求は、100KHzから200MHzまでとしています。(1バイト2桁のBCD値を使用します)
通常は、12bitADCの最高値4095までが正常応答となります。
周波数が指定範囲を超えると、一番下のADCの値としてはあり得ない数値("9999")を返すようにしています。
動作し始めれば設定変更の必要はあまりないと思いますが、LCDを載せて思いつく設定を変更できるようにしました。
特に必要なのが、AD9959の振幅制御の値を10MHz毎に設定する部分になります。
それに付随して、プログラム領域をEEPROMとして使用し、設定値を記憶するようにしているので、あまり変更を加えすぎるとその度に使用領域に変更を追加で書き込むため、ROM領域が満杯になることも想定し、ROMダンプやROMフォーマット機能も入れています。
[0]キーを1秒以上押すと編集モードに入り、最初に「# 0_dBmDispSWsel」の設定メニューが表示され、[1]+キーでプラス方向に、[2]-キーでは逆順に設定項目が変わります。(表示の桁数が少ないので、簡略化した表記に成っています)
JP3でLCDをONにして、電源を再接続/又はリセットするとオープニング画面の後に待機状態に入ります。
その後、[0]キーを1秒以上押して放すと、上の編集画面がLCDに現れます。
#0.ADC値をdBmで表示するかどうかの設定で初期値は「 ON:dBm表示する」にしています。
選択前の画面
[0]は、通常モードに戻ります。(PCから周波数データを受信するモード)
[1] [2]は、設定メニューを別のものに切り替えます。
[3]で設定画面に進み (以下省略)
[0]なら、前の画面に戻り、[3]でON/OFFを切り替えます。
#1.振幅制御の値を200MHzから順に10MHz毎に設定していきます。
選択前の画面
「0」「1」「2」のキーは、一つ前の設定と同様(以下省略)
[3]を押すと、下の画面に入ります。
表示の上段は左が周波数(区切りはHzの"z"のみ)・右4桁が振幅制御値(10bit)になります。
また、下段の左は#0で設定したdBm表示で、LCDの桁数の関係でHzと同様に"d"一文字でdBm表示を示しています。
さらに、下段右は各キーの操作を簡略化して表しています。
調整時は、LNAの出力とLogAMPの入力を同軸ケーブルで直結した状態にします。
その状態で、[1][2]キーで右上の振幅制御値をプラス/マイナスしていくと、下段左のdBm値が変化します。
また、何も操作しない状態でも、1秒毎にADC値を更新し続けます。
希望する設定値に成ったら、
[0]キーを押すと、変更した値を設定値として記憶し次の周波数(現在から-10MHz)に進みます。
変更したくないとき(確認だけとか)は、
[3]キーを押すと記憶せず次の周波数に進みます。
上記操作を20回繰り返して、最後の10MHzが終了すれば設定メニューの選択に戻ります。
実際の調整は、約+9.5dBに合わせていますが、200MHzだけは振幅制御値を最高(1023)にしても約+9dBmまでしか上がりませんでした。
#2.EEPROMの内容をフォーマットします。(仮想EEPROM初期化)
選択前の画面
[0][1][2][3]キーの操作は、他の操作メニューと同様
[3]キーを押すとROMをフォーマットします。
[0]キーで戻り、更に設定メニューを抜け電源を入れなおすか/リセットを押すと、初期値がROMに書込まれます。
変更してある最新の値をフォーマット後の初期値にしたい場合は、スケッチの中の以下の部分を予め書き変えて、プログラム書込みをしておくことで、フォーマット後の最初の起動時に反映されます。(2019/07/17:追記)
// =============================================
// 25dB LNA 時に+9.5dBmの出力になる調整値
// EEPROMの振幅データを読み込む配列(実測値を予めセット)
uint16_t AmpArry[22] = {
400, 418, 436, 459, 484, 497, 508, 529, 558, 590,
618, 658, 680, 693, 720, 748, 788, 874, 974, 1023, 0x3FF
};
// =============================================
int16_t fineVal = -14; // TCXO (2019/07/16) EEPROM Address 64
// =============================================
int8_t dbmDispON = 1; // EEPROM Address 61: 1 = ON(初期値) : 0 = OFF
// =============================================
float val_P10dB = 2.500; // EEPROM Address 62: +10dB 2.5V 記憶時は、mV単位(2500)
float val_M30dB = 1.500; // EEPROM Address 63: -30dB 1.5V 記憶時は、mV単位(1500)
// =============================================
|
#3.ROMの内容をArduino IDE のシリアルモニタに表示します。
選択前画面
[3]で進むと
ここで、シリアルモニタをONにして[3]キーを押します。
シリアルモニタが準備できていなかったら、準備を促す画面を表示します(省略)
ROMダンプのサンプル
先頭の4バイト(0x0000 0x0000)は、システム側が使用しているようです。
その次から、0番地の内容(0x0190)・0番地を示す値(0x0000)になります。
さらに続いて、1番地の内容(0x01A0)・1番地を示す値(0x0001)と続いていきます。
最後(0xFFFFの手前)は、書込み済みを判断するために99番地(0x0063)に0x1111を書き込んでいます。
#4.ADC値をdBm値に変換するときの電圧を変更できるようにしています。(+10dBm時の電圧)
選択前画面
[3]で次へ進むと、
[1][2]キーで+−して、[0]キーで書込みして設定メニューの表示に戻ります。
以下のAD8307日本語データシート(Page13)より抜粋のグラフから10dBmの電圧を2.500Vとしています。
ここでいくら厳密に設定しても#1の振幅制御の調整にしか使いません。
また、読み出す度にADC値が0.05dB(dBm換算)ぐらい変動するため、変更は不要です。
#5.ADC値をdBm値に変換するときの電圧を変更できるようにしています。(-30dBm時の電圧)
選択前画面
上記#4と同様の操作になります。
#4と同様になります。
#6.発振周波数を微調整します。(2019/05/31追加)
選択画面
上記#5と同様の操作になります。
上記#5と同様になります。
ただし、[1][2]キーにリピート機能を加え、押し続けると +10・-10の増減にしています。
設定値のROMへの書込みを、周波数微調整機能を終了する度から、調整用編集機能全体の終了時に変更。(2019/06/25)
発振周波数の設定については、以下の計算式で基準となる値を決定し、その基準値に対して実際の基準クロックのズレを補正します。
基準クロック=25MHz(XO) x 20逓倍 =500MHz
周波数分解能 = 32bit(チューニング・ワード)= 256 x 256 x 256 x 256 - 1 = 4,294,967,295
換算F係数(1Hz当たりの掛け率)= 4,294,967,295 ÷ 500,000,000Hz = 8.58993459 ≒ 8.5899346(少数以下7桁に)
補正値の加減算 = 8.5899346 ± 0.0001000 下線を引いた小数点以下4〜7桁までの最大4桁を調整範囲としています。
(注:プラス・マイナスそれぞれ1000を超えると一旦ゼロ(0)に戻して、8.5899346(理論値)より離れないようにしています)
1MHzの発振指示値(チューニング・ワード) = 1,000,000 x 8.5899346(換算F係数:補正省略)= 8589934.6 = 0x0083126E
デバッグ中であり、行儀の良いコーディングではないため、今のところ公開はしません。(2019/05/26現在)
PCBや組立済み品の頒布を受けられた方には、スケッチの保管場所(「YAHOO!ボックス」を使用)のURLをメールでお知らせしています。
現在のバージョン(下より順に:変更履歴は、各スケッチを参照)
FRAT_20190718.zip
EEPROMエラー時の表示処理を修正。
FRAT_20190714.zip
uint16_t ampFreqSet( long lCalF )
低い周波数の時に発振指示からADC値を読むまでの待ち時間係数を
30==>50に変更。(読み出し値の安定化のため)
FRAT_20190625.zip
FRAT_20190609.ino
AD9959は、前出の「
STM32F103でAD9959を動かす」でも書きましたように、結果的に2種類のモジュールを用意しました。
最初に入手したモジュールは動作させるまでの間にパターン改造もしましたが、結果的にどちらでも動作することを確認しています。
(この2種類しか使用できません)
扱ってきたDDSの概要
小型モジュールのLPFの定数は不明ですが、LPFを改造した大型モジュールのLPF特性と変わらず200MHzまでは平坦なものでした。
LNAは、AD9959の振幅制御と合わせて平坦な出力レベルを実現すためのキーデバイスとなります。最初は、5Vで動作し扱いやすい20dBの品を入手して試しましたが、十分ではなく12V動作のLNA(30dB)も試してみました。
30dBで妥協しようと思っていた時に25dBの品(AliExpressで「Muti Measuring Tools Store」一社のみ扱い)が見つかり、私は25dBのLNAを最終選択しました。
各品の説明はWeb上から引用したもので、正確で無い場合が有ります。
一番上のLNAが、増幅度が希望値なのと、最大出力電力が+16dBm有るので、+10dBm(調整時は、9〜9.5dBm)を常時出力する本ツールの仕様には適合しています。
LogAMPはAD8307が早くから準備ができており、同じような品が多数ありますが、シールドケースが付いた品を選択しました。
LogAMP(AliExpressで入手)
US $14 前後から入手可能
各モジュール間は、SMAコネクタ付きの同軸ケーブル(RG316)で接続します。
最初は両端が直線タイプの物を何種類か発注して準備していましたが、ケースに収めるときにケーブルを急角度に曲げられず、L型の物を再手配しました。(AliExpressで入手)
また、BNCコネクタは何時も使っている秋月電子の[C-00093]を使いましたが、はんだ付け部分は基板用のSMA-Jを取付けて、上記ケーブルをそのまま使用できるようにしました。
SMAコネクタ付きの同軸ケーブル
両端L型のイメージですが、片方はI型の方が良い場合もあります。
モジュールの配置時に、ケーブルの曲がりを考えてL・I型を選択し、発注する必要が有ります。
AliExpressでサイズを指定して注文すると、1本から送ってくれます。
BNCコネクタとSMAコネクタの接続
基板用のSMA-Jを
BNC-J(秋月電子[C-00093])のはんだ付け部分へ直付けしています。
このままでは、BNC-Jのナットの内径よりほんの少し大きいため、四隅の角をヤスリで削って挿入します。
強度的に問題が有るかもしれませんが、ケーブルの先端処理をするより簡単だと思います。
なお、頒布用の「表化粧パネル2枚」は、BNC-J(秋月電子[C-00093])を想定しています。
ケーブルのフェライトコア処理
ケースはタカチのYM-250で余裕が有る配置になっていますが、ケーブルに何も処置をしないとまともな特性が得られません。
私は手持ちのパッチンコアを内外に入れられるだけ入れました。
測定のイメージ
ステップアッテネータV3を39dBに設定したときの0〜200MHz間の特性の一例
180MHz以上で1dBほど落ち込みが有ります。
高域の特性は、ケースの上蓋の有無・被測定物に手を触れるとかや、ケーブルの長さによっても変わってきます。
そのため、コアは必須と思います。
ケースへの収納は、YM-200とYM-250の何方かと迷いましたが、余裕を持たせてYM-250にしました。
また、他のテーマと同じように基板の発注時に化粧パネルも一緒に作って、ケース加工時のミスを防げるようにしています。
ケース加工ではBNCコネクタの回転止めのため、"D"型の穴を開ける必要が有り、いつも嫌な作業と感じていました。
今回は、化粧パネル(INPUT・OUTPUT)にD型の穴を用意して、ケースの穴は〇(マル)で済ませました。
パネルの固定方法は、M2程度のネジも考えましたが、両面テープで簡単に済ませています。(100円均一の強力0.16mm厚タイプ)
もし、両面テープが効かないようなら、四隅にビアを打ち込んであり、それを頼りにドリルで穴あけをするつもりです。
後面の化粧パネル(板厚1mm)
STM32のUSBソケットの他に、外付けUSB(何れもmicro-B型)も使う可能性が有り、両方の穴を開けています。
もしケース加工に自信のある方なら、ソケットの形ギリギリに穴あけをすればきれいに仕上がると思います。
私は加工に自信が無いので、上下の穴を連結して一つの大きな穴で済ませています。
STM32を載せるコントロールボードは10mmのスペーサーを、その他は7mmのスペーサーを使用しています。
(1)トラブルシューティング
2019/06/15
▲UARTを切換たり初めて接続した場合に、FRAT.exeとのやり取りに時間がかかりタイムオーバーする場合があります。
>その場合は、FRAT.exeを再起動することで以後は正常なやり取りができます。
2019/06/09
▲仮想EEPROMの領域が何らかの原因で読み出せないときに、外部LEDが”R"(トツート)を点滅することがあります。(リードエラー)
>20回点滅するとエラーを無視して復帰するので、LCDをONにして編集機能でフォーマットし通常画面に戻ったら、USBケーブルを抜いて電源をOFFしてください。 その後ONすると初期設定(EEPROMを初期値にセット)を実施して復帰します。
その他、書込み時"W"・フォーマット時"F" のエラー発生時も同様に20回点滅します。
▲STM32duinoとして書込みを行うと、2〜3度目の書込みから書込みの完了が遅くなりSTM32_USBが認識できなくなることがあります。
PC画面の右下に、以下のポップアップが出現して、電源の再起動が必要になります。
>その場合は、PCをリブートすると以後は、正常に動作しています。
>>原因:USB-HUB経由での接続。 (全ての場合の原因とは限りません)
書込みの時にUSB-HUBを経由していましたが、USBケーブルをPCから直にとると解消しました。(2020/01/24)
(2)その他
91.周波数の精度を上げるTCXOの導入(2019/07/16:追加) |
本FRATを色々触っていると、目安として考えていながらも、200MHzにおけるSPOTモードを考えたときに、その精度はどのくらいかと気になり、測ってみました。
それなりに安定していますが、その測定と一段高い安定化策を実施してみました。
導入した25MHzTCXOと基板(*プラス3Dイメージ)
TCXOは、144MHzトランスバータの時に使ったTCXOが満足のいく安定度が有り、今回のAD9959(DDS)の場合も通用するのかのという期待から、AliExpress(以下、AliEx)から同じようなものを選択しました。
組込みに当たっては、接合にケーブルが不要になるように、SMAのプラグコネクタを同じくAliExから入手して、基板は久しぶりにFusionPCBのセールメニュー(5枚:OCS便)を使いました。
電源コネクタは直付けでも問題ありません。しかし、以前に手配していて使っていないXHコネクタを採用して、手持ち在庫を使うようにしましたが、一つ二つでは使いきれません。
*3Dイメージを追加しました。SMAプラグの3DデータがWeb上で見つからず、FreeCADで作成し .wrl 形式にエクスポートして作成しています。
TCXO小基板の回路
そのままTCXOを載せただけの回路です。*回路を入替ました(2019/08/07)
出力はアッテネータが組めるように、裏面にRCのパターンを挿入しています。(点線内、未実装)
なお、5Vは便宜上の電圧です。
*ATTの定数変更
TCXO小基板のAD9959(DDS)ボードへの実装
ボードへは、SMA(CLK)端子に接続するだけで保持可能ですが、下にクッションを入れています。
供給電圧は、3.0VがC11のところに出ていたので、そこからはんだ付けで引き出しています。
このボードは、内部・外部の発振器を切換えるジャンパーが付いているので、ショートピンを変えるだけで両方の発振を試すことができます。
AD9959(DDS)ボード内蔵発振器(XO)の波形
こんなことが無い限り波形を見ることは無かったと思いますが、3.0V(回路上は3.3Vでしたがレギュレーターが3.0V品を使っていました)駆動で、方形波に近い雰囲気の形波が出力されています。
*画像入替ました(2019/08/07)
*波形を元に戻しました。この波形はXOの出力で、AD9959の23Pinへは0.01uFを通して接続されています。
外部TCXOの波形
同じく外部に付けたTCXOの波形です。
*画像入替ました(2019/08/07)
発注するときには、電圧や正弦波・方形波の違いも明記されていなく不安でしたが、結果的にはそのまま使えました。
*波形を元に戻しました。この波形はTCXOの出力で、AD9959の23Pinへは0.01uFを通して接続されています。
SDRunoによる周波数変動の測定
精度の高い周波数カウンタは手元に無く、地デジ14chの上限キャリヤー 475,928,571Hzを基準にしながら、SDRPlay社のRSP1AをSDRunoを使って、PC画面上でFRATでの200MHz発振周波数を観測して測定しました。
AD9959(DDS)ボード内蔵発振器(XO)と外部TCXOの測定結果
AD9959(DDS)ボード内蔵発振器(XO)は、周波数が200MHzということもありそれなりに変動します。
TCXOは期待した安定度を発揮してくれています。
92.AD9959のクロックInputLevelはMax1000mV についての確認(2019/08/07)
|
頒布を受けられた方より、『小さい方のDDSモジュールについてAD9959のCLK_MODE_SEL(24Pin)の間違いと、3.0V(3.3V)供給の発振器(XO)の出力が、AD9959のクロックInputLevel(Max1000mV)を超えている件が海外で話題になっている旨の連絡をいただきました。
1つ上の「91.周波数の精度を上げるTCXOの導入(2019/07/16:追加)」でも、私の手元に有る「大きい方のDDSモジュール」のXO及びTCXOの出力画像を掲載していますが、確かにそれぞれの出力は、平均電圧Mean=1.60V前後と高くなっています。
そこで、TCXO小基板の中にアッテネータ(ATT)の回路を組み込んでいることもあり、ATTの実験をしてみました。
25MHzTCXOへATTの組込み
減衰量の組み合わせは何種類かを試しましたが、入出力インピーダンスの関係か、計算上の減衰量と出力電圧が合致しません。
ボリュームで落とす方が自由度が有って良いかもしれません。
TCXO(ATT付)の出力
ATT回路を挿入した波形で鈍っていますが、Vppは落ちています。
ATTは、入出力インピーダンス1500Ω、でカット・アンド・トライで手持ちの抵抗の組み合わせから、計算上は約1.2dBとなる組み合わせとしました。
気になるところは、平均電圧Mean=-60mVとなっており、DSOが読み取れない(バグ?)ようで不安になりますが、2.48Vp-pまで落ちたのが確認できます。
最初はここで勘違いしていましたが、AD9959のクロックInputLevelは「Measured at each pin (single-ended)」となっていますので、23Pinで測る必要が有ります。
TCXO(ATT付)のDDS(23Pin)入力
平均電圧Meanが正確かどうかは分かりませんし、AD9959:REFERENCE CLOCK INPUTのInputLevelが、平均値を指すのか実効値を指すのかもわかりませんが、Input Voltage Bias Levelとしては、データシートの1.15V辺りというのが読み取れます。
DSOの読みでMean=1.02Vですし、これを大幅に譲歩して正弦波と考え、Vpp=2.34Vから想定できる実効値は、827mV程度となり規格内と言えなくはない状態です。
AD9959モジュールの内蔵XO出力をもう一度確認
これは取り直した波形で、91項の波形と変わりない状態です。
AD9959モジュールの内蔵XOのDDS(23Pin)入力
平均電圧Mean=1.04Vを信用してよいものかは分かりませんが、AD9959モジュールの内蔵XOを使っても、DDSの23Pinでは約1000mVに落ちているようです。
TCXO(ATT無し)の出力を再度確認
Vppは少し落ちていますが、こちらも91項の波形と変わりない状態です。
TCXO(ATT無し)のDDS(23Pin)入力
TCXO(ATT無し)でも、(0.01uFのコンデンサを通過した後の)DDSの23Pin入力では1000mVに落とされるようです。
AD9959 module クロック関連の回路抜粋
AD9959の内部回路にはAVDD(1.8V)とGND間でダイオードによるクリッパ回路(リミッター回路とも)が挿入されているようです。
module側のC43が有れば、1.8V供給のXOを探す等の対応は不要と思われます。
以上のことにより『「大きい方のDDSモジュール」では、XO及び外付けTCXOの発振出力が大きくても、AD9959:REFERENCE CLOCK INPUTのInputLevelは規格内(Max1000mV)に保たれている。』と結論付けました。
93.AD9959モジュール「小さい方の基板」の検証(2019/08/17)
|
「小さい方のDDS基板」DDSの24Pin(CLK_MODE_SEL)の状態がHigh(1.8V)で有っても発振するのかを、改めて「小さい方のDDS基板」を手配して確認してみました。
思っていたより早く今回は発注から10日間で届きました。
結論:「小さい方のDDS基板」AD9959の24PinがHigh(1.8V)で有っても、外部クロック信号を受け入れて正常に動作する。
「小さい方のDDS基板」を使って、100MHz ±1MHzをSweepした時のSDRunoの画像
一時的にSweep速度を落として(10mSのデレーを挿入)描画しています。(約5秒程度)
「小さい方のDDS基板」の内蔵発振器(XO)と外部TCXOの切替
USB顕微鏡を出す機会が有りましたので、CRの値を確認し実体配線図的な画像を追加しておきます。(2019/08/22)
C49は片方の接続がオープンな為、値を確定できましたが、C50は外さないと値が確定できないため予測値です。
外部CLK(MCLK)端子を接続する場合は、以前からの予想通りC50をハンダごてで外せば良いようです。
大幅な改定・追記用