NanoVNA User Guide

  1. はじめに
    1. NanoVNA とは
    2. 動作に必要なもの
    3. NanoVNA の基礎
    4. NanoVNA の発振周波数
  2. 最初にすること
  3. 入力方法
  4. 画面の見方
    1. メイン画面
      1. 1. START 2. STOP 周波数
      2. 3. マーカー
      3. 4. 較正状態
      4. 5. リファレンスポジション
      5. 6. マーカー状態
      6. 7. トレース状態
      7. 8. バッテリー状態
    2. メイン画面2
      1. 9. CENTER 周波数 10. スパン
      2. メニュー画面
      3. 11. メニュー
    3. キーパッド画面
      1. 12. 数字キー
      2. 13. バックキー
      3. 14. 単位キー
      4. 15. 入力欄
  5. 測定を開始する
    1. 基本的な測定シーケンス
  6. 較正方法
  7. 機能
    1. トレース表示
      1. トレースフォーマット
      2. トレースのチャンネル
    2. マーカー
    3. 時間ドメインオペレーション
      1. 時間ドメイン バンドパス
      2. 時間ドメインローパス インパルス
      3. 時間ドメインローパス ステップ
        1. ステップ応答の例
      4. 時間ドメイン ウィンドウ
      5. 時間ドメインでの波長短縮率 (Velocity Factor) の設定
      6. マーカーから周波数を設定
    4. 測定範囲の設定
      1. スタート周波数・ストップ周波数を設定する
      2. センター周波数・スパンを設定する
      3. ゼロスパン
      4. 一時的に測定を停止する
    5. 較正と設定の呼び出し
    6. 機器の設定
      1. タッチパネルの較正とテスト
      2. 機器の設定の保存
      3. バージョンを表示する
      4. ファームウェアアップデート
  8. ファームウェアの更新方法
    1. ファームウェアの入手方法
      1. ttrftech 版ファームウェア
      2. hugen79 版ファームウェア
      3. 自分でビルドする
    2. ファームウェアの書きこみかた
      1. dfu-util を使った書きこみ (Ubuntu)
      2. dfu-util を使った書きこみ (macOS)
      3. dfu-util を使った書きこみ (Windows 10)
    3. ファームウェアの書きこみかた (Windows GUI)
      1. DFU File Manager でファイル形式を変換する。
      2. DfuSe Demo でファームウェアを書きこみ
  9. ファームウェア開発の手引き
    1. Docker を使ったビルド
    2. Visual Studio Code を使ったオンチップデバッグ
      1. tasks.json
      2. launch.json
      3. デバッグを開始する
  10. 使用例
    1. バンドパスフィルタの調整
    2. アンテナの調整
      1. トレースの設定
    3. ケーブルの確認
    4. コモンモードフィルタの測定

はじめに

このドキュメントは NanoVNA に関する非公式なユーザーガイドです。URL は https://cho45.github.io/NanoVNA-manual/ です。

github レポジトリ で管理しています。

最新ファームウェアと齟齬がある場合など、修正内容がある場合は Pull-request を送ってください。

また、GitHub の Releases ページで PDF 形式でも提供しています。

NanoVNA とは

NanoVNA のハードウェアにはいくつか種類があり、このドキュメントが対象とするのは以下のハードウェアです。

これらのハードウェアは回路上のコンポーネントがほぼ同じであり、共通のファームウェアが利用できます。

動作に必要なもの

最低限以下のものが必要です。

NanoVNA の基礎

VNA (Vector Network Analyzer) は高周波網 (RF Network) の反射電力および通過電力の周波数特性を計測するものです。

NanoVNA は以下の要素を測定します。

ここから以下を算出します。

これらから算出可能な以下の項目を表示できます。

など。

NanoVNA の発振周波数

NanoVNA では測定対象の周波数帯域の 101 点を対象に、反射係数・伝送係数を測定します。

NanoVNA の局発周波数は 50kHz から 300MHz です。これ以上の周波数は高調波モードを使用します。高調波モードでも基本波は減衰されません。 周波数ごとの利用モードは以下の通りです。

特にアンプの利得などを確認する場合、常に基本波の入力もあることに注意が必要です。

入力は、いずれの場合も 5kHz の中間周波数に変換されます。信号は 48kHz サンプリングでアナログ・デジタル変換されます。デジタルデータは MCU にて信号処理されます。

最初にすること

使用するためには最初に必ず較正を行う必要があります。最初は以下の通りに較正を行います。

入力方法

NanoVNA には以下の入力があります。

画面の見方

メイン画面

1. START 2. STOP 周波数

スタート・ストップを指定したときのそれぞれの周波数が表示されます。

3. マーカー

トレースそれぞれのマーカーの位置が表示されます。選択されたマーカーは以下の方法で移動できます。

4. 較正状態

読みこんでいる較正のデータ番号及び、適用されている誤差補正について表示されます。

5. リファレンスポジション

対応するトレースのリファレンスポジションを示します。DISPLAY SCALE REFERENCE POSITION で位置を変更できます。

6. マーカー状態

選択中のアクティブなマーカーと、以前にアクティブだったマーカーが 1 つ表示されます。

7. トレース状態

各トレースフォーマットの状態と、アクティブなマーカーに対応する値が表示されます。

例えば CH0 LOGMAG 10dB/ 0.02dB という表示の場合は以下のように読みます。

またアクティブなトレースはチャンネルの表示が反転します。

8. バッテリー状態

バッテリーが装着され、PCB 上の D2 が実装済みの場合バッテリー電圧に応じてアイコンが表示されます。


メイン画面2

9. CENTER 周波数 10. スパン

センター周波数とスパンを指定したときのそれぞれの周波数が表示されます。


メニュー画面

11. メニュー

以下の操作でメニューを表示できます。


キーパッド画面

12. 数字キー

数字をタップすると 1 文字入力されます。

13. バックキー

1 文字削除します。1 文字も入力していないときは入力をキャンセルし、直前の状態に戻ります。

14. 単位キー

現在の入力に該当する単位を乗算して、ただちに入力を終了します。×1 の場合は入力した数値がそのまま設定されます。

15. 入力欄

入力対象の項目名と、入力した数字が表示されます。

測定を開始する

基本的な測定シーケンス

  1. 測定する周波数範囲を設定する
  2. 較正を行う
  3. DUT を接続する

較正方法

較正は基本的に、測定する周波数範囲を変更する度に実行する必要があります。正しくエラー修正がされている場合、画面上の較正状態表示は Cn D R S T X となります。n はロードしているデータ番号です。

ただし NanoVNA は既存の較正情報を補完してある程度正しい表示を行うことができます。較正データをロードした後に周波数範囲を変更した場合、この状態になります。このとき、画面上の較正状態の表示は cn D R S T X となります。n はロードしているデータ番号です。

  1. 現在の較正状態をリセットします CAL RESET
  2. CH0 ポートに OPEN スタンダードを接続し、CAL CALIBRATE OPEN を実行します。
  3. CH0 ポートに SHORT スタンダードを接続し、CAL CALIBRATE SHORT を実行します。
  4. CH0 ポートに LOAD スタンダードを接続し、CAL CALIBRATE LOAD を実行します。
  5. CH0, CH1 ポートに LOAD スタンダードを接続し、CAL CALIBRATE ISOLN を実行します。ロードが 1 つしかない場合 CH0 ポートは未接続でもかまいません。
  6. CH0, CH1 ポートにケーブルを接続し、ケーブル同士をスルーコネクタで接続して、CAL CALIBRATE THRU を実行します。
  7. 較正を終了し、誤差の補正情報を計算します CAL CALIBRATE DONE
  8. データ番号を指定して保存します。CAL CALIBRATE SAVE SAVE 0

※ 各較正データの取り込みは、十分に表示が安定してから行う必要があります。

機能

トレース表示

トレースは最大 4 つ表示でき、そのうちの 1 つがアクティブなトレースとなります。

トレースは必要なものだけを表示させることができます。表示を切り替えるには DISPLAY TRACE TRACE n を選択します。

アクティブなトレースを切り替えるには以下の方法があります。

トレースフォーマット

各トレースはそれぞれにフォーマットを指定できます。アクティブなトレースのフォーマットを変更するには DISPLAY FORMAT 変更したいフォーマットを選択します。

各フォーマットの表示は以下の通りです。

トレースのチャンネル

NanoVNA には CH0 CH1 の 2 つのポートがあります。それぞれのポートで以下の S パラメータが測定できます。

トレースのチャンネルを変更するには DISPLAY CHANNELCH0 REFLECT または CH1 THROUGH を選択します。

マーカー

マーカーは最大 4 つまで表示できます。マーカーの表示は MARKER SELECT MARKER MARKER n から行います。マーカーを表示すると、アクティブなマーカーは表示したマーカーに設定されます。

時間ドメインオペレーション

NanoVNA は周波数ドメインデータを信号処理することにより、時間ドメイン測定をシミュレーションできます。

測定データを時間ドメインに変換する場合 DISPLAY TRANSOFRM TRANSFORM ON を選択します。TRANSFORM ON が有効な場合、測定データは直ちに時間ドメインに変換されて表示されます。

時間ドメインと周波数ドメインには以下の関係があります。

このことから最大時間長と時間分解能はトレードオフの関係にあります。

時間長を距離と言いかえると、以下のことが云えます。

時間ドメイン バンドパス

バンドパスモードでは、インパルス信号に対する DUT の応答をシミュレートできます。

トレースフォーマットは LINEAR LOGMAG SWR に設定できます。

以下にバンドパスフィルタのインパルス応答の例を示します。

時間ドメインローパス インパルス

ローパスモードでは、TDR をシミュレートできます。ローパスモードでは、スタート周波数は 50kHz、ストップ周波数は計測したい距離に応じて設定する必要があります。

トレースフォーマットを REAL に設定できます。

以下にオープン状態のステップ応答と、ショート状態のインパルス応答の例を示します。

時間ドメインローパス ステップ

ローパスモードでは、TDR をシミュレートできます。ローパスモードでは、スタート周波数は 50kHz、ストップ周波数は計測したい距離に応じて設定する必要があります。

トレースフォーマットを REAL に設定できます。

オープン:

ショート:

ステップ応答の例

容量性ショート:

誘導性ショート:

容量性の非連続 (並列に C):

誘導性の非連続 (直列に L):

時間ドメイン ウィンドウ

測定できる範囲は有限個数であり、最低周波数及び最大周波数が存在します。ウィンドウはこの不連続な測定データを滑らかにし、リンギングを抑えるめに使用できます。

ウィンドウには 3 段階あります。

MINIMUM では最大限分解能が高くなります、MAXIMUM では最大限ダイナミックレンジが高くなります。NORMAL はその中間です。

時間ドメインでの波長短縮率 (Velocity Factor) の設定

ケーブル中の電磁波の伝送速度はその材質によって変化します。真空中の電磁波の伝送速度に対する比を波長短縮率 (Velocity Factor, Velocity of propagation) と呼びます。これはケーブルの仕様に必ず記載されています。

時間ドメインでは、表示される時間を距離に換算した表示をできます。 距離表示の際使用される波長短縮率は DISPLAY TRANSFORM VELOCITY FACTOR で設定できます。例えば、67% の波長短縮率を持つケーブルの TDR を測定した場合は、VELOCITY FACTOR67 を指定します。

マーカーから周波数を設定

以下のように、マーカーから周波数範囲を設定できます。

測定範囲の設定

測定範囲の設定には 3 つの種類があります。

スタート周波数・ストップ周波数を設定する

それぞれ、STIMULUS STARTSTIMULUS STOP を選択して設定します。

センター周波数・スパンを設定する

それぞれ、STIMULUS CENTERSTIMULUS SPAN を選択して設定します。

ゼロスパン

ゼロスパンは周波数スイープを行わず、1 つの周波数を連続で送出するモードです。

STIMULUS CW FREQ を選択して設定します。

一時的に測定を停止する

STIMULUS PAUSE SWEEP を選択すると、一時的に測定を停止します。

較正と設定の呼び出し

較正データは最大 5 つ保存可能です。NanoVNA は起動直後、番号 0 のデータをロードします。

較正データとは、以下の情報を含むデータです。

CAL SAVE SAVE n を選択することで、現在の設定を保存できます。

CAL RESET を選択することで、現在の較正データをリセットできます。較正を再度行う場合は RESET を行う必要があります。

CAL CORRECTION は現在エラー修正が行われているかを示します。これを選択して一時的にエラー修正を止めることができます。

RECALL RECALL n を選択することで、保存した設定を呼びだすことができます。

機器の設定

CONFIG 以下では機器の全般的な設定などを行うことができます。

タッチパネルの較正とテスト

CONFIG TOUCH CAL を選択すると、タッチパネルの較正を行うことができます。実際のタップ位置と、認識されるタップ位置に大きな差がある場合には、これを実行することで解決できます。TOUCH CAL を行ったあと、TOUCH TEST を行って正しく設定されていることを確認し、SAVE で設定を保存します。

CONFIG TOUCH TEST を選択すると、タッチパネルのテストを行うことができます。タッチパネルをタップしている間は線がひかれます。タッチパネルから離すと元の状態に戻ります。

機器の設定の保存

CONFIG SAVE を選択すると機器の全般的な設定を保存できます。機器の全般的な設定とは、以下の情報を含むデータです。

タッチパネルの較正情報以外は、現在設定する方法がありません。

バージョンを表示する

CONFIG VERSION を選択すると、機器のバージョン情報を表示できます。

ファームウェアアップデート

CONFIG →DFU RESET AND ENTER DFU を選択すると、機器をリセットし、DFU (Device Firmware Update) モードに入ります。このモードでは USB 経由でファームウェアアップデートが可能です。

ファームウェアの更新方法

ファームウェアの入手方法

ttrftech 版ファームウェア

オリジナルのファームウェアです。バージョン管理されており、頻繁に開発されています。

GitHub releases にはある程度安定したリリース版のファームウェアがあります。

CircleCI にはコミットごと全てのファームウェアがあります。最新の機能を試したい場合や、不具合を確認する場合はこちらを使用します。

hugen79 版ファームウェア

Google Drive に最新のファームウェアが配置されています。

自分でビルドする

github のリポジトリを clone して自分でビルドすることも簡単にできます。

ファームウェアの書きこみかた

書きこみかたはいろいろな方法がありますが、ここでは dfu-util を用いて説明します。 dfu-util はクロスプラットフォームツールであり、Windows ではバイナリも提供されていますので、ダウンロードするだけで使用できます。

dfu-util を使った書きこみ (Ubuntu)

標準パッケージリポジトリに dfu-util があります。

sudo apt-get install dfu-util
dfu-util --version

デバイスを DFU モードで起動します。以下のいずれかの方法で DFU モードになります。

以下のコマンドを実行します。build/ch.bin はダウンロードしたファームウェアファイルの .bin までのパスを記述します。

dfu-util -d 0483:df11 -a 0 -s 0x08000000:leave -D build/ch.bin

dfu-util を使った書きこみ (macOS)

homebrew を使ってインストールするのがお勧めです。

brew コマンドのインストールをします。

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

dfu-util コマンドのインストールをします。

brew install dfu-util

dfu-util コマンドが正常に起動できることを確認します。

dfu-util --version

デバイスを DFU モードで起動します。以下のいずれかの方法で DFU モードになります。

以下のコマンドを実行します。build/ch.bin はダウンロードしたファームウェアファイルの .bin までのパスを記述します。

dfu-util -d 0483:df11 -a 0 -s 0x08000000:leave -D build/ch.bin

dfu-util を使った書きこみ (Windows 10)

Windows の場合、DFU モードの NanoVNA を接続すると自動的にデバイスドライバのインストールが行われますが、このデバイスドライバでは dfu-util を利用できません。 ここでは Zadig を利用してドライバを入れかえます。

デバイスを DFU モードで起動します。以下のいずれかの方法で DFU モードになります。

DFU モードにした NanoVNA を接続した状態で Zadig を起動し、以下のように STM32 BOOTLOADER に対して WinUSB をドライバとして利用するようにします。

※ ドライバを元に戻したい場合、「デバイス マネージャ」の「ユニバーサルシリアルバスコントローラ」から、該当するデバイスを探して「デバイスのアンインストール」を実行します。USB コネクタを抜いて再度挿すとドライバが自動でインストールされます。

次に dfu-util を配置します。releases から dfu-util-0.9-win64.zip をダウンロードして展開します。 ここでは例として C:\dfu-util に展開したものとします (どこでもかまいません)。

スタートメニューを右クリックして Windows PowerShell を選択します。シェルの画面が開きます。

エクスプローラから dfu-util.exe を PowerShell へドラッグ&ドロップするとパスが自動挿入されます。以下のように --version をつけて起動すると dfu-util のバージョン表示ができます。

C:\dfu-util\dfu-util.exe --version

同様にファームウェアのファイルもエクスプローラから PowerShell へドラッグ&ドロップすることでパスが入力できます。

以下のコマンドを実行します。build/ch.bin はダウンロードしたファームウェアファイルの .bin までのパスを記述します。

C:\dfu-util\dfu-util.exe -d 0483:df11 -a 0 -s 0x08000000:leave -D build\ch.bin

ファームウェアの書きこみかた (Windows GUI)

CUI になじみのないかた向けに、若干面倒な手順が必要ですが ST が提供する DfuSE Demo ツールを使った書きこみ方法も参考程度に紹介します。

ST のサイトから STSW-STM32080 をダウンロードします。

が含まれています。

DFU File Manager でファイル形式を変換する。

まず DFU File Manager を起動します。

I want to GENERATE a DFU file from S19, HEX or BIN files を選択します。

S19 or Hex... ボタンをクリックします。ch.hex などファームウェアの .hex ファイルを選択します。

Generate... ボタンをクリックして、適当な名前をつけて .dfu ファイルを作成します。

DfuSe Demo でファームウェアを書きこみ

まずデバイスを DFU モードで起動します。以下のいずれかの方法で DFU モードになります。

DfuSe Demo を起動します。Available DFU Devices に STM Device in DFU Mode があることを確認して、Choose... をクリックします。

先程保存した .dfu ファイルを選択します。

Upgrade ボタンをクリックします。

書きこみが終わるとこの画面になるので、Leave DFU mode ボタンをクリックして DFU モードを抜けます。デバイスがリセットされて新しいファームウェアで起動します。

ファームウェア開発の手引き

NanoVNA のファームウェアの開発の必要なものは以下の通りです。

これらが既にある環境なら、make でファームウェアのビルドが可能です。

git clone git@github.com:ttrftech/NanoVNA.git
cd NanoVNA
git submodule update --init --recursive
make

Docker を使ったビルド

docker を使うとわずらわしいことなしにビルドできます。docker は無償で利用できるクロスプラットフォームのコンテナユーティリティです。特定の環境 (今回の場合、ビルド環境) を素早く再現するために利用できます。

docker をインストールした上で、以下のコマンドを実行するだけです。

docker run -it --rm -v $(PWD):/work edy555/arm-embedded:8.2 make

Visual Studio Code を使ったオンチップデバッグ

Visual Studio Code (以下 VSCode) は Microsoft が無償で提供するマルチプラットフォームなコードエディタです。 Cortex-Debug Extension を導入することでオンチップデバッグを GUI で行うことができます。

プラットフォーム依存の部分は省きますが、上記に加えて以下のものが必要です。

Cortex-Debug は VSCode の Extensions から検索して Install します。

tasks.json

まず VSCode 上で NanoVNA 全体を make するする「タスク」を定義します。

{
    "tasks": [
        {
            "type": "shell",
            "label": "build",
            "command": "make",
            "args": [
            ],
            "options": {
                "cwd": "${workspaceRoot}"
            }
        }
    ],
    "version": "2.0.0"
}

これで VSCode 上のタスクとして make できるようになります。

launch.json

次に Debug 時にどのように起動するかを定義します。Cortex-Debug の説明に従って設定します。

以下は ST-Link を使った場合の設定です。もし J-Link を使う場合は interface/stlink.cfginterface/jlink.cfg に置き換えます。

{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "cortex-debug",
            "servertype": "openocd",
            "request": "launch",
            "name": "OpenOCD-Debug",
            "executable": "build/ch.elf",
            "configFiles": [
                "interface/stlink.cfg",
                "target/stm32f0x.cfg"
            ],
            "svdFile": "./STM32F0x8.svd",
            "cwd": "${workspaceRoot}",
            "preLaunchTask": "build",
        }
    ]
}

svdFile に指定するファイルは ST のサイト からダウンロードできます。 svdFile は指定しなくても動作に支障はありません。

デバッグを開始する

Start Debugging (F5) をすると、make によるビルドののち、OpenOCD が自動的に起動してファームウェアの転送が行われます。 転送が終わるとリセットハンドラでブレークした状態になります。

svdFile を指定している場合、定義済みの MCU のレジスタがデバッグ画面に表示されます。

使用例

バンドパスフィルタの調整

TODO

アンテナの調整

NanoVNA をアンテナアナライザーとして利用する例を示します。

アンテナの調整において重要なのは以下の 2 点です。

トレースの設定

アンテナの調整では CH0 のみを使用しますので、THRUISOLN 以外の全ての項目について、較正を実施します。

トレース設定は以下のようにします。

アンテナの同調させたい周波数を CENTER に設定し、SPAN を適切に設定します。

リアクタンスを表示しているトレース 1 が 0 に近い周波数を探します。その周波数が同調点ですので、ずれていればアンテナを調整し、目的の周波数に同調点がくるようにします。

同調点が目的の周波数にあったら、SWR を表示しているトレース 0 が十分に低い (1 に近い) SWR を表示しているかを確認します。もし十分に (2 以下の) SWR を示していない場合、スミスチャートを使ってマッチングを行います。 この際、マッチングはアンテナ直下のアンテナチューナーなどを使ってもかまいません。

SWR が落ちれば、目的の周波数で同調し、SWR が低いアンテナの調整は終わりです。

ケーブルの確認

時間ドメインのローパスモードを使うことで TDR をシミュレートできます。TDR を使うことで、伝送路の不具合を発見できます。

TODO

コモンモードフィルタの測定

TODO