Electronics Fundamentals: Oscilloscope-101

A Digital Oscilloscope is a multi-functional instrument for displaying, analyzing, and storing electrical signals. It is an indispensable tool for designing, manufacturing, and maintaining electronic equipment.




Generating First Waveform on your Oscilloscope:


FIG: Sine Wave (1ms/div)



FIG: Single Cycle Waveform (100us/div)

- Power-ON Function Generator and, Connect BNC-BNC cable from its Output-1 to CH-1 (channel-1) of the Oscilloscope.

- Set V (peak to peak) = 1Vpp

- Set Frequency output = 1kHz

FIG: Adjustment knobs


- Use Horizontal and Vertical knobs to adjust the signal

- Set trigger level on the waveform to stabilize the signal

- As you can see - 1kHz frequency is a low frequency, thus Time-base needs to be set to at least 1ms:




Scale of 1kHz Frequency under a vibration microscope - What's the Physics behind this small frequency?


Below are two microscope “slides”: a 1 kHz vibration and a 50 MHz vibration, each captured with an identical 2 GSa/s “optical sensor.” The dots are ADC sample points; the connecting line helps you see the actual wave the scope reconstructs.

(The first plot spans 1.5 ms, so you see a couple of long, smooth cycles.
The second spans 100 ns, squeezing five very tight cycles into the glass.)

Enjoy the contrast: the slow wave looks like a gentle sway; the fast one quivers tens of millions of times per second, yet the scope still resolves it because it was built for that speed.


Python Code:






++++++++++++++++++++++++++++++PLOT++++++++++++++++++++++++++++++++

import numpy as np
import matplotlib.pyplot as plt

# Parameters
fs = 2e9  # 2 GSa/s sample rate for scope simulation

# ----------- 1 kHz signal -----------
f1 = 1e3            # 1 kHz
t1 = np.linspace(0, 1.5e-3, 2000)    # 0‑1.5 ms
y1 = np.sin(2*np.pi*f1*t1)

# Plot
plt.figure(figsize=(9, 3))
plt.plot(t1 * 1e3, y1)                # x‑axis in ms
plt.title("1 kHz Signal – Oscilloscope View (1.5 ms window)")
plt.xlabel("Time (ms)")
plt.ylabel("Amplitude (V)")
plt.grid(True, which='both', linestyle='--', linewidth=0.5)

# Overlay a few “ADC samples”
sample_step = int(len(t1) / 25)
plt.scatter(t1[::sample_step] * 1e3, y1[::sample_step])

plt.tight_layout()

# ----------- 50 MHz signal -----------
f2 = 50e6           # 50 MHz
t2 = np.linspace(0, 100e-9, 2000)   # 0‑100 ns
y2 = np.sin(2*np.pi*f2*t2)

plt.figure(figsize=(9, 3))
plt.plot(t2 * 1e9, y2)
plt.title("50 MHz Signal – Oscilloscope View (100 ns window)")
plt.xlabel("Time (ns)")
plt.ylabel("Amplitude (V)")
plt.grid(True, which='both', linestyle='--', linewidth=0.5)

# Overlay a few ADC samples (should still be >10 samples/period)
sample_step2 = int(len(t2) / 50)
plt.scatter(t2[::sample_step2] * 1e9, y2[::sample_step2])

plt.tight_layout()


++++++++++++++++++++++++++++++ENDPLOT++++++++++++++++++++++++++++++++

Why 1 kHz is “small” for an oscilloscope — Explanation:

  1. Huge bandwidth cushion – A bench scope typically handles signals up to about 200 MHz. 1 kHz is 200 000 × lower, so it sits on the flat, loss-free part of the response curve.

  2. Sampling overkill – With a 2 gigasmples / s converter, the scope can capture roughly two million data points in every 1 kHz cycle, far beyond the Nyquist minimum.

  3. Gentle slopes – The voltage change rate of a 1 kHz sine (≈ 6 V ms⁻¹ for a 1 V peak) is minuscule compared to the slew-rate the front-end is built for, so nothing distorts.

  4. Barely any loading – At 1 kHz, a 15 pF probe impedance looks like ~10 MΩ, which hardly disturbs the circuit—unlike at tens of MHz where the same capacitance forms a divider.

Think of the scope as a vibration microscope: it’s tuned for lightning-fast movements, so a leisurely 1kHz wobble is as easy to resolve as large print under a magnifying glass.



Therefore,

- Set Time-base to 1ms/division or below

- For single wave - set Time-base to 100us/div



How is the frequency / waveform generated inside an Oscilloscope?

FIG: A crystal Oscillator with a steady heartbeat can - most commonly used HC-49/S (through-hole component metal package with a steel case and two leads/electrodes which flexes at a natural frequency during circuit excitation)



FIG: SMD package can with 25MHz stable output of the crystal when fed to a PLL (Phase Locked Loop). PLL can multiply it up to multi-GHz frequency clock with better vibration and temperature stability than a through-hole can. It has an accuracy spec of ±25 ppm. 




=> 1 ppm 1 / 1000,000​  = 0.0001%



Hence, 1kHz reading = 1000.00 Hz  ±  0.025 Hz



Thus, 1.000 ms scale of a scope means worst case reading it between range of 0.999,975 ms and 1.000,025 ms



PLL Diagram:



+++++++++++.PY++++CODE+++++DIAGRAM++++++ 


import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle
import matplotlib.patches as mpatches

# Create figure
fig, ax = plt.subplots(figsize=(12,4))
ax.axis('off')

def add_box(x, y, w, h, text, fontsize=12):
    rect = Rectangle((x, y), w, h, linewidth=1.5, edgecolor='black',
                     facecolor='whitesmoke')
    ax.add_patch(rect)
    ax.text(x+w/2, y+h/2, text, ha='center', va='center', fontsize=fontsize)

# Left: crystal
add_box(0.05, 0.35, 0.18, 0.3, "Quartz\nCrystal\n25 MHz", 13)

# Middle: ASIC/FPGA
add_box(0.35, 0.35, 0.28, 0.3, "ASIC / FPGA\nPLL & Dividers", 13)

# Outputs
add_box(0.75, 0.65, 0.22, 0.22, "2 GHz\nADC Clock", 12)
add_box(0.75, 0.38, 0.22, 0.18, "250 MHz\nSystem Clock", 12)
add_box(0.75, 0.12, 0.22, 0.18, "1 kHz\nProbe‑Comp", 12)

# Draw arrows
arrowprops = dict(arrowstyle='->', lw=2, color='black')
# From crystal to FPGA
ax.annotate("", xy=(0.35,0.5), xytext=(0.23,0.5), arrowprops=arrowprops)
ax.text(0.29,0.52,"25 MHz", ha='center', fontsize=11)

# From FPGA to outputs
ax.annotate("", xy=(0.75,0.76), xytext=(0.63,0.5), arrowprops=arrowprops)
ax.text(0.69,0.78,"×80 PLL", ha='center', fontsize=10)

ax.annotate("", xy=(0.75,0.47), xytext=(0.63,0.5), arrowprops=arrowprops)
ax.text(0.69,0.49,"÷? Div", ha='center', fontsize=10)

ax.annotate("", xy=(0.75,0.21), xytext=(0.63,0.5), arrowprops=arrowprops)
ax.text(0.69,0.23,"÷25 000", ha='center', fontsize=10)

plt.tight_layout()

+++++++++++++++++++END+OF+DIAGRAM++++++++++++





FIG: An SMT package Quartz crystal usually marked 25 MHz 




FIG: Paper-thin quartz wafer ≈ 0.1mm thick crystal




FIG: SiO₂ (crystalline Silicon Dioxide) Lattice structure of a unit cell. At an ordinary temperature, α-quartz form is depicted as trigonal crystal system with space group P3₁21 or P3₂21 (the two right- or left-handed enantiomorphs). Conventional cell = hexagonal axis.






A quartz slice rings like tuning fork at its natural mechanical vibration or frequency which is 10s of megahertz; an amplifier keeps that ring going, and the oscilloscope uses the resulting ultra-stable sine wave (≈ 25 MHz) as the master timer from which all other instrument frequencies are multiplied or divided. The ultrasonic vibration stays trapped inside the wafer and doesn't reach your ear.


GOOD TO KNOW TERMINOLOGIES FOR AN OSCILLOSCOPE SAFETY


Below are the Safety Terms and Symbols for an Oscilloscope:



SEMISAGA.COM ©    |    ALL RIGHTS RESERVED

Comments

  1. The article gives a practical introduction to oscilloscope operation, from connecting the function generator and setting a 1 kHz, 1 Vpp signal to adjusting the horizontal, vertical, and trigger controls. The comparison between 1 kHz and 50 MHz also makes the discussion useful for understanding how waveform measurement changes across frequency ranges.

    The hands-on focus is particularly relevant to Electronics Engineering, where understanding signal behavior and measurement instruments is important for practical laboratory work. The concepts discussed here can also inspire applications involving electronic instrumentation and circuit analysis within Final Year Project Domains for ECE.

    ReplyDelete
  2. The frequency comparison also highlights how sampling rate and time scale affect the ability to reconstruct and observe a waveform accurately. These fundamentals can be extended into practical ECE projects involving signal acquisition, embedded measurement, communication systems, and electronic instrumentation, making the topic a useful starting point for Domains in ECE Engineering.

    ReplyDelete
  3. The Matplotlib example provides a straightforward way to construct a custom diagram by combining Rectangle patches with text labels. This approach is useful when you need more control over the layout than standard plotting functions provide, such as creating block diagrams for technical concepts and clearly positioning individual components. Matplotlib Online Course

    ReplyDelete
  4. Using Matplotlib patches also makes it possible to build diagrams incrementally by defining reusable functions such as add_box(). This can be extended with additional shapes, labels, and connections to create clear technical visualizations for engineering, data analysis, or programming documentation. Data Visualization Online Course

    ReplyDelete

Post a Comment