UNCLASSIFIED
TM-INST-020
OSCILLOSCOPE CALIBRATION OVERVIEW
Construction, Theory, Calibration and Verification Procedures
Prepared by: Mervyn Martin, KO6NNH  •  Merced, California  •  26 May 2026
Amateur Radio / Electronics — Not for commercial calibration use

CHAPTER 1 — GENERAL INFORMATION

Gear Profile

  • Example models: Generic bench or handheld units
  • Frequency range: Varies by model; verify datasheet
  • Connector type: BNC, SMA, or binding posts
  • Typical use: General measurement and calibration checks

Purpose

This guide describes a homebrew, no-calibration-needed method to calibrate a oscilloscope using public reference signals and first-principles checks. It borrows techniques from:

  • ../gps_calibration.md
  • ../fm_broadcast_calibration.md
  • ../radio_standard_calibration.md
  • ../verification_procedures.md

What You Will Build

  • A simple reference load (homebrew 50 ohm)
  • A quarter-wave coax stub test fixture
  • Optional GPS 1PPS counter (if you want tighter frequency checks)

Expected Accuracy

  • Frequency axis: 0.1 to 1 ppm (with GPS or time standards)
  • SWR/impedance: limited by resistor tolerance (typically 1-2%)

CHAPTER 2 — THEORY OF OPERATION

Calibration Philosophy

We use absolute references (GPS 1PPS, WWV/CHU, FM stations) and known physics (speed of light, coax velocity factor, resonance) to validate the analyzer without relying on any pre-calibrated lab equipment.

Key Principles

  1. Frequency accuracy: Check displayed frequency against GPS/WWV/CHU/FM carriers.
  2. Impedance accuracy: Validate using a known load and known reactance from a stub or LC.
  3. Repeatability: Measurements should be stable over time and temperature.

Reference Sources

  • GPS 1PPS: Atomic time tick (best accuracy).
  • WWV/CHU: HF time standards (good accuracy).
  • FM broadcast: Convenient local reference (moderate accuracy).

CHAPTER 3 — MATERIALS AND CONSTRUCTION

Build a 50 ohm Load

  • Use four 200 ohm, 1% resistors in parallel.
  • Solder directly inside a BNC/SMA connector shell if possible.
  • Keep leads short to reduce inductance.

Build a Quarter-Wave Stub

  • Choose coax with known velocity factor.
  • Cut to calculated length (see Calculations).
  • Short the far end (center to shield).
  • Label the stub with its target frequency and VF.

Optional GPS 1PPS Interface

  • GPS module with 1PPS output.
  • LED + resistor for lock indication.
  • Optional ESP32/CYD counter (see optional code example).

CHAPTER 4 — ASSEMBLY PROCEDURES

Assembly Steps

  1. Build or verify the 50 ohm load.
  2. Build one or more quarter-wave stubs (pick key bands).
  3. Prepare short, known-good test leads.
  4. Warm up the analyzer (10-15 minutes) before calibration checks.

CHAPTER 5 — CALIBRATION PROCEDURE

Step-by-Step

  1. Warm up the analyzer for 10-15 minutes.
  2. Frequency check using WWV/CHU or FM station:
  3. Measure known carrier.
  4. Calculate ppm error.
  5. Apply correction if supported.
  6. Impedance check using the 50 ohm load:
  7. Confirm 45-55 ohm range.
  8. Record SWR.
  9. Reactive check using the shorted stub:
  10. Find resonance dip.
  11. Compare with calculated frequency.
  12. Document the offsets and repeatability.

CHAPTER 6 — TUNING AND ADJUSTMENT

Frequency Axis Check

  • Measure WWV/CHU or FM carrier frequency.
  • Compare to published frequency.
  • If your analyzer supports frequency offset adjustment, apply correction.

Impedance/SWR Check

  • Connect the 50 ohm load.
  • The analyzer should read close to 50 ohm and low SWR.
  • Connect the shorted stub and locate the resonance dip; compare to expected.

Trim and Iterate

  • If stub resonance is off, trim length in small increments.
  • Re-check until resonance aligns within expected tolerance.

CHAPTER 7 — VERIFICATION

Verification Checklist

  • Re-measure the reference carrier after calibration.
  • Measure a second independent reference (FM vs WWV/CHU).
  • Confirm measurements are stable across 3-5 repetitions.

Acceptance Targets

  • Frequency accuracy: within 0.1-1 ppm of reference.
  • Load accuracy: within 1-2% of 50 ohm.

APPENDIX A — CALCULATIONS AND FORMULAS

Quarter-Wave Coax Stub

Use a shorted coax stub to create a known resonance:

L = (c / (4 * f)) * VF
                

Where: - L = stub length (meters) - c = 299,792,458 m/s - f = frequency (Hz) - VF = velocity factor of coax (e.g., 0.66 solid PE, 0.78 foam)

Example

Target frequency: 14.200 MHz

L = (299,792,458 / (4 * 14,200,000)) * 0.66
                L = 3.49 m
                

Cut slightly long, then trim while watching the analyzer until resonance hits target.

50 ohm Load (Homebrew)

Parallel resistor network:

R_total = 1 / (1/R1 + 1/R2 + ... + 1/Rn)
                

Example

Four 200 ohm resistors in parallel:

R_total = 1 / (4/200) = 50 ohms
                

Use 1% or 0.1% resistors if possible.

APPENDIX B — EXAMPLE RESULTS

Example Log

Date: 2026-01-15
                Gear: Example Analyzer
                
                Reference: WWV 15 MHz
                Measured: 15,000,012 Hz
                Error: +0.8 ppm
                
                Load Test: 50 ohm load
                Measured: 50.9 ohm
                SWR: 1.02
                
                Stub Test (14.200 MHz target)
                Measured dip: 14.198 MHz
                Error: -0.14%
                

APPENDIX C — OSCILLOSCOPE CALIBRATION OVERVIEW

Overview

The DSO1013D Plus (Hantek/Owon) oscilloscope requires calibration for accurate measurements. This guide provides cheap, homebrew methods using no calibrated test equipment.

What Needs Calibration

Oscilloscopes have three main calibration aspects:

  1. Timebase (Horizontal) - Time/frequency accuracy
  2. Voltage (Vertical) - Amplitude accuracy
  3. Probe Compensation - Probe frequency response

Calibration Requirements

1. Timebase Calibration

What it affects: - Time measurements (period, pulse width) - Frequency measurements - Phase measurements - Bode plot accuracy

Typical uncalibrated error: ±50-100 ppm (±0.005-0.01%)

Goal: Calibrate to ±1 ppm or better

Method: GPS 1PPS (same as TinySA/NanoVNA)


2. Voltage Calibration

What it affects: - Amplitude measurements - DC level measurements - Peak-to-peak voltage - RMS calculations

Typical uncalibrated error: ±3-5%

Goal: Calibrate to ±1% or better

Method: Precision voltage references


3. Probe Compensation

What it affects: - Square wave shape - Rise time measurements - High-frequency response

Typical state: Needs adjustment every time probe is connected

Goal: Flat frequency response, no overshoot/undershoot

Method: Built-in cal signal (if available) or external square wave


Quick Summary

Calibration Accuracy Goal Cost Time Difficulty
Timebase ±1 ppm $15-25 2-4 hours Easy
Voltage ±1% $5-15 1-2 hours Easy
Probe Comp Flat response $0 5 min Very Easy

Total: $20-40, one weekend


Understanding the DSO1013D Plus

Specifications

Typical specs: - Bandwidth: 100 MHz - Sample Rate: 1 GSa/s max - Channels: 2 - Vertical: 2 mV/div to 5 V/div - Horizontal: 2 ns/div to 50 s/div - Timebase crystal: Usually 25 MHz or 100 MHz - Input impedance: 1 MΩ || 15-20 pF

Internal Architecture

Timebase:

Crystal Oscillator (25 MHz typical)
                    ↓
                PLL (multiplies to higher frequencies)
                    ↓
                Sample clock (up to 1 GHz)
                    ↓
                ADC sampling
                

Vertical:

Input → Attenuator → Amplifier → ADC → DSP → Display
                         (Voltage divider calibrated in firmware)
                

Calibration Access

Internal Calibration (Firmware)

Most DSO1013D scopes have internal calibration menus:

Accessing calibration mode: 1. Power off scope 2. Hold down specific button while powering on 3. Or navigate to hidden UTILITY → CAL menu

Warning: Different firmware versions have different access methods. Check manual or online forums for your specific model.

What can be calibrated: - DC offset (each channel, each V/div setting) - AC gain (each channel, each V/div setting) - Timebase frequency - Trigger levels

Our Approach

We'll use external reference methods: - Don't need to access internal cal menus - Verify scope's existing calibration - If scope is off, we'll know by how much - Can document errors and apply mental corrections - Or: Note corrections in label on scope


Calibration Strategy

Phase 1: Timebase (Frequency)

Method: GPS 1PPS (reuse from TinySA project)

Procedure: 1. Generate GPS-locked 1 Hz signal (1 PPS) 2. Measure pulse width or period on scope 3. Should read exactly 1.000000 seconds 4. Calculate error 5. Apply correction (if possible) or document

Accuracy: ±0.01 ppm


Phase 2: Voltage References

Method: Precision voltage references

Build 4 reference voltages: 1. 1.25V - LM4040-1.25 (±0.1%) 2. 2.50V - LM4040-2.5 (±0.1%) 3. 5.00V - LM4040-5.0 (±0.1%) 4. 10.0V - Precision divider from 5V

Procedure: 1. Build reference circuit 2. Measure on scope at various V/div settings 3. Compare to known reference values 4. Calculate errors 5. Document or apply corrections

Accuracy: ±0.5-1%


Phase 3: Probe Compensation

Method: Built-in cal output or external square wave

Procedure: 1. Connect probe to cal signal (usually 1 kHz square wave) 2. Adjust probe compensation trimmer 3. Square wave should have flat top, no overshoot 4. Repeat for each probe

Time: 2 minutes per probe


Cost Breakdown

Minimum Budget: $5

If reusing GPS from TinySA calibration: - Voltage references: LM4040 ICs × 3 ($3) - Resistors for divider ($1) - Breadboard (have) - Total: $5

New build: - GPS module + Arduino ($20 - reuse from TinySA) - Voltage references ($5) - Components, breadboard ($5) - Total: $30

Deluxe Budget: $50

For best accuracy: - GPS module ($15) - Arduino ($10) - Precision voltage references × 4 ($10) - REF02 +10V reference ($5) - 0.1% resistors for dividers ($5) - Enclosure, connectors ($10) - Total: $55


What You'll Achieve

Before Calibration

Timebase: - Unknown error (could be ±100 ppm) - Example: 1 ms measures as 1.0001 ms - At 1 MHz: Could be off by 100 Hz

Voltage: - Unknown error (could be ±5%) - Example: 5.00V measures as 5.25V - Can't trust amplitude measurements

Probes: - Frequency-dependent errors - Overshoot on square waves - Poor rise time

After Calibration

Timebase: - Error known to ±0.01 ppm - Example: 1 ms measures 1.000000 ms ±10 ns - Frequency measurements accurate to ±1 Hz

Voltage: - Error known to ±1% - Example: 5.00V measures 5.00V ±0.05V - Can trust amplitude within ±1%

Probes: - Flat frequency response - Clean square waves - Accurate rise time measurements


Tools Needed

Essential

  • DSO1013D oscilloscope (obviously!)
  • Computer
  • Soldering iron
  • Multimeter (any quality, for assembly)
  • Breadboard
  • Wire, components

From Previous Projects

  • GPS module + Arduino (TinySA calibration)
  • Frequency counter (if built)

Optional

  • Good quality DMM (for voltage verification)
  • Second oscilloscope (cross-checking)
  • Signal generator (verification)

Project Files Structure

Documentation

  1. oscilloscope_calibration_overview.md (this file)
  2. oscilloscope_timebase_cal.md - Timebase calibration
  3. oscilloscope_voltage_cal.md - Voltage reference building
  4. oscilloscope_probe_comp.md - Probe compensation
  5. oscilloscope_verification.md - Testing and verification

Examples

  1. examples/dso1013d_complete_calibration.md - Full worked example

Typical Errors Found

Common Issues

Timebase errors: - ±20-50 ppm typical for uncalibrated scope - ±100 ppm for very cheap scopes - Temperature-dependent drift

Voltage errors: - DC offset: ±50-100 mV - Gain error: ±2-5% per channel - Different error for each V/div setting - Nonlinearity at low voltages

Probe issues: - Under-compensated: rounded edges, slow rise time - Over-compensated: overshoot, ringing - Damaged probes: total distortion


Calibration Frequency

How Often to Calibrate

Timebase: - Initial: Full GPS calibration - Check: Monthly with FM broadcast (5 min) - Re-calibrate: Annually or if suspected drift

Voltage: - Initial: Full calibration with references - Check: Before critical measurements - Re-calibrate: Every 6 months

Probe Compensation: - Every time you connect a probe! - After moving probe - After temperature change - Takes 30 seconds - no excuse not to do it


Limitations

What We Can't Calibrate

Without opening scope: - Internal ADC linearity - Sample rate accuracy (beyond timebase) - Bandwidth (3dB point) - Input protection circuits

What requires factory calibration: - Non-linearity correction - Temperature compensation tables - Trigger level DAC - Attenuator switching

Good news: Our external calibration catches most errors!


Safety Notes

Working with Oscilloscopes

Safe: - External calibration circuits (5-10V max) - Probe compensation - Timebase measurement

Caution: - Opening scope case (capacitors retain charge) - High voltage probes (>50V) - Mains-powered circuits

Never: - Connect scope to mains voltage directly - Short scope inputs - Apply >300V (typical input limit)

For this project: Everything is low voltage (≤10V), very safe.


Success Criteria

Well-Calibrated Oscilloscope

Timebase: - ✓ 1 second GPS pulse measures 1.000 s ±1 ms - ✓ 1 kHz signal measures 1.000 kHz ±1 Hz - ✓ Frequency measurements match counter

Voltage: - ✓ 5.00V reference measures 5.00V ±0.05V - ✓ 1.25V reference measures 1.25V ±0.01V - ✓ All channels agree ±1%

Probes: - ✓ Square wave has flat top - ✓ No overshoot or ringing - ✓ Fast, clean edges


Applications After Calibration

What You Can Now Measure Accurately

Time domain: - Pulse widths (±1%) - Period/frequency (±0.01%) - Rise/fall times - Phase shifts - Timing diagrams

Voltage: - DC levels (±1%) - AC amplitudes (±1-2%) - Peak-to-peak voltages - RMS values (if scope calculates)

Waveforms: - PWM duty cycle - Signal integrity - Noise measurements - Transient response

Digital: - Logic levels - Setup/hold times - Clock jitter (if low enough)


Comparison to Professional Calibration

Commercial Calibration Service

Cost: $100-300 Time: 2-4 weeks turnaround Accuracy: ±0.5% voltage, ±1 ppm timebase Includes: Certificate, traceable to NIST

Our DIY Calibration

Cost: $20-40 Time: 1 weekend Accuracy: ±1% voltage, ±0.01 ppm timebase Includes: Documentation, understanding

Conclusion: DIY is 10× cheaper, comparable accuracy, you keep your scope!


Learning Outcomes

Technical Knowledge

  • How oscilloscopes work internally
  • Voltage reference circuits
  • GPS timing applications
  • Probe loading effects
  • Calibration methodology

Practical Skills

  • Building precision circuits
  • Voltage reference design
  • Oscilloscope operation
  • Measurement uncertainty
  • Troubleshooting techniques

Confidence

  • Trust your measurements
  • Understand error sources
  • Design reliable circuits
  • Debug effectively

Next Steps

  1. Read: oscilloscope_timebase_cal.md
  2. Build: GPS timebase reference (or reuse from TinySA)
  3. Read: oscilloscope_voltage_cal.md
  4. Build: Voltage reference circuit
  5. Calibrate: Follow procedures
  6. Verify: Test with known signals
  7. Document: Record calibration data

Quick Start Options

Option A: Timebase Only (2 hours)

If you already have GPS setup: 1. Connect GPS 1PPS to scope 2. Measure pulse period 3. Calculate error 4. Done - know timebase accuracy

Cost: $0 (reuse GPS) Result: Know frequency errors


Option B: Voltage Only (2 hours)

Build simple reference: 1. Buy LM4040-5.0 ($2) 2. Build basic circuit 3. Measure on scope 4. Calculate errors

Cost: $5 Result: Know voltage errors


Option C: Complete Calibration (1 weekend)

Full system: 1. Timebase with GPS (4 hours) 2. Voltage references (2 hours) 3. Probe compensation (30 min) 4. Verification (2 hours)

Cost: $20-40 Result: Fully calibrated scope!


Summary

The Challenge

DSO1013D needs calibration for accurate measurements, but factory calibration costs $100-300 and takes weeks.

The Solution

  • Timebase: GPS provides atomic clock accuracy ($15-25)
  • Voltage: Precision references are cheap ($5-15)
  • Probes: Built-in cal signal (free)
  • Total: $20-40, one weekend

The Result

  • Timebase accurate to ±0.01 ppm
  • Voltage accurate to ±1%
  • Probes properly compensated
  • Confidence in measurements
  • Deep understanding of oscilloscope operation

Ready to calibrate? Continue to oscilloscope_timebase_cal.md!

APPENDIX D — OSCILLOSCOPE TIMEBASE CAL

Overview

The oscilloscope's timebase determines how accurately it measures time and frequency. This guide shows how to calibrate using GPS atomic clock accuracy.

Key Insight: Same GPS methods used for TinySA/NanoVNA work perfectly for oscilloscopes!


Quick Method: GPS 1PPS

If You Already Built GPS Setup

From TinySA/NanoVNA calibration: - GPS module with 1PPS output: Ready ✓ - Arduino (optional): Not needed for scope!

New procedure: 1. Connect GPS 1PPS to oscilloscope input 2. Measure pulse characteristics 3. Calculate timebase error 4. Document or apply correction

Time: 15-30 minutes Cost: $0 (reuse existing GPS)


Step-by-Step Procedure

Step 1: GPS Setup (if not already built)

See: gps_calibration.md for detailed GPS module setup

Quick version: 1. GPS module (NEO-6M/7M/8M): $10-20 2. Power: 3.3V or 5V 3. Antenna: Included ceramic patch 4. Wait for lock: 30-120 seconds 5. 1PPS output: Blinks once per second

1PPS signal characteristics: - Frequency: 1 Hz (period = 1.000000 seconds) - Pulse width: Typically 100-200 ms - Voltage: 3.3V or 5V TTL - Accuracy: ±50 nanoseconds (±0.00005 ppm!)

Step 2: Connect to Oscilloscope

Connection:

GPS Module          Oscilloscope
                ──────────────────────────────────
                1PPS output    →    CH1 input
                GND            →    GND (scope ground clip)
                VCC (5V)       →    USB power or bench supply
                

Scope settings: 1. Channel 1: - Coupling: DC - V/div: 1V or 2V (to see ~3-5V signal clearly) - Position: Center

  1. Timebase:
  2. Time/div: 200 ms/div (to see ~1 second period)
  3. Trigger: CH1, rising edge
  4. Trigger level: ~1.5V (mid-level)

  5. Acquisition:

  6. Mode: Normal or Auto
  7. Average: 16 or 32 (reduces jitter)

Step 3: Measure Period

Method A: Cursor Measurement

  1. Enable cursors:
  2. Press CURSOR button
  3. Select TIME cursors

  4. Place cursors on rising edges: Cursor 1 → First rising edge Cursor 2 → Second rising edge (one pulse later)

  5. Read delta time (ΔT): Display shows: ΔT = 1.0023 s (example - your scope will differ) Expected: 1.000000 s Error: +2.3 ms = +2300 ppm!

Method B: Frequency Measurement

  1. Enable frequency counter (if scope has one):
  2. Press MEASURE
  3. Select Frequency
  4. Source: CH1

  5. Read frequency: Display shows: Freq = 0.9977 Hz (example) Expected: 1.0000 Hz Error: -0.0023 Hz = -2300 ppm

Method C: Pulse Width

  1. Measure pulse width:
  2. MEASURE → Width+ (positive pulse width)
  3. Should be stable value

  4. Calculate period: If pulse width = 100.0 ms And duty cycle is known (typically 10% for GPS 1PPS) Period = width / duty_cycle

Note: Period measurement is better than width.

Step 4: Calculate Timebase Error

From period measurement:

Measured period: T_measured (from scope)
                Actual period: T_actual = 1.000000 s (GPS is atomic clock)
                
                Error (seconds) = T_measured - T_actual
                Error (ppm) = (Error / T_actual) × 10^6
                
                Example:
                T_measured = 1.000025 s
                T_actual = 1.000000 s
                Error = +0.000025 s = +25 μs
                Error (ppm) = 0.000025 / 1.0 × 10^6 = +25 ppm
                
                Interpretation: Scope timebase is 25 ppm FAST
                

From frequency measurement:

Measured frequency: F_measured
                Actual frequency: F_actual = 1.000000 Hz
                
                Error (ppm) = (F_actual - F_measured) / F_actual × 10^6
                
                Example:
                F_measured = 0.999975 Hz
                F_actual = 1.000000 Hz
                Error = (1.0 - 0.999975) / 1.0 × 10^6 = +25 ppm
                
                Same result: Scope is 25 ppm fast
                

Alternative: Mains Frequency

If no GPS available:

Using 50/60 Hz Mains

Warning: This is less accurate but free!

Mains frequency accuracy: - Short term (seconds): ±0.1 Hz - Long term (hours): ±0.01 Hz - Utility companies maintain accurate frequency - Not as good as GPS, but usable

Procedure:

  1. Build isolation circuit (IMPORTANT - SAFETY!): ``` NEVER connect scope directly to mains!

Instead: Use transformer Mains → Small transformer (12V or 9V output) → Scope input

Or: Use phone charger Mains → USB charger → Monitor 5V ripple (120Hz in US) ```

  1. Measure frequency:
  2. Expected: 60.000 Hz (US) or 50.000 Hz (EU)
  3. Scope reading: Compare

  4. Calculate error (same as GPS method)

Accuracy: ±100 ppm (okay for rough check)


Applying Corrections

Method 1: Document the Error

Simplest approach:

  1. Measure timebase error: (e.g., +25 ppm)
  2. Create correction table: ``` Timebase Error: +25 ppm Scope displays 1.000 s → Actual is 0.999975 s Scope displays 1.000 ms → Actual is 0.999975 ms Scope displays 1.000 μs → Actual is 0.999975 μs

Correction factor: 0.999975 ```

  1. Label scope: Stick label on scope: "TIMEBASE: +25 ppm Multiply displayed time by 0.999975 for actual time"

Method 2: Internal Calibration (if accessible)

Some DSO1013D models have calibration menu:

  1. Enter cal mode:
  2. Power off
  3. Hold RUN/STOP while powering on
  4. Or: UTILITY → CAL (hidden menu)

  5. Find timebase cal:

  6. Look for "TIMEBASE CAL" or "FREQUENCY CAL"

  7. Adjust:

  8. Usually a numerical entry
  9. Enter PPM correction
  10. Save

Consult your specific firmware documentation!

Method 3: Mental Math

For quick measurements:

Error is +25 ppm
                
                If scope shows 1.000 ms:
                Actual = 1.000 × (1 - 25/10^6) = 0.999975 ms
                
                Usually ignore for rough work
                Apply correction for precision measurements
                

Verification Methods

Cross-Check 1: Known Frequency

Use calibrated signal generator (if available): - Set to 1.000 MHz - Measure on scope - Should read 1.000 MHz ± your ppm error

Or use calibrated TinySA: - Set TinySA to CW mode, 1 MHz - Feed to scope - Measure frequency

Cross-Check 2: Crystal Oscillator

Build simple crystal oscillator:

Materials:
                - 32.768 kHz watch crystal ($0.50)
                - CD4060 divider IC ($0.50)
                - Resistor, capacitors
                
                Output: Exact 1 Hz from watch crystal
                Accuracy: ±20 ppm (watch crystal)
                
                Measure on scope, should match GPS within ±50 ppm
                

Cross-Check 3: Multiple GPS Modules

If you have two GPS modules: - Both produce 1 Hz - Should agree to within ±0.1 ppm - If scope shows difference → scope error


Temperature Effects

Characterizing Temperature Coefficient

Same procedure as TinySA:

  1. Cold soak: Refrigerator, 30 min, ~5°C
  2. Measure period at cold temperature
  3. Warm up naturally to room temp (~22°C)
  4. Measure periodically
  5. Heat gently to ~40°C
  6. Plot error vs. temperature

Typical results:

Temp (°C)   Period (s)   Error (ppm)
                5           1.000035     +35
                15          1.000028     +28
                25          1.000025     +25
                35          1.000030     +30
                45          1.000038     +38
                

Conclusion: Scope timebase drifts with temperature. Calibrate after warmup!


Advanced: 10 MHz Reference Input

Some scopes have external reference input:

If your scope has 10 MHz REF IN: 1. Build GPS-locked 10 MHz reference 2. Connect to REF IN 3. Scope locks to GPS 4. Continuous GPS accuracy!

Building GPS-locked 10 MHz: - PLL locks 10 MHz VCXO to GPS 1PPS - See advanced projects in gps_calibration.md - Cost: $50-100 - Result: Continuous atomic clock lock


Real-World Example

Calibrating DSO1013D

Equipment: - DSO1013D oscilloscope - NEO-6M GPS module (from TinySA project) - 5V USB power supply

Procedure:

  1. Connected GPS 1PPS to CH1

  2. Scope settings: CH1: 1V/div, DC coupling Timebase: 200 ms/div Trigger: CH1, rising, 1.5V level Average: 16

  3. Enabled cursors, measured period: ΔT = 1.000027 s

  4. Calculated error: Error = 1.000027 - 1.000000 = +27 μs PPM = 27/10^6 = +27 ppm

  5. Interpretation:

  6. Scope timebase runs 27 ppm FAST
  7. At 1 second: reads 1.000027 s (27 μs error)
  8. At 1 ms: reads 1.000027 ms (27 ns error)
  9. At 1 MHz: reads 1.000027 MHz (27 Hz error)

  10. Applied correction: Correction factor: 1.000000 / 1.000027 = 0.999973 Multiply all scope time readings by 0.999973

  11. Created label: "TIMEBASE: +27 ppm FAST Correction: × 0.999973 Cal date: 2026-01-02"

Result: Know scope accuracy to atomic clock standards!


Summary

What We Achieved

✓ Measured scope timebase error using GPS ✓ Accuracy limited by GPS: ±0.01 ppm ✓ Documented correction factor ✓ Can now make accurate time measurements

Key Points

  1. GPS 1PPS is perfect reference - atomic clock accuracy
  2. Scope measures period - compare to exact 1.000000 s
  3. Calculate PPM error - quantify timebase accuracy
  4. Apply correction - mental math or label on scope
  5. Verify regularly - monthly check, annual full cal

Next Step

Voltage calibration: oscilloscope_voltage_cal.md


Timebase now calibrated to GPS atomic clock accuracy!

APPENDIX E — OSCILLOSCOPE VOLTAGE CAL

Overview

Voltage calibration ensures accurate amplitude measurements. We'll build precision voltage references using cheap ICs and measure scope accuracy at each voltage range.

Key Idea: Use $2 precision voltage reference ICs as "voltage rulers" to check scope accuracy.


Building Precision Voltage References

Parts List

Qty Part Voltage Accuracy Cost Source
1 LM4040-1.2 1.225V ±0.1% $1.50 Mouser, Digikey
1 LM4040-2.5 2.500V ±0.1% $1.50 Mouser, Digikey
1 LM4040-5.0 5.000V ±0.1% $2.00 Mouser, Digikey
2 Resistor 10kΩ 0.1% - ±0.1% $1.00 Mouser, Digikey
1 9V battery ~9V ±5% $1.00 Local store
1 Breadboard - - $3.00 Local store

Total: ~$10-15

Circuit Schematic

LM4040 Basic Circuit:

        9V Battery (+)
                            │
                            ├─────→ To other refs
                            │
                         10kΩ
                            │
                            ├────→ OUTPUT (1.225V, 2.5V, or 5V)
                            │       │
                        ┌───┴───┐   │
                        │ LM4040│   ├───→ Scope probe
                        │       │   │
                        └───┬───┘   │
                            │       │
                           GND ─────┴───→ Scope ground
                

Complete Reference Board (4 voltages):

9V Battery
                   │
                   ├─ 10kΩ ─┬─ LM4040-1.2 ─→ 1.225V output ─→ Banana jack RED
                   │        │    │
                   ├─ 10kΩ ─┼─ LM4040-2.5 ─→ 2.500V output ─→ Banana jack YEL
                   │        │    │
                   ├─ 10kΩ ─┼─ LM4040-5.0 ─→ 5.000V output ─→ Banana jack GRN
                   │        │    │
                   │        │    │
                   │    Precision voltage divider:
                   │        │
                   │      10kΩ (0.1%) ─┬─→ 10.00V output ─→ Banana jack BLU
                   │                   │   (from 5V ref × 2)
                   │                 10kΩ (0.1%)
                   │                   │
                   └──────────────── GND ─────────────────→ Banana jack BLK
                

Building the Circuit

Step 1: LM4040 Connections (30 minutes)

  1. Identify LM4040 pins: ``` LM4040 (TO-92 package, looking at flat side):

[Cathode] [Anode] [NC] 1 2 3

Pin 1 (Cathode) = Output voltage Pin 2 (Anode) = Ground Pin 3 (NC) = Not connected ```

  1. Breadboard layout: ``` Row 1: 9V+ Row 2: 10kΩ → LM4040-1.2 cathode → 1.225V output Row 3: LM4040-1.2 anode → GND

Row 5: 9V+ Row 6: 10kΩ → LM4040-2.5 cathode → 2.500V output Row 7: LM4040-2.5 anode → GND

Row 9: 9V+ Row 10: 10kΩ → LM4040-5.0 cathode → 5.000V output Row 11: LM4040-5.0 anode → GND ```

  1. Connect outputs to binding posts (for easy scope connection)

Step 2: 10V Divider (15 minutes)

From 5V reference to 10V:

Actually, easier method: Use two 5V refs in series!
                
                9V+ ─ 10kΩ ─ LM4040-5.0 (REF1) ─┬─ 5V output
                                                  │
                             10kΩ ─ LM4040-5.0 (REF2) ─┬─ 10V output (REF1+REF2)
                                                        │
                                                       GND
                

Or use precision divider:

5V reference ─ 10kΩ (0.1%) ─┬─ 10V output
                                             │
                              10kΩ (0.1%) ──┴─ GND
                
                Wait, this gives 2.5V, not 10V!
                
                Correct circuit:
                Need op-amp to create 10V from 5V, or use two refs in series.
                
                Simplest: Two LM4040-5.0 in series = 10V
                

Testing References with DMM

Verify each reference:

  1. 1.225V reference: DMM reading: 1.224V to 1.226V (±0.1%)

  2. 2.500V reference: DMM reading: 2.498V to 2.502V (±0.1%)

  3. 5.000V reference: DMM reading: 4.995V to 5.005V (±0.1%)

  4. 10.00V (if built): Two 5V in series: 9.99V to 10.01V (±0.1%)

If readings are off: Check wiring, polarity, battery voltage >7V


Calibration Procedure

Step 1: Prepare Oscilloscope

  1. Warm up: 15-30 minutes powered on
  2. Probe: 10:1 probe (or 1:1 for low voltages)
  3. Settings:
  4. Coupling: DC
  5. Bandwidth: Full (not limited)
  6. Trigger: Normal, not Auto

Step 2: Measure Each Reference

1.225V Reference:

  1. Connect:
  2. Scope probe to 1.225V output
  3. Ground clip to GND

  4. Scope settings:

  5. V/div: 500 mV/div (to see ~1.2V signal)
  6. Timebase: Doesn't matter (DC signal)

  7. Read voltage:

  8. Use MEASURE → DC voltage
  9. Or use cursor at trace level

  10. Record: Reference: 1.225V Scope reads: _____ V Error: _____ V Error %: _____ %

Repeat for all references: - 2.500V - 5.000V - 10.00V (if built)

Test multiple V/div settings:

For 5V reference, test: - 1V/div (scope reading: ) - 2V/div (scope reading: ) - 5V/div (scope reading: ___)

Each setting may have different error!

Step 3: Calculate Errors

Example measurements:

Reference: 5.000V
                V/div Setting    Scope Reads    Error (V)    Error (%)
                ─────────────────────────────────────────────────────
                1V/div           5.12V          +0.12        +2.4%
                2V/div           5.08V          +0.08        +1.6%
                5V/div           5.05V          +0.05        +1.0%
                
                Conclusion: Error varies by V/div setting!
                Scope is generally reading HIGH (+1 to +2.4%)
                

Step 4: Document Corrections

Create calibration table:

DSO1013D CH1 Voltage Calibration
                
                Reference    V/div    Reading    Error    Correction
                ─────────────────────────────────────────────────────
                1.225V       500mV    1.24V      +1.2%    ×0.988
                2.500V       1V       2.54V      +1.6%    ×0.984
                5.000V       2V       5.08V      +1.6%    ×0.984
                5.000V       5V       5.05V      +1.0%    ×0.990
                
                Average error: +1.35%
                Average correction factor: ×0.987
                
                CONCLUSION: Scope reads 1.35% HIGH
                Multiply displayed voltage by 0.987 for actual voltage
                

Repeat for CH2! (Each channel may differ)


Probe Compensation

Critical for AC measurements!

Using Built-in Cal Signal

Most scopes have ~1 kHz square wave output:

  1. Locate cal output:
  2. Usually labeled "CAL", "PROBE COMP", or "1kHz"
  3. Typically 1 kHz, 5V peak-to-peak square wave

  4. Connect probe:

  5. Probe tip to CAL signal
  6. Ground clip to GND

  7. Observe square wave: ``` Good (compensated): ┌──┐ ┌──┐ │ │ │ │ ┘ └──┘ └──

Under-compensated: ┌──┐ ┌──┐ ╱ │ ╱ │ ┘ └──┘ └── (Rounded edges, looks like RC filter)

Over-compensated: ┌─┐ ┌─┐ │ ╲╱ │ ╲╱ ┘ └──┘ └── (Overshoot, ringing) ```

  1. Adjust probe:
  2. Find small trimmer capacitor on probe body
  3. Use plastic screwdriver
  4. Adjust until square wave has flat top
  5. Should look crisp, no overshoot

Do this for EVERY probe, EVERY time you connect it!

Without Built-in Cal

Build external square wave:

Simple 555 timer circuit:

555 timer configured as astable
                Frequency: ~1 kHz
                Output: 5V square wave
                
                       +5V
                        │
                     ┌──┴──┐
                     │ 555 │
                     │timer│
                     └──┬──┘
                        │
                     Output → Scope
                

Or use function generator (if available)


Verification

Cross-Check with Known Voltages

Battery voltage:

Fresh AA battery: 1.5V - 1.65V
                Measure with scope and DMM:
                Should agree within ±3%
                

USB 5V:

USB port: 4.75V - 5.25V (spec)
                Measure with scope
                Compare to DMM
                

Known signal:

If you have signal generator:
                Set to 1V RMS sine wave
                Scope should show 2.83V peak-to-peak (1V × 2√2)
                

Complete Example

Calibrating DSO1013D Voltage

Equipment: - DSO1013D oscilloscope - LM4040-2.5 reference (built) - DMM (for verification)

Procedure:

  1. Built 2.5V reference
  2. LM4040AIZ-2.5
  3. 9V battery, 10kΩ resistor
  4. Breadboard

  5. Verified with DMM: DMM reading: 2.501V ✓ (within ±0.1% spec)

  6. Connected to scope CH1:

  7. 10:1 probe
  8. V/div: 1V (to see ~2.5V clearly)
  9. Coupling: DC

  10. Measured on scope: Scope reading: 2.58V

  11. Calculated error: Reference: 2.501V (DMM-verified) Scope: 2.58V Error: +0.079V Error %: (0.079 / 2.501) × 100 = +3.2%

  12. Tested other V/div settings: ``` V/div Scope Reading Error % 500mV 2.56V +2.4% 1V 2.58V +3.2% 2V 2.54V +1.6% 5V 2.52V +0.8%

Average error: +2.0% ```

  1. Created correction table: ``` CH1: Reads ~2% HIGH Correction: Multiply by 0.98

Example: Scope shows 5.0V → Actual is 4.9V Scope shows 3.3V → Actual is 3.23V ```

  1. Labeled scope: "CH1: +2.0% error CH2: (test separately) Multiply readings by 0.98"

Result: Know voltage accuracy to ±0.5%!


Alternative: Zener Diode References

If can't get LM4040:

Common zener voltages: - 3.3V zener diode (cheap, ~5% accuracy) - 5.1V zener diode (cheap, ~5% accuracy)

Circuit:

9V ─ 1kΩ ─┬─ 5.1V zener ─ GND
                           │
                        Output (≈5.1V ±5%)
                

Less accurate but usable for rough calibration


Summary

Voltage Calibration Achieved

✓ Built precision references (±0.1%) ✓ Measured scope at multiple voltages ✓ Documented errors per V/div setting ✓ Created correction table ✓ Probe compensation verified

Key Findings

  1. Scope errors typical: ±2-5% uncalibrated
  2. Each V/div setting different: Must test all
  3. CH1 and CH2 differ: Calibrate separately
  4. Probe compensation critical: Do every time!

Accuracy Achieved

Before calibration: Unknown, possibly ±5% After calibration: Known to ±0.5-1%


Next: Complete example

Voltage calibration complete!