NanoVNA-F V3 Starlight documentation site
Astro 5 + Starlight 0.37 docs site for the NanoVNA-F V3 portable vector network analyzer. Content sourced from the extracted PDF user guide and menu structure map. - 38 MDX content pages organized in diataxis structure (getting-started, tutorials, how-to guides, reference) - Steel blue/teal theme (#2d7d9a/#5bb8d4) distinct from NanoVNA-H - 5 custom Astro components (CommandTable, MenuTree, SpecCard, ScreenRegion, CalibrationStep) - 42 renamed screenshots from the user guide PDF extraction - Docker deployment via Caddy behind caddy-docker-proxy - Full console command reference (28 commands) - Complete menu map with interactive tree component
28
.dockerignore
Normal file
@ -0,0 +1,28 @@
|
||||
# Dependencies
|
||||
node_modules/
|
||||
|
||||
# Build output
|
||||
dist/
|
||||
.astro/
|
||||
|
||||
# Git
|
||||
.git/
|
||||
.gitignore
|
||||
|
||||
# Docker files (don't need to copy themselves)
|
||||
Dockerfile
|
||||
docker-compose.yml
|
||||
.dockerignore
|
||||
|
||||
# Development files
|
||||
.env.local
|
||||
.env.*.local
|
||||
*.log
|
||||
|
||||
# IDE
|
||||
.vscode/
|
||||
.idea/
|
||||
|
||||
# OS
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
2
.env.example
Normal file
@ -0,0 +1,2 @@
|
||||
COMPOSE_PROJECT_NAME=nanovna-f-docs
|
||||
DOMAIN=nanovna-f.l.zmesh.systems
|
||||
20
.gitignore
vendored
Normal file
@ -0,0 +1,20 @@
|
||||
# build output
|
||||
dist/
|
||||
# generated types
|
||||
.astro/
|
||||
|
||||
# dependencies
|
||||
node_modules/
|
||||
|
||||
# logs
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
pnpm-debug.log*
|
||||
|
||||
# environment variables
|
||||
.env
|
||||
.env.production
|
||||
|
||||
# macOS-specific files
|
||||
.DS_Store
|
||||
47
Dockerfile
Normal file
@ -0,0 +1,47 @@
|
||||
# syntax=docker/dockerfile:1
|
||||
|
||||
# Build stage - using Node.js with pnpm
|
||||
FROM node:22-alpine AS builder
|
||||
|
||||
# Install pnpm
|
||||
RUN corepack enable && corepack prepare pnpm@latest --activate
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
# Copy package files
|
||||
COPY package.json pnpm-lock.yaml ./
|
||||
|
||||
# Install dependencies with cache mount
|
||||
RUN --mount=type=cache,target=/root/.local/share/pnpm/store \
|
||||
pnpm install --frozen-lockfile
|
||||
|
||||
# Copy source files
|
||||
COPY . .
|
||||
|
||||
# Disable telemetry and build
|
||||
ENV ASTRO_TELEMETRY_DISABLED=1
|
||||
RUN pnpm build
|
||||
|
||||
# Production stage - lightweight static server
|
||||
FROM caddy:2-alpine AS production
|
||||
|
||||
# Copy built static files
|
||||
COPY --from=builder /app/dist /srv
|
||||
|
||||
# Simple Caddyfile for static file serving
|
||||
# Note: caddy-docker-proxy handles the external routing
|
||||
COPY <<EOF /etc/caddy/Caddyfile
|
||||
:80 {
|
||||
root * /srv
|
||||
file_server
|
||||
encode gzip
|
||||
try_files {path} {path}/ /index.html
|
||||
header Cache-Control "public, max-age=3600"
|
||||
@immutable path /_astro/*
|
||||
header @immutable Cache-Control "public, max-age=31536000, immutable"
|
||||
}
|
||||
EOF
|
||||
|
||||
EXPOSE 80
|
||||
|
||||
CMD ["caddy", "run", "--config", "/etc/caddy/Caddyfile"]
|
||||
56
Makefile
Normal file
@ -0,0 +1,56 @@
|
||||
.PHONY: build up down restart logs shell clean rebuild status dev build-local
|
||||
|
||||
# Default target
|
||||
all: up
|
||||
|
||||
# Build the Docker image
|
||||
build:
|
||||
docker compose build
|
||||
|
||||
# Start the container
|
||||
up:
|
||||
docker compose up -d
|
||||
@echo "Waiting for container to start..."
|
||||
@sleep 3
|
||||
docker compose logs --tail=20
|
||||
|
||||
# Stop the container
|
||||
down:
|
||||
docker compose down
|
||||
|
||||
# Restart the container
|
||||
restart: down up
|
||||
|
||||
# View logs
|
||||
logs:
|
||||
docker compose logs -f
|
||||
|
||||
# View recent logs
|
||||
logs-tail:
|
||||
docker compose logs --tail=50
|
||||
|
||||
# Shell into the container
|
||||
shell:
|
||||
docker compose exec docs sh
|
||||
|
||||
# Clean up (remove container and image)
|
||||
clean:
|
||||
docker compose down --rmi local --volumes
|
||||
|
||||
# Full rebuild (clean + build + up)
|
||||
rebuild: clean build up
|
||||
|
||||
# Check status
|
||||
status:
|
||||
docker compose ps
|
||||
@echo ""
|
||||
@echo "Health check:"
|
||||
@docker compose exec docs wget -q --spider http://127.0.0.1:80/ && echo "OK" || echo "FAILED"
|
||||
|
||||
# Dev mode (local preview without Docker)
|
||||
dev:
|
||||
pnpm dev
|
||||
|
||||
# Build locally (for testing)
|
||||
build-local:
|
||||
pnpm build
|
||||
143
astro.config.mjs
Normal file
@ -0,0 +1,143 @@
|
||||
// @ts-check
|
||||
import { defineConfig } from 'astro/config';
|
||||
import starlight from '@astrojs/starlight';
|
||||
|
||||
export default defineConfig({
|
||||
site: 'https://nanovna-f.l.zmesh.systems',
|
||||
telemetry: false,
|
||||
devToolbar: { enabled: false },
|
||||
integrations: [
|
||||
starlight({
|
||||
title: 'NanoVNA-F V3 Documentation',
|
||||
tagline: 'Portable vector network analyzer — 1 MHz to 6 GHz',
|
||||
logo: {
|
||||
alt: 'NanoVNA-F V3',
|
||||
src: './src/assets/logo.svg',
|
||||
},
|
||||
customCss: ['./src/styles/custom.css', './src/styles/landing.css'],
|
||||
head: [
|
||||
{
|
||||
tag: 'meta',
|
||||
attrs: {
|
||||
name: 'theme-color',
|
||||
content: '#2d7d9a',
|
||||
},
|
||||
},
|
||||
],
|
||||
sidebar: [
|
||||
{
|
||||
label: 'Getting Started',
|
||||
items: [
|
||||
{ label: 'What is NanoVNA-F V3?', slug: 'getting-started/overview' },
|
||||
{ label: 'Quick Start Guide', slug: 'getting-started/quick-start' },
|
||||
{ label: 'Hardware Overview', slug: 'getting-started/hardware' },
|
||||
{ label: 'VNA Basics', slug: 'getting-started/vna-basics' },
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'Tutorials',
|
||||
items: [
|
||||
{
|
||||
label: 'First Measurements',
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ label: 'Your First S11 Measurement', slug: 'tutorials/first-measurements/first-s11' },
|
||||
{ label: 'Your First S21 Measurement', slug: 'tutorials/first-measurements/first-s21' },
|
||||
{ label: 'Reading the Display', slug: 'tutorials/first-measurements/reading-display' },
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'Calibration',
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ label: 'Full Calibration', slug: 'tutorials/calibration/full-calibration' },
|
||||
{ label: 'Saving Calibrations', slug: 'tutorials/calibration/saving-calibration' },
|
||||
{ label: 'Port Extension', slug: 'tutorials/calibration/port-extension' },
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'Practical Projects',
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ label: 'Testing an Antenna', slug: 'tutorials/practical-projects/testing-antenna' },
|
||||
{ label: 'Measuring a Filter', slug: 'tutorials/practical-projects/measuring-filter' },
|
||||
{ label: 'Cable Length with TDR', slug: 'tutorials/practical-projects/cable-tdr' },
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'How-To Guides',
|
||||
items: [
|
||||
{
|
||||
label: 'Display & Traces',
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ label: 'Configure Traces', slug: 'how-to/display-traces/configure-traces' },
|
||||
{ label: 'Display Formats', slug: 'how-to/display-traces/display-formats' },
|
||||
{ label: 'Scale & Reference', slug: 'how-to/display-traces/scale-reference' },
|
||||
{ label: 'Dark Mode', slug: 'how-to/display-traces/dark-mode' },
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'Markers',
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ label: 'Using Markers', slug: 'how-to/markers/using-markers' },
|
||||
{ label: 'Marker Search', slug: 'how-to/markers/marker-search' },
|
||||
{ label: 'Marker Operations', slug: 'how-to/markers/marker-operations' },
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'Measurement Tools',
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ label: 'Signal Generator', slug: 'how-to/measurement-tools/signal-generator' },
|
||||
{ label: 'CW Pulse Mode', slug: 'how-to/measurement-tools/cw-pulse' },
|
||||
{ label: 'TDR Mode', slug: 'how-to/measurement-tools/tdr-mode' },
|
||||
{ label: 'S-Parameter Export', slug: 'how-to/measurement-tools/s-parameter-export' },
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'Configuration',
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ label: 'Language & Brightness', slug: 'how-to/configuration/language-brightness' },
|
||||
{ label: 'Date/Time & Average', slug: 'how-to/configuration/datetime-average' },
|
||||
{ label: 'User Defined Info', slug: 'how-to/configuration/user-defined-info' },
|
||||
{ label: 'Firmware Update', slug: 'how-to/configuration/firmware-update' },
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'PC Software',
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ label: 'USB Connection', slug: 'how-to/pc-software/usb-connection' },
|
||||
{ label: 'Console Commands', slug: 'how-to/pc-software/console-commands' },
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'Reference',
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
label: 'User Interface',
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ label: 'Menu Map', slug: 'reference/user-interface/menu-map' },
|
||||
{ label: 'Main Screen Regions', slug: 'reference/user-interface/screen-regions' },
|
||||
{ label: 'Virtual Keyboard', slug: 'reference/user-interface/keyboard' },
|
||||
],
|
||||
},
|
||||
{ label: 'Specifications', slug: 'reference/specifications' },
|
||||
{ label: 'Console Command Reference', slug: 'reference/command-reference' },
|
||||
{ label: 'Calibration Status Codes', slug: 'reference/calibration-codes' },
|
||||
{ label: 'Charging & LED Indicators', slug: 'reference/charging-leds' },
|
||||
],
|
||||
},
|
||||
],
|
||||
}),
|
||||
],
|
||||
});
|
||||
21
docker-compose.yml
Normal file
@ -0,0 +1,21 @@
|
||||
services:
|
||||
docs:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- caddy
|
||||
labels:
|
||||
caddy: ${DOMAIN:-nanovna-f.l.zmesh.systems}
|
||||
caddy.reverse_proxy: "{{upstreams 80}}"
|
||||
healthcheck:
|
||||
test: ["CMD", "wget", "-q", "--spider", "http://127.0.0.1:80/"]
|
||||
interval: 30s
|
||||
timeout: 5s
|
||||
retries: 3
|
||||
start_period: 10s
|
||||
|
||||
networks:
|
||||
caddy:
|
||||
external: true
|
||||
26
package.json
Normal file
@ -0,0 +1,26 @@
|
||||
{
|
||||
"name": "nanovna-f-v3-docs",
|
||||
"type": "module",
|
||||
"version": "0.0.1",
|
||||
"scripts": {
|
||||
"dev": "astro dev",
|
||||
"start": "astro dev",
|
||||
"build": "astro build",
|
||||
"preview": "astro preview",
|
||||
"astro": "astro"
|
||||
},
|
||||
"dependencies": {
|
||||
"@astrojs/mdx": "^4.3.13",
|
||||
"@astrojs/starlight": "^0.37.4",
|
||||
"@iconify-json/lucide": "^1.2.87",
|
||||
"astro": "^5.6.1",
|
||||
"astro-icon": "^1.1.5",
|
||||
"sharp": "^0.34.2"
|
||||
},
|
||||
"pnpm": {
|
||||
"onlyBuiltDependencies": [
|
||||
"esbuild",
|
||||
"sharp"
|
||||
]
|
||||
}
|
||||
}
|
||||
4524
pnpm-lock.yaml
generated
Normal file
7
src/assets/logo.svg
Normal file
@ -0,0 +1,7 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32">
|
||||
<!-- Stylized VNA waveform icon — steel blue/teal -->
|
||||
<rect width="32" height="32" rx="6" fill="#2d7d9a"/>
|
||||
<path d="M4 20 L8 12 L12 18 L16 8 L20 16 L24 10 L28 14"
|
||||
fill="none" stroke="#f8fafb" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<circle cx="16" cy="8" r="2" fill="#f8fafb" opacity="0.6"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 429 B |
BIN
src/assets/screenshots/about-screen.png
Normal file
|
After Width: | Height: | Size: 243 KiB |
BIN
src/assets/screenshots/calibration-steps.png
Normal file
|
After Width: | Height: | Size: 33 KiB |
BIN
src/assets/screenshots/channel-select.png
Normal file
|
After Width: | Height: | Size: 286 KiB |
BIN
src/assets/screenshots/config-menu.png
Normal file
|
After Width: | Height: | Size: 128 KiB |
BIN
src/assets/screenshots/console-commands.png
Normal file
|
After Width: | Height: | Size: 232 KiB |
BIN
src/assets/screenshots/cw-pulse.png
Normal file
|
After Width: | Height: | Size: 694 KiB |
BIN
src/assets/screenshots/dark-mode.png
Normal file
|
After Width: | Height: | Size: 261 KiB |
BIN
src/assets/screenshots/firmware-upgrade-1.png
Normal file
|
After Width: | Height: | Size: 78 KiB |
BIN
src/assets/screenshots/firmware-upgrade-2.png
Normal file
|
After Width: | Height: | Size: 105 KiB |
BIN
src/assets/screenshots/firmware-upgrade-3.png
Normal file
|
After Width: | Height: | Size: 30 KiB |
BIN
src/assets/screenshots/firmware-upgrade-4.png
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
src/assets/screenshots/firmware-upgrade-5.png
Normal file
|
After Width: | Height: | Size: 30 KiB |
BIN
src/assets/screenshots/firmware-upgrade-6.png
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
src/assets/screenshots/format-logmag.png
Normal file
|
After Width: | Height: | Size: 269 KiB |
BIN
src/assets/screenshots/format-smith.png
Normal file
|
After Width: | Height: | Size: 241 KiB |
BIN
src/assets/screenshots/front-view.png
Normal file
|
After Width: | Height: | Size: 1.1 MiB |
BIN
src/assets/screenshots/keyboard-screen.png
Normal file
|
After Width: | Height: | Size: 38 KiB |
BIN
src/assets/screenshots/main-screen-labeled.png
Normal file
|
After Width: | Height: | Size: 1.0 MiB |
BIN
src/assets/screenshots/marker-operations.png
Normal file
|
After Width: | Height: | Size: 212 KiB |
BIN
src/assets/screenshots/marker-search.png
Normal file
|
After Width: | Height: | Size: 32 KiB |
BIN
src/assets/screenshots/marker-set-freq.png
Normal file
|
After Width: | Height: | Size: 192 KiB |
BIN
src/assets/screenshots/menu-example.png
Normal file
|
After Width: | Height: | Size: 260 KiB |
BIN
src/assets/screenshots/menu-map-full.png
Normal file
|
After Width: | Height: | Size: 670 KiB |
BIN
src/assets/screenshots/menu-touch-area.png
Normal file
|
After Width: | Height: | Size: 469 KiB |
BIN
src/assets/screenshots/pause-sweep.png
Normal file
|
After Width: | Height: | Size: 201 KiB |
BIN
src/assets/screenshots/pc-software-1.png
Normal file
|
After Width: | Height: | Size: 75 KiB |
BIN
src/assets/screenshots/pc-software-2.png
Normal file
|
After Width: | Height: | Size: 305 KiB |
BIN
src/assets/screenshots/pc-software-3.png
Normal file
|
After Width: | Height: | Size: 129 KiB |
BIN
src/assets/screenshots/port-extension.png
Normal file
|
After Width: | Height: | Size: 272 KiB |
BIN
src/assets/screenshots/ports-connectors.png
Normal file
|
After Width: | Height: | Size: 2.8 MiB |
BIN
src/assets/screenshots/recall-save.png
Normal file
|
After Width: | Height: | Size: 68 KiB |
BIN
src/assets/screenshots/scale-setting.png
Normal file
|
After Width: | Height: | Size: 250 KiB |
BIN
src/assets/screenshots/signal-generator.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
src/assets/screenshots/stimulus-menu.png
Normal file
|
After Width: | Height: | Size: 190 KiB |
BIN
src/assets/screenshots/storage-menu.png
Normal file
|
After Width: | Height: | Size: 190 KiB |
BIN
src/assets/screenshots/tdr-bandpass.png
Normal file
|
After Width: | Height: | Size: 286 KiB |
BIN
src/assets/screenshots/tdr-lowpass.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
src/assets/screenshots/tdr-menu.png
Normal file
|
After Width: | Height: | Size: 41 KiB |
BIN
src/assets/screenshots/trace-activated.png
Normal file
|
After Width: | Height: | Size: 276 KiB |
BIN
src/assets/screenshots/trace-selection.png
Normal file
|
After Width: | Height: | Size: 244 KiB |
BIN
src/assets/screenshots/user-defined-info.png
Normal file
|
After Width: | Height: | Size: 56 KiB |
BIN
src/assets/screenshots/vna-network-diagram.png
Normal file
|
After Width: | Height: | Size: 390 KiB |
93
src/components/CalibrationStep.astro
Normal file
@ -0,0 +1,93 @@
|
||||
---
|
||||
interface Step {
|
||||
number: number;
|
||||
title: string;
|
||||
description: string;
|
||||
note?: string;
|
||||
}
|
||||
|
||||
interface Props {
|
||||
steps: Step[];
|
||||
}
|
||||
|
||||
const { steps } = Astro.props;
|
||||
---
|
||||
|
||||
<div class="cal-steps">
|
||||
{steps.map((step) => (
|
||||
<div class="cal-step">
|
||||
<div class="cal-step-header">
|
||||
<span class="cal-step-number">Step {step.number}</span>
|
||||
<span class="cal-step-title">{step.title}</span>
|
||||
</div>
|
||||
<p class="cal-step-desc">{step.description}</p>
|
||||
{step.note && (
|
||||
<div class="cal-step-note">
|
||||
<strong>Note:</strong> {step.note}
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
|
||||
<style>
|
||||
.cal-steps {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 1rem;
|
||||
margin: 1.5rem 0;
|
||||
}
|
||||
|
||||
.cal-step {
|
||||
padding: 1rem;
|
||||
background: var(--sl-color-gray-7);
|
||||
border-radius: 8px;
|
||||
border: 1px solid var(--sl-color-gray-5);
|
||||
}
|
||||
|
||||
.cal-step-header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.75rem;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.cal-step-number {
|
||||
display: inline-block;
|
||||
background: var(--sl-color-accent);
|
||||
color: var(--sl-color-black);
|
||||
padding: 0.15em 0.6em;
|
||||
border-radius: 4px;
|
||||
font-size: 0.8rem;
|
||||
font-weight: 700;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.03em;
|
||||
}
|
||||
|
||||
.cal-step-title {
|
||||
font-weight: 600;
|
||||
color: var(--sl-color-white);
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
.cal-step-desc {
|
||||
margin: 0;
|
||||
font-size: 0.9rem;
|
||||
color: var(--sl-color-gray-1);
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
.cal-step-note {
|
||||
margin-top: 0.5rem;
|
||||
padding: 0.5rem 0.75rem;
|
||||
background: var(--sl-color-accent-low);
|
||||
border-radius: 4px;
|
||||
font-size: 0.85rem;
|
||||
color: var(--sl-color-gray-1);
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.cal-step-note strong {
|
||||
color: var(--sl-color-accent);
|
||||
}
|
||||
</style>
|
||||
73
src/components/CommandTable.astro
Normal file
@ -0,0 +1,73 @@
|
||||
---
|
||||
interface Command {
|
||||
name: string;
|
||||
syntax: string;
|
||||
description: string;
|
||||
}
|
||||
|
||||
interface Props {
|
||||
commands: Command[];
|
||||
}
|
||||
|
||||
const { commands } = Astro.props;
|
||||
---
|
||||
|
||||
<div class="command-table-wrapper">
|
||||
<table class="command-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Command</th>
|
||||
<th>Syntax</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{commands.map((cmd) => (
|
||||
<tr>
|
||||
<td><code>{cmd.name}</code></td>
|
||||
<td><code>{cmd.syntax}</code></td>
|
||||
<td>{cmd.description}</td>
|
||||
</tr>
|
||||
))}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
.command-table-wrapper {
|
||||
overflow-x: auto;
|
||||
margin: 1rem 0;
|
||||
}
|
||||
|
||||
.command-table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
.command-table th {
|
||||
background: var(--sl-color-gray-6);
|
||||
font-weight: 600;
|
||||
text-align: left;
|
||||
padding: 0.6rem 0.8rem;
|
||||
border-bottom: 2px solid var(--sl-color-gray-5);
|
||||
}
|
||||
|
||||
.command-table td {
|
||||
padding: 0.5rem 0.8rem;
|
||||
border-bottom: 1px solid var(--sl-color-gray-5);
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.command-table tr:hover {
|
||||
background: var(--sl-color-gray-7);
|
||||
}
|
||||
|
||||
.command-table code {
|
||||
font-size: 0.85em;
|
||||
background: var(--sl-color-bg-inline-code);
|
||||
padding: 0.1em 0.3em;
|
||||
border-radius: 3px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
</style>
|
||||
96
src/components/MenuTree.astro
Normal file
@ -0,0 +1,96 @@
|
||||
---
|
||||
interface MenuItem {
|
||||
label: string;
|
||||
children?: MenuItem[];
|
||||
description?: string;
|
||||
}
|
||||
|
||||
interface Props {
|
||||
items: MenuItem[];
|
||||
title?: string;
|
||||
}
|
||||
|
||||
const { items, title } = Astro.props;
|
||||
---
|
||||
|
||||
{title && <h4 class="menu-tree-title">{title}</h4>}
|
||||
<ul class="menu-tree">
|
||||
{items.map((item) => (
|
||||
<li class="menu-tree-item">
|
||||
<span class="menu-tree-label">{item.label}</span>
|
||||
{item.description && <span class="menu-tree-desc"> — {item.description}</span>}
|
||||
{item.children && item.children.length > 0 && (
|
||||
<ul class="menu-tree">
|
||||
{item.children.map((child) => (
|
||||
<li class="menu-tree-item">
|
||||
<span class="menu-tree-label">{child.label}</span>
|
||||
{child.description && <span class="menu-tree-desc"> — {child.description}</span>}
|
||||
{child.children && child.children.length > 0 && (
|
||||
<ul class="menu-tree">
|
||||
{child.children.map((grandchild) => (
|
||||
<li class="menu-tree-item">
|
||||
<span class="menu-tree-label">{grandchild.label}</span>
|
||||
{grandchild.description && <span class="menu-tree-desc"> — {grandchild.description}</span>}
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
)}
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
)}
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
|
||||
<style>
|
||||
.menu-tree-title {
|
||||
margin: 1.5rem 0 0.5rem;
|
||||
color: var(--sl-color-white);
|
||||
}
|
||||
|
||||
.menu-tree {
|
||||
list-style: none;
|
||||
padding-left: 1.5rem;
|
||||
margin: 0.25rem 0;
|
||||
border-left: 1px solid var(--sl-color-gray-5);
|
||||
}
|
||||
|
||||
.menu-tree:first-child {
|
||||
padding-left: 0;
|
||||
border-left: none;
|
||||
}
|
||||
|
||||
.menu-tree-item {
|
||||
position: relative;
|
||||
padding: 0.2rem 0;
|
||||
}
|
||||
|
||||
.menu-tree-item::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
left: -1.5rem;
|
||||
top: 0.75em;
|
||||
width: 1rem;
|
||||
border-bottom: 1px solid var(--sl-color-gray-5);
|
||||
}
|
||||
|
||||
:first-child > .menu-tree-item::before {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.menu-tree-label {
|
||||
font-family: var(--sl-font-mono);
|
||||
font-size: 0.85em;
|
||||
background: var(--sl-color-bg-inline-code);
|
||||
padding: 0.1em 0.4em;
|
||||
border-radius: 3px;
|
||||
color: var(--sl-color-accent);
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.menu-tree-desc {
|
||||
font-size: 0.85em;
|
||||
color: var(--sl-color-gray-2);
|
||||
}
|
||||
</style>
|
||||
74
src/components/ScreenRegion.astro
Normal file
@ -0,0 +1,74 @@
|
||||
---
|
||||
interface Region {
|
||||
number: number;
|
||||
name: string;
|
||||
description: string;
|
||||
}
|
||||
|
||||
interface Props {
|
||||
regions: Region[];
|
||||
}
|
||||
|
||||
const { regions } = Astro.props;
|
||||
---
|
||||
|
||||
<div class="screen-regions">
|
||||
{regions.map((region) => (
|
||||
<div class="screen-region">
|
||||
<span class="region-number">{region.number}</span>
|
||||
<div class="region-content">
|
||||
<strong class="region-name">{region.name}</strong>
|
||||
<p class="region-desc">{region.description}</p>
|
||||
</div>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
|
||||
<style>
|
||||
.screen-regions {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 0.75rem;
|
||||
margin: 1.5rem 0;
|
||||
}
|
||||
|
||||
.screen-region {
|
||||
display: flex;
|
||||
gap: 0.75rem;
|
||||
align-items: flex-start;
|
||||
padding: 0.75rem;
|
||||
background: var(--sl-color-gray-7);
|
||||
border-radius: 6px;
|
||||
border-left: 3px solid var(--sl-color-accent);
|
||||
}
|
||||
|
||||
.region-number {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
min-width: 2rem;
|
||||
height: 2rem;
|
||||
background: var(--sl-color-accent);
|
||||
color: var(--sl-color-black);
|
||||
border-radius: 50%;
|
||||
font-weight: 700;
|
||||
font-size: 0.85rem;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.region-content {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.region-name {
|
||||
color: var(--sl-color-white);
|
||||
font-size: 0.95rem;
|
||||
}
|
||||
|
||||
.region-desc {
|
||||
margin: 0.25rem 0 0;
|
||||
font-size: 0.85rem;
|
||||
color: var(--sl-color-gray-2);
|
||||
line-height: 1.5;
|
||||
}
|
||||
</style>
|
||||
33
src/components/SpecCard.astro
Normal file
@ -0,0 +1,33 @@
|
||||
---
|
||||
interface Spec {
|
||||
value: string;
|
||||
unit?: string;
|
||||
label: string;
|
||||
}
|
||||
|
||||
interface Props {
|
||||
specs: Spec[];
|
||||
}
|
||||
|
||||
const { specs } = Astro.props;
|
||||
---
|
||||
|
||||
<div class="spec-grid">
|
||||
{specs.map((spec) => (
|
||||
<div class="spec-card">
|
||||
<span class="spec-value">
|
||||
{spec.value}
|
||||
{spec.unit && <span class="spec-unit">{spec.unit}</span>}
|
||||
</span>
|
||||
<span class="spec-label">{spec.label}</span>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
|
||||
<style>
|
||||
.spec-unit {
|
||||
font-size: 0.6em;
|
||||
font-weight: 400;
|
||||
opacity: 0.8;
|
||||
}
|
||||
</style>
|
||||
7
src/content.config.ts
Normal file
@ -0,0 +1,7 @@
|
||||
import { defineCollection } from 'astro:content';
|
||||
import { docsLoader } from '@astrojs/starlight/loaders';
|
||||
import { docsSchema } from '@astrojs/starlight/schema';
|
||||
|
||||
export const collections = {
|
||||
docs: defineCollection({ loader: docsLoader(), schema: docsSchema() }),
|
||||
};
|
||||
118
src/content/docs/getting-started/hardware.mdx
Normal file
@ -0,0 +1,118 @@
|
||||
---
|
||||
title: Hardware Overview
|
||||
description: Physical layout, ports, connectors, and controls of the NanoVNA-F V3
|
||||
---
|
||||
|
||||
import { Aside, Tabs, TabItem } from '@astrojs/starlight/components';
|
||||
import frontView from '../../../assets/screenshots/front-view.png';
|
||||
import portsConnectors from '../../../assets/screenshots/ports-connectors.png';
|
||||
|
||||
This page covers the physical design of the NanoVNA-F V3 -- what each port does, how the buttons work, and what the LEDs are telling you.
|
||||
|
||||
## Front panel
|
||||
|
||||
<img src={frontView.src} alt="NanoVNA-F V3 front panel showing the display and physical buttons" style="max-width: 640px; width: 100%; border-radius: 8px; margin: 1.5rem 0;" />
|
||||
|
||||
The front panel is dominated by the **4.3-inch IPS display** (800 x 480 pixels). The screen uses a resistive touch panel, which means it responds to pressure rather than capacitance -- you can operate it with a fingertip, a stylus, or while wearing gloves.
|
||||
|
||||
Below the display sit three physical buttons. These provide an alternative to touch navigation and are particularly useful when precision tapping is difficult, such as in cold weather or when wearing gloves.
|
||||
|
||||
### Physical buttons
|
||||
|
||||
| Button | Location | Function |
|
||||
|--------|----------|----------|
|
||||
| **Left** | Leftmost | Power on (long press) / Power off (long press). Also acts as a navigation shortcut. |
|
||||
| **Center** | Middle | Push lever: rotary-style navigation. Push to confirm/select. Short press to enter the menu or confirm a selection. |
|
||||
| **Right** | Rightmost | Back / Cancel. Returns to the previous menu level or dismisses the current dialog. |
|
||||
|
||||
The center button behaves like a push-lever with left/right/up/down directional input, giving you full menu navigation without ever touching the screen. This is the same interaction model used by many bench instruments.
|
||||
|
||||
<Aside type="tip">
|
||||
The center push-lever button is the fastest way to navigate menus once you learn the layout. Push it inward to select, and tilt it in any direction to move between menu items.
|
||||
</Aside>
|
||||
|
||||
## Ports and connectors
|
||||
|
||||
<img src={portsConnectors.src} alt="NanoVNA-F V3 connector layout showing all ports" style="max-width: 640px; width: 100%; border-radius: 8px; margin: 1.5rem 0;" />
|
||||
|
||||
### RF ports
|
||||
|
||||
The two SMA female connectors on the top edge of the device carry the RF signals.
|
||||
|
||||
| Port | Label | Function |
|
||||
|------|-------|----------|
|
||||
| **PORT1** | CH0 | Stimulus output. Also measures reflected signals (S11). Connect your DUT or the calibration standard here for reflection measurements. |
|
||||
| **PORT2** | CH1 | Receives transmitted signals (S21). Connect the output side of a two-port DUT here. |
|
||||
|
||||
<Aside type="caution">
|
||||
The SMA connectors on the device are soldered directly to the internal board. Always finger-tighten cables onto the device ports. Use a torque wrench only on the cable-side connectors, never on the device itself. Over-torquing can damage the internal connections.
|
||||
</Aside>
|
||||
|
||||
**RF output power** is -10 dBm maximum. This is low enough to be safe for most passive components but should not be connected directly to the input of sensitive low-noise amplifiers without appropriate protection.
|
||||
|
||||
### Data and power ports
|
||||
|
||||
| Port | Type | Function |
|
||||
|------|------|----------|
|
||||
| **USB Type-C** | Data + Charging | Connects to a PC for remote control, data transfer, and firmware upgrades. Also charges the internal battery (4.7 -- 5.5 V input). |
|
||||
| **USB-A** | Power output | Provides 5 V / 1 A power output. Useful for powering small accessories, preamps, or a USB light. |
|
||||
|
||||
The USB Type-C port supports a virtual COM port for PC software (NanoVNA-Saver, NanoVNA-QT, etc.) and a virtual U-disk interface for firmware upgrades.
|
||||
|
||||
### Power button
|
||||
|
||||
The power button is the leftmost of the three physical buttons on the front panel. Long-press (about 2 seconds) to power on or off. A short press during operation functions as a navigation shortcut.
|
||||
|
||||
## LED indicators
|
||||
|
||||
Two LEDs on the device body indicate charging and operating state. The exact behavior depends on whether the device is powered on and whether USB power is connected.
|
||||
|
||||
| State | Red LED | Blue LED |
|
||||
|-------|---------|----------|
|
||||
| **Fully charged** (USB connected, device off) | OFF | ON (solid) |
|
||||
| **Working** (no USB, device on) | OFF | OFF |
|
||||
| **Low battery** (no USB, device on) | OFF | ON (solid) |
|
||||
| **Charging** (USB connected, device off) | ON (solid) | FLASH |
|
||||
| **Charging + Working** (USB connected, device on) | FLASH | OFF |
|
||||
|
||||
<Aside type="note">
|
||||
When the battery is critically low, the device may shut down to protect the cell. If the unit will not power on, connect USB power and wait a few minutes before trying again.
|
||||
</Aside>
|
||||
|
||||
## Case and build
|
||||
|
||||
The NanoVNA-F V3 uses an **aluminum alloy case** that serves double duty as structural protection and RF shielding. The metal construction keeps the internals isolated from external interference and provides a solid, confidence-inspiring feel in the hand.
|
||||
|
||||
**Dimensions:** 130 x 75 x 22 mm -- roughly the size of a large smartphone, and easy to slip into a tool bag or jacket pocket.
|
||||
|
||||
**Operating temperature:** 0 C to 45 C. Avoid leaving the device in direct sunlight or in a hot vehicle for extended periods -- the battery and display are the limiting factors.
|
||||
|
||||
**Weight:** Light enough for one-handed operation but substantial enough to sit stable on a bench.
|
||||
|
||||
## SMA connectors and cable care
|
||||
|
||||
SMA connectors are precision RF interfaces rated to at least 18 GHz. The NanoVNA-F V3 uses standard SMA female (jack) connectors on both ports.
|
||||
|
||||
A few practices will keep your connectors in good condition:
|
||||
|
||||
- **Align before tightening.** Push the connector straight on and start threading by hand. If it resists, back off and realign rather than forcing.
|
||||
- **Finger-tight on the device.** Only apply torque to the cable-side nut, never the device-side connector body.
|
||||
- **Keep connectors clean.** Dust, skin oils, and corrosion degrade the contact surfaces. A lint-free wipe with isopropyl alcohol works well for routine cleaning.
|
||||
- **Use connector savers** for bench setups where you frequently connect and disconnect. A short SMA barrel adapter on each port takes the wear instead of the device connectors.
|
||||
- **Store with caps.** When not in use, put the SMA dust caps back on the ports to protect the center pins and mating surfaces.
|
||||
|
||||
## Included accessories
|
||||
|
||||
| Item | Quantity | Notes |
|
||||
|------|----------|-------|
|
||||
| SMA calibration kit | 1 set | Open, Short, and 50-ohm Load standards |
|
||||
| SMA-JJ RG405 cable | 2 | 20 cm semi-rigid, excellent phase stability |
|
||||
| USB Type-C cable | 1 | Data and charging |
|
||||
|
||||
<Aside type="tip">
|
||||
The included RG405 cables have semi-rigid construction for stable, repeatable measurements. For longer cable runs to a DUT (antenna mast work, for example), use quality flexible cables and always recalibrate with the actual cables you will be measuring through.
|
||||
</Aside>
|
||||
|
||||
---
|
||||
|
||||
Next: learn the fundamentals of vector network analysis in [VNA Basics](/getting-started/vna-basics/).
|
||||
89
src/content/docs/getting-started/overview.mdx
Normal file
@ -0,0 +1,89 @@
|
||||
---
|
||||
title: What is NanoVNA-F V3?
|
||||
description: Overview of the NanoVNA-F V3 portable vector network analyzer
|
||||
---
|
||||
|
||||
import { Aside, Badge } from '@astrojs/starlight/components';
|
||||
import SpecCard from '../../../components/SpecCard.astro';
|
||||
import frontView from '../../../assets/screenshots/front-view.png';
|
||||
import portsConnectors from '../../../assets/screenshots/ports-connectors.png';
|
||||
|
||||
The **NanoVNA-F V3** is a portable, dual-port vector network analyzer (VNA) covering **1 MHz to 6 GHz**. It measures how RF signals reflect from and transmit through electrical components -- antennas, filters, cables, amplifiers, and anything else with an RF connector.
|
||||
|
||||
If you have ever needed to verify that an antenna is resonant on frequency, check the passband of a filter, or find a fault in a coaxial cable, this is the instrument for the job.
|
||||
|
||||
<img src={frontView.src} alt="NanoVNA-F V3 front panel showing the 4.3-inch IPS display and three physical buttons" style="max-width: 640px; width: 100%; border-radius: 8px; margin: 1.5rem 0;" />
|
||||
|
||||
## At a glance
|
||||
|
||||
<SpecCard specs={[
|
||||
{ value: "1 MHz", unit: " -- 6 GHz", label: "Frequency Range" },
|
||||
{ value: "65", unit: " dB", label: "S21 Dynamic Range" },
|
||||
{ value: "4.3\"", unit: " IPS", label: "Display" },
|
||||
{ value: "4500", unit: " mAh", label: "Battery" },
|
||||
{ value: "801", unit: " pts", label: "Max Sweep Points" },
|
||||
{ value: "200", unit: " pts/s", label: "Scan Speed" },
|
||||
]} />
|
||||
|
||||
## Key features
|
||||
|
||||
**Broad frequency coverage.** The 1 MHz -- 6 GHz range spans MF through SHF, covering HF, VHF, UHF, and the lower microwave bands. That means one device handles everything from 160-meter dipoles to 5 GHz Wi-Fi antennas.
|
||||
|
||||
**Dual-port measurement.** PORT1 measures reflected signals (S11) and PORT2 measures transmitted signals (S21). Swap the DUT connections to get S22 and S12 when needed.
|
||||
|
||||
**Solid dynamic range.** S21 dynamic range reaches 65 dB below 3 GHz and 60 dB above it. S11 dynamic range is 50 dB below 3 GHz and 40 dB above. These figures are more than adequate for most amateur radio and general RF bench work.
|
||||
|
||||
**Metal construction.** The aluminum alloy case provides shielding and durability. SMA connectors give reliable, repeatable connections across the full frequency range.
|
||||
|
||||
**Readable display.** The 4.3-inch IPS panel (800 x 480) shows up to four simultaneous traces with enough resolution to actually read the data. A resistive touch panel and three physical buttons handle navigation.
|
||||
|
||||
**All-day battery.** The 4500 mAh battery delivers roughly five hours of continuous use. Charging is via USB Type-C (4.7 -- 5.5 V). A USB-A port on the side provides 5 V / 1 A power output for accessories.
|
||||
|
||||
**Advanced features.** Up to 801 configurable sweep points, TDR mode for cable fault location, four markers with search functions, and 12 calibration save slots.
|
||||
|
||||
## What's in the box
|
||||
|
||||
- NanoVNA-F V3 device
|
||||
- SMA calibration kit (Open, Short, Load standards)
|
||||
- 2x 20 cm SMA-JJ RG405 semi-rigid cables
|
||||
- USB Type-C data/charging cable
|
||||
|
||||
<Aside type="tip">
|
||||
The included RG405 cables are semi-rigid and maintain stable phase characteristics. Use them for calibration and measurement whenever possible -- the quality of your cables directly affects measurement accuracy.
|
||||
</Aside>
|
||||
|
||||
## Ports and connectors
|
||||
|
||||
<img src={portsConnectors.src} alt="NanoVNA-F V3 ports and connectors showing PORT1, PORT2, USB Type-C, and USB-A" style="max-width: 640px; width: 100%; border-radius: 8px; margin: 1.5rem 0;" />
|
||||
|
||||
| Port | Purpose |
|
||||
|------|---------|
|
||||
| **PORT1** (SMA) | Stimulus output and S11 reflection measurement |
|
||||
| **PORT2** (SMA) | S21 transmission measurement |
|
||||
| **USB Type-C** | Charging, PC data connection, firmware upgrade |
|
||||
| **USB-A** | 5 V / 1 A power output for accessories |
|
||||
|
||||
## Who is this for?
|
||||
|
||||
The NanoVNA-F V3 fits into several workflows:
|
||||
|
||||
- **Ham radio operators** tuning and verifying antennas across HF, VHF, and UHF bands
|
||||
- **RF engineers and technicians** doing bench work on filters, amplifiers, and matching networks
|
||||
- **Electronics hobbyists** learning about RF, impedance matching, and transmission line theory
|
||||
- **Field service technicians** who need a portable instrument for cable testing and site surveys
|
||||
|
||||
## Typical use cases
|
||||
|
||||
**Antenna work.** Measure SWR, return loss, and impedance across the operating band. Adjust antenna length, matching, and feed arrangements while watching the results in real time.
|
||||
|
||||
**Filter characterization.** Measure insertion loss, passband shape, and rejection across frequency. Verify filter performance against specifications or tune homebrew designs.
|
||||
|
||||
**Cable testing.** Check cable loss, locate faults with TDR mode, and verify connector integrity. Measure cable length using velocity factor and time-domain analysis.
|
||||
|
||||
**Amplifier and attenuator testing.** Measure gain or loss (S21) and input/output match (S11, S22) across the operating frequency range.
|
||||
|
||||
**Component matching.** Use the Smith chart to visualize impedance and design matching networks for power amplifier inputs, antenna feeds, and other impedance-critical circuits.
|
||||
|
||||
---
|
||||
|
||||
Ready to get started? Head to the [Quick Start Guide](/getting-started/quick-start/) to power on and take your first measurement.
|
||||
112
src/content/docs/getting-started/quick-start.mdx
Normal file
@ -0,0 +1,112 @@
|
||||
---
|
||||
title: Quick Start Guide
|
||||
description: Get up and running with your NanoVNA-F V3 in minutes
|
||||
---
|
||||
|
||||
import { Aside, Steps } from '@astrojs/starlight/components';
|
||||
import ScreenRegion from '../../../components/ScreenRegion.astro';
|
||||
import mainScreen from '../../../assets/screenshots/main-screen-labeled.png';
|
||||
|
||||
This guide walks you from unboxing to your first measurement. The whole process takes about ten minutes, most of which is calibration.
|
||||
|
||||
## Charge the battery
|
||||
|
||||
<Steps>
|
||||
|
||||
1. **Connect USB Type-C.** Plug the included cable into the USB-C port on the top edge of the device. Use a standard 5 V USB charger (4.7 -- 5.5 V).
|
||||
|
||||
2. **Watch the LED.** The red LED illuminates and the blue LED flashes during charging. When the battery is full, the red LED turns off and the blue LED stays on solid.
|
||||
|
||||
3. **Wait for a full charge.** A depleted battery takes a few hours to reach full capacity. The 4500 mAh cell provides roughly five hours of continuous use.
|
||||
|
||||
</Steps>
|
||||
|
||||
<Aside type="note">
|
||||
You can use the device while it charges. The red LED will flash and the blue LED turns off when the unit is both charging and operating.
|
||||
</Aside>
|
||||
|
||||
## Power on
|
||||
|
||||
<Steps>
|
||||
|
||||
1. **Long-press the power button.** Hold the leftmost physical button for about two seconds. The display shows a boot splash, then the main sweep screen appears.
|
||||
|
||||
2. **Check the battery icon.** The battery indicator in the top-right area of the screen shows remaining charge. If it is very low, charge before calibrating.
|
||||
|
||||
</Steps>
|
||||
|
||||
## Understand the main screen
|
||||
|
||||
The main display is divided into distinct regions. Getting familiar with these helps you read measurements quickly.
|
||||
|
||||
<img src={mainScreen.src} alt="NanoVNA-F V3 main screen with labeled regions" style="max-width: 720px; width: 100%; border-radius: 8px; margin: 1.5rem 0;" />
|
||||
|
||||
<ScreenRegion regions={[
|
||||
{ number: 1, name: "Title Area", description: "Shows the currently active channel (CH0 or CH1), stimulus settings, and trace labels." },
|
||||
{ number: 2, name: "Menu Touch Area", description: "Tap here to open the navigation menu. Gives access to stimulus, calibration, display, marker, and configuration settings." },
|
||||
{ number: 3, name: "Reference Line", description: "The horizontal reference line for each trace. Its position corresponds to the reference value shown in the scale area." },
|
||||
{ number: 4, name: "Trace Data Area", description: "The main plotting region where S11 and S21 traces are drawn across the frequency span." },
|
||||
{ number: 5, name: "Marker Readout", description: "Displays the frequency and measured value for each active marker." },
|
||||
{ number: 6, name: "Frequency Axis", description: "The horizontal axis showing start, center, and stop frequencies of the current sweep." },
|
||||
{ number: 7, name: "Scale / Division", description: "Shows the vertical scale per division and reference value for each trace." },
|
||||
{ number: 8, name: "Calibration Status", description: "Indicates calibration state: C0--C6 codes show which calibration steps have been applied." },
|
||||
{ number: 9, name: "Battery Indicator", description: "Battery charge level and charging state icon." },
|
||||
{ number: 10, name: "Marker Indicators", description: "Numbered markers positioned along the trace at their set frequencies." },
|
||||
{ number: 11, name: "Status Bar", description: "Shows sweep progress, averaging count, and other operational status." },
|
||||
]} />
|
||||
|
||||
## Connect the calibration standards
|
||||
|
||||
Before any measurement is meaningful, you need to calibrate. Calibration removes systematic errors from the cables, connectors, and instrument internals.
|
||||
|
||||
<Steps>
|
||||
|
||||
1. **Attach cables to both ports.** Connect the included SMA-JJ RG405 cables to PORT1 and PORT2. Finger-tighten the SMA connectors -- do not use a wrench on the device ports.
|
||||
|
||||
2. **Set the frequency range.** Tap the menu area, navigate to **STIMULUS**, and set the start and stop frequencies for your measurement. For a first test, try 1 MHz to 900 MHz.
|
||||
|
||||
3. **Open the calibration menu.** Navigate to **CAL** > **CALIBRATE** in the menu system.
|
||||
|
||||
4. **Perform OPEN calibration.** Leave the free end of the PORT1 cable disconnected (or attach the Open standard from the cal kit). Select **OPEN** in the calibration menu and wait for the sweep to complete.
|
||||
|
||||
5. **Perform SHORT calibration.** Attach the Short standard to the PORT1 cable. Select **SHORT** and wait for the sweep.
|
||||
|
||||
6. **Perform LOAD calibration.** Attach the 50-ohm Load standard to the PORT1 cable. Select **LOAD** and wait for the sweep.
|
||||
|
||||
7. **Perform THRU calibration.** Connect the free ends of the PORT1 and PORT2 cables directly together. Select **THRU** and wait for the sweep.
|
||||
|
||||
8. **Perform ISOLATION calibration (optional).** With the Load standard on PORT1 and nothing on PORT2 (or a second Load if available), select **ISOLN**. This step is optional but improves S21 accuracy at low signal levels.
|
||||
|
||||
9. **Apply and save.** Select **DONE** to apply the calibration. Then save it to one of the 12 storage slots via **CAL** > **SAVE** so you can recall it later.
|
||||
|
||||
</Steps>
|
||||
|
||||
<Aside type="caution">
|
||||
Calibration is only valid for the specific frequency range, number of sweep points, and cables used during the calibration process. If you change any of these, recalibrate.
|
||||
</Aside>
|
||||
|
||||
## Make your first measurement
|
||||
|
||||
With calibration done, you are ready to measure a device.
|
||||
|
||||
<Steps>
|
||||
|
||||
1. **Connect the DUT.** For a reflection measurement (S11), connect your device under test -- an antenna, for example -- to the free end of the PORT1 cable. For a transmission measurement (S21), connect the DUT between the PORT1 and PORT2 cables.
|
||||
|
||||
2. **Read the traces.** The default traces typically show return loss (S11 in LogMag) and phase. Look for the frequency where return loss is deepest -- that is the resonant point of an antenna, or the center frequency of a filter.
|
||||
|
||||
3. **Place a marker.** Tap on the trace to drop a marker, or use **MARKER** > **SELECT MARKER** to activate one and set its frequency. The marker readout area at the top of the screen displays the exact frequency and measured value.
|
||||
|
||||
4. **Adjust the view.** Use **DISPLAY** > **SCALE** to zoom in on regions of interest. Change the display format (LogMag, SWR, Smith chart, etc.) via **DISPLAY** > **FORMAT** to see the data in different ways.
|
||||
|
||||
</Steps>
|
||||
|
||||
<Aside type="tip">
|
||||
If the trace looks noisy or the calibration status shows unexpected codes, go back and recalibrate. A clean calibration is the foundation of every good measurement.
|
||||
</Aside>
|
||||
|
||||
## Next steps
|
||||
|
||||
- **[Hardware Overview](/getting-started/hardware/)** -- Learn about the physical controls, ports, and LED indicators in detail.
|
||||
- **[VNA Basics](/getting-started/vna-basics/)** -- Understand S-parameters, calibration theory, and what the numbers actually mean.
|
||||
- **[Full Calibration Tutorial](/tutorials/calibration/full-calibration/)** -- A thorough walkthrough of all calibration methods and best practices.
|
||||
175
src/content/docs/getting-started/vna-basics.mdx
Normal file
@ -0,0 +1,175 @@
|
||||
---
|
||||
title: VNA Basics
|
||||
description: Fundamental concepts of vector network analysis
|
||||
---
|
||||
|
||||
import { Aside, Tabs, TabItem } from '@astrojs/starlight/components';
|
||||
import vnaNetworkDiagram from '../../../assets/screenshots/vna-network-diagram.png';
|
||||
|
||||
Before diving into measurements, it helps to understand what a VNA actually does and what the numbers on screen mean. This page covers the core concepts without assuming prior RF knowledge.
|
||||
|
||||
## What is a vector network analyzer?
|
||||
|
||||
A VNA is a test instrument that measures how an electrical component or circuit responds to RF signals across a range of frequencies. The "vector" part means it captures both **magnitude** (how much signal) and **phase** (the timing relationship of the signal) -- not just one or the other.
|
||||
|
||||
This is what distinguishes a VNA from simpler instruments:
|
||||
|
||||
- A **scalar network analyzer** or **SWR meter** measures only magnitude. It can tell you how much signal is reflected, but not the phase.
|
||||
- A **spectrum analyzer** measures signal power at each frequency, but it does not inject a known stimulus.
|
||||
- A **VNA** does both: it sends a known signal into the device under test and measures what comes back (or passes through), capturing the full complex response.
|
||||
|
||||
That complex response -- magnitude and phase together -- is what lets you compute impedance, plot on a Smith chart, and design matching networks. Without phase information, you know *how much* signal is reflected but not *why*, which severely limits what you can do with the data.
|
||||
|
||||
## The word "network"
|
||||
|
||||
In RF engineering, "network" means an electrical circuit or component -- not a computer network. A filter is a network. An antenna is a network. A length of coaxial cable is a network. The name "network analyzer" simply means "circuit analyzer."
|
||||
|
||||
## S-parameters
|
||||
|
||||
S-parameters (scattering parameters) are the standard way to describe how an RF network behaves. They quantify how much signal is reflected and how much passes through at each frequency.
|
||||
|
||||
For a two-port network (a device with an input and an output), there are four S-parameters:
|
||||
|
||||
<img src={vnaNetworkDiagram.src} alt="Two-port network diagram showing S11, S21, S12, and S22 signal paths" style="max-width: 600px; width: 100%; border-radius: 8px; margin: 1.5rem 0;" />
|
||||
|
||||
| Parameter | Direction | What it measures |
|
||||
|-----------|-----------|-----------------|
|
||||
| **S11** | Port 1 to Port 1 | Input reflection coefficient. How much of the signal sent into Port 1 bounces back. |
|
||||
| **S21** | Port 1 to Port 2 | Forward transmission coefficient. How much of the signal sent into Port 1 passes through to Port 2. |
|
||||
| **S12** | Port 2 to Port 1 | Reverse transmission coefficient. How much signal passes from Port 2 back to Port 1. |
|
||||
| **S22** | Port 2 to Port 2 | Output reflection coefficient. How much signal sent into Port 2 bounces back. |
|
||||
|
||||
The NanoVNA-F V3 directly measures **S11** and **S21**. To measure S22 and S12, swap the DUT connections between the two ports and measure again.
|
||||
|
||||
### Reading S-parameter notation
|
||||
|
||||
The two digits in "S21" tell you the signal path: the first digit is the *receiving* port, the second is the *sending* port. So S21 means "signal received at port 2, sent from port 1" -- in other words, forward transmission.
|
||||
|
||||
## S11: Reflection
|
||||
|
||||
S11 tells you what fraction of the signal bounces back from the device under test. It is the primary measurement for:
|
||||
|
||||
- **Antenna tuning.** A well-matched antenna at its resonant frequency absorbs most of the transmitted power and reflects very little. S11 shows you where that resonance occurs and how well-matched it is.
|
||||
- **Impedance matching.** Any point where impedance changes -- a connector, a junction, a mismatch in a transmission line -- creates a reflection. S11 quantifies that reflection.
|
||||
- **Return loss.** When expressed in decibels (dB), S11 is called return loss. A return loss of -20 dB means only 1% of the power is reflected -- a very good match.
|
||||
|
||||
### S11 display formats
|
||||
|
||||
The same S11 data can be displayed in several formats, each useful for different purposes:
|
||||
|
||||
<Tabs>
|
||||
<TabItem label="LogMag (Return Loss)">
|
||||
Plots the reflection magnitude in decibels versus frequency. This is the most common view for antenna work. The deeper the dip, the better the match at that frequency.
|
||||
|
||||
**Typical values:**
|
||||
- -6 dB: acceptable for many applications (SWR ~3:1)
|
||||
- -10 dB: good match (SWR ~2:1)
|
||||
- -20 dB: excellent match (SWR ~1.2:1)
|
||||
- -30 dB or better: nearly perfect match
|
||||
</TabItem>
|
||||
<TabItem label="SWR">
|
||||
Standing Wave Ratio -- a dimensionless ratio derived from S11. Older ham radio convention, but still widely used.
|
||||
|
||||
**Typical values:**
|
||||
- 1.0:1 -- perfect match, no reflected power
|
||||
- 1.5:1 -- good match, ~4% reflected power
|
||||
- 2.0:1 -- acceptable for most transmitters, ~11% reflected power
|
||||
- 3.0:1 -- marginal, ~25% reflected power
|
||||
</TabItem>
|
||||
<TabItem label="Smith Chart">
|
||||
A specialized circular plot that shows impedance (resistance + reactance) at every frequency on a single diagram. Indispensable for matching network design.
|
||||
|
||||
The center of the Smith chart represents 50 ohms (the reference impedance). Points above center are inductive; points below are capacitive. Points to the left have less resistance than 50 ohms; points to the right have more.
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
## S21: Transmission
|
||||
|
||||
S21 tells you how much signal passes through the device under test from Port 1 to Port 2. It is the primary measurement for:
|
||||
|
||||
- **Filter characterization.** S21 shows the passband shape, insertion loss, and out-of-band rejection of a filter.
|
||||
- **Amplifier gain.** A positive S21 (in dB) means the device adds gain. A negative S21 means it attenuates.
|
||||
- **Cable loss.** Connect one end of a cable to each port. S21 shows the attenuation at each frequency.
|
||||
|
||||
### S21 display formats
|
||||
|
||||
<Tabs>
|
||||
<TabItem label="LogMag (Gain/Loss)">
|
||||
The most common view for transmission measurements. Displays gain or loss in decibels versus frequency.
|
||||
|
||||
- **0 dB** means the signal passes through unchanged.
|
||||
- **Positive values** indicate gain (amplifier).
|
||||
- **Negative values** indicate loss (cable, filter, attenuator).
|
||||
</TabItem>
|
||||
<TabItem label="Phase">
|
||||
Shows the phase shift introduced by the DUT at each frequency. Important for amplifier stability analysis and delay measurements.
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
## Single-port vs. two-port measurements
|
||||
|
||||
Some devices have only one RF port -- an antenna, for example. These are **single-port** measurements. You connect the DUT to PORT1 and measure S11 only.
|
||||
|
||||
Devices with an input and an output -- filters, amplifiers, cables -- are **two-port** devices. You connect one side to PORT1 and the other to PORT2, then measure both S11 (input match) and S21 (transmission).
|
||||
|
||||
| Measurement type | What to connect | S-parameters measured |
|
||||
|-----------------|----------------|----------------------|
|
||||
| Single-port (antenna, load) | DUT on PORT1 only | S11 |
|
||||
| Two-port (filter, cable, amp) | DUT between PORT1 and PORT2 | S11 and S21 |
|
||||
| Reverse two-port | DUT swapped (output on PORT1, input on PORT2) | S22 and S12 |
|
||||
|
||||
## Why calibration matters
|
||||
|
||||
Every measurement system introduces errors. The cables have loss. The connectors have small reflections. The instrument's internal circuits are not perfectly flat across the entire frequency range. These errors shift and distort your measurements.
|
||||
|
||||
**Calibration** characterizes those errors by measuring known standards -- devices whose electrical behavior is precisely defined:
|
||||
|
||||
- **Open** -- an unterminated connector (nearly total reflection, 0-degree phase)
|
||||
- **Short** -- a shorted connector (nearly total reflection, 180-degree phase)
|
||||
- **Load** -- a precision 50-ohm termination (minimal reflection)
|
||||
- **Thru** -- a direct connection between Port 1 and Port 2 (minimal loss, known delay)
|
||||
|
||||
By comparing the measured response of these standards against their known ideal values, the VNA builds a mathematical error model. That model is then subtracted from every subsequent measurement, leaving you with the response of the DUT alone.
|
||||
|
||||
<Aside type="caution">
|
||||
A calibration is only valid for the exact conditions under which it was performed: the same cables, the same frequency range, the same number of sweep points, and the same temperature. Change any of these and the error model no longer matches reality.
|
||||
</Aside>
|
||||
|
||||
### The calibration reference plane
|
||||
|
||||
Calibration defines the *reference plane* -- the physical point at which the measurement begins. When you calibrate at the ends of your cables, the reference plane is at those cable ends. Everything between the VNA ports and the reference plane is "calibrated out" and will not appear in the measurement.
|
||||
|
||||
This is why it is important to calibrate with the exact cables you will use for the measurement. If you calibrate with short cables and then add an extension, that extension becomes part of the measured network.
|
||||
|
||||
## Common devices under test
|
||||
|
||||
| DUT | Primary measurement | What to look for |
|
||||
|-----|-------------------|-----------------|
|
||||
| **Antenna** | S11 (return loss, SWR, impedance) | Resonant frequency, bandwidth, impedance at center frequency |
|
||||
| **Bandpass filter** | S21 (insertion loss, shape) and S11 (input match) | Center frequency, 3 dB bandwidth, passband ripple, stopband rejection |
|
||||
| **Low-pass / high-pass filter** | S21 and S11 | Cutoff frequency, rolloff rate, passband flatness |
|
||||
| **Coaxial cable** | S21 (loss) and S11 (reflections) | Loss per length at frequency, connector quality, fault location (TDR) |
|
||||
| **Amplifier** | S21 (gain) and S11 (input match) | Gain flatness, gain at specific frequencies, input return loss |
|
||||
| **Attenuator** | S21 (attenuation) and S11 (match) | Attenuation accuracy, flatness, match quality |
|
||||
| **Crystal / ceramic filter** | S21 (passband) | Center frequency, bandwidth, insertion loss, shape factor |
|
||||
|
||||
## Decibels: a quick reference
|
||||
|
||||
S-parameters are almost always expressed in decibels (dB). Decibels are a logarithmic ratio, which compresses large ranges into manageable numbers.
|
||||
|
||||
| Power ratio | dB value | What it means |
|
||||
|------------|----------|---------------|
|
||||
| 1 (no change) | 0 dB | Signal is unchanged |
|
||||
| 2 (doubled) | +3 dB | Signal doubled in power |
|
||||
| 10 | +10 dB | 10x power increase |
|
||||
| 100 | +20 dB | 100x power increase |
|
||||
| 0.5 (halved) | -3 dB | Signal halved in power |
|
||||
| 0.1 | -10 dB | 10x power reduction |
|
||||
| 0.01 | -20 dB | 100x power reduction |
|
||||
| 0.001 | -30 dB | 1000x power reduction |
|
||||
|
||||
For S11 (reflection), more negative is better -- it means less signal is bouncing back. For S21 (transmission through a passive device), values closer to 0 dB mean less loss.
|
||||
|
||||
---
|
||||
|
||||
With these fundamentals in place, you are ready to start making measurements. Head to [Your First S11 Measurement](/tutorials/first-measurements/first-s11/) for a hands-on walkthrough.
|
||||
45
src/content/docs/how-to/configuration/datetime-average.mdx
Normal file
@ -0,0 +1,45 @@
|
||||
---
|
||||
title: Date/Time & Average
|
||||
description: Set the real-time clock and averaging
|
||||
---
|
||||
|
||||
import { Aside, Steps } from '@astrojs/starlight/components';
|
||||
import configMenu from '../../../../assets/screenshots/config-menu.png';
|
||||
|
||||
<img src={configMenu.src} alt="Configuration menu showing available settings" />
|
||||
|
||||
## Set the date and time
|
||||
|
||||
The NanoVNA-F V3 has a real-time clock used for timestamping saved files.
|
||||
|
||||
<Steps>
|
||||
1. Tap <span class="menu-path">CONFIG → DATE/TIME</span>.
|
||||
2. Enter the current date using the on-screen keypad.
|
||||
3. Tap **Ok** to confirm.
|
||||
4. Enter the current time.
|
||||
5. Tap **Ok** to confirm.
|
||||
</Steps>
|
||||
|
||||
<Aside>
|
||||
The real-time clock is battery-backed and maintains the time while the device is powered off. If the date/time resets after being powered off for an extended period, the internal battery may need attention.
|
||||
</Aside>
|
||||
|
||||
## Configure sweep averaging
|
||||
|
||||
Averaging reduces measurement noise by combining multiple sweeps. Higher averaging values produce smoother traces at the cost of slower update rates.
|
||||
|
||||
<Steps>
|
||||
1. Tap <span class="menu-path">CONFIG → AVERAGE</span>.
|
||||
2. Enter the number of sweeps to average.
|
||||
3. Tap **Ok** to confirm.
|
||||
</Steps>
|
||||
|
||||
Setting average to **1** disables averaging (each sweep displays independently). Higher values like **4** or **8** are useful when measuring low-level signals or when you need clean trace data for export.
|
||||
|
||||
<Aside type="tip">
|
||||
Start with no averaging for interactive tuning and exploration. Switch to averaging of 4 or higher when you need a clean, stable measurement for documentation or export.
|
||||
</Aside>
|
||||
|
||||
<Aside type="caution">
|
||||
Averaging slows the effective sweep rate proportionally. An average of 8 means the trace updates at one-eighth the normal speed. This makes real-time tuning sluggish, so disable averaging when making physical adjustments to your device under test.
|
||||
</Aside>
|
||||
87
src/content/docs/how-to/configuration/firmware-update.mdx
Normal file
@ -0,0 +1,87 @@
|
||||
---
|
||||
title: Firmware Update
|
||||
description: Upgrade firmware via USB virtual U-disk
|
||||
---
|
||||
|
||||
import { Aside, Steps } from '@astrojs/starlight/components';
|
||||
import firmwareUpgrade1 from '../../../../assets/screenshots/firmware-upgrade-1.png';
|
||||
import firmwareUpgrade2 from '../../../../assets/screenshots/firmware-upgrade-2.png';
|
||||
import firmwareUpgrade3 from '../../../../assets/screenshots/firmware-upgrade-3.png';
|
||||
import firmwareUpgrade4 from '../../../../assets/screenshots/firmware-upgrade-4.png';
|
||||
import firmwareUpgrade5 from '../../../../assets/screenshots/firmware-upgrade-5.png';
|
||||
import firmwareUpgrade6 from '../../../../assets/screenshots/firmware-upgrade-6.png';
|
||||
|
||||
Firmware updates add features, fix bugs, and improve measurement accuracy. The NanoVNA-F V3 uses a simple USB file-copy method -- no special flashing software is required.
|
||||
|
||||
## Download the firmware
|
||||
|
||||
<Steps>
|
||||
1. Visit the official firmware page at [sysjoint.com](https://www.sysjoint.com).
|
||||
2. Locate the latest firmware file for the NanoVNA-F V3.
|
||||
3. Download the file. It will be named **`update.bin`**.
|
||||
</Steps>
|
||||
|
||||
<img src={firmwareUpgrade1.src} alt="Firmware download page on sysjoint.com" />
|
||||
|
||||
<Aside type="caution">
|
||||
Only download firmware from the official sysjoint.com website. Third-party firmware files may damage your device or void your warranty.
|
||||
</Aside>
|
||||
|
||||
## Enter U-disk mode
|
||||
|
||||
<Steps>
|
||||
1. Connect the NanoVNA-F V3 to your computer via the **USB-C** cable.
|
||||
2. **Power off** the device if it is currently running.
|
||||
3. Hold the **middle button** and power on the device simultaneously.
|
||||
4. The device enters U-disk mode and appears as a removable USB drive on your computer.
|
||||
</Steps>
|
||||
|
||||
<img src={firmwareUpgrade2.src} alt="NanoVNA-F V3 connected via USB-C for U-disk mode" />
|
||||
|
||||
<img src={firmwareUpgrade3.src} alt="Device appearing as USB drive on computer" />
|
||||
|
||||
## Copy the firmware file
|
||||
|
||||
<Steps>
|
||||
1. Open the USB drive on your computer.
|
||||
2. Copy the **`update.bin`** file to the root of the USB drive.
|
||||
3. Wait for the file copy to complete fully.
|
||||
4. **Safely eject** the USB drive from your operating system.
|
||||
</Steps>
|
||||
|
||||
<img src={firmwareUpgrade4.src} alt="Copying update.bin to the USB drive" />
|
||||
|
||||
<img src={firmwareUpgrade5.src} alt="File copy in progress" />
|
||||
|
||||
<Aside type="caution">
|
||||
Do not disconnect the USB cable or power off the device while the file is being copied. Interrupting the transfer can leave the device in an unusable state.
|
||||
</Aside>
|
||||
|
||||
## Apply the update
|
||||
|
||||
<Steps>
|
||||
1. Disconnect the USB cable.
|
||||
2. Power off the NanoVNA-F V3.
|
||||
3. Power it back on normally (without holding any buttons).
|
||||
4. The device detects `update.bin` and applies the firmware update automatically.
|
||||
5. The update process takes a few seconds. The device restarts when finished.
|
||||
</Steps>
|
||||
|
||||
<img src={firmwareUpgrade6.src} alt="Firmware update complete" />
|
||||
|
||||
## Verify the update
|
||||
|
||||
After the device restarts:
|
||||
|
||||
<Steps>
|
||||
1. Tap <span class="menu-path">CONFIG → ABOUT</span>.
|
||||
2. Check that the firmware version matches the version you downloaded.
|
||||
</Steps>
|
||||
|
||||
<Aside type="tip">
|
||||
After a firmware update, it is good practice to recalibrate the device. Some firmware updates may alter calibration behavior or add new calibration features.
|
||||
</Aside>
|
||||
|
||||
<Aside>
|
||||
The `update.bin` file is automatically deleted from the device storage after the update completes. You do not need to remove it manually.
|
||||
</Aside>
|
||||
@ -0,0 +1,43 @@
|
||||
---
|
||||
title: Language & Brightness
|
||||
description: Change display language and backlight brightness
|
||||
---
|
||||
|
||||
import { Aside, Steps } from '@astrojs/starlight/components';
|
||||
|
||||
## Change the display language
|
||||
|
||||
The NanoVNA-F V3 supports English and Chinese interface languages.
|
||||
|
||||
<Steps>
|
||||
1. Tap <span class="menu-path">CONFIG → LANGSET</span>.
|
||||
2. Select **English** or **Chinese**.
|
||||
3. The interface updates immediately.
|
||||
</Steps>
|
||||
|
||||
<Aside>
|
||||
The language setting is preserved across power cycles. You only need to set it once.
|
||||
</Aside>
|
||||
|
||||
## Adjust backlight brightness
|
||||
|
||||
Reducing brightness extends battery life when operating in the field.
|
||||
|
||||
<Steps>
|
||||
1. Tap <span class="menu-path">CONFIG → BRIGHTNESS</span>.
|
||||
2. Select one of five levels:
|
||||
- **100%** -- full brightness (default)
|
||||
- **80%**
|
||||
- **60%**
|
||||
- **40%**
|
||||
- **20%** -- dimmest setting
|
||||
3. The display adjusts immediately.
|
||||
</Steps>
|
||||
|
||||
<Aside type="tip">
|
||||
In bright outdoor conditions, keep brightness at 100% for readability. In dark lab environments, 40% or 60% is comfortable and saves battery.
|
||||
</Aside>
|
||||
|
||||
<Aside>
|
||||
The brightness setting persists after reboot. If the screen appears unusually dim after powering on, navigate to the brightness menu and increase the level.
|
||||
</Aside>
|
||||
41
src/content/docs/how-to/configuration/user-defined-info.mdx
Normal file
@ -0,0 +1,41 @@
|
||||
---
|
||||
title: User Defined Info
|
||||
description: Display your callsign on the boot screen
|
||||
---
|
||||
|
||||
import { Aside, Steps } from '@astrojs/starlight/components';
|
||||
import userDefinedInfo from '../../../../assets/screenshots/user-defined-info.png';
|
||||
|
||||
You can configure the NanoVNA-F V3 to display a custom message -- typically your amateur radio callsign -- on the boot screen each time the device powers on.
|
||||
|
||||
<img src={userDefinedInfo.src} alt="Boot screen showing user-defined callsign" />
|
||||
|
||||
## Set your callsign or custom text
|
||||
|
||||
<Steps>
|
||||
1. On your PC, create a plain text file named **`callsign.txt`**.
|
||||
2. Type your callsign or message inside the file (maximum **50 ASCII characters**).
|
||||
3. Save the file.
|
||||
4. Power off the NanoVNA-F V3.
|
||||
5. Enter **U-disk mode**: hold the **middle button** while powering on.
|
||||
6. The device appears as a USB drive on your computer.
|
||||
7. Copy **`callsign.txt`** to the root of the USB drive.
|
||||
8. Safely eject the USB drive.
|
||||
9. Restart the NanoVNA-F V3.
|
||||
</Steps>
|
||||
|
||||
Your text now appears on the boot screen during startup.
|
||||
|
||||
## Update or remove the callsign
|
||||
|
||||
**To change the text:** Edit `callsign.txt` with the new content, enter U-disk mode again, and copy the updated file to the device.
|
||||
|
||||
**To remove it:** Delete `callsign.txt` from the USB drive while in U-disk mode, then restart.
|
||||
|
||||
<Aside type="caution">
|
||||
The file must be named exactly `callsign.txt` (all lowercase). The content is limited to **50 ASCII characters** -- special characters and non-ASCII text may not display correctly.
|
||||
</Aside>
|
||||
|
||||
<Aside type="tip">
|
||||
This is a good way to identify your device if you have multiple NanoVNAs, or to display contact information in case the device is misplaced at a hamfest or field day event.
|
||||
</Aside>
|
||||
68
src/content/docs/how-to/display-traces/configure-traces.mdx
Normal file
@ -0,0 +1,68 @@
|
||||
---
|
||||
title: Configure Traces
|
||||
description: Add, remove, and switch between measurement traces
|
||||
---
|
||||
|
||||
import { Aside, Steps, Tabs, TabItem } from '@astrojs/starlight/components';
|
||||
import traceSelection from '../../../../assets/screenshots/trace-selection.png';
|
||||
import traceActivated from '../../../../assets/screenshots/trace-activated.png';
|
||||
import channelSelect from '../../../../assets/screenshots/channel-select.png';
|
||||
|
||||
The NanoVNA-F V3 supports four independent traces (0 through 3), each capable of displaying a different measurement format on the same sweep. This guide covers activating, switching, and deactivating traces.
|
||||
|
||||
## Activate a trace
|
||||
|
||||
<Tabs>
|
||||
<TabItem label="Via menu">
|
||||
<Steps>
|
||||
1. Tap <span class="menu-path">DISPLAY → TRACE → TRACE n</span> where **n** is 0, 1, 2, or 3.
|
||||
2. The selected trace becomes active and appears on screen.
|
||||
</Steps>
|
||||
</TabItem>
|
||||
<TabItem label="Via touch shortcut">
|
||||
Tap the **trace status box** at the top of the screen for the trace you want to activate. The status box shows the trace number, channel, and current format.
|
||||
</TabItem>
|
||||
<TabItem label="Via marker color">
|
||||
Tap a **marker** whose color matches the trace you want to activate. This selects both the marker and its associated trace.
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
<img src={traceSelection.src} alt="Trace selection menu showing four available traces" />
|
||||
|
||||
## Switch the channel (S11 / S21)
|
||||
|
||||
Each trace can display either the S11 (reflection) or S21 (transmission) channel.
|
||||
|
||||
<Steps>
|
||||
1. Activate the trace you want to change.
|
||||
2. Tap <span class="menu-path">DISPLAY → CHANNEL</span>.
|
||||
3. Select **S11** or **S21**.
|
||||
</Steps>
|
||||
|
||||
<img src={channelSelect.src} alt="Channel selection showing S11 and S21 options" />
|
||||
|
||||
<Aside type="tip">
|
||||
You can also tap the channel indicator (S11 or S21) shown in the trace status box at the top of the screen to toggle channels quickly.
|
||||
</Aside>
|
||||
|
||||
## Deactivate a trace
|
||||
|
||||
To remove a trace from the display, activate it first, then tap <span class="menu-path">DISPLAY → TRACE → TRACE n</span> again for the same trace number. The trace toggles off.
|
||||
|
||||
<Aside>
|
||||
At least one trace must remain active at all times. The device will not allow you to deactivate the last visible trace.
|
||||
</Aside>
|
||||
|
||||
## Identify the active trace
|
||||
|
||||
The currently active trace has its status box **highlighted** at the top of the screen. All marker readings and scale adjustments apply to the active trace.
|
||||
|
||||
<img src={traceActivated.src} alt="Display showing an activated trace with highlighted status box" />
|
||||
|
||||
## Common multi-trace setups
|
||||
|
||||
| Setup | Trace 0 | Trace 1 | Trace 2 | Trace 3 |
|
||||
|---|---|---|---|---|
|
||||
| Antenna check | S11 LOGMAG | S11 SWR | S11 SMITH | -- |
|
||||
| Filter response | S21 LOGMAG | S21 PHASE | S11 LOGMAG | -- |
|
||||
| Full two-port | S11 LOGMAG | S21 LOGMAG | S11 SMITH | S21 PHASE |
|
||||
39
src/content/docs/how-to/display-traces/dark-mode.mdx
Normal file
@ -0,0 +1,39 @@
|
||||
---
|
||||
title: Dark Mode
|
||||
description: Enable dark display mode on the NanoVNA-F V3
|
||||
---
|
||||
|
||||
import { Aside, Steps } from '@astrojs/starlight/components';
|
||||
import darkMode from '../../../../assets/screenshots/dark-mode.png';
|
||||
|
||||
The NanoVNA-F V3 supports a dark display mode that swaps the bright background for a dark one. This is easier on the eyes in dim environments and reduces battery drain.
|
||||
|
||||
<img src={darkMode.src} alt="NanoVNA-F V3 display in dark mode" />
|
||||
|
||||
## Enable dark mode
|
||||
|
||||
<Steps>
|
||||
1. On your PC, create a plain text file named **`dark_mode.txt`**.
|
||||
2. Inside the file, write a single character: **`1`** (the digit one). Save the file.
|
||||
3. Put the NanoVNA-F V3 into **U-disk mode**: hold the **middle button** while powering on the device.
|
||||
4. The device appears as a USB drive on your computer.
|
||||
5. Copy **`dark_mode.txt`** to the root of the USB drive.
|
||||
6. Safely eject the USB drive.
|
||||
7. Restart the NanoVNA-F V3.
|
||||
</Steps>
|
||||
|
||||
The device will boot with the dark color scheme.
|
||||
|
||||
## Disable dark mode
|
||||
|
||||
Follow the same procedure, but change the content of `dark_mode.txt` to **`0`** (zero) and copy it to the device again.
|
||||
|
||||
Alternatively, delete the `dark_mode.txt` file from the USB drive entirely.
|
||||
|
||||
<Aside type="tip">
|
||||
U-disk mode is only entered during power-on. If the device is already running, power it off first, then hold the middle button while turning it back on.
|
||||
</Aside>
|
||||
|
||||
<Aside type="caution">
|
||||
The file must be named exactly `dark_mode.txt` (all lowercase, with underscore). Other filenames will be ignored.
|
||||
</Aside>
|
||||
70
src/content/docs/how-to/display-traces/display-formats.mdx
Normal file
@ -0,0 +1,70 @@
|
||||
---
|
||||
title: Display Formats
|
||||
description: Choose the right measurement format for your needs
|
||||
---
|
||||
|
||||
import { Aside, Steps, Tabs, TabItem } from '@astrojs/starlight/components';
|
||||
import formatLogmag from '../../../../assets/screenshots/format-logmag.png';
|
||||
import formatSmith from '../../../../assets/screenshots/format-smith.png';
|
||||
|
||||
The NanoVNA-F V3 offers 13 display formats. Each format presents the same underlying measurement data in a different way, suited to different analysis tasks.
|
||||
|
||||
## Change the display format
|
||||
|
||||
<Steps>
|
||||
1. Activate the trace you want to change.
|
||||
2. Tap <span class="menu-path">DISPLAY → FORMAT</span>.
|
||||
3. Select the desired format from the list.
|
||||
</Steps>
|
||||
|
||||
## Format reference
|
||||
|
||||
### Magnitude and loss
|
||||
|
||||
| Format | What it shows | When to use it |
|
||||
|---|---|---|
|
||||
| **LOGMAG** | Magnitude in dB (logarithmic) | Return loss, insertion loss, filter response -- the most common general-purpose format |
|
||||
| **LINEAR** | Magnitude as a linear ratio (0 to 1) | Comparing voltage ratios directly |
|
||||
| **SWR** | Standing wave ratio (1:1 and up) | Antenna matching -- quickly see how close to 50 ohm you are |
|
||||
|
||||
<img src={formatLogmag.src} alt="LOGMAG display format showing return loss in dB" />
|
||||
|
||||
### Phase and delay
|
||||
|
||||
| Format | What it shows | When to use it |
|
||||
|---|---|---|
|
||||
| **PHASE** | Phase angle in degrees (-180 to +180) | Phase response of filters, transmission lines |
|
||||
| **DELAY** | Group delay in seconds | Evaluating signal delay through a device or cable |
|
||||
|
||||
### Impedance
|
||||
|
||||
| Format | What it shows | When to use it |
|
||||
|---|---|---|
|
||||
| **SMITH R+jX** | Smith chart with resistance and reactance readout | Impedance matching, tuning networks |
|
||||
| **SMITH R+L/C** | Smith chart with resistance and equivalent inductance or capacitance | Identifying reactive components at a given frequency |
|
||||
| **RESISTANCE** | Real part of impedance (ohms) vs. frequency | Seeing resistive component on a Cartesian plot |
|
||||
| **REACTANCE** | Imaginary part of impedance (ohms) vs. frequency | Seeing reactive component on a Cartesian plot |
|
||||
|
||||
<img src={formatSmith.src} alt="Smith chart display format showing impedance" />
|
||||
|
||||
### Complex representation
|
||||
|
||||
| Format | What it shows | When to use it |
|
||||
|---|---|---|
|
||||
| **POLAR** | Magnitude and phase on a polar plot | Visualizing reflection coefficient as a vector |
|
||||
| **REAL** | Real part of the complex S-parameter | Advanced analysis of in-phase component |
|
||||
| **IMAG** | Imaginary part of the complex S-parameter | Advanced analysis of quadrature component |
|
||||
|
||||
### Quality
|
||||
|
||||
| Format | What it shows | When to use it |
|
||||
|---|---|---|
|
||||
| **Q FACTOR** | Quality factor vs. frequency | Evaluating resonator or inductor quality |
|
||||
|
||||
<Aside type="tip">
|
||||
You can assign different formats to each of the four traces simultaneously. A common setup is LOGMAG on trace 0 and SMITH R+jX on trace 1, giving you both a dB plot and impedance view of the same measurement.
|
||||
</Aside>
|
||||
|
||||
<Aside type="caution">
|
||||
SMITH and POLAR formats do not support scale adjustment via <span class="menu-path">DISPLAY → SCALE</span>. Their scale is fixed to the unit circle.
|
||||
</Aside>
|
||||
54
src/content/docs/how-to/display-traces/scale-reference.mdx
Normal file
@ -0,0 +1,54 @@
|
||||
---
|
||||
title: Scale & Reference
|
||||
description: Adjust scale and reference position for trace display
|
||||
---
|
||||
|
||||
import { Aside, Steps } from '@astrojs/starlight/components';
|
||||
import scaleSetting from '../../../../assets/screenshots/scale-setting.png';
|
||||
|
||||
Adjusting the scale and reference position controls how zoomed-in your trace appears and where the reference line sits on screen. This lets you focus on the range of values that matters for your measurement.
|
||||
|
||||
## Adjust the scale
|
||||
|
||||
<Steps>
|
||||
1. Activate the trace you want to adjust.
|
||||
2. Tap <span class="menu-path">DISPLAY → SCALE</span>.
|
||||
3. Enter the desired scale value (units per division).
|
||||
4. Tap **Ok** to confirm.
|
||||
</Steps>
|
||||
|
||||
The scale value sets the vertical range per grid division. For example, in LOGMAG format a scale of 10 dB/div gives you 10 dB per horizontal grid line, while 5 dB/div zooms in for more detail.
|
||||
|
||||
<img src={scaleSetting.src} alt="Scale setting screen with value entry" />
|
||||
|
||||
<Aside type="tip">
|
||||
Tap directly on the **ordinate labels** (the numbers along the left edge of the trace area) to jump straight to the scale entry screen without navigating the menu.
|
||||
</Aside>
|
||||
|
||||
## Set the reference position
|
||||
|
||||
The reference position (REF POS) determines which grid line represents the reference value (typically 0 dB for LOGMAG, or 1.0 for SWR).
|
||||
|
||||
<Steps>
|
||||
1. Activate the trace you want to adjust.
|
||||
2. Tap <span class="menu-path">DISPLAY → SCALE</span>.
|
||||
3. Select **REF POS**.
|
||||
4. Enter the grid line number (0 = bottom, 9 = top).
|
||||
5. Tap **Ok** to confirm.
|
||||
</Steps>
|
||||
|
||||
The default REF POS is **7** (the 7th line from the bottom), which places the reference value near the top of the screen. This works well for return loss measurements where most values are negative.
|
||||
|
||||
## Common scale configurations
|
||||
|
||||
| Measurement | Suggested scale | Suggested REF POS |
|
||||
|---|---|---|
|
||||
| Return loss (S11 LOGMAG) | 10 dB/div | 7 (reference at top) |
|
||||
| Fine return loss detail | 5 dB/div | 7 |
|
||||
| Insertion loss (S21 LOGMAG) | 10 dB/div | 7 |
|
||||
| Bandpass filter detail | 1 dB/div | 5 (reference at center) |
|
||||
| SWR overview | 1 SWR/div | 0 (reference at bottom) |
|
||||
|
||||
<Aside type="caution">
|
||||
Scale adjustment is not available for SMITH and POLAR display formats. These formats use a fixed unit-circle display.
|
||||
</Aside>
|
||||
73
src/content/docs/how-to/markers/marker-operations.mdx
Normal file
@ -0,0 +1,73 @@
|
||||
---
|
||||
title: Marker Operations
|
||||
description: Use markers to set frequency range boundaries
|
||||
---
|
||||
|
||||
import { Aside, Steps } from '@astrojs/starlight/components';
|
||||
import markerSetFreq from '../../../../assets/screenshots/marker-set-freq.png';
|
||||
|
||||
Marker operations transfer the active marker's frequency into the sweep settings. This lets you quickly zoom in on a feature by using marker positions to define start, stop, center, or span values.
|
||||
|
||||
## Set sweep start from a marker
|
||||
|
||||
<Steps>
|
||||
1. Move the marker to the desired lower frequency boundary.
|
||||
2. Tap <span class="menu-path">MARKER → OPERATIONS → >START</span>.
|
||||
3. The sweep start frequency updates to match the marker position.
|
||||
</Steps>
|
||||
|
||||
## Set sweep stop from a marker
|
||||
|
||||
<Steps>
|
||||
1. Move the marker to the desired upper frequency boundary.
|
||||
2. Tap <span class="menu-path">MARKER → OPERATIONS → >STOP</span>.
|
||||
3. The sweep stop frequency updates to match the marker position.
|
||||
</Steps>
|
||||
|
||||
## Set center frequency from a marker
|
||||
|
||||
<Steps>
|
||||
1. Position the marker on the feature you want to center on (e.g., a resonance dip).
|
||||
2. Tap <span class="menu-path">MARKER → OPERATIONS → >CENTER</span>.
|
||||
3. The sweep center frequency shifts to the marker position, keeping the current span.
|
||||
</Steps>
|
||||
|
||||
## Set span from a marker
|
||||
|
||||
<Steps>
|
||||
1. Position the marker at the frequency that defines half the desired span.
|
||||
2. Tap <span class="menu-path">MARKER → OPERATIONS → >SPAN</span>.
|
||||
3. The sweep span adjusts based on the marker position.
|
||||
</Steps>
|
||||
|
||||
## Set a marker to an exact frequency
|
||||
|
||||
<Steps>
|
||||
1. Select the marker.
|
||||
2. Tap <span class="menu-path">MARKER → SET FREQ</span>.
|
||||
3. Enter the frequency using the on-screen keypad.
|
||||
4. Tap **Ok** to confirm.
|
||||
</Steps>
|
||||
|
||||
<img src={markerSetFreq.src} alt="Frequency entry keypad for setting marker position" />
|
||||
|
||||
<Aside type="tip">
|
||||
**Quick access:** Long-press the middle hardware button to open the frequency entry screen for the active marker without navigating through the menu.
|
||||
</Aside>
|
||||
|
||||
## Typical workflow: zoom in on a feature
|
||||
|
||||
A common use of marker operations is quickly zooming in on an area of interest:
|
||||
|
||||
<Steps>
|
||||
1. Run a wide sweep to identify the feature.
|
||||
2. Place **Marker 1** at the left edge of the region you want to examine.
|
||||
3. Tap <span class="menu-path">MARKER → OPERATIONS → >START</span>.
|
||||
4. Place **Marker 2** at the right edge.
|
||||
5. Tap <span class="menu-path">MARKER → OPERATIONS → >STOP</span>.
|
||||
6. The sweep now covers only the region between the two markers.
|
||||
</Steps>
|
||||
|
||||
<Aside>
|
||||
After narrowing the sweep range, you may want to recalibrate for best accuracy across the new frequency span.
|
||||
</Aside>
|
||||
58
src/content/docs/how-to/markers/marker-search.mdx
Normal file
@ -0,0 +1,58 @@
|
||||
---
|
||||
title: Marker Search
|
||||
description: Find peaks, valleys, and track measurements automatically
|
||||
---
|
||||
|
||||
import { Aside, Steps } from '@astrojs/starlight/components';
|
||||
import markerSearch from '../../../../assets/screenshots/marker-search.png';
|
||||
|
||||
Marker search functions move the active marker to points of interest on the trace -- peaks, valleys, or adjacent features -- without manual positioning.
|
||||
|
||||
<img src={markerSearch.src} alt="Marker search menu showing search options" />
|
||||
|
||||
## Find the maximum value
|
||||
|
||||
<Steps>
|
||||
1. Select the marker you want to use.
|
||||
2. Tap <span class="menu-path">MARKER → SEARCH → MAXIMUM</span>.
|
||||
3. The marker jumps to the highest point on the active trace.
|
||||
</Steps>
|
||||
|
||||
This is useful for finding the peak response of a bandpass filter or the resonant frequency of an antenna.
|
||||
|
||||
## Find the minimum value
|
||||
|
||||
<Steps>
|
||||
1. Select the marker you want to use.
|
||||
2. Tap <span class="menu-path">MARKER → SEARCH → MINIMUM</span>.
|
||||
3. The marker jumps to the lowest point on the active trace.
|
||||
</Steps>
|
||||
|
||||
This works well for locating the deepest return loss notch or the stopband null of a filter.
|
||||
|
||||
## Search left or right
|
||||
|
||||
To find the next peak or valley relative to the current marker position:
|
||||
|
||||
- **SEARCH <LEFT** -- searches toward lower frequencies from the marker
|
||||
- **SEARCH >RIGHT** -- searches toward higher frequencies from the marker
|
||||
|
||||
These are useful for stepping through multiple resonances or ripple peaks across a frequency span.
|
||||
|
||||
## Enable tracking mode
|
||||
|
||||
<Steps>
|
||||
1. Select the marker.
|
||||
2. Tap <span class="menu-path">MARKER → SEARCH → TRACKING</span>.
|
||||
3. The marker now automatically follows the peak (or valley) on every sweep.
|
||||
</Steps>
|
||||
|
||||
With tracking enabled, the marker continuously updates its position as the trace changes. This is particularly helpful when adjusting an antenna or tuning circuit in real time -- the marker stays locked to the feature you care about.
|
||||
|
||||
<Aside>
|
||||
Tracking follows whichever extreme (maximum or minimum) was last selected. If you used MAXIMUM before enabling TRACKING, it tracks the peak. If you used MINIMUM, it tracks the valley.
|
||||
</Aside>
|
||||
|
||||
<Aside type="tip">
|
||||
Combine tracking with a narrow frequency span for detailed real-time monitoring of a single resonance while making physical adjustments to your device under test.
|
||||
</Aside>
|
||||
73
src/content/docs/how-to/markers/using-markers.mdx
Normal file
@ -0,0 +1,73 @@
|
||||
---
|
||||
title: Using Markers
|
||||
description: Add, move, and read measurement markers
|
||||
---
|
||||
|
||||
import { Aside, Steps, Tabs, TabItem } from '@astrojs/starlight/components';
|
||||
import markerOperations from '../../../../assets/screenshots/marker-operations.png';
|
||||
|
||||
Markers let you read exact measurement values at specific frequencies. The NanoVNA-F V3 supports four markers (1 through 4), each displayed as a numbered indicator on the active trace.
|
||||
|
||||
<img src={markerOperations.src} alt="Display with active markers showing measurement values" />
|
||||
|
||||
## Activate a marker
|
||||
|
||||
<Tabs>
|
||||
<TabItem label="Via menu">
|
||||
<Steps>
|
||||
1. Tap <span class="menu-path">MARKER → SELECT → MARKER n</span> where **n** is 1, 2, 3, or 4.
|
||||
2. The marker appears on the trace at a default position.
|
||||
</Steps>
|
||||
</TabItem>
|
||||
<TabItem label="Via touch shortcut">
|
||||
Tap the **marker number** in the marker table at the top of the screen to activate and select that marker.
|
||||
</TabItem>
|
||||
<TabItem label="Via frequency tap">
|
||||
Tap a **frequency value** in the marker information table to quickly select that marker for editing.
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
## Move a marker
|
||||
|
||||
<Tabs>
|
||||
<TabItem label="Touch">
|
||||
After selecting a marker, tap anywhere on the trace area to jump the marker to that frequency.
|
||||
</TabItem>
|
||||
<TabItem label="Buttons">
|
||||
Use the marker position controls under <span class="menu-path">MARKER → POSITION</span>:
|
||||
|
||||
- **MOVE UP** -- shift the marker toward higher frequencies
|
||||
- **CENTER** -- move the marker to the center frequency
|
||||
- **MOVE DOWN** -- shift the marker toward lower frequencies
|
||||
</TabItem>
|
||||
<TabItem label="Set exact frequency">
|
||||
<Steps>
|
||||
1. Select the marker.
|
||||
2. Tap <span class="menu-path">MARKER → SET FREQ</span>.
|
||||
3. Enter the desired frequency on the keypad.
|
||||
4. Tap **Ok** to confirm.
|
||||
</Steps>
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
<Aside type="tip">
|
||||
**Quick access:** Long-press the middle button to jump directly to the frequency entry screen for the active marker.
|
||||
</Aside>
|
||||
|
||||
## Read marker values
|
||||
|
||||
The **marker table** at the top of the screen shows each active marker's frequency and measured value. The value displayed depends on the format of the active trace (dB for LOGMAG, ohms for RESISTANCE, etc.).
|
||||
|
||||
## Rearrange the marker table
|
||||
|
||||
If the marker table overlaps important parts of the trace:
|
||||
|
||||
<Steps>
|
||||
1. Tap and hold on the **measured value area** of the marker table for about 0.5 seconds.
|
||||
2. Drag the table to a new position on screen.
|
||||
</Steps>
|
||||
|
||||
## Turn off markers
|
||||
|
||||
- To turn off a single marker: select it, then tap <span class="menu-path">MARKER → SELECT → MARKER n</span> again to toggle it off.
|
||||
- To turn off all markers at once: tap <span class="menu-path">MARKER → ALL OFF</span>.
|
||||
33
src/content/docs/how-to/measurement-tools/cw-pulse.mdx
Normal file
@ -0,0 +1,33 @@
|
||||
---
|
||||
title: CW Pulse Mode
|
||||
description: Configure pulsed signal output
|
||||
---
|
||||
|
||||
import { Aside, Steps } from '@astrojs/starlight/components';
|
||||
import cwPulse from '../../../../assets/screenshots/cw-pulse.png';
|
||||
|
||||
CW Pulse mode configures the NanoVNA-F V3 to output a pulsed signal rather than a continuous wave. This is useful for testing pulse-sensitive circuits or generating a known pulse-modulated RF signal.
|
||||
|
||||
<img src={cwPulse.src} alt="CW Pulse configuration screen" />
|
||||
|
||||
## Enable CW Pulse mode
|
||||
|
||||
<Steps>
|
||||
1. Tap <span class="menu-path">STIMULUS → CW PULSE</span>.
|
||||
2. Set the desired pulse frequency using the on-screen keypad.
|
||||
3. Tap **Ok** to confirm.
|
||||
</Steps>
|
||||
|
||||
The output signal is a **pulse signal**, not a pure continuous wave. The pulse frequency you enter determines the repetition rate of the pulsed output.
|
||||
|
||||
<Aside type="caution">
|
||||
Despite the name, CW Pulse does **not** produce a standard CW (continuous wave) signal. The output is a pulsed waveform. If you need a true CW output, use the [Signal Generator](/how-to/measurement-tools/signal-generator/) instead.
|
||||
</Aside>
|
||||
|
||||
## Return to normal sweep
|
||||
|
||||
Exit the CW Pulse screen to return to normal sweep operation. You can also tap <span class="menu-path">STIMULUS → PAUSE SWEEP</span> to toggle between paused and active sweep states.
|
||||
|
||||
<Aside type="tip">
|
||||
CW Pulse mode is accessible from the STIMULUS menu alongside the signal generator and pause controls. All three affect the sweep behavior and share the same menu area.
|
||||
</Aside>
|
||||
@ -0,0 +1,65 @@
|
||||
---
|
||||
title: S-Parameter Export
|
||||
description: Save S1P and S2P files for use in other tools
|
||||
---
|
||||
|
||||
import { Aside, Steps, Tabs, TabItem } from '@astrojs/starlight/components';
|
||||
import storageMenu from '../../../../assets/screenshots/storage-menu.png';
|
||||
|
||||
The NanoVNA-F V3 can export measurement data as standard Touchstone files (S1P and S2P) for use in simulation software, spreadsheets, or further analysis on a PC.
|
||||
|
||||
<img src={storageMenu.src} alt="Storage menu showing S1P, S2P, and LIST options" />
|
||||
|
||||
## Save an S1P file (S11 only)
|
||||
|
||||
S1P files contain single-port reflection data (S11).
|
||||
|
||||
<Steps>
|
||||
1. Complete your S11 measurement.
|
||||
2. Tap <span class="menu-path">STORAGE → S1P</span>.
|
||||
3. The file is saved to the device's internal storage.
|
||||
</Steps>
|
||||
|
||||
## Save an S2P file (S11 + S21)
|
||||
|
||||
S2P files contain both reflection (S11) and transmission (S21) data.
|
||||
|
||||
<Steps>
|
||||
1. Complete a measurement that includes both S11 and S21 data.
|
||||
2. Tap <span class="menu-path">STORAGE → S2P</span>.
|
||||
3. The file is saved to the device's internal storage.
|
||||
</Steps>
|
||||
|
||||
<Aside>
|
||||
S2P export requires both S11 and S21 measurements. If you only have S11 data active, the S21 values in the exported file will not be meaningful.
|
||||
</Aside>
|
||||
|
||||
## View stored files
|
||||
|
||||
Tap <span class="menu-path">STORAGE → LIST</span> to see all saved files on the device.
|
||||
|
||||
## Transfer files to a PC
|
||||
|
||||
<Steps>
|
||||
1. Connect the NanoVNA-F V3 to your computer via **USB-C**.
|
||||
2. Enter **U-disk mode**: power off the device, then hold the **middle button** while powering on.
|
||||
3. The device appears as a USB mass storage drive.
|
||||
4. Copy the `.s1p` or `.s2p` files from the drive to your computer.
|
||||
5. Safely eject the drive and restart the device.
|
||||
</Steps>
|
||||
|
||||
## Using exported files
|
||||
|
||||
Touchstone files are a widely supported standard. Common tools that accept S1P/S2P files:
|
||||
|
||||
| Tool | Platform | Use case |
|
||||
|---|---|---|
|
||||
| NanoVNA-Saver | Windows, Linux, macOS | Re-plot and analyze VNA data |
|
||||
| SimSmith | Windows, macOS | Smith chart impedance matching |
|
||||
| QUCS / QucsStudio | Windows, Linux | Circuit simulation with measured data |
|
||||
| MATLAB / Octave | Cross-platform | Custom data analysis and scripting |
|
||||
| Spreadsheet (CSV import) | Any | Manual data inspection |
|
||||
|
||||
<Aside type="tip">
|
||||
Touchstone files are plain text. You can open them in any text editor to inspect the raw frequency and S-parameter data. The format uses frequency in the first column followed by real/imaginary or magnitude/angle pairs.
|
||||
</Aside>
|
||||
@ -0,0 +1,52 @@
|
||||
---
|
||||
title: Signal Generator
|
||||
description: Use the built-in signal generator for CW output
|
||||
---
|
||||
|
||||
import { Aside, Steps } from '@astrojs/starlight/components';
|
||||
import signalGenerator from '../../../../assets/screenshots/signal-generator.png';
|
||||
|
||||
The NanoVNA-F V3 includes a built-in signal generator that outputs a continuous-wave (CW) signal from 1 MHz to 6000 MHz. This is useful for testing receivers, driving mixers, or verifying external measurement equipment.
|
||||
|
||||
<img src={signalGenerator.src} alt="Signal generator menu showing frequency and power settings" />
|
||||
|
||||
## Enable the signal generator
|
||||
|
||||
<Steps>
|
||||
1. Tap <span class="menu-path">STIMULUS → SIGNAL GENERATOR</span>.
|
||||
2. Tap **RF OUT** to toggle the output on.
|
||||
3. The signal is now present on the **RF OUT** SMA connector.
|
||||
</Steps>
|
||||
|
||||
## Set the output frequency
|
||||
|
||||
<Steps>
|
||||
1. From the signal generator screen, tap **FREQ**.
|
||||
2. Enter the desired frequency using the on-screen keypad.
|
||||
3. Tap **Ok** to confirm.
|
||||
</Steps>
|
||||
|
||||
The frequency range is **1 MHz to 6000 MHz**.
|
||||
|
||||
## Adjust output power
|
||||
|
||||
<Steps>
|
||||
1. From the signal generator screen, select the power level.
|
||||
2. Available levels: **0 dB**, **-3 dB**, **-6 dB**, **-9 dB**.
|
||||
</Steps>
|
||||
|
||||
<Aside type="caution">
|
||||
Power adjustment is only effective above **23.5 MHz**. Below 23.5 MHz, the output power is fixed regardless of the selected level.
|
||||
</Aside>
|
||||
|
||||
## Turn off the signal generator
|
||||
|
||||
Tap **RF OUT** again to toggle the output off. The signal generator screen remains visible but no signal is emitted.
|
||||
|
||||
<Aside>
|
||||
While the signal generator is active, normal sweep measurement is paused. Exit the signal generator screen to resume sweeping.
|
||||
</Aside>
|
||||
|
||||
<Aside type="tip">
|
||||
The output power levels are relative. 0 dB represents the maximum output power of the device, not an absolute power level in dBm. Use an external power meter for precise absolute power measurements.
|
||||
</Aside>
|
||||
94
src/content/docs/how-to/measurement-tools/tdr-mode.mdx
Normal file
@ -0,0 +1,94 @@
|
||||
---
|
||||
title: TDR Mode
|
||||
description: Measure cable length and find faults with Time Domain Reflectometry
|
||||
---
|
||||
|
||||
import { Aside, Steps, Tabs, TabItem } from '@astrojs/starlight/components';
|
||||
import tdrMenu from '../../../../assets/screenshots/tdr-menu.png';
|
||||
import tdrLowpass from '../../../../assets/screenshots/tdr-lowpass.png';
|
||||
import tdrBandpass from '../../../../assets/screenshots/tdr-bandpass.png';
|
||||
|
||||
Time Domain Reflectometry (TDR) transforms frequency-domain S11 data into a time-domain view, letting you see reflections along a cable or transmission line as a function of distance. Use it to measure cable length, locate faults, or identify impedance discontinuities.
|
||||
|
||||
<img src={tdrMenu.src} alt="TDR menu showing processing mode options" />
|
||||
|
||||
<Aside>
|
||||
TDR works with **S11 (reflection) data only**. Make sure your trace is set to the S11 channel before enabling TDR.
|
||||
</Aside>
|
||||
|
||||
## Enable TDR mode
|
||||
|
||||
<Steps>
|
||||
1. Connect the cable or device under test to **Port 1 (CH0)**.
|
||||
2. Ensure the active trace is on the **S11** channel.
|
||||
3. Tap <span class="menu-path">DISPLAY → TDR</span>.
|
||||
4. Select a processing mode (see below).
|
||||
</Steps>
|
||||
|
||||
## Processing modes
|
||||
|
||||
<Tabs>
|
||||
<TabItem label="Low Pass Impulse">
|
||||
Shows reflections as sharp impulse spikes. Each discontinuity along the cable produces a distinct peak. Best for:
|
||||
|
||||
- Locating connectors, splices, or damage
|
||||
- Measuring distance to a specific fault
|
||||
|
||||
<img src={tdrLowpass.src} alt="TDR low pass impulse mode showing reflection spikes" />
|
||||
</TabItem>
|
||||
<TabItem label="Low Pass Step">
|
||||
Shows the impedance profile as a step function along the cable. The vertical axis represents impedance. Best for:
|
||||
|
||||
- Identifying impedance changes along a transmission line
|
||||
- Seeing the characteristic impedance of different cable sections
|
||||
</TabItem>
|
||||
<TabItem label="Bandpass">
|
||||
Uses only the measured frequency data without extrapolation. Produces a symmetric response. Best for:
|
||||
|
||||
- Measurements where the low-frequency assumption is not valid
|
||||
- Situations where you need the raw bandpass response
|
||||
|
||||
<img src={tdrBandpass.src} alt="TDR bandpass mode display" />
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
## Set the window function
|
||||
|
||||
The window function controls the trade-off between resolution and sidelobe suppression:
|
||||
|
||||
<Steps>
|
||||
1. From the TDR menu, tap **WINDOW**.
|
||||
2. Select one of three options:
|
||||
- **MINIMUM** -- sharpest resolution, highest sidelobes
|
||||
- **NORMAL** -- balanced (recommended for most use)
|
||||
- **MAXIMUM** -- lowest sidelobes, reduced resolution
|
||||
</Steps>
|
||||
|
||||
## Set the velocity factor
|
||||
|
||||
The velocity factor accounts for the signal propagation speed in your cable, which is slower than the speed of light. Without the correct velocity factor, distance readings will be inaccurate.
|
||||
|
||||
<Steps>
|
||||
1. From the TDR menu, tap **VELOCITY FACTOR**.
|
||||
2. Enter the value as a **percentage** (e.g., enter **70** for a velocity factor of 0.70).
|
||||
3. Tap **Ok** to confirm.
|
||||
</Steps>
|
||||
|
||||
### Common velocity factors
|
||||
|
||||
| Cable type | Velocity factor | Enter as |
|
||||
|---|---|---|
|
||||
| RG-405 / Semi-rigid | 0.70 | 70 |
|
||||
| RG-58 | 0.66 | 66 |
|
||||
| RG-213 | 0.66 | 66 |
|
||||
| RG-174 | 0.66 | 66 |
|
||||
| LMR-400 | 0.85 | 85 |
|
||||
| Air dielectric | 0.95--1.00 | 95--100 |
|
||||
|
||||
<Aside type="tip">
|
||||
If you do not know the velocity factor, measure a cable of known length and adjust the velocity factor until the TDR distance reading matches the actual length.
|
||||
</Aside>
|
||||
|
||||
<Aside type="caution">
|
||||
For accurate TDR measurements, calibrate the VNA before enabling TDR mode. An uncalibrated measurement will show artifacts that can be mistaken for real cable faults.
|
||||
</Aside>
|
||||
161
src/content/docs/how-to/pc-software/console-commands.mdx
Normal file
@ -0,0 +1,161 @@
|
||||
---
|
||||
title: Console Commands
|
||||
description: Control the NanoVNA-F V3 via serial terminal
|
||||
---
|
||||
|
||||
import { Aside, Steps } from '@astrojs/starlight/components';
|
||||
import consoleCommands from '../../../../assets/screenshots/console-commands.png';
|
||||
|
||||
Beyond the NanoVNA-Saver graphical interface, you can control the NanoVNA-F V3 directly through its serial console. This is useful for scripting automated measurements, debugging, or accessing low-level device functions.
|
||||
|
||||
<img src={consoleCommands.src} alt="NanoVNA-F V3 console command session in PuTTY" style="width:100%; max-width:520px; border-radius:8px; margin:1.5rem 0;" />
|
||||
|
||||
---
|
||||
|
||||
## Setting Up a Serial Connection
|
||||
|
||||
<Steps>
|
||||
|
||||
1. **Connect the NanoVNA-F V3** to your PC via USB Type-C and power it on.
|
||||
|
||||
2. **Open a serial terminal.** Common options:
|
||||
- **Windows:** [PuTTY](https://www.chiark.greenend.org.uk/~sgtatham/putty/), [Tera Term](https://teratermproject.github.io/index-en.html)
|
||||
- **Linux:** `minicom`, `screen`, `picocom`
|
||||
- **macOS:** `screen`, `minicom`
|
||||
|
||||
3. **Configure the connection:**
|
||||
- **Port:** The COM port or device path for the NanoVNA-F V3 (e.g., `COM3` on Windows, `/dev/ttyACM0` on Linux)
|
||||
- **Baud rate:** `115200` (the device is adaptive, but 115200 is the standard setting)
|
||||
- **Data bits:** 8
|
||||
- **Stop bits:** 1
|
||||
- **Parity:** None
|
||||
- **Flow control:** None
|
||||
|
||||
4. **Press Enter** to get a command prompt. Type `help` to verify the connection is working.
|
||||
|
||||
</Steps>
|
||||
|
||||
**Linux quick-connect example:**
|
||||
|
||||
```bash
|
||||
screen /dev/ttyACM0 115200
|
||||
```
|
||||
|
||||
```bash
|
||||
picocom /dev/ttyACM0 -b 115200
|
||||
```
|
||||
|
||||
<Aside>
|
||||
The baud rate is adaptive -- the device auto-detects the rate used by your terminal. Using 115200 is recommended as it provides reliable high-speed transfer.
|
||||
</Aside>
|
||||
|
||||
---
|
||||
|
||||
## Command Syntax
|
||||
|
||||
Commands are plain ASCII text, terminated by a carriage return (`CR`, ASCII 013). Most terminals send CR when you press Enter.
|
||||
|
||||
```
|
||||
command {required_parameter} [optional_parameter]
|
||||
```
|
||||
|
||||
- Curly braces `{ }` indicate required parameters
|
||||
- Square brackets `[ ]` indicate optional parameters
|
||||
- Space characters between tokens are ignored
|
||||
- Commands are case-sensitive (most are lowercase, but `SN`, `LCD_ID` are uppercase)
|
||||
|
||||
---
|
||||
|
||||
## Most Useful Commands
|
||||
|
||||
Here are the commands you will reach for most often. For the full list of all 28 commands with detailed parameter tables, see the [Console Command Reference](/reference/command-reference/).
|
||||
|
||||
### Device Information
|
||||
|
||||
| Command | What It Returns |
|
||||
|---|---|
|
||||
| `version` | Firmware version string |
|
||||
| `info` | Hardware revision, firmware, build info |
|
||||
| `SN` | Unique 16-bit serial number |
|
||||
|
||||
### Sweep Control
|
||||
|
||||
| Command | Example | Description |
|
||||
|---|---|---|
|
||||
| `sweep` | `sweep 100000000 500000000 201` | Set sweep: 100 MHz to 500 MHz, 201 points |
|
||||
| `sweep start 50000000` | | Change only the start frequency to 50 MHz |
|
||||
| `pause` | | Freeze the sweep |
|
||||
| `resume` | | Continue sweeping |
|
||||
|
||||
### Data Retrieval
|
||||
|
||||
| Command | Example | Description |
|
||||
|---|---|---|
|
||||
| `frequencies` | | List all sweep point frequencies |
|
||||
| `data 0` | | Get S11 complex data (real + imaginary) |
|
||||
| `data 1` | | Get S21 complex data |
|
||||
| `scan 1000000 6000000000 101 7` | | Sweep 1 MHz to 6 GHz, 101 points, output all data |
|
||||
|
||||
### Calibration
|
||||
|
||||
| Command | Description |
|
||||
|---|---|
|
||||
| `cal` | Show current calibration status |
|
||||
| `cal open` | Perform open calibration step |
|
||||
| `cal short` | Perform short calibration step |
|
||||
| `cal load` | Perform load calibration step |
|
||||
| `cal thru` | Perform through calibration step |
|
||||
| `cal done` | Compute calibration coefficients |
|
||||
| `save 0` | Save to slot 0 |
|
||||
| `recall 0` | Recall from slot 0 |
|
||||
|
||||
### Trace and Marker Control
|
||||
|
||||
```
|
||||
trace 0 logmag # Set trace 0 to log magnitude
|
||||
trace 0 scale 10 # Set 10 dB per division
|
||||
marker 1 on # Enable marker 1
|
||||
marker 1 200 # Move marker 1 to sweep point 200
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Scripting Example
|
||||
|
||||
You can pipe commands to the device from a shell script for automated measurements. Here is a minimal Python example:
|
||||
|
||||
```python
|
||||
import serial
|
||||
import time
|
||||
|
||||
ser = serial.Serial('/dev/ttyACM0', 115200, timeout=2)
|
||||
time.sleep(0.5)
|
||||
|
||||
# Set sweep range
|
||||
ser.write(b'sweep 430000000 440000000 201\r')
|
||||
time.sleep(0.1)
|
||||
|
||||
# Wait for sweep to complete
|
||||
time.sleep(3)
|
||||
|
||||
# Read S11 data
|
||||
ser.write(b'data 0\r')
|
||||
time.sleep(0.5)
|
||||
response = ser.read(ser.in_waiting).decode('ascii')
|
||||
print(response)
|
||||
|
||||
ser.close()
|
||||
```
|
||||
|
||||
<Aside type="tip">
|
||||
When scripting, add short delays between commands to allow the device to process each one. Reading back the response before sending the next command is also good practice.
|
||||
</Aside>
|
||||
|
||||
---
|
||||
|
||||
## Tips
|
||||
|
||||
- **One connection at a time.** If NanoVNA-Saver is connected, close it before opening a serial terminal, and vice versa.
|
||||
- **The `reset` command drops USB.** After sending `reset`, you must reconnect your terminal session.
|
||||
- **Use `cal reset` before recalibrating via console.** This clears the previous calibration state.
|
||||
- **Save your work.** Console-issued calibrations are volatile until you run `save [slot]`.
|
||||
114
src/content/docs/how-to/pc-software/usb-connection.mdx
Normal file
@ -0,0 +1,114 @@
|
||||
---
|
||||
title: USB Connection
|
||||
description: Connect the NanoVNA-F V3 to PC software
|
||||
---
|
||||
|
||||
import { Aside, Steps } from '@astrojs/starlight/components';
|
||||
import pcSoftware1 from '../../../../assets/screenshots/pc-software-1.png';
|
||||
import pcSoftware2 from '../../../../assets/screenshots/pc-software-2.png';
|
||||
import pcSoftware3 from '../../../../assets/screenshots/pc-software-3.png';
|
||||
|
||||
The NanoVNA-F V3 connects to a PC over USB Type-C, appearing as a virtual COM port. The recommended PC software is **NanoVNA-Saver**, which provides a full graphical interface for remote control, data logging, and screenshot capture.
|
||||
|
||||
---
|
||||
|
||||
## Download NanoVNA-Saver
|
||||
|
||||
| Platform | Source |
|
||||
|---|---|
|
||||
| **Windows** (SYSJOINT build) | [Nanovna-Saver-0.3.12-by-SYSJOINT.exe](http://www.sysjoint.com/file/Nanovna-Saver-0.3.12-by-SYSJOINT.exe) |
|
||||
| **Windows / Linux / macOS** (community) | [NanoVNA-Saver GitHub Releases](https://github.com/NanoVNA-Saver/nanovna-saver/releases) |
|
||||
|
||||
<Aside>
|
||||
The SYSJOINT build is a standalone Windows executable tested with the NanoVNA-F V3. The community GitHub release supports all three platforms and is updated more frequently.
|
||||
</Aside>
|
||||
|
||||
---
|
||||
|
||||
## Driver Requirements
|
||||
|
||||
| Operating System | Driver Needed |
|
||||
|---|---|
|
||||
| **Windows 10 / 11** | No driver required -- plug and play |
|
||||
| **Windows 8 and earlier** | Install the STM32 Virtual COM Port driver from [ST STSW-STM32102](https://www.st.com/en/development-tools/stsw-stm32102.html) |
|
||||
| **Linux** | No driver required -- the `cdc_acm` kernel module handles it automatically |
|
||||
| **macOS** | No driver required on modern macOS versions |
|
||||
|
||||
<Aside type="tip">
|
||||
On Linux, you may need to add your user to the `dialout` group (or `uucp` on Arch-based distributions) to access the serial port without root:
|
||||
|
||||
```bash
|
||||
sudo usermod -aG dialout $USER
|
||||
```
|
||||
|
||||
Log out and back in for the change to take effect.
|
||||
</Aside>
|
||||
|
||||
---
|
||||
|
||||
## Connecting to NanoVNA-Saver
|
||||
|
||||
<Steps>
|
||||
|
||||
1. **Power on the NanoVNA-F V3** and connect it to your PC with a USB Type-C cable.
|
||||
|
||||
2. **Launch NanoVNA-Saver.** On Windows, double-click `nanovna-saver.exe`. On Linux/macOS, run the application from the extracted release or installed package.
|
||||
|
||||
3. **Select the COM port.** The NanoVNA-F V3 appears as a serial device. On Windows this is typically `COM3` or similar; on Linux it appears as `/dev/ttyACM0`.
|
||||
|
||||
4. **Click "Connect to Device."** NanoVNA-Saver reads the device information and begins displaying live sweep data.
|
||||
|
||||
</Steps>
|
||||
|
||||
<img src={pcSoftware1.src} alt="NanoVNA-Saver main window connected to NanoVNA-F V3" style="width:100%; border-radius:8px; margin:1rem 0;" />
|
||||
|
||||
Once connected, NanoVNA-Saver provides:
|
||||
|
||||
- Live S11 and S21 traces with multiple display formats
|
||||
- Marker placement and readout
|
||||
- Sweep frequency range control
|
||||
- Calibration management
|
||||
- Data export (Touchstone S1P/S2P, CSV, screenshots)
|
||||
|
||||
<img src={pcSoftware2.src} alt="NanoVNA-Saver sweep display" style="width:100%; border-radius:8px; margin:1rem 0;" />
|
||||
|
||||
---
|
||||
|
||||
## Taking Screenshots via PC Software
|
||||
|
||||
NanoVNA-Saver can capture the NanoVNA-F V3's screen display as an image.
|
||||
|
||||
<Steps>
|
||||
|
||||
1. With the device connected, click **Manage** to open the Device Settings dialog.
|
||||
|
||||
2. Click the **Screenshot** button. The capture takes approximately 5 seconds as pixel data transfers over USB.
|
||||
|
||||
3. Once the screenshot appears, right-click the image area and select **Save Image** to export it as a PNG file.
|
||||
|
||||
</Steps>
|
||||
|
||||
<img src={pcSoftware3.src} alt="NanoVNA-Saver screenshot capture dialog" style="width:100%; border-radius:8px; margin:1rem 0;" />
|
||||
|
||||
<Aside type="tip">
|
||||
Screenshots taken via PC software capture the exact LCD contents at 800 x 480 resolution, making them suitable for documentation or sharing measurement results.
|
||||
</Aside>
|
||||
|
||||
---
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
**Device not detected:**
|
||||
- Try a different USB cable -- some cables are charge-only and lack data lines
|
||||
- On Windows 8 or earlier, install the STM32 Virtual COM Port driver
|
||||
- Disconnect and reconnect the USB cable
|
||||
- Restart the NanoVNA-F V3
|
||||
|
||||
**COM port appears but connection fails:**
|
||||
- Close any other program that may be using the same COM port (serial terminals, other VNA software)
|
||||
- Only one application can use the serial port at a time
|
||||
|
||||
**Connection drops intermittently:**
|
||||
- Use a shorter, higher-quality USB cable
|
||||
- Avoid USB hubs -- connect directly to a port on the PC
|
||||
- Check that the USB Type-C connector is fully seated
|
||||
120
src/content/docs/index.mdx
Normal file
@ -0,0 +1,120 @@
|
||||
---
|
||||
title: NanoVNA-F V3 Documentation
|
||||
description: Portable vector network analyzer — 1 MHz to 6 GHz
|
||||
template: splash
|
||||
hero:
|
||||
tagline: Measure antennas, filters, cables, and impedance from 1 MHz to 6 GHz — with a rugged, pocket-sized analyzer.
|
||||
image:
|
||||
file: ../../assets/logo.svg
|
||||
actions:
|
||||
- text: Quick Start Guide
|
||||
link: /getting-started/quick-start/
|
||||
icon: right-arrow
|
||||
- text: What is NanoVNA-F V3?
|
||||
link: /getting-started/overview/
|
||||
variant: minimal
|
||||
---
|
||||
|
||||
import { Card, CardGrid, LinkCard } from '@astrojs/starlight/components';
|
||||
import frontView from '../../assets/screenshots/front-view.png';
|
||||
|
||||
<div class="landing-hero">
|
||||
<img src={frontView.src} alt="NanoVNA-F V3 portable vector network analyzer" />
|
||||
<div class="hero-caption">NanoVNA-F V3 — 1 MHz to 6 GHz portable VNA with 4.3-inch IPS display</div>
|
||||
</div>
|
||||
|
||||
<div class="specs-strip">
|
||||
<div class="spec-tile">
|
||||
<span class="spec-val">1 MHz - 6 <span class="spec-unit">GHz</span></span>
|
||||
<span class="spec-lbl">Frequency Range</span>
|
||||
</div>
|
||||
<div class="spec-tile">
|
||||
<span class="spec-val">65 <span class="spec-unit">dB</span></span>
|
||||
<span class="spec-lbl">Dynamic Range</span>
|
||||
</div>
|
||||
<div class="spec-tile">
|
||||
<span class="spec-val">4.3" <span class="spec-unit">IPS</span></span>
|
||||
<span class="spec-lbl">Display</span>
|
||||
</div>
|
||||
<div class="spec-tile">
|
||||
<span class="spec-val">4500 <span class="spec-unit">mAh</span></span>
|
||||
<span class="spec-lbl">Battery</span>
|
||||
</div>
|
||||
<div class="spec-tile">
|
||||
<span class="spec-val">801 <span class="spec-unit">pts</span></span>
|
||||
<span class="spec-lbl">Sweep Points</span>
|
||||
</div>
|
||||
<div class="spec-tile">
|
||||
<span class="spec-val">200 <span class="spec-unit">pts/s</span></span>
|
||||
<span class="spec-lbl">Sweep Speed</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
## Who Is This For?
|
||||
|
||||
<div class="audience-grid">
|
||||
<div class="audience-card">
|
||||
<span class="audience-role">Ham Radio Operators</span>
|
||||
<h3>Antenna Testing and Tuning</h3>
|
||||
<p>Check SWR, impedance, and resonant frequency of your antennas from HF through SHF. Tune matching networks in the field with real-time Smith chart display.</p>
|
||||
<div class="audience-links">
|
||||
<a href="/getting-started/quick-start/">Quick start guide</a>
|
||||
<a href="/tutorials/practical-projects/testing-antenna/">Testing an antenna</a>
|
||||
<a href="/tutorials/calibration/full-calibration/">Full calibration procedure</a>
|
||||
<a href="/how-to/display-traces/display-formats/">Display format guide</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="audience-card">
|
||||
<span class="audience-role">RF Engineers and Hobbyists</span>
|
||||
<h3>Component and Cable Characterization</h3>
|
||||
<p>Measure filters, amplifiers, attenuators, cables, and passive networks. Export S-parameter data for simulation, use TDR for cable fault location, and automate measurements via console commands.</p>
|
||||
<div class="audience-links">
|
||||
<a href="/reference/specifications/">Full specifications</a>
|
||||
<a href="/reference/command-reference/">Console command reference</a>
|
||||
<a href="/how-to/measurement-tools/tdr-mode/">TDR cable measurement</a>
|
||||
<a href="/how-to/measurement-tools/s-parameter-export/">S-parameter export</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
## Documentation Sections
|
||||
|
||||
<div class="doc-paths">
|
||||
<a class="doc-path" href="/getting-started/overview/">
|
||||
<h3>Getting Started</h3>
|
||||
<span class="path-count">4 pages</span>
|
||||
<p>Overview, quick start, hardware tour, and VNA basics. Everything you need to go from unboxing to your first measurement.</p>
|
||||
</a>
|
||||
<a class="doc-path" href="/tutorials/first-measurements/first-s11/">
|
||||
<h3>Tutorials</h3>
|
||||
<span class="path-count">9 guides</span>
|
||||
<p>Step-by-step walkthroughs: first S11 and S21 measurements, full calibration, port extension, antenna testing, filter measurement, and TDR cable analysis.</p>
|
||||
</a>
|
||||
<a class="doc-path" href="/how-to/display-traces/configure-traces/">
|
||||
<h3>How-To Guides</h3>
|
||||
<span class="path-count">15 guides</span>
|
||||
<p>Focused procedures for display configuration, markers, signal generator, CW pulse, TDR, data export, PC software, firmware updates, and more.</p>
|
||||
</a>
|
||||
<a class="doc-path" href="/reference/specifications/">
|
||||
<h3>Reference</h3>
|
||||
<span class="path-count">7 pages</span>
|
||||
<p>Specifications, complete menu map, screen region guide, all 28 console commands, calibration codes, and LED indicators.</p>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
## Popular Pages
|
||||
|
||||
<CardGrid>
|
||||
<LinkCard title="Full Calibration" description="Complete OSLT calibration procedure" href="/tutorials/calibration/full-calibration/" />
|
||||
<LinkCard title="Console Commands" description="All 28 serial commands with syntax" href="/reference/command-reference/" />
|
||||
<LinkCard title="Menu Map" description="Complete menu hierarchy" href="/reference/user-interface/menu-map/" />
|
||||
<LinkCard title="TDR Mode" description="Cable length and fault measurement" href="/how-to/measurement-tools/tdr-mode/" />
|
||||
</CardGrid>
|
||||
|
||||
<div class="landing-footer">
|
||||
|
||||
**NanoVNA-F V3** by SYSJOINT Information Technology Co., Ltd.
|
||||
|
||||
Website: [sysjoint.com](http://www.sysjoint.com) | Support: [support@sysjoint.com](mailto:support@sysjoint.com) | Forum: [groups.io/g/nanovna-f-v3](https://groups.io/g/nanovna-f-v3)
|
||||
|
||||
</div>
|
||||
92
src/content/docs/reference/calibration-codes.mdx
Normal file
@ -0,0 +1,92 @@
|
||||
---
|
||||
title: Calibration Status Codes
|
||||
description: Understanding the calibration indicators on the main screen
|
||||
---
|
||||
|
||||
import { Aside } from '@astrojs/starlight/components';
|
||||
|
||||
The calibration status indicator appears at the bottom of the NanoVNA-F V3 main screen (region 4). It uses a compact string of letters and symbols to communicate the current calibration state at a glance.
|
||||
|
||||
---
|
||||
|
||||
## Status Code Reference
|
||||
|
||||
| Code | Meaning | Description |
|
||||
|---|---|---|
|
||||
| **O** | OPEN done | The open calibration standard has been measured |
|
||||
| **S** | SHORT done | The short calibration standard has been measured |
|
||||
| **L** | LOAD done | The 50-ohm load calibration standard has been measured |
|
||||
| **T** | THRU done | The through calibration between PORT1 and PORT2 has been measured |
|
||||
| **C** | Calibrated | Calibration coefficients have been computed (you tapped DONE) |
|
||||
| **\*** | Not saved | Calibration data exists in memory but has not been saved to a storage slot -- it will be lost on power-off |
|
||||
| **c** | Interpolated | The current sweep range differs from the calibrated range, so the device is using interpolated calibration data |
|
||||
| **Cn** | Slot number | Calibration data is loaded from storage slot _n_ (where _n_ is 0 through 12) |
|
||||
|
||||
---
|
||||
|
||||
## Reading the Status String
|
||||
|
||||
The codes appear together as a combined string. Here are common examples and how to interpret them:
|
||||
|
||||
### During Calibration
|
||||
|
||||
| Display | Meaning |
|
||||
|---|---|
|
||||
| `O` | Only the open standard has been measured so far |
|
||||
| `OS` | Open and short standards measured |
|
||||
| `OSL` | Open, short, and load measured -- ready for THRU if S21 calibration is needed |
|
||||
| `OSLT` | All four standards measured -- tap DONE to compute coefficients |
|
||||
|
||||
### After Calibration
|
||||
|
||||
| Display | Meaning |
|
||||
|---|---|
|
||||
| `OSLT C*` | Calibration is complete but not saved. Power-off will discard it. |
|
||||
| `C0` | Device is using calibration data from slot 0 |
|
||||
| `C5` | Device is using calibration data from slot 5 |
|
||||
| `c0` | Calibration from slot 0 is being interpolated to the current frequency range |
|
||||
| `c3` | Calibration from slot 3 is being interpolated |
|
||||
|
||||
<Aside type="caution">
|
||||
The `*` (asterisk) means your calibration is volatile. Always save to a slot after calibration:
|
||||
**CAL > CALIBRATE > DONE > SAVE n**
|
||||
</Aside>
|
||||
|
||||
---
|
||||
|
||||
## When Interpolation Occurs
|
||||
|
||||
The lowercase `c` appears when the current sweep start/stop frequencies or point count differ from the settings that were active when the calibration was performed. The device interpolates the stored calibration data to estimate correction values at the new frequencies.
|
||||
|
||||
Interpolated calibration is less accurate than a native calibration at the exact sweep settings. For best results:
|
||||
|
||||
1. Set your desired frequency range **before** calibrating
|
||||
2. Avoid changing the sweep range after calibration
|
||||
3. If you must change the range, recalibrate at the new settings
|
||||
|
||||
<Aside type="tip">
|
||||
You can store up to 13 calibrations (slots 0-12), each at a different frequency range. Use the RECALL function to switch between them without recalibrating.
|
||||
</Aside>
|
||||
|
||||
---
|
||||
|
||||
## No Calibration Status
|
||||
|
||||
If no calibration status string is visible at the bottom of the screen, it means:
|
||||
|
||||
- No calibration data is loaded, **or**
|
||||
- Calibration has been explicitly disabled via **CAL > APPLY** (toggled off)
|
||||
|
||||
In either case, measurements are uncorrected and should be treated as approximate.
|
||||
|
||||
---
|
||||
|
||||
## Checking Calibration via Console
|
||||
|
||||
You can also query the calibration status from a serial terminal:
|
||||
|
||||
```
|
||||
cal
|
||||
```
|
||||
|
||||
This returns the same status string shown on the display, along with additional calibration details.
|
||||
83
src/content/docs/reference/charging-leds.mdx
Normal file
@ -0,0 +1,83 @@
|
||||
---
|
||||
title: Charging & LED Indicators
|
||||
description: LED behavior during charging and operation
|
||||
---
|
||||
|
||||
import { Aside } from '@astrojs/starlight/components';
|
||||
|
||||
The NanoVNA-F V3 has two indicator LEDs -- one red and one blue -- located on the top edge of the device. Their behavior communicates the current charging and power state without needing to check the on-screen battery voltage.
|
||||
|
||||
---
|
||||
|
||||
## LED State Reference
|
||||
|
||||
| Device State | RED LED | BLUE LED |
|
||||
|---|---|---|
|
||||
| Fully charged (USB connected) | OFF | ON (steady) |
|
||||
| Normal operation (no USB) | OFF | OFF |
|
||||
| Low battery warning | OFF | ON (steady) |
|
||||
| Charging (device off) | ON (steady) | FLASH |
|
||||
| Charging while operating | FLASH | OFF |
|
||||
|
||||
---
|
||||
|
||||
## Understanding Each State
|
||||
|
||||
### Fully Charged
|
||||
|
||||
When the battery is fully charged and the USB cable is still connected, the blue LED remains on steadily and the red LED is off. You can safely disconnect the USB cable or continue operating.
|
||||
|
||||
### Normal Operation
|
||||
|
||||
During normal battery-powered operation (no USB connected), both LEDs are off. Check the on-screen battery voltage display (region 8) for remaining charge.
|
||||
|
||||
### Low Battery
|
||||
|
||||
When the battery voltage drops to a low level, the blue LED turns on steadily as a warning. The red LED remains off. Charge the device soon to avoid data loss from unexpected shutdown.
|
||||
|
||||
<Aside type="caution">
|
||||
Charge the device when the on-screen voltage reading drops below 3.3 V. Operating at very low voltage may cause measurement inaccuracy before the device shuts down.
|
||||
</Aside>
|
||||
|
||||
### Charging (Device Off)
|
||||
|
||||
When the device is powered off and connected to USB for charging, the red LED is on steadily and the blue LED flashes. This is the normal charging indication.
|
||||
|
||||
### Charging While Operating
|
||||
|
||||
When you continue using the device while it charges over USB, the red LED flashes and the blue LED is off. The device is simultaneously drawing power for operation and charging the battery.
|
||||
|
||||
---
|
||||
|
||||
## Charging Guidelines
|
||||
|
||||
| Parameter | Value |
|
||||
|---|---|
|
||||
| Charging interface | USB Type-C |
|
||||
| Charging voltage | 4.7 V to 5.5 V |
|
||||
| Battery capacity | 4500 mAh (3.7 V lithium-ion) |
|
||||
| Typical battery life | Up to 5 hours |
|
||||
| Full charge voltage | Approximately 4.2 V |
|
||||
| Low battery threshold | Below 3.3 V |
|
||||
|
||||
<Aside type="tip">
|
||||
The NanoVNA-F V3 also provides a USB-A power output port rated at 5 V / 1 A, which can be used to charge other devices. This output is active when the NanoVNA-F V3 is powered on.
|
||||
</Aside>
|
||||
|
||||
---
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
**LEDs do not light up at all during charging:**
|
||||
- Verify the USB cable is properly seated in the Type-C port
|
||||
- Try a different USB cable or power source
|
||||
- Ensure the power source provides at least 4.7 V
|
||||
|
||||
**Device will not power on:**
|
||||
- If the battery is deeply discharged, connect USB power and wait several minutes before attempting to power on
|
||||
- The device can operate while charging if the battery is too low to start on its own
|
||||
|
||||
**Battery life is shorter than expected:**
|
||||
- Higher brightness settings consume more power -- reduce to 60% or 40% for field work
|
||||
- Continuous sweeping with maximum points (801) uses more power than lower point counts
|
||||
- Cold temperatures reduce effective battery capacity
|
||||
539
src/content/docs/reference/command-reference.mdx
Normal file
@ -0,0 +1,539 @@
|
||||
---
|
||||
title: Console Command Reference
|
||||
description: Complete reference for all 28 serial console commands
|
||||
---
|
||||
|
||||
import { Aside } from '@astrojs/starlight/components';
|
||||
import CommandTable from '../../../components/CommandTable.astro';
|
||||
import consoleCommands from '../../../assets/screenshots/console-commands.png';
|
||||
|
||||
The NanoVNA-F V3 accepts 28 ASCII commands over its USB serial interface. Commands can be sent from any serial terminal (PuTTY, screen, minicom) or programmatically from scripts.
|
||||
|
||||
For connection setup, see the [Console Commands how-to guide](/how-to/pc-software/console-commands/).
|
||||
|
||||
<img src={consoleCommands.src} alt="Console command output on the NanoVNA-F V3" style="width:100%; max-width:520px; border-radius:8px; margin:1.5rem 0;" />
|
||||
|
||||
---
|
||||
|
||||
## Command Summary
|
||||
|
||||
<CommandTable commands={[
|
||||
{ name: "help", syntax: "help", description: "List all registered commands" },
|
||||
{ name: "reset", syntax: "reset", description: "Reset the device (USB disconnects)" },
|
||||
{ name: "cwfreq", syntax: "cwfreq {freq}", description: "Set CW pulse frequency in Hz" },
|
||||
{ name: "saveconfig", syntax: "saveconfig", description: "Save language and touch calibration" },
|
||||
{ name: "clearconfig", syntax: "clearconfig 1234", description: "Factory reset (all data lost)" },
|
||||
{ name: "data", syntax: "data [0|1]", description: "Get measurement data (0=S11, 1=S21)" },
|
||||
{ name: "frequencies", syntax: "frequencies", description: "Get sweep frequency list" },
|
||||
{ name: "scan", syntax: "scan {start} {stop} [points] [outmask]", description: "Scan and output data (outmask 0-7)" },
|
||||
{ name: "sweep", syntax: "sweep [start] [stop] [points]", description: "Set sweep parameters" },
|
||||
{ name: "touchcal", syntax: "touchcal", description: "Calibrate the touchscreen" },
|
||||
{ name: "touchtest", syntax: "touchtest", description: "Test touch panel input" },
|
||||
{ name: "pause", syntax: "pause", description: "Pause the sweep" },
|
||||
{ name: "resume", syntax: "resume", description: "Resume the sweep" },
|
||||
{ name: "cal", syntax: "cal [load|open|short|thru|done|reset|on|off]", description: "Calibration commands" },
|
||||
{ name: "save", syntax: "save [id]", description: "Save state to slot (0-6)" },
|
||||
{ name: "recall", syntax: "recall [id]", description: "Recall state from slot (0-6)" },
|
||||
{ name: "trace", syntax: "trace [0-3|all] [format|scale|refpos|channel|off] [value]", description: "View or set trace attributes" },
|
||||
{ name: "marker", syntax: "marker [1-4] [on|off|{index}]", description: "View or set marker attributes" },
|
||||
{ name: "edelay", syntax: "edelay [value]", description: "Set electrical delay in nanoseconds" },
|
||||
{ name: "pwm", syntax: "pwm {0.0-1.0}", description: "Set screen brightness (0=off, 1=full)" },
|
||||
{ name: "beep", syntax: "beep on/off", description: "Test the buzzer" },
|
||||
{ name: "lcd", syntax: "lcd {X} {Y} {W} {H} {color}", description: "Fill rectangle on LCD (16-bit hex RGB)" },
|
||||
{ name: "capture", syntax: "capture", description: "Get screenshot (hex, 800x480, little-endian)" },
|
||||
{ name: "version", syntax: "version", description: "Get firmware version string" },
|
||||
{ name: "info", syntax: "info", description: "Get device information" },
|
||||
{ name: "SN", syntax: "SN", description: "Get 16-bit serial number" },
|
||||
{ name: "resolution", syntax: "resolution", description: "Get LCD resolution" },
|
||||
{ name: "LCD_ID", syntax: "LCD_ID", description: "Get LCD controller ID" }
|
||||
]} />
|
||||
|
||||
---
|
||||
|
||||
## Detailed Command Reference
|
||||
|
||||
### help
|
||||
|
||||
Lists all registered commands.
|
||||
|
||||
```
|
||||
help
|
||||
```
|
||||
|
||||
No parameters. Returns the full command list with brief descriptions.
|
||||
|
||||
---
|
||||
|
||||
### reset
|
||||
|
||||
Resets the device. The USB connection will drop, so you must reconnect your serial terminal afterward.
|
||||
|
||||
```
|
||||
reset
|
||||
```
|
||||
|
||||
<Aside type="caution">
|
||||
Any unsaved calibration data will be lost. Save your state first with the `save` command if needed.
|
||||
</Aside>
|
||||
|
||||
---
|
||||
|
||||
### cwfreq
|
||||
|
||||
Sets the CW pulse frequency. In this mode PORT1 outputs a pulsed signal, not a continuous wave.
|
||||
|
||||
```
|
||||
cwfreq {frequency_hz}
|
||||
```
|
||||
|
||||
**Parameters:**
|
||||
|
||||
| Parameter | Required | Description |
|
||||
|---|---|---|
|
||||
| `frequency_hz` | Yes | Frequency in Hz |
|
||||
|
||||
**Example:**
|
||||
```
|
||||
cwfreq 450000000
|
||||
```
|
||||
Sets the CW pulse frequency to 450 MHz.
|
||||
|
||||
---
|
||||
|
||||
### saveconfig
|
||||
|
||||
Saves language setting and touchscreen calibration data to persistent storage.
|
||||
|
||||
```
|
||||
saveconfig
|
||||
```
|
||||
|
||||
<Aside type="tip">
|
||||
Always run `saveconfig` after `touchcal` to persist the touchscreen calibration.
|
||||
</Aside>
|
||||
|
||||
---
|
||||
|
||||
### clearconfig
|
||||
|
||||
Restores the device to factory settings. Requires the safety parameter `1234`.
|
||||
|
||||
```
|
||||
clearconfig 1234
|
||||
```
|
||||
|
||||
<Aside type="danger">
|
||||
This erases all calibration data, save slots, language settings, and touch calibration. There is no undo.
|
||||
</Aside>
|
||||
|
||||
---
|
||||
|
||||
### data
|
||||
|
||||
Returns complex measurement data (real and imaginary parts) for each sweep point.
|
||||
|
||||
```
|
||||
data [0|1]
|
||||
```
|
||||
|
||||
**Parameters:**
|
||||
|
||||
| Parameter | Required | Default | Description |
|
||||
|---|---|---|---|
|
||||
| `0` or `1` | No | `0` | `0` = S11 data, `1` = S21 data |
|
||||
|
||||
Output is one line per sweep point, each containing a real and imaginary floating-point value separated by a space.
|
||||
|
||||
---
|
||||
|
||||
### frequencies
|
||||
|
||||
Returns the frequency of each sweep point, one per line, in Hz.
|
||||
|
||||
```
|
||||
frequencies
|
||||
```
|
||||
|
||||
Useful for correlating `data` output with specific frequencies.
|
||||
|
||||
---
|
||||
|
||||
### scan
|
||||
|
||||
Performs a sweep with the given parameters and outputs measurement data according to the output mask.
|
||||
|
||||
```
|
||||
scan {start_hz} {stop_hz} [points] [outmask]
|
||||
```
|
||||
|
||||
**Parameters:**
|
||||
|
||||
| Parameter | Required | Default | Description |
|
||||
|---|---|---|---|
|
||||
| `start_hz` | Yes | -- | Start frequency in Hz |
|
||||
| `stop_hz` | Yes | -- | Stop frequency in Hz |
|
||||
| `points` | No | Current | Number of sweep points |
|
||||
| `outmask` | No | `0` | Bitmask controlling output (see table) |
|
||||
|
||||
**Output mask values:**
|
||||
|
||||
| Mask | Output Fields |
|
||||
|---|---|
|
||||
| `0` | No data output (sweep only) |
|
||||
| `1` | Frequency |
|
||||
| `2` | S11 data |
|
||||
| `3` | Frequency + S11 |
|
||||
| `4` | S21 data |
|
||||
| `5` | Frequency + S21 |
|
||||
| `6` | S11 + S21 |
|
||||
| `7` | Frequency + S11 + S21 |
|
||||
|
||||
**Example:**
|
||||
```
|
||||
scan 200000000 500000000 11 7
|
||||
```
|
||||
Sweeps 200 MHz to 500 MHz with 11 points, outputting frequency, S11, and S21 data.
|
||||
|
||||
---
|
||||
|
||||
### sweep
|
||||
|
||||
Sets sweep parameters without triggering an immediate data output. Two usage forms are available.
|
||||
|
||||
**Form 1: Set start, stop, and points directly**
|
||||
```
|
||||
sweep [start_hz] [stop_hz] [points]
|
||||
```
|
||||
|
||||
**Form 2: Set a single parameter by name**
|
||||
```
|
||||
sweep [start|stop|span|center|cw|points] [value]
|
||||
```
|
||||
|
||||
**Examples:**
|
||||
```
|
||||
sweep 200000000 500000000 78
|
||||
sweep start 200000000
|
||||
sweep center 350000000
|
||||
sweep points 201
|
||||
```
|
||||
|
||||
When called with no arguments, `sweep` returns the current sweep configuration.
|
||||
|
||||
---
|
||||
|
||||
### touchcal
|
||||
|
||||
Initiates touchscreen calibration. A crosshair appears that you must tap accurately (use a stylus).
|
||||
|
||||
```
|
||||
touchcal
|
||||
```
|
||||
|
||||
<Aside>
|
||||
Run `saveconfig` after completing the calibration to store it permanently.
|
||||
</Aside>
|
||||
|
||||
---
|
||||
|
||||
### touchtest
|
||||
|
||||
Enters touchscreen test mode. Touch anywhere to verify coordinates are reported correctly. Press any physical button to exit.
|
||||
|
||||
```
|
||||
touchtest
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### pause
|
||||
|
||||
Pauses the sweep. The display freezes at the last completed sweep.
|
||||
|
||||
```
|
||||
pause
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### resume
|
||||
|
||||
Resumes the sweep after a `pause` command.
|
||||
|
||||
```
|
||||
resume
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### cal
|
||||
|
||||
Manages calibration via the console. When called without parameters, returns the current calibration status string.
|
||||
|
||||
```
|
||||
cal [load|open|short|thru|done|reset|on|off]
|
||||
```
|
||||
|
||||
**Parameters:**
|
||||
|
||||
| Parameter | Description |
|
||||
|---|---|
|
||||
| *(none)* | Print current calibration status |
|
||||
| `open` | Perform open calibration |
|
||||
| `short` | Perform short calibration |
|
||||
| `load` | Perform load calibration |
|
||||
| `thru` | Perform through calibration |
|
||||
| `done` | Finalize calibration (compute coefficients) |
|
||||
| `reset` | Clear calibration data from memory |
|
||||
| `on` | Apply calibration correction |
|
||||
| `off` | Remove calibration correction |
|
||||
|
||||
**Calibration sequence:**
|
||||
```
|
||||
cal reset
|
||||
cal open
|
||||
cal short
|
||||
cal load
|
||||
cal thru
|
||||
cal done
|
||||
save 0
|
||||
```
|
||||
|
||||
<Aside type="caution">
|
||||
Send `cal reset` before starting a new calibration sequence. Connect each calibration standard and wait for 2-3 complete sweeps before issuing the corresponding command.
|
||||
</Aside>
|
||||
|
||||
---
|
||||
|
||||
### save
|
||||
|
||||
Saves calibration data, trace settings, and marker table position to a storage slot.
|
||||
|
||||
```
|
||||
save [id]
|
||||
```
|
||||
|
||||
**Parameters:**
|
||||
|
||||
| Parameter | Required | Description |
|
||||
|---|---|---|
|
||||
| `id` | No | Slot number, 0 through 6 |
|
||||
|
||||
---
|
||||
|
||||
### recall
|
||||
|
||||
Recalls a previously saved state from a storage slot.
|
||||
|
||||
```
|
||||
recall [id]
|
||||
```
|
||||
|
||||
**Parameters:**
|
||||
|
||||
| Parameter | Required | Description |
|
||||
|---|---|---|
|
||||
| `id` | No | Slot number, 0 through 6 |
|
||||
|
||||
---
|
||||
|
||||
### trace
|
||||
|
||||
Views or modifies trace attributes. When called with no arguments, returns the attributes of all active traces.
|
||||
|
||||
```
|
||||
trace [0|1|2|3|all] [{format}|scale|refpos|channel|off] [value]
|
||||
```
|
||||
|
||||
**Format values:** `logmag`, `phase`, `delay`, `smith`, `smithrlc`, `swr`, `polar`, `linear`, `real`, `imag`, `resistance`, `reactance`, `qfactor`
|
||||
|
||||
**Examples:**
|
||||
```
|
||||
trace # Show all trace attributes
|
||||
trace 0 # Show trace 0 attributes
|
||||
trace 0 swr # Set trace 0 format to SWR
|
||||
trace all off # Turn off all traces
|
||||
trace 0 scale 15 # Set trace 0 scale to 15 dB/div
|
||||
trace 1 refpos 5 # Set trace 1 reference position to 5
|
||||
trace 0 channel 1 # Set trace 0 to S21 (0=S11, 1=S21)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### marker
|
||||
|
||||
Views or modifies marker attributes. When called with no arguments, returns the attributes of all active markers.
|
||||
|
||||
```
|
||||
marker [1|2|3|4] [on|off|{index}]
|
||||
```
|
||||
|
||||
**Parameters:**
|
||||
|
||||
| Parameter | Description |
|
||||
|---|---|
|
||||
| `1-4` | Marker number |
|
||||
| `on` | Enable the marker |
|
||||
| `off` | Disable the marker |
|
||||
| `{index}` | Move marker to the given sweep point index |
|
||||
|
||||
**Examples:**
|
||||
```
|
||||
marker # Show all marker attributes
|
||||
marker 1 # Show marker 1 attributes
|
||||
marker 1 off # Turn off marker 1
|
||||
marker 1 56 # Move marker 1 to sweep point 56
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### edelay
|
||||
|
||||
Sets the electrical delay compensation in nanoseconds. Used to de-embed cable or connector delay from phase measurements.
|
||||
|
||||
```
|
||||
edelay [value]
|
||||
```
|
||||
|
||||
**Example:**
|
||||
```
|
||||
edelay -0.1
|
||||
```
|
||||
Sets the delay to -0.1 ns (-100 ps).
|
||||
|
||||
---
|
||||
|
||||
### pwm
|
||||
|
||||
Adjusts the LCD backlight brightness.
|
||||
|
||||
```
|
||||
pwm {0.0-1.0}
|
||||
```
|
||||
|
||||
**Parameters:**
|
||||
|
||||
| Parameter | Required | Description |
|
||||
|---|---|---|
|
||||
| brightness | Yes | 0.0 (off) to 1.0 (full brightness) |
|
||||
|
||||
**Example:**
|
||||
```
|
||||
pwm 0.85
|
||||
```
|
||||
Sets brightness to 85%.
|
||||
|
||||
---
|
||||
|
||||
### beep
|
||||
|
||||
Tests the buzzer.
|
||||
|
||||
```
|
||||
beep on/off
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### lcd
|
||||
|
||||
Draws a filled rectangle on the LCD screen. Useful for testing or custom display overlays.
|
||||
|
||||
```
|
||||
lcd {X} {Y} {WIDTH} {HEIGHT} {color}
|
||||
```
|
||||
|
||||
**Parameters:**
|
||||
|
||||
| Parameter | Description |
|
||||
|---|---|
|
||||
| X | Horizontal position (pixels from left) |
|
||||
| Y | Vertical position (pixels from top) |
|
||||
| WIDTH | Rectangle width in pixels |
|
||||
| HEIGHT | Rectangle height in pixels |
|
||||
| color | 16-bit RGB color in hexadecimal (RGB565 format) |
|
||||
|
||||
**Example:**
|
||||
```
|
||||
lcd 100 100 50 50 F800
|
||||
```
|
||||
Draws a red 50x50 square at position (100, 100). `F800` is pure red in RGB565.
|
||||
|
||||
**Common RGB565 colors:**
|
||||
|
||||
| Color | Hex Value |
|
||||
|---|---|
|
||||
| Red | `F800` |
|
||||
| Green | `07E0` |
|
||||
| Blue | `001F` |
|
||||
| White | `FFFF` |
|
||||
| Black | `0000` |
|
||||
| Yellow | `FFE0` |
|
||||
|
||||
---
|
||||
|
||||
### capture
|
||||
|
||||
Transmits a full screenshot as raw pixel data. Data is hexadecimal, little-endian, 16 bits per pixel, at 800 x 480 resolution.
|
||||
|
||||
```
|
||||
capture
|
||||
```
|
||||
|
||||
<Aside>
|
||||
For a more convenient screenshot workflow, use the NanoVNA-Saver PC software's built-in screenshot feature instead.
|
||||
</Aside>
|
||||
|
||||
---
|
||||
|
||||
### version
|
||||
|
||||
Returns the firmware version string.
|
||||
|
||||
```
|
||||
version
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### info
|
||||
|
||||
Returns device information including hardware revision, firmware version, and build details.
|
||||
|
||||
```
|
||||
info
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### SN
|
||||
|
||||
Returns the unique 16-bit serial number assigned to the device.
|
||||
|
||||
```
|
||||
SN
|
||||
```
|
||||
|
||||
<Aside>
|
||||
The `SN` command is case-sensitive -- it must be uppercase.
|
||||
</Aside>
|
||||
|
||||
---
|
||||
|
||||
### resolution
|
||||
|
||||
Returns the LCD resolution (800 x 480 for the NanoVNA-F V3).
|
||||
|
||||
```
|
||||
resolution
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### LCD_ID
|
||||
|
||||
Returns the LCD controller identification string.
|
||||
|
||||
```
|
||||
LCD_ID
|
||||
```
|
||||
107
src/content/docs/reference/specifications.mdx
Normal file
@ -0,0 +1,107 @@
|
||||
---
|
||||
title: Specifications
|
||||
description: Complete technical specifications for the NanoVNA-F V3
|
||||
---
|
||||
|
||||
import { Aside } from '@astrojs/starlight/components';
|
||||
import SpecCard from '../../../components/SpecCard.astro';
|
||||
import frontView from '../../../assets/screenshots/front-view.png';
|
||||
|
||||
<SpecCard specs={[
|
||||
{ value: "1 MHz - 6", unit: "GHz", label: "Frequency Range" },
|
||||
{ value: "65", unit: "dB", label: "S21 Dynamic Range" },
|
||||
{ value: "4.3\"", label: "IPS Display" },
|
||||
{ value: "4500", unit: "mAh", label: "Battery Capacity" },
|
||||
{ value: "801", label: "Max Sweep Points" },
|
||||
{ value: "200", unit: "pts/s", label: "Sweep Speed" }
|
||||
]} />
|
||||
|
||||
---
|
||||
|
||||
## Full Specifications
|
||||
|
||||
### RF Performance
|
||||
|
||||
| Parameter | Specification | Conditions |
|
||||
|---|---|---|
|
||||
| Frequency range | 1 MHz to 6 GHz | |
|
||||
| RF output power | -10 dBm (max) | |
|
||||
| Frequency accuracy | < +/-1 ppm | |
|
||||
| S21 dynamic range | 65 dB | Below 3 GHz |
|
||||
| | 60 dB | Above 3 GHz |
|
||||
| S11 dynamic range | 50 dB | Below 3 GHz |
|
||||
| | 40 dB | Above 3 GHz |
|
||||
| Sweep points | 11 to 801 | Configurable |
|
||||
| Sweep speed | 200 points/s | |
|
||||
|
||||
### Measurement Capabilities
|
||||
|
||||
| Parameter | Specification |
|
||||
|---|---|
|
||||
| S-parameters | S11 (reflection), S21 (transmission) |
|
||||
| Traces | 4 simultaneous |
|
||||
| Markers | 4 simultaneous |
|
||||
| Calibration slots | 13 (slots 0 through 12) |
|
||||
| Display formats | LOGMAG, PHASE, DELAY, SMITH R+jX, SMITH R+L/C, SWR, Q FACTOR, POLAR, LINEAR, REAL, IMAG, RESISTANCE, REACTANCE |
|
||||
| TDR modes | Low-pass impulse, Low-pass step, Bandpass |
|
||||
| Signal generator | 1 MHz to 6 GHz CW, 0/-3/-6/-9 dB attenuation |
|
||||
|
||||
### Display
|
||||
|
||||
| Parameter | Specification |
|
||||
|---|---|
|
||||
| Screen size | 4.3 inches (diagonal) |
|
||||
| Display type | High-brightness IPS LCD |
|
||||
| Resolution | 800 x 480 pixels |
|
||||
| Touch panel | Resistive (RTP) |
|
||||
| Brightness | 5 levels (100%, 80%, 60%, 40%, 20%) |
|
||||
|
||||
### Power
|
||||
|
||||
| Parameter | Specification |
|
||||
|---|---|
|
||||
| Battery type | Lithium-ion |
|
||||
| Battery voltage | 3.7 V nominal |
|
||||
| Battery capacity | 4500 mAh |
|
||||
| Battery life | Up to 5 hours |
|
||||
| Charging interface | USB Type-C |
|
||||
| Charging voltage | 4.7 V to 5.5 V |
|
||||
| USB power output | USB-A, 5 V / 1 A |
|
||||
|
||||
<Aside type="caution">
|
||||
Charge the device when the battery voltage display drops below 3.3 V. Operating at very low voltage may cause measurement inaccuracy or unexpected shutdown.
|
||||
</Aside>
|
||||
|
||||
### Physical
|
||||
|
||||
| Parameter | Specification |
|
||||
|---|---|
|
||||
| Dimensions | 130 mm x 75 mm x 22 mm |
|
||||
| Shell material | Aluminum alloy |
|
||||
| RF connectors | SMA (2 ports: PORT1 and PORT2) |
|
||||
| Operating temperature | 0 C to 45 C |
|
||||
|
||||
### Connectivity
|
||||
|
||||
| Parameter | Specification |
|
||||
|---|---|
|
||||
| Data / charging port | USB Type-C |
|
||||
| Serial console | Via USB CDC, adaptive baud rate (typically 115200) |
|
||||
| Virtual U-disk mode | USB mass storage for firmware update and file transfer |
|
||||
| PC software | NanoVNA-Saver (Windows, Linux, macOS) |
|
||||
| Export formats | Touchstone S1P, S2P |
|
||||
|
||||
---
|
||||
|
||||
## Included Accessories
|
||||
|
||||
The NanoVNA-F V3 ships with:
|
||||
|
||||
- SMA calibration kit (Open, Short, Load standards)
|
||||
- 2 x 20 cm SMA-JJ RG405 coaxial cables
|
||||
- USB Type-C cable
|
||||
- Protective carrying case
|
||||
|
||||
<Aside type="tip">
|
||||
The included RG405 cables have a typical velocity factor of 0.70 (70%). Set this value in TDR mode for accurate cable length measurements.
|
||||
</Aside>
|
||||
88
src/content/docs/reference/user-interface/keyboard.mdx
Normal file
@ -0,0 +1,88 @@
|
||||
---
|
||||
title: Virtual Keyboard
|
||||
description: Using the on-screen keyboard for frequency and value entry
|
||||
---
|
||||
|
||||
import { Aside, Steps } from '@astrojs/starlight/components';
|
||||
import keyboardScreen from '../../../../assets/screenshots/keyboard-screen.png';
|
||||
|
||||
Whenever the NanoVNA-F V3 needs a numeric value -- frequency, scale, reference position, velocity factor -- the virtual keyboard appears. Understanding its layout and unit keys lets you enter values quickly without counting zeros.
|
||||
|
||||
<img src={keyboardScreen.src} alt="NanoVNA-F V3 virtual keyboard screen" style="width:100%; max-width:520px; border-radius:8px; margin:1.5rem 0;" />
|
||||
|
||||
---
|
||||
|
||||
## Keyboard Layout
|
||||
|
||||
The keyboard is a 4-by-4 grid with numeric keys, a decimal point, a backspace arrow, and four terminator keys:
|
||||
|
||||
| | Col 1 | Col 2 | Col 3 | Col 4 |
|
||||
|---|---|---|---|---|
|
||||
| **Row 1** | `7` | `8` | `9` | `G` |
|
||||
| **Row 2** | `4` | `5` | `6` | `M` |
|
||||
| **Row 3** | `1` | `2` | `3` | `k` |
|
||||
| **Row 4** | `0` | `.` | Backspace | `Ok` |
|
||||
|
||||
---
|
||||
|
||||
## Key Functions
|
||||
|
||||
### Numeric Keys (0-9) and Decimal Point
|
||||
|
||||
Standard digit entry. The decimal point (`.`) inserts a fractional separator. Only one decimal point is accepted per entry.
|
||||
|
||||
### Backspace
|
||||
|
||||
Deletes the last character from the input field. When the input field is empty, pressing backspace closes the keyboard and cancels the entry.
|
||||
|
||||
### Unit / Terminator Keys
|
||||
|
||||
These keys serve a dual purpose: they multiply the entered value by a unit factor **and** immediately submit the result. You do not need to press `Ok` after a unit key.
|
||||
|
||||
| Key | Multiplier | Typical Use |
|
||||
|---|---|---|
|
||||
| **G** | x 1,000,000,000 | GHz (gigahertz) |
|
||||
| **M** | x 1,000,000 | MHz (megahertz) |
|
||||
| **k** | x 1,000 | kHz (kilohertz) |
|
||||
| **Ok** | x 1 | Enter value as-is (Hz, dB, %, etc.) |
|
||||
|
||||
<Aside>
|
||||
The unit keys are context-aware in label only -- mathematically they always apply the same multiplier. When entering a non-frequency value (scale, reference position, velocity factor), `Ok` is the appropriate terminator since no unit conversion is needed.
|
||||
</Aside>
|
||||
|
||||
---
|
||||
|
||||
## Entry Examples
|
||||
|
||||
### Frequency Entry
|
||||
|
||||
| Target Frequency | Keystrokes | What Happens |
|
||||
|---|---|---|
|
||||
| 100 kHz | `1` `0` `0` `k` | 100 x 1,000 = 100,000 Hz |
|
||||
| 433.92 MHz | `4` `3` `3` `.` `9` `2` `M` | 433.92 x 1,000,000 = 433,920,000 Hz |
|
||||
| 2.4 GHz | `2` `.` `4` `G` | 2.4 x 1,000,000,000 = 2,400,000,000 Hz |
|
||||
| 1 MHz | `1` `M` | 1 x 1,000,000 = 1,000,000 Hz |
|
||||
| 50 MHz (long form) | `5` `0` `0` `0` `0` `0` `0` `0` `Ok` | 50,000,000 Hz entered directly |
|
||||
|
||||
### Non-Frequency Entry
|
||||
|
||||
| Target Value | Context | Keystrokes |
|
||||
|---|---|---|
|
||||
| Scale 15 dB/div | DISPLAY > SCALE | `1` `5` `Ok` |
|
||||
| Ref pos 5 | DISPLAY > REF POS | `5` `Ok` |
|
||||
| Velocity factor 70% | TDR > VELOCITY FACTOR | `7` `0` `Ok` |
|
||||
| E-delay -0.1 ns | CONFIG > E-DELAY | `-` `0` `.` `1` `Ok` |
|
||||
|
||||
<Aside type="tip">
|
||||
Use the unit keys to save time. Entering `433.92M` is much faster and less error-prone than typing out `433920000` followed by `Ok`.
|
||||
</Aside>
|
||||
|
||||
---
|
||||
|
||||
## Tips
|
||||
|
||||
- **Leading zeros are optional.** Entering `.5G` is equivalent to `0.5G` and sets 500 MHz.
|
||||
- **Cancel entry** by pressing backspace until the input field is empty, then pressing backspace once more.
|
||||
- **The keyboard closes automatically** after any terminator key (`G`, `M`, `k`, `Ok`) is pressed.
|
||||
- **Negative values** are supported for some parameters (e.g., electrical delay). A minus sign (`-`) may appear as a separate key when the context requires it.
|
||||
- **No confirmation dialog** -- the value is applied immediately when you press a terminator key. Double-check the display after entry.
|
||||
318
src/content/docs/reference/user-interface/menu-map.mdx
Normal file
@ -0,0 +1,318 @@
|
||||
---
|
||||
title: Menu Map
|
||||
description: Complete menu hierarchy of the NanoVNA-F V3
|
||||
---
|
||||
|
||||
import { Aside } from '@astrojs/starlight/components';
|
||||
import MenuTree from '../../../../components/MenuTree.astro';
|
||||
import menuMapFull from '../../../../assets/screenshots/menu-map-full.png';
|
||||
|
||||
The NanoVNA-F V3 organizes all functions into eight top-level menus, accessed by tapping the right-hand touch area or pressing the middle button. Each menu branches into submenus up to three levels deep.
|
||||
|
||||
<img src={menuMapFull.src} alt="NanoVNA-F V3 complete menu structure map" style="width:100%; border-radius:8px; margin:1.5rem 0;" />
|
||||
|
||||
<Aside type="tip">
|
||||
Tap `<BACK` in any submenu to return one level up. Tapping the graph area closes the menu entirely.
|
||||
</Aside>
|
||||
|
||||
---
|
||||
|
||||
## DISPLAY
|
||||
|
||||
Controls traces, display format, scale, reference position, channel assignment, and sweep point count.
|
||||
|
||||
<MenuTree title="DISPLAY" items={[
|
||||
{
|
||||
label: "TRACE",
|
||||
description: "Select which traces are visible and active",
|
||||
children: [
|
||||
{ label: "TRACE 0", description: "Toggle / activate trace 0 (yellow)" },
|
||||
{ label: "TRACE 1", description: "Toggle / activate trace 1 (cyan)" },
|
||||
{ label: "TRACE 2", description: "Toggle / activate trace 2 (green)" },
|
||||
{ label: "TRACE 3", description: "Toggle / activate trace 3 (magenta)" }
|
||||
]
|
||||
},
|
||||
{
|
||||
label: "FORMAT",
|
||||
description: "Set the display format for the active trace",
|
||||
children: [
|
||||
{ label: "LOGMAG", description: "Logarithmic magnitude vs. frequency" },
|
||||
{ label: "PHASE", description: "Phase vs. frequency" },
|
||||
{ label: "DELAY", description: "Group delay vs. frequency (S21 only)" },
|
||||
{ label: "SMITH R+jX", description: "Smith chart, impedance as R+jX (S11 only)" },
|
||||
{ label: "SWR", description: "Voltage standing wave ratio (S11 only)" },
|
||||
{
|
||||
label: ">MORE",
|
||||
description: "Additional display formats",
|
||||
children: [
|
||||
{ label: "Q FACTOR", description: "Quality factor vs. frequency" },
|
||||
{ label: "POLAR", description: "Polar impedance plot (S11 only)" },
|
||||
{ label: "SMITH R+L/C", description: "Smith chart with R+L/C annotation (S11 only)" },
|
||||
{ label: "LINEAR", description: "Linear magnitude vs. frequency" },
|
||||
{ label: "REAL", description: "Real part of S-parameter vs. frequency" },
|
||||
{ label: "IMAG", description: "Imaginary part of S-parameter vs. frequency" },
|
||||
{ label: "RESISTANCE", description: "Resistance vs. frequency" },
|
||||
{ label: "REACTANCE", description: "Reactance vs. frequency" }
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{ label: "SCALE", description: "Set ordinate scale (not applicable to Smith/Polar)" },
|
||||
{ label: "REF POS", description: "Set reference position on the vertical axis (default: 7)" },
|
||||
{ label: "CHANNEL", description: "Toggle active trace between S11 (REFL) and S21 (THRU)" },
|
||||
{ label: "SWEEP POINTS", description: "Set sweep point count (11 to 801)" }
|
||||
]} />
|
||||
|
||||
---
|
||||
|
||||
## MARKER
|
||||
|
||||
Manages up to four markers for reading values, searching peaks, and setting frequency boundaries.
|
||||
|
||||
<MenuTree title="MARKER" items={[
|
||||
{
|
||||
label: "SELECT",
|
||||
description: "Open, activate, or close individual markers",
|
||||
children: [
|
||||
{ label: "MARKER 1", description: "Toggle / activate marker 1" },
|
||||
{ label: "MARKER 2", description: "Toggle / activate marker 2" },
|
||||
{ label: "MARKER 3", description: "Toggle / activate marker 3" },
|
||||
{ label: "MARKER 4", description: "Toggle / activate marker 4" },
|
||||
{ label: "ALL OFF", description: "Turn off all markers at once" },
|
||||
{
|
||||
label: "POSITION",
|
||||
description: "Adjust marker table vertical position on screen",
|
||||
children: [
|
||||
{ label: "MOVE UP", description: "Move marker table upward" },
|
||||
{ label: "CENTER", description: "Center marker table vertically" },
|
||||
{ label: "MOVE DOWN", description: "Move marker table downward" }
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
label: "SEARCH",
|
||||
description: "Move the active marker to a peak or valley",
|
||||
children: [
|
||||
{ label: "MAXIMUM", description: "Jump to the maximum value" },
|
||||
{ label: "MINIMUM", description: "Jump to the minimum value" },
|
||||
{ label: "SEARCH <LEFT", description: "Search for the next peak/valley to the left" },
|
||||
{ label: "SEARCH >RIGHT", description: "Search for the next peak/valley to the right" },
|
||||
{ label: "TRACKING", description: "Continuously track max or min after each sweep" }
|
||||
]
|
||||
},
|
||||
{
|
||||
label: "OPERATIONS",
|
||||
description: "Use the active marker frequency to set sweep boundaries",
|
||||
children: [
|
||||
{ label: ">START", description: "Set marker frequency as sweep start" },
|
||||
{ label: ">STOP", description: "Set marker frequency as sweep stop" },
|
||||
{ label: ">CENTER", description: "Set marker frequency as sweep center" },
|
||||
{ label: ">SPAN", description: "Set span between active marker and next marker" }
|
||||
]
|
||||
},
|
||||
{ label: "SET FREQ", description: "Enter a specific frequency for the active marker" },
|
||||
{ label: "DRAG ON", description: "Enable or disable drag-to-move for the marker table" }
|
||||
]} />
|
||||
|
||||
---
|
||||
|
||||
## STIMULUS
|
||||
|
||||
Controls the sweep frequency range and special output modes.
|
||||
|
||||
<MenuTree title="STIMULUS" items={[
|
||||
{ label: "START", description: "Set sweep start frequency" },
|
||||
{ label: "STOP", description: "Set sweep stop frequency" },
|
||||
{ label: "CENTER", description: "Set sweep center frequency" },
|
||||
{ label: "SPAN", description: "Set sweep frequency span" },
|
||||
{ label: "CW PULSE", description: "Set CW pulse frequency (pulsed output, not continuous wave)" },
|
||||
{
|
||||
label: "SIGNAL GENERATOR",
|
||||
description: "Single-frequency CW generator, 1 MHz to 6 GHz",
|
||||
children: [
|
||||
{ label: "RF OUT", description: "Toggle RF output on/off" },
|
||||
{ label: "FREQ", description: "Set the output frequency" },
|
||||
{ label: "0dB", description: "No attenuation" },
|
||||
{ label: "-3dB", description: "Attenuate output by 3 dB" },
|
||||
{ label: "-6dB", description: "Attenuate output by 6 dB" },
|
||||
{ label: "-9dB", description: "Attenuate output by 9 dB" }
|
||||
]
|
||||
},
|
||||
{ label: "PAUSE SWEEP", description: "Pause or resume the sweep" }
|
||||
]} />
|
||||
|
||||
<Aside>
|
||||
Power attenuation for the signal generator is only available above 23.5 MHz.
|
||||
</Aside>
|
||||
|
||||
---
|
||||
|
||||
## CAL
|
||||
|
||||
Calibration management: perform OSLT calibration, save to slots, apply or reset correction data, and configure port extension.
|
||||
|
||||
<MenuTree title="CAL" items={[
|
||||
{
|
||||
label: "CALIBRATE",
|
||||
description: "Perform Open-Short-Load-Thru calibration steps",
|
||||
children: [
|
||||
{ label: "OPEN", description: "Measure the open standard on PORT1" },
|
||||
{ label: "SHORT", description: "Measure the short standard on PORT1" },
|
||||
{ label: "LOAD", description: "Measure the 50-ohm load standard on PORT1" },
|
||||
{ label: "THRU", description: "Measure the through connection between PORT1 and PORT2" },
|
||||
{
|
||||
label: "DONE",
|
||||
description: "Compute calibration coefficients and optionally save",
|
||||
children: [
|
||||
{ label: "SAVE 0", description: "Save calibration to slot 0" },
|
||||
{ label: "SAVE 1", description: "Save calibration to slot 1" },
|
||||
{ label: "SAVE 2", description: "Save calibration to slot 2" },
|
||||
{ label: "SAVE 3", description: "Save calibration to slot 3" },
|
||||
{ label: "SAVE 4", description: "Save calibration to slot 4" },
|
||||
{ label: "SAVE 5", description: "Save calibration to slot 5" },
|
||||
{ label: "SAVE 6", description: "Save calibration to slot 6" },
|
||||
{ label: "SAVE 7", description: "Save calibration to slot 7" },
|
||||
{ label: "SAVE 8", description: "Save calibration to slot 8" },
|
||||
{ label: "SAVE 9", description: "Save calibration to slot 9" },
|
||||
{ label: "SAVE 10", description: "Save calibration to slot 10" },
|
||||
{ label: "SAVE 11", description: "Save calibration to slot 11" },
|
||||
{ label: "SAVE 12", description: "Save calibration to slot 12" }
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{ label: "RESET", description: "Clear calibration data from memory (flash storage is unaffected)" },
|
||||
{ label: "APPLY", description: "Toggle whether calibration correction is applied to measurements" },
|
||||
{
|
||||
label: "PORT EXTENSION",
|
||||
description: "Compensate for additional cable or adapter length",
|
||||
children: [
|
||||
{ label: "MEASURE OPEN EXTENSION", description: "Automatically measure and apply extension compensation" }
|
||||
]
|
||||
}
|
||||
]} />
|
||||
|
||||
---
|
||||
|
||||
## RECALL / SAVE
|
||||
|
||||
Load or store complete device state -- calibration data, trace settings, and marker table position -- across 13 slots (0 through 12).
|
||||
|
||||
<MenuTree title="RECALL / SAVE" items={[
|
||||
{
|
||||
label: "RECALL",
|
||||
description: "Load a previously saved state",
|
||||
children: [
|
||||
{ label: "RECALL 0" },
|
||||
{ label: "RECALL 1" },
|
||||
{ label: "RECALL 2" },
|
||||
{ label: "RECALL 3" },
|
||||
{ label: "RECALL 4" },
|
||||
{ label: "RECALL 5" },
|
||||
{ label: "RECALL 6" },
|
||||
{ label: "RECALL 7" },
|
||||
{ label: "RECALL 8" },
|
||||
{ label: "RECALL 9" },
|
||||
{ label: "RECALL 10" },
|
||||
{ label: "RECALL 11" },
|
||||
{ label: "RECALL 12" }
|
||||
]
|
||||
},
|
||||
{
|
||||
label: "SAVE",
|
||||
description: "Store current state to a slot",
|
||||
children: [
|
||||
{ label: "SAVE 0" },
|
||||
{ label: "SAVE 1" },
|
||||
{ label: "SAVE 2" },
|
||||
{ label: "SAVE 3" },
|
||||
{ label: "SAVE 4" },
|
||||
{ label: "SAVE 5" },
|
||||
{ label: "SAVE 6" },
|
||||
{ label: "SAVE 7" },
|
||||
{ label: "SAVE 8" },
|
||||
{ label: "SAVE 9" },
|
||||
{ label: "SAVE 10" },
|
||||
{ label: "SAVE 11" },
|
||||
{ label: "SAVE 12" }
|
||||
]
|
||||
}
|
||||
]} />
|
||||
|
||||
<Aside>
|
||||
Each slot stores calibration coefficients, all trace configurations, and the marker table position. After calibration, always save to a slot -- unsaved calibration (indicated by `*`) is lost on power-off.
|
||||
</Aside>
|
||||
|
||||
---
|
||||
|
||||
## TDR
|
||||
|
||||
Time Domain Reflectometry mode converts frequency-domain S11 data into distance-domain measurements for cable testing and fault location.
|
||||
|
||||
<MenuTree title="TDR" items={[
|
||||
{ label: "TDR ON", description: "Enable or disable TDR processing" },
|
||||
{ label: "LOW PASS IMPULSE", description: "Low-pass impulse response mode" },
|
||||
{ label: "LOW PASS STEP", description: "Low-pass step response mode" },
|
||||
{ label: "BANDPASS", description: "Bandpass mode (default)" },
|
||||
{
|
||||
label: "WINDOW",
|
||||
description: "Select the windowing function for TDR processing",
|
||||
children: [
|
||||
{ label: "MINIMUM", description: "Narrowest main lobe, highest sidelobes" },
|
||||
{ label: "NORMAL", description: "Balanced resolution and sidelobe suppression (default)" },
|
||||
{ label: "MAXIMUM", description: "Widest main lobe, lowest sidelobes" }
|
||||
]
|
||||
},
|
||||
{ label: "VELOCITY FACTOR", description: "Set cable velocity factor as a percentage (e.g., 70 for RG405)" }
|
||||
]} />
|
||||
|
||||
---
|
||||
|
||||
## CONFIG
|
||||
|
||||
Device configuration: electrical delay compensation, impedance matching, date/time, averaging, touchscreen, language, and display brightness.
|
||||
|
||||
<MenuTree title="CONFIG" items={[
|
||||
{ label: "E-DELAY", description: "Set electrical delay compensation in nanoseconds" },
|
||||
{ label: "L/C MATCH", description: "Calculate L/C impedance matching networks to 50 ohms" },
|
||||
{ label: "DATE/TIME", description: "Set the real-time clock (year, month, day, hour, minute)" },
|
||||
{ label: "AVERAGE", description: "Configure sweep averaging" },
|
||||
{ label: "TOUCH TEST", description: "Test touchscreen calibration (press any button to exit)" },
|
||||
{
|
||||
label: "LANGSET",
|
||||
description: "Set the interface language",
|
||||
children: [
|
||||
{ label: "ENGLISH" },
|
||||
{ label: "CHINESE" }
|
||||
]
|
||||
},
|
||||
{ label: "ABOUT", description: "Hardware version, firmware version, serial number, RTC" },
|
||||
{
|
||||
label: "BRIGHTNESS",
|
||||
description: "Set LCD backlight brightness",
|
||||
children: [
|
||||
{ label: "100%" },
|
||||
{ label: "80%" },
|
||||
{ label: "60%" },
|
||||
{ label: "40%" },
|
||||
{ label: "20%" }
|
||||
]
|
||||
}
|
||||
]} />
|
||||
|
||||
---
|
||||
|
||||
## STORAGE
|
||||
|
||||
Export S-parameter data as Touchstone files for use with PC software and simulation tools.
|
||||
|
||||
<MenuTree title="STORAGE" items={[
|
||||
{ label: "S1P", description: "Save S11 data as a Touchstone .s1p file" },
|
||||
{ label: "S2P", description: "Save S11 and S21 data as a Touchstone .s2p file" },
|
||||
{ label: "LIST", description: "List all stored .snp files on the device" }
|
||||
]} />
|
||||
|
||||
<Aside>
|
||||
Stored Touchstone files are accessible via USB when the device is mounted as a virtual U-disk (hold the middle button during power-on).
|
||||
</Aside>
|
||||
96
src/content/docs/reference/user-interface/screen-regions.mdx
Normal file
@ -0,0 +1,96 @@
|
||||
---
|
||||
title: Main Screen Regions
|
||||
description: Annotated guide to the 11 areas of the main display
|
||||
---
|
||||
|
||||
import { Aside } from '@astrojs/starlight/components';
|
||||
import ScreenRegion from '../../../../components/ScreenRegion.astro';
|
||||
import mainScreen from '../../../../assets/screenshots/main-screen-labeled.png';
|
||||
|
||||
The NanoVNA-F V3 main screen packs eleven distinct information regions into its 4.3-inch display. Knowing what each area shows -- and how to interact with it -- is essential for efficient operation.
|
||||
|
||||
<img src={mainScreen.src} alt="NanoVNA-F V3 main screen with labeled regions" style="width:100%; border-radius:8px; margin:1.5rem 0;" />
|
||||
|
||||
---
|
||||
|
||||
## Region Reference
|
||||
|
||||
<ScreenRegion regions={[
|
||||
{
|
||||
number: 1,
|
||||
name: "START Frequency",
|
||||
description: "Displays the current sweep start frequency. Tap this area to open the virtual keyboard and set a new start frequency directly, bypassing the STIMULUS menu."
|
||||
},
|
||||
{
|
||||
number: 2,
|
||||
name: "STOP Frequency",
|
||||
description: "Displays the current sweep stop frequency. Like the start frequency area, tapping here opens the keyboard for quick entry. When using center/span mode, this area shows the span value instead."
|
||||
},
|
||||
{
|
||||
number: 3,
|
||||
name: "Marker",
|
||||
description: "Up to four markers can appear on the trace simultaneously. The active marker is indicated by a diamond shape. Move the active marker by pressing the UP/DOWN buttons, or drag it directly on the touchscreen (a stylus is recommended for precision). Tap any marker on the trace to activate it."
|
||||
},
|
||||
{
|
||||
number: 4,
|
||||
name: "Calibration Status",
|
||||
description: "Shows the current calibration state using a compact code string. Common indicators: O (open done), S (short done), L (load done), T (thru done), C (calibrated), * (not saved), c (interpolated), and Cn where n is the save slot number (0-12). See the Calibration Status Codes reference for full details."
|
||||
},
|
||||
{
|
||||
number: 5,
|
||||
name: "Reference Position",
|
||||
description: "Small triangular marker on the left edge indicating the reference level (0 dB, 0 degrees, etc.) for the corresponding trace. The default position is 7, counting from the bottom gridline (0) to the top (10). Change via DISPLAY > REF POS."
|
||||
},
|
||||
{
|
||||
number: 6,
|
||||
name: "Marker Table",
|
||||
description: "Displays frequency and measurement values for all active markers. Each row shows the marker number, frequency, and two parameter readings. The diamond symbol indicates the active marker. Tap a row's frequency value to activate that marker. The table can be repositioned vertically via MARKER > SELECT > POSITION, or dragged by holding the value area for more than 0.5 seconds (when DRAG ON is enabled)."
|
||||
},
|
||||
{
|
||||
number: 7,
|
||||
name: "Trace Status Box",
|
||||
description: "One line per active trace showing: channel (S11 or S21), format (e.g., LOGMAG), scale per division, and the value at the active marker frequency. For example, 'S21 LOGMAG 10dB/ 0.03dB' means the cyan trace is on S21, formatted as log magnitude, scaled at 10 dB per division, with a value of 0.03 dB at the marker. Tap the channel label to switch channels, tap the format to open the FORMAT menu, or tap the scale to open SCALE and REF POS."
|
||||
},
|
||||
{
|
||||
number: 8,
|
||||
name: "Battery Voltage",
|
||||
description: "Shows the current lithium battery voltage. A fully charged battery reads approximately 4.2 V. Charge the device when the reading drops below 3.3 V to avoid unexpected shutdown."
|
||||
},
|
||||
{
|
||||
number: 9,
|
||||
name: "Left Ordinate",
|
||||
description: "The vertical axis label on the left side of the graph. This always corresponds to trace 0, regardless of which trace is currently active. Tap this area to quickly open the scale settings for trace 0."
|
||||
},
|
||||
{
|
||||
number: 10,
|
||||
name: "Right Ordinate",
|
||||
description: "The vertical axis label on the right side of the graph. This corresponds to whichever trace is currently active. Tap this area to quickly open the scale settings for the active trace."
|
||||
},
|
||||
{
|
||||
number: 11,
|
||||
name: "Sweep Points",
|
||||
description: "Shows the current number of sweep points (between 11 and 801). More points provide finer frequency resolution at the cost of slower sweep speed. Configure via DISPLAY > SWEEP POINTS."
|
||||
}
|
||||
]} />
|
||||
|
||||
---
|
||||
|
||||
## Touch Shortcuts
|
||||
|
||||
Many screen regions double as touch shortcuts, reducing the number of menu taps needed for common adjustments:
|
||||
|
||||
| Tap Region | Action |
|
||||
|---|---|
|
||||
| START frequency (1) | Open keyboard to set start frequency |
|
||||
| STOP frequency (2) | Open keyboard to set stop frequency |
|
||||
| Marker on trace (3) | Activate that marker |
|
||||
| Marker table row (6) | Activate the marker for that row |
|
||||
| Trace status -- channel (7) | Switch channel (S11/S21) |
|
||||
| Trace status -- format (7) | Open FORMAT menu |
|
||||
| Trace status -- scale (7) | Open SCALE / REF POS settings |
|
||||
| Left ordinate (9) | Open scale settings for trace 0 |
|
||||
| Right ordinate (10) | Open scale settings for active trace |
|
||||
|
||||
<Aside type="tip">
|
||||
For precise touch interaction, especially when activating markers or dragging the marker table, use the included stylus. Finger taps work but may select adjacent elements on the dense display.
|
||||
</Aside>
|
||||
154
src/content/docs/tutorials/calibration/full-calibration.mdx
Normal file
@ -0,0 +1,154 @@
|
||||
---
|
||||
title: Full Calibration
|
||||
description: Complete OSLT calibration procedure for accurate measurements
|
||||
---
|
||||
|
||||
import { Aside, Steps } from '@astrojs/starlight/components';
|
||||
import CalibrationStep from '../../../../components/CalibrationStep.astro';
|
||||
import calibrationSteps from '../../../../assets/screenshots/calibration-steps.png';
|
||||
import formatSmith from '../../../../assets/screenshots/format-smith.png';
|
||||
|
||||
Calibration is the single most important step for getting accurate measurements from the NanoVNA-F V3. Without it, the instrument's own internal reflections, cable losses, and connector mismatches corrupt your readings.
|
||||
|
||||
A full OSLT calibration uses four known standards -- Open, Short, Load, and Through -- to mathematically remove systematic errors. After calibration, measurements reflect only the device under test.
|
||||
|
||||
## What you will need
|
||||
|
||||
- **SMA OPEN kit** -- included with the NanoVNA-F V3
|
||||
- **SMA SHORT kit** -- included
|
||||
- **SMA 50-ohm LOAD kit** -- included
|
||||
- **SMA-JJ RG405 cable** -- included (connects PORT1 to the device under test)
|
||||
- **SMA straight-through adapter** -- optional, for the THROUGH step when not using a cable
|
||||
|
||||
<Aside type="caution">
|
||||
Handle calibration standards by the body, not the connector pin. Fingerprints and debris on the connector interfaces introduce errors. If standards have been exposed to dust, clean the interfaces with isopropyl alcohol and a lint-free wipe before use.
|
||||
</Aside>
|
||||
|
||||
## Before you start
|
||||
|
||||
1. **Set the frequency range first.** Navigate to **STIMULUS** and set START and STOP frequencies to the range you plan to measure. Calibration is most accurate at exactly the frequencies where it was performed.
|
||||
|
||||
2. **Let the unit warm up.** For best accuracy, power on the NanoVNA-F V3 and let it run for 2-3 minutes before calibrating. Temperature changes affect the internal electronics.
|
||||
|
||||
3. **Decide where the reference plane should be.** The calibration reference plane is at the connector where you attach the standards. If you calibrate at the end of a cable, the reference plane is at the cable's far end. Everything between PORT1 and the reference plane is "calibrated out."
|
||||
|
||||
## OSLT calibration procedure
|
||||
|
||||
Navigate to **CAL** on the main menu to begin.
|
||||
|
||||
<img src={calibrationSteps.src} alt="Calibration menu showing OPEN, SHORT, LOAD, THROUGH, and DONE options" />
|
||||
|
||||
<CalibrationStep steps={[
|
||||
{
|
||||
number: 1,
|
||||
title: "OPEN",
|
||||
description: "Connect the SMA OPEN standard to PORT1, or to the far end of the cable attached to PORT1 if you are calibrating at the cable tip. Tap OPEN in the calibration menu. Wait for the confirmation beep (2-3 seconds). The letter 'O' appears in the calibration status area.",
|
||||
note: "The OPEN standard has a specific fringing capacitance that the firmware accounts for. Do not use an unterminated open cable as a substitute -- it will not produce the same result."
|
||||
},
|
||||
{
|
||||
number: 2,
|
||||
title: "SHORT",
|
||||
description: "Remove the OPEN standard and connect the SMA SHORT standard in the same location. Tap SHORT. Wait for the beep. The letter 'S' appears in the calibration status.",
|
||||
note: "The SHORT standard should be connected where the OPEN was -- same reference plane."
|
||||
},
|
||||
{
|
||||
number: 3,
|
||||
title: "LOAD",
|
||||
description: "Remove the SHORT and connect the SMA 50-ohm LOAD standard. Tap LOAD. Wait for the beep. The letter 'L' appears in the calibration status.",
|
||||
note: "The LOAD is a precision 50-ohm termination. It defines the center of the Smith chart."
|
||||
},
|
||||
{
|
||||
number: 4,
|
||||
title: "THROUGH",
|
||||
description: "Remove the LOAD from PORT1. Connect PORT1 directly to PORT2 using the SMA-JJ RG405 cable or a straight-through adapter. Tap THROUGH. Wait for the beep. The letter 'T' appears in the calibration status.",
|
||||
note: "If you only need S11 measurements (single-port), you can skip THROUGH. However, performing all four standards gives the best overall accuracy and is required for S21 measurements."
|
||||
},
|
||||
{
|
||||
number: 5,
|
||||
title: "DONE",
|
||||
description: "Tap DONE to apply the calibration. The status area should now show 'OSLT C*' or similar, indicating that correction is active. The asterisk appears if the calibration data is interpolated to the current sweep range.",
|
||||
}
|
||||
]} />
|
||||
|
||||
## Saving the calibration
|
||||
|
||||
After tapping **DONE**, the calibration is active but only stored in volatile memory -- it will be lost when you power off. To keep it:
|
||||
|
||||
<Steps>
|
||||
|
||||
1. While still in the **CAL** menu, tap **SAVE**.
|
||||
|
||||
2. Select a save slot (**SAVE 0** through **SAVE 12**). Slot 0 is loaded automatically at power-on, so it is a good choice for your most-used calibration.
|
||||
|
||||
3. The calibration status will update to show the slot number (e.g., "C0").
|
||||
|
||||
</Steps>
|
||||
|
||||
See [Saving Calibrations](/tutorials/calibration/saving-calibration/) for details on managing multiple saved calibrations.
|
||||
|
||||
## Verifying the calibration
|
||||
|
||||
Before measuring anything, verify that the calibration is working correctly. These four checks take less than a minute and can save you from hours of chasing phantom problems.
|
||||
|
||||
### Check 1: Open on PORT1
|
||||
|
||||
Connect the OPEN standard to PORT1 (or cable end).
|
||||
|
||||
- **S11 LOGMAG** should read approximately **0 dB** across the entire span.
|
||||
- **S11 Smith chart** should show the marker at the **far right** of the chart (infinite impedance).
|
||||
|
||||
### Check 2: Short on PORT1
|
||||
|
||||
Connect the SHORT standard.
|
||||
|
||||
- **S11 LOGMAG** should read approximately **0 dB**.
|
||||
- **S11 Smith chart** should show the marker at the **far left** (zero impedance).
|
||||
|
||||
### Check 3: 50-ohm Load on PORT1
|
||||
|
||||
Connect the LOAD standard.
|
||||
|
||||
- **S11 LOGMAG** should dip well below **-30 dB** (ideally -40 dB or better). This indicates the calibration sees the load as a near-perfect match.
|
||||
- **S11 Smith chart** should show the marker at the **center** of the chart (50 + j0 ohms).
|
||||
|
||||
<Aside type="tip">
|
||||
If the load check shows only -20 dB instead of -40 dB, the calibration standards may need cleaning, or connectors may be worn. Clean and retry before proceeding.
|
||||
</Aside>
|
||||
|
||||
### Check 4: Through between PORT1 and PORT2
|
||||
|
||||
Connect PORT1 to PORT2 with the same cable or adapter used during calibration.
|
||||
|
||||
- **S21 LOGMAG** should read approximately **0 dB** across the span, confirming no insertion loss on the calibrated through path.
|
||||
|
||||
## When to recalibrate
|
||||
|
||||
Recalibrate whenever:
|
||||
|
||||
- You change the frequency range (START or STOP)
|
||||
- You change or add cables or adapters in the measurement path
|
||||
- Ambient temperature changes significantly (moving from indoors to outdoors, for instance)
|
||||
- More than a few hours have passed since the last calibration
|
||||
- The calibration status shows an asterisk (*), indicating interpolation, and you need the highest accuracy
|
||||
|
||||
<Aside>
|
||||
A quick one-port calibration (OPEN, SHORT, LOAD only) is sufficient when you only need S11 measurements. The THROUGH step adds correction for S21 and improves S11 accuracy at the cost of one extra step.
|
||||
</Aside>
|
||||
|
||||
## Troubleshooting calibration
|
||||
|
||||
**Calibration beep does not sound**
|
||||
- Check that the standard is firmly connected. SMA connectors should be finger-tight plus a fraction of a turn.
|
||||
- Make sure you tapped the correct button (OPEN, SHORT, LOAD, or THROUGH) in the menu.
|
||||
|
||||
**Calibration status shows unexpected characters**
|
||||
- If you see lowercase 'c' instead of uppercase 'C', the calibration is active but with reduced accuracy. This usually means the standards were not applied cleanly.
|
||||
|
||||
**LOGMAG does not read 0 dB with OPEN or SHORT after calibration**
|
||||
- The most common cause is that the standard was not fully seated during calibration. Redo the affected step.
|
||||
|
||||
## Next steps
|
||||
|
||||
- [Saving Calibrations](/tutorials/calibration/saving-calibration/) -- manage save slots and recall calibrations
|
||||
- [Port Extension](/tutorials/calibration/port-extension/) -- compensate for cable delay when you cannot calibrate at the DUT
|
||||
- [Your First S11 Measurement](/tutorials/first-measurements/first-s11/) -- apply your calibration to a real measurement
|
||||
107
src/content/docs/tutorials/calibration/port-extension.mdx
Normal file
@ -0,0 +1,107 @@
|
||||
---
|
||||
title: Port Extension
|
||||
description: Compensate for cable and adapter electrical delay
|
||||
---
|
||||
|
||||
import { Aside, Steps } from '@astrojs/starlight/components';
|
||||
import portExtension from '../../../../assets/screenshots/port-extension.png';
|
||||
|
||||
Port extension compensates for the electrical delay introduced by cables, adapters, or fixtures that sit between the calibration reference plane and the actual device under test. It shifts the reference plane forward in the measurement path without requiring a new calibration.
|
||||
|
||||
## When you need port extension
|
||||
|
||||
In an ideal workflow, you calibrate at the exact point where the device under test connects. But sometimes that is not practical:
|
||||
|
||||
- **Test fixtures**: Your DUT mounts in a fixture with built-in transmission lines that cannot be removed for calibration.
|
||||
- **Additional adapters**: You need an SMA-to-N adapter (or similar) between the calibrated cable and the DUT.
|
||||
- **Embedded connections**: The DUT is soldered to a PCB trace, and you can only calibrate at the board's SMA connector.
|
||||
|
||||
In these cases, port extension tells the NanoVNA to mathematically remove the extra electrical length, so your measurements reflect the DUT alone.
|
||||
|
||||
<Aside type="caution">
|
||||
Port extension compensates for *delay* (phase shift), not for *loss*. If the extra cable or adapter has significant insertion loss, port extension will correct the phase but not the amplitude. For the most accurate amplitude measurements, calibrate as close to the DUT as possible.
|
||||
</Aside>
|
||||
|
||||
## How it works
|
||||
|
||||
Every cable or transmission line adds a frequency-dependent phase shift. A signal traveling through 10 cm of coaxial cable arrives later than one that does not traverse that cable. On a Smith chart, this extra delay rotates the impedance plot around the center. On a phase plot, it adds a linear slope.
|
||||
|
||||
Port extension applies the inverse of that delay, effectively "unwinding" the rotation and presenting the impedance as if the reference plane were at the DUT.
|
||||
|
||||
<img src={portExtension.src} alt="Port extension menu on the NanoVNA-F V3" />
|
||||
|
||||
## Measuring open extension
|
||||
|
||||
The simplest way to determine the correct port extension value is to let the NanoVNA measure it for you.
|
||||
|
||||
<Steps>
|
||||
|
||||
1. **Calibrate normally.** Perform a full OSLT calibration at the connector you have access to (the existing reference plane). Save the calibration.
|
||||
|
||||
2. **Leave the far end open.** Connect the additional cable, adapter, or fixture to PORT1 but leave the far end open (no DUT, no termination). This gives the instrument a known reflection to work with.
|
||||
|
||||
3. **Navigate to port extension.** Tap the screen to open the menu, then go to **CAL** > **PORT EXTENSION**.
|
||||
|
||||
4. **Tap MEASURE OPEN EXTENSION.** The NanoVNA sweeps the open-ended cable and calculates the electrical delay automatically. The measured value (in picoseconds) appears in the port extension field.
|
||||
|
||||
5. **Enable port extension.** Make sure port extension is toggled **ON** in this same menu. The NanoVNA now applies the correction to all subsequent measurements.
|
||||
|
||||
</Steps>
|
||||
|
||||
<Aside type="tip">
|
||||
If you know the electrical delay already (from a cable datasheet or previous measurement), you can enter it manually instead of using MEASURE OPEN EXTENSION. Navigate to **CAL** > **PORT EXTENSION** and type the value in picoseconds directly.
|
||||
</Aside>
|
||||
|
||||
## Manual calculation
|
||||
|
||||
If you prefer to calculate the delay yourself, the formula is:
|
||||
|
||||
```
|
||||
Delay (ps) = (Cable length in meters) / (Speed of light x Velocity factor) x 10^12
|
||||
```
|
||||
|
||||
For example, a 15 cm length of RG405 cable (velocity factor 0.7):
|
||||
|
||||
```
|
||||
Delay = 0.15 / (3.0 x 10^8 x 0.7) x 10^12
|
||||
= 0.15 / 2.1 x 10^8 x 10^12
|
||||
= 714 ps
|
||||
```
|
||||
|
||||
In practice, the automatic measurement is more accurate because it accounts for connector discontinuities and the actual cable characteristics rather than nominal values.
|
||||
|
||||
## Verifying port extension
|
||||
|
||||
After enabling port extension, verify it is working:
|
||||
|
||||
<Steps>
|
||||
|
||||
1. Leave the far end of the cable or fixture **open**.
|
||||
|
||||
2. Check the **S11 Smith chart**. The trace should sit near the far right of the chart (high impedance), without excessive rotation. Before port extension, an open at the end of a cable traces a large arc around the Smith chart as frequency increases. After correct port extension, that arc collapses to a tight cluster near the open-circuit point.
|
||||
|
||||
3. Check **S11 PHASE**. The phase trace should be relatively flat near 0 degrees (for an open) rather than showing a steep linear slope.
|
||||
|
||||
</Steps>
|
||||
|
||||
If the Smith chart still rotates significantly, the delay value may need adjustment. Increase or decrease it in small increments until the trace tightens up.
|
||||
|
||||
## Port extension for PORT2
|
||||
|
||||
The same concept applies to PORT2 for S21 measurements. If there is extra cable or fixturing between PORT2 and the DUT's output, you can apply port extension to PORT2 as well. The menu provides separate extension values for each port.
|
||||
|
||||
## Limitations
|
||||
|
||||
- **Frequency-dependent loss is not corrected.** Port extension only removes phase delay. If the cable or fixture has loss that changes with frequency, that loss still appears in your measurement.
|
||||
- **Large extensions degrade accuracy.** The longer the extension (more delay), the more sensitive the correction is to small errors in the delay value. Keep extensions as short as practical.
|
||||
- **Not a substitute for calibration.** Port extension is a supplement to calibration, not a replacement. Always calibrate first, then apply port extension for any remaining path between the cal reference plane and the DUT.
|
||||
|
||||
<Aside>
|
||||
If you find yourself using large port extension values routinely, consider whether you can calibrate closer to the DUT instead. A shorter extension always gives better results.
|
||||
</Aside>
|
||||
|
||||
## Next steps
|
||||
|
||||
- [Full Calibration](/tutorials/calibration/full-calibration/) -- the calibration procedure that precedes port extension
|
||||
- [Saving Calibrations](/tutorials/calibration/saving-calibration/) -- save your setup including port extension settings
|
||||
- [Cable Length with TDR](/tutorials/practical-projects/cable-tdr/) -- another way to characterize cable electrical length
|
||||
122
src/content/docs/tutorials/calibration/saving-calibration.mdx
Normal file
@ -0,0 +1,122 @@
|
||||
---
|
||||
title: Saving Calibrations
|
||||
description: Save and recall calibration data across power cycles
|
||||
---
|
||||
|
||||
import { Aside, Steps, Tabs, TabItem } from '@astrojs/starlight/components';
|
||||
import recallSave from '../../../../assets/screenshots/recall-save.png';
|
||||
|
||||
The NanoVNA-F V3 provides 13 save slots (numbered 0 through 12) for storing calibration data. Each slot preserves the full calibration state -- including the frequency range, sweep points, and all correction coefficients -- so you can instantly switch between calibrations for different measurement setups.
|
||||
|
||||
## Why save calibrations?
|
||||
|
||||
Calibration takes a few minutes each time. If you regularly measure at the same frequency ranges with the same cables, saving those calibrations lets you power on and start measuring immediately.
|
||||
|
||||
Common scenarios for multiple saved calibrations:
|
||||
|
||||
- **Slot 0**: HF range (1 MHz - 30 MHz) for amateur radio HF antennas
|
||||
- **Slot 1**: VHF range (100 MHz - 200 MHz) for 2 m antennas
|
||||
- **Slot 2**: UHF range (400 MHz - 500 MHz) for 70 cm antennas
|
||||
- **Slot 3**: Wide span (1 MHz - 4.4 GHz) for general scanning
|
||||
- **Slot 4**: Cable testing setup with specific adapters
|
||||
|
||||
## The RECALL and SAVE menus
|
||||
|
||||
<img src={recallSave.src} alt="RECALL and SAVE menu screens" />
|
||||
|
||||
Both menus are accessed from the **CAL** menu. They each present a list of numbered slots.
|
||||
|
||||
<Tabs>
|
||||
<TabItem label="Saving">
|
||||
After completing a calibration (OPEN, SHORT, LOAD, THROUGH, then DONE):
|
||||
|
||||
<Steps>
|
||||
1. Navigate to **CAL** on the main menu.
|
||||
2. Tap **SAVE**.
|
||||
3. Select a slot number (**SAVE 0** through **SAVE 12**).
|
||||
4. The calibration data is written to non-volatile storage immediately. It persists across power cycles.
|
||||
</Steps>
|
||||
|
||||
<Aside type="caution">
|
||||
Saving to a slot overwrites whatever was previously stored there. There is no confirmation prompt. If you have a calibration in slot 3 that you want to keep, choose a different slot.
|
||||
</Aside>
|
||||
</TabItem>
|
||||
<TabItem label="Recalling">
|
||||
To load a previously saved calibration:
|
||||
|
||||
<Steps>
|
||||
1. Navigate to **CAL** on the main menu.
|
||||
2. Tap **RECALL**.
|
||||
3. Select the slot number (**RECALL 0** through **RECALL 12**).
|
||||
4. The calibration is loaded and correction is applied. The frequency range and sweep points change to match what was saved.
|
||||
</Steps>
|
||||
|
||||
<Aside>
|
||||
Recalling a calibration changes the frequency range to match the saved state. If you then change the frequency range manually, the calibration data will be interpolated (indicated by an asterisk * in the status) rather than exactly matching.
|
||||
</Aside>
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
## Slot 0: The power-on default
|
||||
|
||||
Slot 0 has special behavior: it is automatically loaded when the NanoVNA-F V3 powers on. This makes it the natural choice for your most frequently used calibration setup.
|
||||
|
||||
If slot 0 is empty or has never been written, the instrument powers on without any calibration active.
|
||||
|
||||
<Aside type="tip">
|
||||
Keep your most general-purpose calibration in slot 0. If you primarily work with VHF antennas, save your VHF calibration there. You can always recall a different slot when needed.
|
||||
</Aside>
|
||||
|
||||
## Calibration status indicators
|
||||
|
||||
The calibration status area in the upper portion of the screen tells you exactly what state the instrument is in. Here is a complete reference:
|
||||
|
||||
| Indicator | Meaning |
|
||||
|-----------|---------|
|
||||
| *(blank)* | No calibration applied. Measurements are uncorrected. |
|
||||
| O | Open standard has been measured (but calibration not yet completed) |
|
||||
| S | Short standard has been measured |
|
||||
| L | Load standard has been measured |
|
||||
| T | Through standard has been measured |
|
||||
| OS | Open and Short measured (partial calibration in progress) |
|
||||
| OSL | Open, Short, and Load measured (one-port cal ready) |
|
||||
| OSLT | All four standards measured (full two-port cal ready) |
|
||||
| C | Correction is active (calibration applied to live measurements) |
|
||||
| C0 - C12 | Correction active from the indicated save slot |
|
||||
| * | Calibration data is being interpolated because the current frequency range differs from the calibration range |
|
||||
| c | Calibration active but with reduced accuracy |
|
||||
|
||||
### Reading compound status strings
|
||||
|
||||
A typical status string like `OSLT C3` means:
|
||||
|
||||
- **OSLT** -- all four standards were applied during this calibration
|
||||
- **C3** -- the correction data was recalled from (or saved to) slot 3
|
||||
|
||||
If you see `OSLT C3*`, the asterisk tells you the current sweep range does not exactly match what was calibrated in slot 3. The instrument is interpolating, which is usually fine for moderate range changes but degrades accuracy for large shifts.
|
||||
|
||||
## Managing your save slots
|
||||
|
||||
Since there is no way to label save slots on the device itself, consider keeping a simple log of what each slot contains:
|
||||
|
||||
| Slot | Frequency Range | Setup Notes |
|
||||
|------|----------------|-------------|
|
||||
| 0 | 1 MHz - 30 MHz | HF, direct connect, no cable |
|
||||
| 1 | 130 MHz - 160 MHz | 2 m band, with 30 cm RG405 cable |
|
||||
| 2 | 420 MHz - 450 MHz | 70 cm band, with 30 cm RG405 cable |
|
||||
| 3 | 1 MHz - 4400 MHz | Full span, direct connect |
|
||||
| 4 | ... | ... |
|
||||
|
||||
<Aside type="tip">
|
||||
You can also use the **CONFIG** > **USER DEFINED** feature to display a short text string on screen. Some operators use this to note which calibration slot is currently active and what it covers.
|
||||
</Aside>
|
||||
|
||||
## Transferring calibrations to PC software
|
||||
|
||||
When connected to NanoVNA-Saver or similar PC software via USB, the software can read and store calibration data independently. This is useful for archiving calibrations or applying them when controlling the VNA from a computer. See [USB Connection](/how-to/pc-software/usb-connection/) for setup details.
|
||||
|
||||
## Next steps
|
||||
|
||||
- [Full Calibration](/tutorials/calibration/full-calibration/) -- the complete calibration procedure
|
||||
- [Port Extension](/tutorials/calibration/port-extension/) -- compensate for additional cable length
|
||||
- [Calibration Status Codes](/reference/calibration-codes/) -- full reference for all status indicators
|
||||
125
src/content/docs/tutorials/first-measurements/first-s11.mdx
Normal file
@ -0,0 +1,125 @@
|
||||
---
|
||||
title: Your First S11 Measurement
|
||||
description: Measure antenna impedance and SWR with the NanoVNA-F V3
|
||||
---
|
||||
|
||||
import { Aside, Steps, Tabs, TabItem } from '@astrojs/starlight/components';
|
||||
import calibrationSteps from '../../../../assets/screenshots/calibration-steps.png';
|
||||
import formatSmith from '../../../../assets/screenshots/format-smith.png';
|
||||
|
||||
An S11 measurement tells you how much signal bounces back from a device connected to PORT1 -- the "reflection coefficient." This is the single most common measurement in antenna work: it reveals impedance, SWR, and resonant frequency all at once.
|
||||
|
||||
In this tutorial you will connect an antenna (or any single-port device) to the NanoVNA-F V3 and take your first S11 reading.
|
||||
|
||||
## What you will need
|
||||
|
||||
- NanoVNA-F V3, charged or USB-powered
|
||||
- SMA calibration kit (OPEN, SHORT, LOAD) included with the unit
|
||||
- SMA-JJ RG405 cable (included)
|
||||
- An antenna or other device with an SMA connector (or an appropriate adapter)
|
||||
|
||||
## Setting up the measurement
|
||||
|
||||
<Steps>
|
||||
|
||||
1. **Power on the NanoVNA-F V3**
|
||||
|
||||
Long-press the power button until the screen lights up. The default display shows two traces: S11 LOGMAG on the top half and S11 Smith chart on the bottom.
|
||||
|
||||
2. **Set the frequency range**
|
||||
|
||||
Tap the screen to bring up the menu. Navigate to **STIMULUS** and set **START** and **STOP** frequencies to bracket your antenna's expected operating range. For a 2 m amateur band antenna, try 130 MHz to 160 MHz. For a 70 cm antenna, 400 MHz to 470 MHz.
|
||||
|
||||
<Aside type="tip">
|
||||
If you are not sure of the operating frequency, start with a wide span (e.g. 1 MHz to 1 GHz) and narrow down after you see where the antenna resonates.
|
||||
</Aside>
|
||||
|
||||
3. **Calibrate**
|
||||
|
||||
A fresh calibration is essential for trustworthy results. At minimum, perform a one-port calibration (OPEN, SHORT, LOAD) at the end of the cable you will connect to the antenna.
|
||||
|
||||
Navigate to **CAL** and follow the OPEN / SHORT / LOAD sequence, then tap **DONE** and **SAVE** to a slot.
|
||||
|
||||
See [Full Calibration](/tutorials/calibration/full-calibration/) for the complete procedure.
|
||||
|
||||
4. **Connect your antenna**
|
||||
|
||||
Attach the antenna (or adapter + antenna) to the end of the cable where you just calibrated. The calibration reference plane is at that connector, so measurements will be most accurate there.
|
||||
|
||||
5. **Read the results**
|
||||
|
||||
The sweep runs continuously. You should see the S11 trace update in real time.
|
||||
|
||||
</Steps>
|
||||
|
||||
## Understanding the S11 display
|
||||
|
||||
The default screen shows two display formats for S11:
|
||||
|
||||
### LOGMAG (Return Loss)
|
||||
|
||||
The LOGMAG trace shows return loss in dB. Key values to know:
|
||||
|
||||
| S11 LOGMAG | Return Loss | SWR (approx.) | Meaning |
|
||||
|------------|-------------|----------------|---------|
|
||||
| 0 dB | None | Infinite | Total reflection -- open or short circuit |
|
||||
| -6 dB | 6 dB | 3.0:1 | Poor match |
|
||||
| -10 dB | 10 dB | 1.9:1 | Acceptable for many applications |
|
||||
| -15 dB | 15 dB | 1.4:1 | Good match |
|
||||
| -20 dB | 20 dB | 1.2:1 | Very good match |
|
||||
|
||||
<Aside>
|
||||
More negative values are better. A well-tuned antenna typically shows a dip to -15 dB or beyond at its resonant frequency.
|
||||
</Aside>
|
||||
|
||||
### Smith Chart
|
||||
|
||||
The Smith chart plots impedance as a single point (per frequency). The center of the chart is 50 ohms -- the ideal match. Points to the right indicate higher impedance, points to the left indicate lower. Movement above the center line means inductive reactance; below means capacitive.
|
||||
|
||||
<img src={formatSmith.src} alt="Smith chart display on the NanoVNA-F V3" />
|
||||
|
||||
## Using a marker to read values
|
||||
|
||||
<Steps>
|
||||
|
||||
1. Tap the screen to open the menu, then navigate to **MARKER** and select **MARKER 1**.
|
||||
|
||||
2. Use **SEARCH** then **MINIMUM** to jump the marker to the deepest point on the S11 LOGMAG trace -- this is typically the resonant frequency.
|
||||
|
||||
3. Read the marker readout at the top of the screen. It shows frequency and the value for each active trace (e.g., return loss in dB and impedance in R+jX format).
|
||||
|
||||
</Steps>
|
||||
|
||||
## Switching to SWR display
|
||||
|
||||
If you prefer to read SWR directly rather than return loss:
|
||||
|
||||
<Steps>
|
||||
|
||||
1. Tap the trace status box in the upper-left area of the screen (it shows the current format, e.g. "LOGMAG").
|
||||
|
||||
2. Select **SWR** from the format list.
|
||||
|
||||
3. The trace now shows SWR values. A marker on the trace will display the SWR ratio directly (e.g., 1.3:1).
|
||||
|
||||
</Steps>
|
||||
|
||||
<Aside type="tip">
|
||||
You can display SWR and Smith chart simultaneously by assigning them to different traces. See [Configure Traces](/how-to/display-traces/configure-traces/) for how to set up multiple trace formats at once.
|
||||
</Aside>
|
||||
|
||||
## Quick verification checklist
|
||||
|
||||
After calibration and before connecting your device under test, verify the calibration is good:
|
||||
|
||||
- **OPEN on PORT1**: S11 LOGMAG reads approximately 0 dB, Smith chart shows the marker at the far right.
|
||||
- **SHORT on PORT1**: S11 LOGMAG reads approximately 0 dB, Smith chart shows the marker at the far left.
|
||||
- **50-ohm LOAD on PORT1**: S11 LOGMAG dips well below -30 dB, Smith chart shows the marker at the center.
|
||||
|
||||
If these checks do not pass, recalibrate before measuring your device.
|
||||
|
||||
## Next steps
|
||||
|
||||
- [Reading the Display](/tutorials/first-measurements/reading-display/) -- understand every region of the screen
|
||||
- [Your First S21 Measurement](/tutorials/first-measurements/first-s21/) -- measure through a two-port device
|
||||
- [Testing an Antenna](/tutorials/practical-projects/testing-antenna/) -- a full practical project with tips for different bands
|
||||
139
src/content/docs/tutorials/first-measurements/first-s21.mdx
Normal file
@ -0,0 +1,139 @@
|
||||
---
|
||||
title: Your First S21 Measurement
|
||||
description: Measure insertion loss through a two-port device
|
||||
---
|
||||
|
||||
import { Aside, Steps, Tabs, TabItem } from '@astrojs/starlight/components';
|
||||
import formatLogmag from '../../../../assets/screenshots/format-logmag.png';
|
||||
import calibrationSteps from '../../../../assets/screenshots/calibration-steps.png';
|
||||
|
||||
An S21 measurement tells you how much signal passes *through* a device from PORT1 to PORT2 -- the "transmission coefficient." This is the fundamental measurement for characterizing filters, amplifiers, attenuators, cables, and any other two-port device.
|
||||
|
||||
## What you will need
|
||||
|
||||
- NanoVNA-F V3, charged or USB-powered
|
||||
- SMA calibration kit (OPEN, SHORT, LOAD)
|
||||
- SMA-JJ RG405 cable (included) or SMA straight-through adapter
|
||||
- A two-port device to measure (filter, attenuator, cable, etc.)
|
||||
|
||||
## Connecting for S21
|
||||
|
||||
The signal path for S21 is straightforward:
|
||||
|
||||
```
|
||||
PORT1 ---> [Device Under Test] ---> PORT2
|
||||
```
|
||||
|
||||
PORT1 is the signal source (stimulus). PORT2 is the receiver. The NanoVNA measures what fraction of the signal injected at PORT1 arrives at PORT2 after passing through your device.
|
||||
|
||||
<Aside type="caution">
|
||||
Make sure you know which end of your device is the input and which is the output. For filters and passive devices this usually does not matter, but for amplifiers or directional devices the orientation is critical.
|
||||
</Aside>
|
||||
|
||||
## Step-by-step measurement
|
||||
|
||||
<Steps>
|
||||
|
||||
1. **Set the frequency range**
|
||||
|
||||
Power on the NanoVNA-F V3 and tap the screen to open the menu. Navigate to **STIMULUS** and set **START** and **STOP** frequencies to cover the operating range of your device with some margin on each side. For example, to measure a 145 MHz bandpass filter, set 100 MHz to 200 MHz.
|
||||
|
||||
2. **Calibrate with THROUGH**
|
||||
|
||||
For an accurate S21 measurement, you need a full two-port calibration (OSLT):
|
||||
|
||||
- Navigate to **CAL** and perform OPEN, SHORT, and LOAD on PORT1.
|
||||
- Then connect PORT1 directly to PORT2 using the SMA-JJ cable or straight-through adapter.
|
||||
- Tap **THROUGH**, wait for the beep.
|
||||
- Tap **DONE**, then **SAVE** to a slot.
|
||||
|
||||
The calibration status should show "OSLT" characters. See [Full Calibration](/tutorials/calibration/full-calibration/) for the complete procedure.
|
||||
|
||||
<Aside type="tip">
|
||||
Calibrate using the same cables and adapters you will use for the measurement. The calibration reference planes are at the connectors where you attach the OPEN/SHORT/LOAD and where you make the THROUGH connection.
|
||||
</Aside>
|
||||
|
||||
3. **Verify the calibration**
|
||||
|
||||
With PORT1 and PORT2 still connected through the cable or adapter (the THROUGH path), the S21 LOGMAG trace should read approximately 0 dB across the entire span. This confirms the system sees a lossless through path.
|
||||
|
||||
4. **Connect the device under test**
|
||||
|
||||
Remove the THROUGH connection and insert your device between PORT1 and PORT2. The sweep updates in real time.
|
||||
|
||||
5. **Select the S21 trace**
|
||||
|
||||
If the display is not already showing S21, navigate to **DISPLAY** then **TRACE** and activate a trace assigned to S21. Set the format to **LOGMAG** for insertion loss readings.
|
||||
|
||||
</Steps>
|
||||
|
||||
## Reading the S21 LOGMAG trace
|
||||
|
||||
<img src={formatLogmag.src} alt="LOGMAG display format showing insertion loss" />
|
||||
|
||||
The S21 LOGMAG trace shows gain or loss in dB:
|
||||
|
||||
| S21 Value | Meaning |
|
||||
|-----------|---------|
|
||||
| 0 dB | No loss -- all signal passes through |
|
||||
| -1 dB | Slight loss (typical for short cables, good connectors) |
|
||||
| -3 dB | Half the power is lost (the "3 dB point" used to define filter bandwidth) |
|
||||
| -10 dB | 90% of power is lost |
|
||||
| -20 dB | 99% of power is lost |
|
||||
| -40 dB | Strong rejection (good stopband performance) |
|
||||
|
||||
<Aside>
|
||||
For passive devices (filters, cables, attenuators), S21 will always be 0 dB or less. If you see positive S21 values on a passive device, recalibrate -- something is off.
|
||||
</Aside>
|
||||
|
||||
## Using markers to find key values
|
||||
|
||||
<Steps>
|
||||
|
||||
1. Tap the screen and navigate to **MARKER**, then select **MARKER 1**.
|
||||
|
||||
2. Use **SEARCH** then **MAXIMUM** to jump the marker to the peak of the passband (the point of lowest insertion loss).
|
||||
|
||||
3. Note the frequency and the dB value shown in the marker readout.
|
||||
|
||||
4. To find the -3 dB bandwidth of a filter, you can set the reference level to the passband peak, then manually move additional markers to the frequencies where the trace drops 3 dB below the peak. Or use **MARKER 2** and **MARKER 3** with the **SEARCH LEFT** and **SEARCH RIGHT** functions.
|
||||
|
||||
</Steps>
|
||||
|
||||
## Common two-port measurements
|
||||
|
||||
<Tabs>
|
||||
<TabItem label="Filters">
|
||||
For bandpass, lowpass, or highpass filters, look for:
|
||||
- **Passband insertion loss**: the flattest, highest region of the S21 trace. Lower loss is better.
|
||||
- **Bandwidth**: the frequency range where S21 stays within 3 dB of the peak.
|
||||
- **Stopband rejection**: how far below 0 dB the trace drops outside the passband. More negative is better isolation.
|
||||
|
||||
See [Measuring a Filter](/tutorials/practical-projects/measuring-filter/) for a full walkthrough.
|
||||
</TabItem>
|
||||
<TabItem label="Cables">
|
||||
For coaxial cables, S21 shows the total loss at each frequency. Cable loss increases with frequency. A short, high-quality cable might show -0.5 dB at 100 MHz and -2 dB at 1 GHz.
|
||||
</TabItem>
|
||||
<TabItem label="Attenuators">
|
||||
A fixed attenuator should show a flat S21 trace across frequency, close to its rated value (e.g., -6 dB, -10 dB, -20 dB). Deviations from flat indicate the attenuator is not performing to spec at those frequencies.
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
**S21 reads much lower than expected (extra loss)**
|
||||
- Check all connector tightness. Loose SMA connections can introduce several dB of loss.
|
||||
- Verify you calibrated with the same cables you are using for the measurement.
|
||||
- Make sure the device is oriented correctly (input to PORT1, output to PORT2).
|
||||
|
||||
**S21 reads 0 dB everywhere**
|
||||
- The DUT may not be in the signal path. Check that the device is actually connected between the ports and not being bypassed.
|
||||
|
||||
**Trace is very noisy below -50 dB**
|
||||
- This is the noise floor of the instrument. The NanoVNA-F V3 dynamic range is finite. Readings below about -50 to -70 dB (depending on frequency) are in the noise.
|
||||
|
||||
## Next steps
|
||||
|
||||
- [Reading the Display](/tutorials/first-measurements/reading-display/) -- learn what every part of the screen means
|
||||
- [Measuring a Filter](/tutorials/practical-projects/measuring-filter/) -- a detailed practical project
|
||||
- [Full Calibration](/tutorials/calibration/full-calibration/) -- the complete calibration procedure
|
||||
@ -0,0 +1,167 @@
|
||||
---
|
||||
title: Reading the Display
|
||||
description: Understanding the NanoVNA-F V3 main screen layout and information
|
||||
---
|
||||
|
||||
import { Aside, Steps } from '@astrojs/starlight/components';
|
||||
import ScreenRegion from '../../../../components/ScreenRegion.astro';
|
||||
import mainScreen from '../../../../assets/screenshots/main-screen-labeled.png';
|
||||
import traceSelection from '../../../../assets/screenshots/trace-selection.png';
|
||||
import traceActivated from '../../../../assets/screenshots/trace-activated.png';
|
||||
|
||||
The NanoVNA-F V3 packs a lot of information onto its 4.3-inch screen. Once you know where to look, you can read frequency, calibration status, marker values, trace data, and battery level at a glance.
|
||||
|
||||
This page walks through every region of the main measurement screen.
|
||||
|
||||
## Screen overview
|
||||
|
||||
<img src={mainScreen.src} alt="NanoVNA-F V3 main screen with labeled regions" />
|
||||
|
||||
The main screen is divided into 11 distinct regions. Each one serves a specific purpose during measurements.
|
||||
|
||||
<ScreenRegion regions={[
|
||||
{
|
||||
number: 1,
|
||||
name: "START Frequency",
|
||||
description: "Displays the start frequency of the current sweep. This is the leftmost point on the horizontal axis. Tap the screen and navigate to STIMULUS to change this value."
|
||||
},
|
||||
{
|
||||
number: 2,
|
||||
name: "STOP Frequency",
|
||||
description: "Displays the stop frequency of the current sweep. This is the rightmost point on the horizontal axis. Together with the START frequency, these define the measurement span."
|
||||
},
|
||||
{
|
||||
number: 3,
|
||||
name: "Marker Readout",
|
||||
description: "Shows the active marker's frequency and measured values. Each active trace contributes a line here -- for example, the marker might show return loss in dB on one line and impedance in R+jX format on another. The marker number and frequency appear at the top of this area."
|
||||
},
|
||||
{
|
||||
number: 4,
|
||||
name: "Calibration Status",
|
||||
description: "Indicates the current calibration state. Characters appear as calibration standards are applied: O (Open), S (Short), L (Load), T (Through), C (corrected/active), and * (interpolated). For example, 'OSLT C0' means a full calibration from save slot 0 is active. See the Calibration Status Codes reference for all indicators."
|
||||
},
|
||||
{
|
||||
number: 5,
|
||||
name: "Reference Position",
|
||||
description: "A small triangle or indicator along the vertical axis marking the 0 dB (or other reference) position for the active trace. This is where the reference level sits on the display. You can move it via DISPLAY > SCALE > REFERENCE POSITION."
|
||||
},
|
||||
{
|
||||
number: 6,
|
||||
name: "Marker Table",
|
||||
description: "When multiple markers are active, this area shows a table with each marker's frequency and value. This lets you compare readings across several frequencies at once without switching between markers."
|
||||
},
|
||||
{
|
||||
number: 7,
|
||||
name: "Trace Status Box",
|
||||
description: "Located in the upper portion of the display, one box per active trace. Each shows the trace number, channel (S11 or S21), and display format (e.g., LOGMAG, SWR, SMITH). Tapping this area opens the format selection menu for that trace."
|
||||
},
|
||||
{
|
||||
number: 8,
|
||||
name: "Battery Voltage",
|
||||
description: "Displays the current battery voltage in the top-right corner. A fully charged NanoVNA-F V3 shows approximately 4.2V. The device will warn and shut down as voltage drops below safe levels."
|
||||
},
|
||||
{
|
||||
number: 9,
|
||||
name: "Left Ordinate (Y-axis)",
|
||||
description: "The vertical scale labels on the left side of the chart. The units depend on the active display format: dB for LOGMAG, ratio for SWR, ohms for resistance, and so on. The scale per division is shown in the trace status box."
|
||||
},
|
||||
{
|
||||
number: 10,
|
||||
name: "Right Ordinate (Y-axis)",
|
||||
description: "When a second trace uses a different format or scale, its vertical labels appear on the right side. This allows two traces with different units to share the same chart area."
|
||||
},
|
||||
{
|
||||
number: 11,
|
||||
name: "Sweep Points",
|
||||
description: "Shows the number of measurement points in the current sweep (e.g., 101, 201, 401, or 1001). More points give finer frequency resolution but slower sweep updates. Adjust via STIMULUS > SWEEP POINTS."
|
||||
}
|
||||
]} />
|
||||
|
||||
## Trace status box in detail
|
||||
|
||||
The trace status box (region 7) is one of the most interactive parts of the display.
|
||||
|
||||
<img src={traceActivated.src} alt="Trace status boxes showing active traces" />
|
||||
|
||||
Each box shows three pieces of information:
|
||||
|
||||
- **Trace number** (0-3) and its color coding
|
||||
- **Channel assignment** -- S11 (reflection, PORT1) or S21 (transmission, PORT1 to PORT2)
|
||||
- **Display format** -- LOGMAG, PHASE, SMITH, SWR, etc.
|
||||
|
||||
<Aside type="tip">
|
||||
Tapping the format region of a trace status box is the fastest way to switch display formats. You do not need to go through the full menu tree.
|
||||
</Aside>
|
||||
|
||||
### Trace colors
|
||||
|
||||
The four traces are color-coded so you can tell them apart when multiple traces overlap on the chart:
|
||||
|
||||
| Trace | Default Color |
|
||||
|-------|--------------|
|
||||
| TRACE 0 | Yellow |
|
||||
| TRACE 1 | Blue |
|
||||
| TRACE 2 | Green |
|
||||
| TRACE 3 | Red |
|
||||
|
||||
Markers inherit the color of the trace they belong to. When you tap a marker on the chart, it activates the matching trace.
|
||||
|
||||
## Calibration status indicators
|
||||
|
||||
Region 4 shows a compact string that tells you exactly what calibration state is active. The characters mean:
|
||||
|
||||
| Indicator | Meaning |
|
||||
|-----------|---------|
|
||||
| O | Open standard applied |
|
||||
| S | Short standard applied |
|
||||
| L | Load standard applied |
|
||||
| T | Through standard applied |
|
||||
| C | Correction is active (calibration applied to measurements) |
|
||||
| * | Calibration data is interpolated (current frequency range differs from calibration range) |
|
||||
| c | Calibration active but with reduced accuracy |
|
||||
| Cn | Correction active from save slot n (e.g., C0, C3) |
|
||||
|
||||
<Aside>
|
||||
An asterisk (*) after the calibration letters means the current sweep range does not exactly match the range used during calibration. The NanoVNA interpolates the calibration data, which is usually adequate but introduces some additional uncertainty. For best accuracy, calibrate at the exact frequency range you intend to measure.
|
||||
</Aside>
|
||||
|
||||
## Reading marker values
|
||||
|
||||
The marker readout (region 3) changes depending on which display formats are active. Here are some common examples:
|
||||
|
||||
**With S11 LOGMAG and S11 Smith active:**
|
||||
```
|
||||
M1: 145.000 MHz
|
||||
-18.3 dB
|
||||
48.2 + j3.1 Ω
|
||||
```
|
||||
|
||||
This tells you marker 1 is at 145 MHz, the return loss is 18.3 dB, and the impedance is 48.2 ohms with 3.1 ohms of inductive reactance -- close to a 50-ohm match.
|
||||
|
||||
**With S21 LOGMAG active:**
|
||||
```
|
||||
M1: 145.000 MHz
|
||||
-2.7 dB
|
||||
```
|
||||
|
||||
This tells you the device has 2.7 dB of insertion loss at 145 MHz.
|
||||
|
||||
## Display formats at a glance
|
||||
|
||||
The NanoVNA-F V3 supports 13 display formats. The most commonly used are:
|
||||
|
||||
| Format | What it shows | Typical use |
|
||||
|--------|--------------|-------------|
|
||||
| LOGMAG | Magnitude in dB | Return loss, insertion loss |
|
||||
| SWR | Standing wave ratio | Antenna matching |
|
||||
| SMITH R+jX | Impedance on Smith chart | Impedance analysis, matching networks |
|
||||
| PHASE | Phase angle in degrees | Phase response of filters, delay lines |
|
||||
| DELAY | Group delay | Filter performance, cable characterization |
|
||||
|
||||
For the full list of formats and when to use each one, see [Display Formats](/how-to/display-traces/display-formats/).
|
||||
|
||||
## Next steps
|
||||
|
||||
- [Your First S11 Measurement](/tutorials/first-measurements/first-s11/) -- put this knowledge into practice
|
||||
- [Configure Traces](/how-to/display-traces/configure-traces/) -- set up multiple traces for simultaneous display
|
||||
- [Using Markers](/how-to/markers/using-markers/) -- get precise readings at specific frequencies
|
||||
238
src/content/docs/tutorials/practical-projects/cable-tdr.mdx
Normal file
@ -0,0 +1,238 @@
|
||||
---
|
||||
title: Cable Length with TDR
|
||||
description: Measure cable length and find faults using Time Domain Reflectometry
|
||||
---
|
||||
|
||||
import { Aside, Steps, Tabs, TabItem } from '@astrojs/starlight/components';
|
||||
import tdrMenu from '../../../../assets/screenshots/tdr-menu.png';
|
||||
import tdrLowpass from '../../../../assets/screenshots/tdr-lowpass.png';
|
||||
import tdrBandpass from '../../../../assets/screenshots/tdr-bandpass.png';
|
||||
|
||||
Time Domain Reflectometry (TDR) converts frequency-domain S11 data into a time-domain view, showing reflections along the length of a cable or transmission line. Instead of seeing impedance vs. frequency, you see impedance vs. *distance*. This makes it straightforward to measure cable length, locate faults, find connector problems, and identify impedance discontinuities.
|
||||
|
||||
## How TDR works
|
||||
|
||||
The NanoVNA-F V3 does not send a literal pulse down the cable the way a traditional TDR instrument does. Instead, it sweeps S11 across a range of frequencies and then applies an inverse Fourier transform to convert that frequency data into a time-domain impulse or step response. The result is equivalent -- you see reflections plotted against distance.
|
||||
|
||||
<img src={tdrMenu.src} alt="TDR mode menu on the NanoVNA-F V3" />
|
||||
|
||||
## What you will need
|
||||
|
||||
- NanoVNA-F V3, charged or USB-powered
|
||||
- SMA calibration kit (OPEN, SHORT, LOAD)
|
||||
- SMA-JJ RG405 cable (included)
|
||||
- The cable you want to measure (with appropriate adapter if needed)
|
||||
- The velocity factor of the cable under test (see table below)
|
||||
|
||||
## Setting up for TDR
|
||||
|
||||
<Steps>
|
||||
|
||||
1. **Set the frequency range.**
|
||||
|
||||
The sweep range directly affects TDR performance:
|
||||
|
||||
- **Higher maximum frequency** gives better distance resolution (ability to distinguish two closely spaced reflections).
|
||||
- **Lower frequency spacing** (more sweep points or narrower span) gives longer maximum measurable distance.
|
||||
|
||||
For general cable testing, start with 1 MHz to 900 MHz with 401 or 1001 sweep points. For short cables (under 2 meters), extend to 4.4 GHz for finer resolution.
|
||||
|
||||
2. **Calibrate.**
|
||||
|
||||
Perform at minimum a one-port calibration (OPEN, SHORT, LOAD) at the end of the cable connected to PORT1. The reference plane should be at the point where the cable under test will connect.
|
||||
|
||||
See [Full Calibration](/tutorials/calibration/full-calibration/) for the full procedure.
|
||||
|
||||
3. **Connect the cable under test.**
|
||||
|
||||
Attach the cable to PORT1 (or to the calibrated cable end). Leave the far end of the cable under test **open** (unterminated) for a length measurement, or connect it normally if you are looking for faults along its length.
|
||||
|
||||
4. **Enable TDR mode.**
|
||||
|
||||
Navigate to **DISPLAY** > **TRACE** and select a trace for S11. Then navigate to **DISPLAY** > **FORMAT** and scroll down to the TDR options, or navigate through the menu to **DISPLAY** > **TRANSFORM** > **TRANSFORM ON**.
|
||||
|
||||
</Steps>
|
||||
|
||||
## Setting the velocity factor
|
||||
|
||||
The velocity factor is critical for converting time delay into physical distance. Every cable type has a characteristic velocity factor -- the ratio of signal speed in the cable to the speed of light in vacuum.
|
||||
|
||||
<Steps>
|
||||
|
||||
1. Navigate to the TDR settings menu.
|
||||
|
||||
2. Select **VELOCITY FACTOR**.
|
||||
|
||||
3. Enter the velocity factor as a percentage. For example, for RG405 with a velocity factor of 0.70, enter **70** and press **Ok**.
|
||||
|
||||
</Steps>
|
||||
|
||||
### Common cable velocity factors
|
||||
|
||||
| Cable Type | Velocity Factor | Enter as |
|
||||
|-----------|----------------|----------|
|
||||
| RG405 / Semi-rigid | 0.70 | 70 |
|
||||
| RG58 | 0.66 | 66 |
|
||||
| RG213 | 0.66 | 66 |
|
||||
| RG174 | 0.66 | 66 |
|
||||
| LMR-400 | 0.85 | 85 |
|
||||
| LMR-240 | 0.84 | 84 |
|
||||
| Belden 9913 | 0.84 | 84 |
|
||||
| RG6 (75 ohm) | 0.82 | 82 |
|
||||
| RG11 (75 ohm) | 0.78 | 78 |
|
||||
| Open wire / ladder line | 0.91-0.95 | 91-95 |
|
||||
| Free space / air | 1.00 | 100 |
|
||||
|
||||
<Aside type="caution">
|
||||
An incorrect velocity factor gives proportionally incorrect distance readings. If you measure 10 meters but the velocity factor is wrong by 10%, your actual cable length could be 9 or 11 meters. When the cable type is unknown, you can calibrate the velocity factor by measuring a cable of known length.
|
||||
</Aside>
|
||||
|
||||
## TDR processing modes
|
||||
|
||||
The NanoVNA-F V3 offers three processing modes for TDR. Each reveals different information about the cable.
|
||||
|
||||
<Tabs>
|
||||
<TabItem label="Low Pass Impulse">
|
||||
Shows reflections as spikes (impulses) at the distance where they occur. Each impedance discontinuity produces a spike -- positive for an increase in impedance (open circuit, connector), negative for a decrease (short circuit).
|
||||
|
||||
<img src={tdrLowpass.src} alt="TDR low pass impulse mode display" />
|
||||
|
||||
**Best for**: Locating discrete faults, finding connectors, identifying damage points. The narrow impulse makes it easy to pinpoint exact locations.
|
||||
|
||||
**Reading the display**: A tall positive spike at the end of the cable means an open termination. A tall negative spike means a short. Smaller spikes along the cable indicate connector joints, kinks, or damage.
|
||||
</TabItem>
|
||||
<TabItem label="Low Pass Step">
|
||||
Shows the impedance profile along the cable as a step response. The vertical axis represents impedance, and you can read the characteristic impedance at any point along the cable.
|
||||
|
||||
**Best for**: Seeing the impedance of the cable along its length. You can identify sections where the impedance deviates from 50 ohms (or whatever the nominal impedance is).
|
||||
|
||||
**Reading the display**: A flat line at 50 ohms means a uniform 50-ohm cable. A step upward means the impedance increased (e.g., connector, splice, or transition to a different cable type). A step to infinity at the end means open termination.
|
||||
</TabItem>
|
||||
<TabItem label="Bandpass">
|
||||
<img src={tdrBandpass.src} alt="TDR bandpass mode display" />
|
||||
|
||||
The default TDR mode. Uses the measurement data as-is without assuming a low-pass response. Suitable when the measurement does not start from a low frequency or when you want a general view.
|
||||
|
||||
**Best for**: Quick surveys, measurements that do not extend down to low frequencies, and situations where the low-pass modes produce artifacts.
|
||||
|
||||
**Reading the display**: Shows reflection magnitude vs. distance. Similar to impulse mode but with broader peaks and less sharp localization.
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
## Window functions
|
||||
|
||||
TDR applies a window function to reduce spectral leakage artifacts (ringing around reflections). Three levels are available:
|
||||
|
||||
| Window | Effect |
|
||||
|--------|--------|
|
||||
| MINIMUM | Narrowest peaks (best resolution) but most ringing. Use when you need to separate closely spaced reflections. |
|
||||
| NORMAL | Balanced tradeoff between resolution and ringing. The default, and a good choice for most measurements. |
|
||||
| MAXIMUM | Widest peaks (least resolution) but minimal ringing. Use when you want the cleanest display without sidelobes. |
|
||||
|
||||
<Aside type="tip">
|
||||
Start with NORMAL. Only switch to MINIMUM if you are trying to resolve two reflections that are very close together, and switch to MAXIMUM if ringing makes it hard to see real features.
|
||||
</Aside>
|
||||
|
||||
## Measuring cable length
|
||||
|
||||
<Steps>
|
||||
|
||||
1. Set up TDR mode as described above (calibrate, connect cable, enable TDR, set velocity factor).
|
||||
|
||||
2. Leave the far end of the cable **open** (unterminated).
|
||||
|
||||
3. Select **LOW PASS IMPULSE** mode for the clearest reading.
|
||||
|
||||
4. Look for the large positive spike at the far end of the cable. This is the reflection from the open termination.
|
||||
|
||||
5. Place a marker on the spike. The marker readout shows the distance from the reference plane to the open end.
|
||||
|
||||
Navigate to **MARKER** > **SELECT** > **MARKER 1**, then tap or drag it to the spike, or use **SEARCH** > **MAXIMUM**.
|
||||
|
||||
6. Read the distance from the marker readout. This is your cable length.
|
||||
|
||||
</Steps>
|
||||
|
||||
## Finding cable faults
|
||||
|
||||
A damaged cable produces reflections at the damage point. Common faults and their TDR signatures:
|
||||
|
||||
| Fault | TDR Signature (Impulse Mode) |
|
||||
|-------|------------------------------|
|
||||
| Open circuit (broken center conductor) | Large positive spike |
|
||||
| Short circuit (shield touching center) | Large negative spike |
|
||||
| Water ingress | Broad impedance change (gradual bump) |
|
||||
| Crushed cable | Negative spike (lower impedance at crush point) |
|
||||
| Loose connector | Small positive/negative spike at connector location |
|
||||
| Cable splice | Pair of small spikes (impedance bump at each joint) |
|
||||
|
||||
<Steps>
|
||||
|
||||
1. Connect the cable and enable TDR as described above.
|
||||
|
||||
2. Use LOW PASS IMPULSE mode.
|
||||
|
||||
3. Look for unexpected spikes between the PORT1 reference point and the cable's far end.
|
||||
|
||||
4. Place a marker on each spike to read its distance from the reference plane.
|
||||
|
||||
5. The distance tells you where to look on the physical cable for the problem.
|
||||
|
||||
</Steps>
|
||||
|
||||
## Key relationships for TDR measurements
|
||||
|
||||
Understanding these relationships helps you configure the NanoVNA for the best results:
|
||||
|
||||
| To improve... | Do this... |
|
||||
|--------------|------------|
|
||||
| Distance resolution (separate close reflections) | Increase the maximum sweep frequency |
|
||||
| Maximum measurable distance | Decrease the frequency spacing (add more sweep points or narrow the span) |
|
||||
| Measurement accuracy at long distances | Reduce the frequency step size |
|
||||
| Distance reading accuracy | Use the correct velocity factor and calibrate carefully |
|
||||
|
||||
<Aside>
|
||||
The maximum measurable distance is limited by the inverse of the frequency step size. With 1001 points from 1 MHz to 900 MHz, the step is about 900 kHz, giving a maximum distance of roughly 160 meters. For longer cables, reduce the stop frequency or increase the number of points.
|
||||
</Aside>
|
||||
|
||||
## Calibrating velocity factor with a known cable
|
||||
|
||||
If you have a cable of known length, you can determine its velocity factor:
|
||||
|
||||
<Steps>
|
||||
|
||||
1. Connect the known-length cable and enable TDR mode.
|
||||
|
||||
2. Set the velocity factor to 100 (speed of light / no correction).
|
||||
|
||||
3. Read the distance to the open end.
|
||||
|
||||
4. Calculate: **Velocity factor = (Actual length / Displayed length) x 100**
|
||||
|
||||
For example, if the cable is actually 5.0 meters but TDR shows 7.1 meters at VF=100:
|
||||
```
|
||||
VF = (5.0 / 7.1) x 100 = 70.4
|
||||
```
|
||||
|
||||
5. Enter this value as the velocity factor. The distance reading should now match the known length.
|
||||
|
||||
</Steps>
|
||||
|
||||
## Troubleshooting TDR
|
||||
|
||||
**No reflection visible at the cable end**
|
||||
- The cable may be terminated in a matched load (50 ohms). An open or short end produces the strongest reflection. Disconnect the far end.
|
||||
- The cable may be longer than the maximum measurable distance. Increase sweep points or reduce the stop frequency.
|
||||
|
||||
**Multiple closely spaced spikes where there should be one**
|
||||
- This is ringing from the window function. Switch to MAXIMUM window to reduce it, or increase the sweep bandwidth for better resolution.
|
||||
|
||||
**Distance reading does not match the known cable length**
|
||||
- Check the velocity factor. This is the most common source of distance error.
|
||||
- Verify that the calibration is applied and current.
|
||||
|
||||
## Next steps
|
||||
|
||||
- [Port Extension](/tutorials/calibration/port-extension/) -- related concept for compensating cable delay
|
||||
- [TDR Mode](/how-to/measurement-tools/tdr-mode/) -- reference for all TDR settings
|
||||
- [Full Calibration](/tutorials/calibration/full-calibration/) -- calibration is essential for accurate TDR
|
||||
@ -0,0 +1,192 @@
|
||||
---
|
||||
title: Measuring a Filter
|
||||
description: Characterize a bandpass or lowpass filter with S21 measurements
|
||||
---
|
||||
|
||||
import { Aside, Steps, Tabs, TabItem } from '@astrojs/starlight/components';
|
||||
import formatLogmag from '../../../../assets/screenshots/format-logmag.png';
|
||||
import markerOperations from '../../../../assets/screenshots/marker-operations.png';
|
||||
|
||||
Filters are among the most common two-port devices you will encounter in radio work. The NanoVNA-F V3 lets you see the complete frequency response of a filter in seconds -- passband loss, bandwidth, rolloff steepness, and stopband rejection.
|
||||
|
||||
This tutorial walks through measuring a bandpass filter from start to finish. The same techniques apply to lowpass, highpass, and notch filters with minor adjustments.
|
||||
|
||||
## What you will need
|
||||
|
||||
- NanoVNA-F V3, charged or USB-powered
|
||||
- SMA calibration kit (OPEN, SHORT, LOAD)
|
||||
- SMA-JJ RG405 cable (included)
|
||||
- SMA straight-through adapter (included)
|
||||
- A filter with SMA connectors (or appropriate adapters)
|
||||
|
||||
## Choosing the frequency range
|
||||
|
||||
Set your sweep to cover the filter's passband plus enough margin to see the stopband behavior:
|
||||
|
||||
- **Bandpass filter**: Set START well below the passband and STOP well above it. For a 145 MHz bandpass filter, try 50 MHz to 300 MHz.
|
||||
- **Lowpass filter**: Set START near DC (1 MHz is the NanoVNA minimum) and STOP at 2 to 3 times the cutoff frequency.
|
||||
- **Highpass filter**: Set START below the cutoff and STOP well above the passband.
|
||||
|
||||
<Aside type="tip">
|
||||
Start with a wide span to see the overall shape, then narrow down to the passband for detailed measurements of insertion loss and ripple.
|
||||
</Aside>
|
||||
|
||||
## Calibrating for S21
|
||||
|
||||
A full OSLT calibration gives the best results for filter measurements. The THROUGH standard is especially important because it defines the 0 dB reference for the transmission path.
|
||||
|
||||
<Steps>
|
||||
|
||||
1. Navigate to **STIMULUS** and set the frequency range.
|
||||
|
||||
2. Navigate to **CAL** and perform the full calibration:
|
||||
- Connect OPEN to PORT1 (or cable end). Tap **OPEN**.
|
||||
- Connect SHORT. Tap **SHORT**.
|
||||
- Connect LOAD. Tap **LOAD**.
|
||||
- Connect PORT1 to PORT2 with the SMA-JJ cable or adapter. Tap **THROUGH**.
|
||||
- Tap **DONE**, then **SAVE** to a slot.
|
||||
|
||||
3. Verify: with the THROUGH still connected, S21 LOGMAG should read approximately 0 dB across the span.
|
||||
|
||||
</Steps>
|
||||
|
||||
See [Full Calibration](/tutorials/calibration/full-calibration/) for the detailed procedure.
|
||||
|
||||
## Connecting the filter
|
||||
|
||||
<Steps>
|
||||
|
||||
1. Remove the THROUGH connection between PORT1 and PORT2.
|
||||
|
||||
2. Connect the filter's input to PORT1 (or the cable from PORT1).
|
||||
|
||||
3. Connect the filter's output to PORT2 (or the cable going to PORT2).
|
||||
|
||||
4. The sweep updates immediately. You should see the filter's frequency response on the S21 trace.
|
||||
|
||||
</Steps>
|
||||
|
||||
<Aside>
|
||||
For passive filters, the input and output are usually interchangeable. For active filters or those with directional elements, connect input to PORT1 and output to PORT2.
|
||||
</Aside>
|
||||
|
||||
## Setting up the display
|
||||
|
||||
For filter characterization, configure these traces:
|
||||
|
||||
| Trace | Channel | Format | Purpose |
|
||||
|-------|---------|--------|---------|
|
||||
| TRACE 0 | S21 | LOGMAG | Insertion loss / frequency response |
|
||||
| TRACE 1 | S11 | LOGMAG | Input return loss (how well the filter is matched) |
|
||||
| TRACE 2 | S21 | PHASE | Phase response (optional, useful for phase-critical applications) |
|
||||
|
||||
Navigate to **DISPLAY** > **TRACE** to activate and configure each trace.
|
||||
|
||||
## Reading the S21 response
|
||||
|
||||
<img src={formatLogmag.src} alt="LOGMAG trace showing filter frequency response" />
|
||||
|
||||
The S21 LOGMAG trace shows the filter's transmission response:
|
||||
|
||||
### Key features to identify
|
||||
|
||||
<Tabs>
|
||||
<TabItem label="Passband">
|
||||
The frequency range where the filter lets signals through. On the LOGMAG trace, this is the highest (least negative) region. A perfect filter would show 0 dB here; real filters always have some insertion loss.
|
||||
|
||||
**Passband insertion loss**: Read the S21 value at the peak of the passband. Values of -0.5 to -3 dB are typical depending on filter type and quality. Lower loss is better.
|
||||
|
||||
**Passband ripple**: Look for variations in the passband level. A filter spec might say "0.5 dB ripple" -- this means the passband level varies by up to 0.5 dB across its width.
|
||||
</TabItem>
|
||||
<TabItem label="Cutoff / bandwidth">
|
||||
The **-3 dB bandwidth** is the standard measure of a filter's width. It is the frequency range where S21 stays within 3 dB of the passband peak.
|
||||
|
||||
For a bandpass filter, the bandwidth is:
|
||||
```
|
||||
BW = f_upper - f_lower
|
||||
```
|
||||
where f_upper and f_lower are the frequencies where S21 drops 3 dB below the peak.
|
||||
</TabItem>
|
||||
<TabItem label="Stopband">
|
||||
The frequency range where the filter blocks signals. On the LOGMAG trace, this is the region far below the passband.
|
||||
|
||||
**Stopband rejection**: How many dB below the passband the filter attenuates unwanted signals. A filter with -40 dB stopband rejection removes 99.99% of the signal power at those frequencies.
|
||||
|
||||
**Ultimate rejection**: The deepest attenuation the filter achieves. This is limited by the filter's isolation and, at very low levels, by the NanoVNA's dynamic range (noise floor).
|
||||
</TabItem>
|
||||
<TabItem label="Rolloff">
|
||||
The steepness of the transition from passband to stopband. Steeper rolloff means the filter transitions more sharply. This is often described in dB per octave or dB per decade.
|
||||
|
||||
A filter with steep rolloff can separate closely spaced signals; one with gentle rolloff cannot.
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
## Finding the -3 dB bandwidth with markers
|
||||
|
||||
<img src={markerOperations.src} alt="Marker operations menu" />
|
||||
|
||||
<Steps>
|
||||
|
||||
1. **Place MARKER 1 at the passband peak.**
|
||||
|
||||
Navigate to **MARKER** > **SELECT** > **MARKER 1**, then **SEARCH** > **MAXIMUM**. The marker jumps to the point of lowest insertion loss. Note the dB value (e.g., -1.2 dB).
|
||||
|
||||
2. **Calculate the -3 dB level.**
|
||||
|
||||
Subtract 3 dB from the peak value. If the peak is -1.2 dB, the -3 dB level is -4.2 dB.
|
||||
|
||||
3. **Place MARKER 2 at the lower -3 dB point.**
|
||||
|
||||
Activate **MARKER 2**. Manually move it (by tapping or dragging) to the frequency on the lower slope where the trace crosses your calculated -3 dB level. Alternatively, use the **SEARCH** > **LEFT** function to search leftward from the peak.
|
||||
|
||||
4. **Place MARKER 3 at the upper -3 dB point.**
|
||||
|
||||
Activate **MARKER 3** and position it at the upper -3 dB crossing. Use **SEARCH** > **RIGHT** to search rightward.
|
||||
|
||||
5. **Read the bandwidth.**
|
||||
|
||||
The -3 dB bandwidth is the difference between MARKER 3's frequency and MARKER 2's frequency.
|
||||
|
||||
</Steps>
|
||||
|
||||
<Aside type="tip">
|
||||
You can also use the marker **OPERATIONS** to set the sweep range precisely to the passband. Place a marker at the lower band edge, then use **>START** to set it as the start frequency. Place another marker at the upper edge and use **>STOP**. This zooms the display into the passband for detailed ripple analysis.
|
||||
</Aside>
|
||||
|
||||
## Evaluating filter quality
|
||||
|
||||
Here are some benchmarks for common filter types:
|
||||
|
||||
| Parameter | Acceptable | Good | Excellent |
|
||||
|-----------|-----------|------|-----------|
|
||||
| Passband insertion loss | < 3 dB | < 1 dB | < 0.5 dB |
|
||||
| Passband ripple | < 1 dB | < 0.5 dB | < 0.1 dB |
|
||||
| Stopband rejection | > 20 dB | > 40 dB | > 60 dB |
|
||||
| Input return loss (S11) | < -10 dB | < -15 dB | < -20 dB |
|
||||
|
||||
## Checking input match (S11)
|
||||
|
||||
A well-designed filter should present close to 50 ohms at its input within the passband. Activate the S11 LOGMAG trace to check:
|
||||
|
||||
- **S11 below -15 dB** in the passband means the filter is well matched and will not cause significant reflections in a 50-ohm system.
|
||||
- **S11 near 0 dB** in the stopband is expected -- the filter reflects (rejects) signals at those frequencies.
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
**Passband shows more loss than the filter is rated for**
|
||||
- Check connector tightness. Loose connections add loss.
|
||||
- Verify calibration. Recalibrate if the THROUGH check did not show 0 dB.
|
||||
- Ensure the measurement cables are not introducing loss that the calibration did not account for.
|
||||
|
||||
**Passband shape looks asymmetric or distorted**
|
||||
- The filter may actually be asymmetric (some designs are). Compare to the manufacturer's datasheet.
|
||||
- Check for impedance mismatch at the ports. A filter designed for 75 ohms will not measure correctly in a 50-ohm system.
|
||||
|
||||
**Stopband rejection seems limited (e.g., never goes below -50 dB)**
|
||||
- You may be seeing the NanoVNA's noise floor. This is the instrument's limitation, not the filter's. The actual filter rejection may be better than what the display shows.
|
||||
|
||||
## Next steps
|
||||
|
||||
- [Your First S21 Measurement](/tutorials/first-measurements/first-s21/) -- foundational S21 concepts
|
||||
- [Marker Search](/how-to/markers/marker-search/) -- advanced marker search techniques
|
||||
- [Display Formats](/how-to/display-traces/display-formats/) -- other ways to view filter data (group delay, phase)
|
||||
@ -0,0 +1,156 @@
|
||||
---
|
||||
title: Testing an Antenna
|
||||
description: Measure SWR, impedance, and resonant frequency of an antenna
|
||||
---
|
||||
|
||||
import { Aside, Steps, Tabs, TabItem } from '@astrojs/starlight/components';
|
||||
import formatSmith from '../../../../assets/screenshots/format-smith.png';
|
||||
import markerSearch from '../../../../assets/screenshots/marker-search.png';
|
||||
|
||||
Testing an antenna with the NanoVNA-F V3 tells you three things: where it resonates, how well it matches your feedline, and what its impedance looks like. This tutorial walks through the full process, from connecting the antenna to interpreting the results.
|
||||
|
||||
## What you will need
|
||||
|
||||
- NanoVNA-F V3, charged or USB-powered
|
||||
- SMA calibration kit (OPEN, SHORT, LOAD)
|
||||
- SMA-JJ RG405 cable (included)
|
||||
- Adapter from SMA to your antenna's connector (SMA-to-BNC, SMA-to-SO239, SMA-to-N, etc.)
|
||||
- The antenna you want to test
|
||||
|
||||
## Setting up
|
||||
|
||||
<Steps>
|
||||
|
||||
1. **Determine the expected frequency range.**
|
||||
|
||||
Every antenna has a design frequency. For amateur radio:
|
||||
- 80 m band: 3.5 - 4.0 MHz
|
||||
- 40 m band: 7.0 - 7.3 MHz
|
||||
- 20 m band: 14.0 - 14.35 MHz
|
||||
- 2 m band: 144 - 148 MHz
|
||||
- 70 cm band: 420 - 450 MHz
|
||||
|
||||
Set your sweep range to cover the expected band with some margin on each side. For example, for a 2 m antenna, use 130 MHz to 160 MHz.
|
||||
|
||||
2. **Set the frequency range on the NanoVNA.**
|
||||
|
||||
Tap the screen, navigate to **STIMULUS**, and enter the START and STOP frequencies.
|
||||
|
||||
3. **Calibrate at the antenna connection point.**
|
||||
|
||||
Connect the SMA-JJ cable (and any adapter you will use for the antenna) to PORT1. Perform a full calibration (OPEN, SHORT, LOAD) at the far end of this cable/adapter assembly. This places the reference plane right where the antenna will connect.
|
||||
|
||||
See [Full Calibration](/tutorials/calibration/full-calibration/) for the step-by-step procedure.
|
||||
|
||||
<Aside type="caution">
|
||||
Calibrate with the adapter in place. If you calibrate without the adapter and then add it for the antenna, the adapter's electrical length and mismatch will corrupt your readings. The reference plane must be at the antenna's feedpoint connection.
|
||||
</Aside>
|
||||
|
||||
4. **Set up the display.**
|
||||
|
||||
For antenna testing, two traces are most useful:
|
||||
- **Trace 0**: S11 SWR -- shows standing wave ratio directly
|
||||
- **Trace 1**: S11 SMITH R+jX -- shows impedance on the Smith chart
|
||||
|
||||
Navigate to **DISPLAY** > **TRACE** to configure. You can also use S11 LOGMAG instead of SWR if you prefer to read return loss in dB.
|
||||
|
||||
5. **Connect the antenna.**
|
||||
|
||||
Attach the antenna to the calibrated cable/adapter. The sweep updates in real time.
|
||||
|
||||
</Steps>
|
||||
|
||||
## Finding the resonant frequency
|
||||
|
||||
The resonant frequency is where the antenna's reactance crosses zero -- it transitions from capacitive to inductive (or vice versa). On the SWR trace, this is usually near the lowest point.
|
||||
|
||||
<Steps>
|
||||
|
||||
1. Tap the screen and navigate to **MARKER** > **SELECT** > **MARKER 1**.
|
||||
|
||||
2. Tap **SEARCH** > **MINIMUM** to jump the marker to the lowest SWR point.
|
||||
|
||||
<img src={markerSearch.src} alt="Marker search menu with MINIMUM highlighted" />
|
||||
|
||||
3. Read the marker value. The readout shows the frequency and SWR. On the Smith chart trace, it also shows the impedance (R + jX).
|
||||
|
||||
</Steps>
|
||||
|
||||
A well-tuned antenna shows:
|
||||
|
||||
- **SWR below 2.0:1** at the target frequency (below 1.5:1 is excellent)
|
||||
- **Impedance near 50 + j0 ohms** on the Smith chart (centered)
|
||||
- **Return loss better than -10 dB** (more negative = better match)
|
||||
|
||||
## Interpreting the Smith chart
|
||||
|
||||
<img src={formatSmith.src} alt="Smith chart display showing antenna impedance" />
|
||||
|
||||
The Smith chart gives you more diagnostic information than SWR alone:
|
||||
|
||||
<Tabs>
|
||||
<TabItem label="Good match">
|
||||
The trace passes through or near the center of the chart (50 ohms) at the design frequency. The SWR dip aligns with the center crossing. No further adjustment is needed.
|
||||
</TabItem>
|
||||
<TabItem label="Too long">
|
||||
If the resonant frequency is *below* the target, the antenna is electrically too long. The Smith chart shows the resonance (real-axis crossing) shifted left of your target frequency. Shortening the antenna element will move resonance upward.
|
||||
</TabItem>
|
||||
<TabItem label="Too short">
|
||||
If the resonant frequency is *above* the target, the antenna is electrically too short. The Smith chart shows the resonance shifted right of your target. Lengthening the element will move resonance downward.
|
||||
</TabItem>
|
||||
<TabItem label="Impedance mismatch">
|
||||
If the trace crosses the real axis but not near 50 ohms (e.g., at 25 ohms or 100 ohms), the antenna resonates at the right frequency but its feedpoint impedance does not match the 50-ohm feedline. A matching network (balun, gamma match, L-network) may be needed.
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
## Tips for different antenna types
|
||||
|
||||
### Wire dipoles and verticals
|
||||
|
||||
- Measure with the antenna in its final installed position. Moving a dipole from the bench to the mast changes its impedance.
|
||||
- Height above ground significantly affects impedance, especially on lower HF bands. A quarter-wave vertical over a ground plane shows approximately 36 ohms at resonance.
|
||||
- If the SWR curve is too narrow (sharp dip), the antenna may have high Q. This is common with short, loaded antennas.
|
||||
|
||||
### Yagi and directional antennas
|
||||
|
||||
- The driven element's impedance is affected by the parasitic elements. Always measure the complete antenna, not just the driven element in isolation.
|
||||
- Expect the impedance to be lower than a simple dipole -- 20 to 35 ohms is typical for a Yagi feedpoint.
|
||||
|
||||
### VHF/UHF antennas
|
||||
|
||||
- Cable loss matters more at higher frequencies. Keep the cable between the NanoVNA and the antenna as short as practical.
|
||||
- At UHF (70 cm and above), even a few centimeters of unterminated cable can affect readings. Use quality connectors and adapters.
|
||||
- The NanoVNA-F V3 covers up to 6 GHz, making it suitable for testing WiFi, 23 cm, and microwave antennas as well.
|
||||
|
||||
<Aside type="tip">
|
||||
For HF antennas where you cannot bring the NanoVNA to the feedpoint, consider calibrating at the end of a longer cable and accepting that cable loss will slightly flatten your SWR readings. The resonant frequency will still be accurate; the SWR minimum value will read slightly better than reality because some reflected power is absorbed by the cable.
|
||||
</Aside>
|
||||
|
||||
## Recording your results
|
||||
|
||||
Before disconnecting:
|
||||
|
||||
1. Note the resonant frequency, SWR at resonance, and impedance values from the marker readout.
|
||||
2. If the antenna covers a band, check SWR at the band edges using additional markers (MARKER 2, MARKER 3). Use **MARKER OPERATIONS** > **>START** and **>STOP** to set markers at the band edges.
|
||||
3. For a permanent record, connect the NanoVNA to a PC running NanoVNA-Saver and capture a screenshot or export the S-parameter data.
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
**SWR is high everywhere (above 5:1 across the entire range)**
|
||||
- Check that the antenna is actually connected. A disconnected cable shows SWR near infinity.
|
||||
- Verify your calibration is valid. Recalibrate if in doubt.
|
||||
- The antenna may be completely out of the measurement range. Try widening the span.
|
||||
|
||||
**SWR dip is at the wrong frequency**
|
||||
- The antenna length needs adjustment. Shorter elements resonate higher, longer elements resonate lower.
|
||||
- Nearby objects (metal structures, other antennas, your hand) detune the antenna. Keep clear during measurements.
|
||||
|
||||
**Smith chart shows a tight circle that does not cross the real axis**
|
||||
- The antenna may not be resonant in the displayed range. Widen the frequency span.
|
||||
- There may be a feedline problem (damaged cable, bad connector) preventing the signal from reaching the antenna.
|
||||
|
||||
## Next steps
|
||||
|
||||
- [Your First S11 Measurement](/tutorials/first-measurements/first-s11/) -- foundational S11 concepts
|
||||
- [Full Calibration](/tutorials/calibration/full-calibration/) -- detailed calibration procedure
|
||||
- [Using Markers](/how-to/markers/using-markers/) -- advanced marker techniques for band-edge measurements
|
||||
130
src/styles/custom.css
Normal file
@ -0,0 +1,130 @@
|
||||
/* NanoVNA-F V3 Documentation — Steel Blue / Teal Instrument Aesthetic
|
||||
* Cool teal accent, clean grays, distinct from NanoVNA-H copper/amber
|
||||
*/
|
||||
|
||||
/* Light mode */
|
||||
:root {
|
||||
--sl-color-accent-low: #d9edf5;
|
||||
--sl-color-accent: #2d7d9a;
|
||||
--sl-color-accent-high: #1a4d5e;
|
||||
--sl-color-white: #12191e;
|
||||
--sl-color-gray-1: #2d3840;
|
||||
--sl-color-gray-2: #4a5a64;
|
||||
--sl-color-gray-3: #74878f;
|
||||
--sl-color-gray-4: #9fb0b8;
|
||||
--sl-color-gray-5: #c6d3d9;
|
||||
--sl-color-gray-6: #e4ecf0;
|
||||
--sl-color-gray-7: #f2f6f8;
|
||||
--sl-color-black: #f8fafb;
|
||||
|
||||
--sl-font: 'Segoe UI', system-ui, -apple-system, sans-serif;
|
||||
--sl-font-mono: 'Cascadia Code', 'Fira Code', 'JetBrains Mono', ui-monospace, monospace;
|
||||
}
|
||||
|
||||
/* Dark mode */
|
||||
:root[data-theme='dark'] {
|
||||
--sl-color-accent-low: #0f2a35;
|
||||
--sl-color-accent: #5bb8d4;
|
||||
--sl-color-accent-high: #b3e0f0;
|
||||
--sl-color-white: #f2f6f8;
|
||||
--sl-color-gray-1: #c6d3d9;
|
||||
--sl-color-gray-2: #9fb0b8;
|
||||
--sl-color-gray-3: #74878f;
|
||||
--sl-color-gray-4: #4a5a64;
|
||||
--sl-color-gray-5: #2d3840;
|
||||
--sl-color-gray-6: #1e2930;
|
||||
--sl-color-gray-7: #12191e;
|
||||
--sl-color-black: #0a1015;
|
||||
}
|
||||
|
||||
/* Teal accent for inline code and links in content */
|
||||
:root {
|
||||
--sl-color-text-accent: #3a7d99;
|
||||
}
|
||||
|
||||
:root[data-theme='dark'] {
|
||||
--sl-color-text-accent: #6ab8d4;
|
||||
}
|
||||
|
||||
/* Slightly tighter sidebar for lab-manual density */
|
||||
nav.sidebar .top-level > li + li {
|
||||
margin-top: 0.25rem;
|
||||
}
|
||||
|
||||
/* Badge styling — subdued Dev/Draft badges */
|
||||
.sl-badge {
|
||||
font-size: 0.7em;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.05em;
|
||||
}
|
||||
|
||||
/* Code blocks — cool tint */
|
||||
:root {
|
||||
--sl-color-bg-inline-code: #e4eff5;
|
||||
}
|
||||
|
||||
:root[data-theme='dark'] {
|
||||
--sl-color-bg-inline-code: #162830;
|
||||
}
|
||||
|
||||
/* Hero section on landing page */
|
||||
.hero-nanovna {
|
||||
text-align: center;
|
||||
padding: 2rem 0;
|
||||
}
|
||||
|
||||
.hero-nanovna img {
|
||||
max-width: 480px;
|
||||
width: 100%;
|
||||
border-radius: 8px;
|
||||
box-shadow: 0 4px 24px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
|
||||
/* Spec cards */
|
||||
.spec-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
|
||||
gap: 1rem;
|
||||
margin: 1.5rem 0;
|
||||
}
|
||||
|
||||
.spec-card {
|
||||
background: var(--sl-color-gray-7);
|
||||
border: 1px solid var(--sl-color-gray-5);
|
||||
border-radius: 8px;
|
||||
padding: 1rem;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.spec-card .spec-value {
|
||||
font-size: 1.5rem;
|
||||
font-weight: 700;
|
||||
color: var(--sl-color-accent);
|
||||
display: block;
|
||||
}
|
||||
|
||||
.spec-card .spec-label {
|
||||
font-size: 0.85rem;
|
||||
color: var(--sl-color-gray-2);
|
||||
margin-top: 0.25rem;
|
||||
}
|
||||
|
||||
/* Comparison tables */
|
||||
table {
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
th {
|
||||
background: var(--sl-color-gray-6);
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
/* Menu path breadcrumbs */
|
||||
.menu-path {
|
||||
font-family: var(--sl-font-mono);
|
||||
font-size: 0.85em;
|
||||
background: var(--sl-color-bg-inline-code);
|
||||
padding: 0.15em 0.4em;
|
||||
border-radius: 4px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
216
src/styles/landing.css
Normal file
@ -0,0 +1,216 @@
|
||||
/* Landing page styles — NanoVNA-F V3 Documentation */
|
||||
|
||||
/* Hero override: use device photo prominently */
|
||||
.landing-hero {
|
||||
text-align: center;
|
||||
padding: 1rem 0 2rem;
|
||||
}
|
||||
|
||||
.landing-hero img {
|
||||
max-width: 520px;
|
||||
width: 100%;
|
||||
border-radius: 10px;
|
||||
box-shadow:
|
||||
0 4px 24px rgba(0, 0, 0, 0.2),
|
||||
0 0 0 1px rgba(45, 125, 154, 0.15);
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.landing-hero .hero-caption {
|
||||
font-size: 0.8rem;
|
||||
color: var(--sl-color-gray-3);
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/* Key specs strip */
|
||||
.specs-strip {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
|
||||
gap: 0.75rem;
|
||||
margin: 2rem 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.spec-tile {
|
||||
background: var(--sl-color-gray-6);
|
||||
border: 1px solid var(--sl-color-gray-5);
|
||||
border-radius: 8px;
|
||||
padding: 0.75rem 0.5rem;
|
||||
text-align: center;
|
||||
transition: border-color 0.2s;
|
||||
}
|
||||
|
||||
.spec-tile:hover {
|
||||
border-color: var(--sl-color-accent);
|
||||
}
|
||||
|
||||
.spec-tile .spec-val {
|
||||
font-size: 1.4rem;
|
||||
font-weight: 700;
|
||||
color: var(--sl-color-accent);
|
||||
line-height: 1.2;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.spec-tile .spec-unit {
|
||||
font-size: 0.85rem;
|
||||
font-weight: 400;
|
||||
color: var(--sl-color-gray-2);
|
||||
}
|
||||
|
||||
.spec-tile .spec-lbl {
|
||||
font-size: 0.7rem;
|
||||
color: var(--sl-color-gray-3);
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.04em;
|
||||
margin-top: 0.15rem;
|
||||
display: block;
|
||||
}
|
||||
|
||||
/* Audience split */
|
||||
.audience-grid {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
gap: 1.25rem;
|
||||
margin: 2rem 0;
|
||||
}
|
||||
|
||||
@media (max-width: 640px) {
|
||||
.audience-grid {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
|
||||
.audience-card {
|
||||
background: var(--sl-color-gray-6);
|
||||
border: 1px solid var(--sl-color-gray-5);
|
||||
border-radius: 10px;
|
||||
padding: 1.5rem;
|
||||
transition: border-color 0.2s, box-shadow 0.2s;
|
||||
}
|
||||
|
||||
.audience-card:hover {
|
||||
border-color: var(--sl-color-accent);
|
||||
box-shadow: 0 2px 12px rgba(45, 125, 154, 0.1);
|
||||
}
|
||||
|
||||
.audience-card h3 {
|
||||
margin: 0 0 0.25rem;
|
||||
font-size: 1.1rem;
|
||||
color: var(--sl-color-white);
|
||||
}
|
||||
|
||||
.audience-card .audience-role {
|
||||
font-size: 0.75rem;
|
||||
color: var(--sl-color-accent);
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.04em;
|
||||
font-weight: 600;
|
||||
margin-bottom: 0.5rem;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.audience-card p {
|
||||
font-size: 0.85rem;
|
||||
color: var(--sl-color-gray-2);
|
||||
margin: 0 0 0.75rem;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.audience-card .audience-links {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 0.25rem;
|
||||
}
|
||||
|
||||
.audience-card .audience-links a {
|
||||
font-size: 0.8rem;
|
||||
color: var(--sl-color-text-accent);
|
||||
text-decoration: none;
|
||||
padding: 0.15rem 0;
|
||||
}
|
||||
|
||||
.audience-card .audience-links a:hover {
|
||||
color: var(--sl-color-accent);
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.audience-card .audience-links a::before {
|
||||
content: '\2192\00a0';
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
/* Section headers */
|
||||
.section-head {
|
||||
margin: 2.5rem 0 0.5rem;
|
||||
padding-bottom: 0.5rem;
|
||||
border-bottom: 1px solid var(--sl-color-gray-5);
|
||||
}
|
||||
|
||||
.section-head h2 {
|
||||
margin: 0;
|
||||
font-size: 1.25rem;
|
||||
}
|
||||
|
||||
.section-head p {
|
||||
margin: 0.25rem 0 0;
|
||||
font-size: 0.85rem;
|
||||
color: var(--sl-color-gray-3);
|
||||
}
|
||||
|
||||
/* Documentation path cards */
|
||||
.doc-paths {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
|
||||
gap: 1rem;
|
||||
margin: 1.25rem 0 2rem;
|
||||
}
|
||||
|
||||
.doc-path {
|
||||
background: var(--sl-color-gray-6);
|
||||
border: 1px solid var(--sl-color-gray-5);
|
||||
border-radius: 8px;
|
||||
padding: 1.25rem;
|
||||
text-decoration: none;
|
||||
color: inherit;
|
||||
transition: border-color 0.2s, transform 0.15s;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.doc-path:hover {
|
||||
border-color: var(--sl-color-accent);
|
||||
transform: translateY(-1px);
|
||||
}
|
||||
|
||||
.doc-path h3 {
|
||||
margin: 0 0 0.25rem;
|
||||
font-size: 1rem;
|
||||
color: var(--sl-color-white);
|
||||
}
|
||||
|
||||
.doc-path .path-count {
|
||||
font-size: 0.7rem;
|
||||
color: var(--sl-color-accent);
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.doc-path p {
|
||||
margin: 0.35rem 0 0;
|
||||
font-size: 0.8rem;
|
||||
color: var(--sl-color-gray-2);
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
/* Footer info */
|
||||
.landing-footer {
|
||||
margin-top: 3rem;
|
||||
padding-top: 1.5rem;
|
||||
border-top: 1px solid var(--sl-color-gray-5);
|
||||
font-size: 0.75rem;
|
||||
color: var(--sl-color-gray-3);
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
.landing-footer a {
|
||||
color: var(--sl-color-text-accent);
|
||||
}
|
||||
5
tsconfig.json
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"extends": "astro/tsconfigs/strict",
|
||||
"include": [".astro/types.d.ts", "**/*"],
|
||||
"exclude": ["dist"]
|
||||
}
|
||||