Lab 1.3 — RC Low-Pass Filter

Course 2 syllabus · Module 1 · Prev: « Lab 1.2 · Next: Lab 2.1 »

Goal

Build the simplest real filter — a first-order RC low-pass — and measure the two things that define it: its step response (an exponential charge/discharge with time constant \(\tau = RC\)) and its frequency behavior (attenuation above the cutoff \(f_c = 1/(2\pi RC)\)). This connects a physical circuit to the transfer function \(H(j\omega) = 1/(1 + j\omega RC)\) you will use for the rest of the course. The RC low-pass is the anti-aliasing filter in front of every ADC, the smoothing filter after every DAC, and the mental model behind every digital IIR filter — so measuring one by hand, and reconciling \(\tau\) against \(f_c\), is foundational for DSP/firmware work.

Equipment & parts

  • Siglent SDS1104X-E + two compensated 10× probes (CH1, CH2) — compensate both per Lab 1.1.
  • Breadboard + jumpers.
  • One resistor and one capacitor from the kit chosen to land the cutoff near 1 kHz — e.g. R = 1.6 kΩ, C = 100 nF (\(f_c \approx 1.0\) kHz), or R = 1 kΩ, C = 100 nF (\(f_c \approx 1.6\) kHz). Measure the actual R and C first (Fluke / LC1020E, Lab 0.2/Lab 0.3).
  • Signal source: the SDS1104X-E base unit has no built-in signal generator. Drive the filter with the scope’s ≈1 kHz probe-compensation square wave for the step-response part. (Later you can revisit this with the MCP4725 DAC from Module 3 to sweep a clean sine — see Lab 3.3.)

Wiring & bench setup

The signal chain: the scope’s own probe-comp square wave drives the breadboard RC; CH1 watches the input node, CH2 watches node A (across C).

flowchart LR
  COMP["Probe-comp output<br/>≈1 kHz, ~3 Vpp square"]
  R["R = 1.6 kΩ<br/>series"]
  A["node A<br/>RC junction = output"]
  C["C = 100 nF<br/>shunt to ground"]
  CH1["CH1 probe, 10×"]
  CH2["CH2 probe, 10×"]
  COMP --> R --> A --> C
  COMP -.-> CH1
  A -.-> CH2

flowchart LR
  COMP["Probe-comp output<br/>≈1 kHz, ~3 Vpp square"]
  R["R = 1.6 kΩ<br/>series"]
  A["node A<br/>RC junction = output"]
  C["C = 100 nF<br/>shunt to ground"]
  CH1["CH1 probe, 10×"]
  CH2["CH2 probe, 10×"]
  COMP --> R --> A --> C
  COMP -.-> CH1
  A -.-> CH2

Pin map / node map (every wire; rows are breadboard tie-point rows):

From To Pin/jack
Probe-comp square-wave tab jumper → breadboard row 1 = input node front-panel tab
Probe-comp ground tab jumper → breadboard − rail = circuit ground front-panel tab
R (1.6 kΩ) row 1 (input) → row 5 (node A)
C (100 nF) row 5 (node A) → − rail (ground)
CH1 probe tip row 1 — the input node CH1, probe + menu at 10×, DC coupling
CH1 ground clip − rail
CH2 probe tip row 5 — node A, the filter output CH2, probe + menu at 10×, DC coupling
CH2 ground clip − rail (same ground node as CH1’s)
 scope front panel                         breadboard
 probe-comp ●──jumper────● row 1 ─ input node ─────────────► CH1 tip (10×)
 ground tab ●──jumper────● − rail ─ circuit GND ───────────► CH1 + CH2 ground clips
                           row 1 ●──[ R 1.6 kΩ ]──● row 5
                           row 5 ─ node A (across C) ──────► CH2 tip (10×)
                           row 5 ●──[ C 100 nF ]──● − rail

Coupling per procedure part: DC coupling on both channels throughout — the step response is the DC-path behavior; AC coupling would differentiate away exactly what you’re measuring.

Setup gotchas (not safety): the 100 nF ceramic/film cap is non-polarized — either orientation is fine. Both probes must be compensated first (Lab 1.1) or the CH1 edge itself is distorted. Land both ground clips on the same − rail; and remember the CH2 probe adds ~10–15 pF at node A (it slightly raises the effective C — see Analysis).

Safety & don’t-break-it

  • Signal levels are tiny (the probe-comp output is ~3 Vpp, current-limited) — no shock or part-damage risk in this lab. The care here is about correct measurement, not safety.
  • Discharge the capacitor before measuring it on the LCR meter and before re-wiring (a small ceramic/film cap at these voltages holds negligible charge, but make it a habit for the electrolytics later).
  • Share a common ground. Both probe ground clips and the probe-comp ground must tie to the same circuit ground node. Grounding the two probes at different nodes will inject error or short part of the circuit.
  • Do not probe the comp terminal with the ground clip on the +. Same rule as Lab 1.2 — ground clip to circuit ground only.
  • Keep the probes at 10× in the channel menu so amplitudes read correctly; a 1× mismatch will make the attenuation look wrong.

Background

A series R into a shunt C, output taken across C, is a first-order low-pass. In the time domain, driving it with a step of height \(V\) charges the capacitor exponentially:

\[v_\text{out}(t) = V\left(1 - e^{-t/\tau}\right), \qquad \tau = RC,\]

and the discharge (falling edge of the square wave) is \(v_\text{out}(t) = V e^{-t/\tau}\). One time constant reaches 63.2% of the final value; five time constants reach ~99%. Because the probe-comp square wave is a periodic step up/down, each half-period shows a charge or discharge curve — provided the half-period is long compared to \(\tau\) so it (nearly) settles.

In the frequency domain, the transfer function is

\[H(j\omega) = \frac{1}{1 + j\omega RC}, \qquad |H(j\omega)| = \frac{1}{\sqrt{1 + (\omega RC)^2}},\]

with the −3 dB cutoff where \(\omega RC = 1\):

\[f_c = \frac{1}{2\pi RC} = \frac{1}{2\pi\tau}.\]

At \(f_c\) the output is \(1/\sqrt{2} \approx 0.707\) of the input (−3 dB) and lags by 45°. Above \(f_c\) the magnitude rolls off at −20 dB/decade. The two views are the same fact: the time-domain \(\tau\) and the frequency-domain \(f_c\) are reciprocals up to the \(2\pi\). Since the square wave is a sum of a fundamental plus odd harmonics, the low-pass rounds its corners — the high harmonics that make the edges sharp are exactly what gets attenuated, which is why a low-passed square looks like the RC exponential.

Procedure

Part A — Measure the parts and predict.

  1. Measure the actual R (Fluke, ohms) and C (LC1020E at 1 kHz). Compute \(\tau = RC\) and \(f_c = 1/(2\pi RC)\) from the measured values, not the nominal ones.

Part B — Build the filter.

  1. On the breadboard (per Wiring & bench setup): probe-comp output → R → node A (the RC junction) → C → ground. Output is node A (across C). Tie the probe-comp ground and the breadboard ground rail together.
  2. CH1 on the filter input (probe-comp output / R input side), CH2 on node A (the output). Both probes 10×, both ground clips to the common ground.

Part C — Step response (τ).

  1. Set the timebase to see one edge clearly — start ~100 µs/div (the comp period is ~1 ms, half-period ~500 µs). Trigger Edge, CH1, rising, level mid-amplitude, stable.
  2. On CH2 you should see the exponential charge on the rising half and discharge on the falling half. If it looks like a straight ramp or barely bends, your \(\tau\) is too small/large relative to the timebase — adjust V/div and timebase to frame one full exponential.
  3. Measure \(\tau\): use cursors to find where CH2 reaches 63.2% of its final value after the edge; the time from the edge to that point is \(\tau\). Alternatively use the scope’s automatic rise time (10–90%) and convert: \(t_{10\text{–}90} = \ln(9)\,\tau \approx 2.20\,\tau\).

Part D — Attenuation (frequency view, qualitative).

  1. Compare CH1 (input) and CH2 (output) amplitudes with automatic Vpp on each. The comp fundamental is ~1 kHz; if your \(f_c \approx 1\) kHz the output fundamental is attenuated and the corners are visibly rounded. Note the CH2/CH1 amplitude ratio.
  2. (Optional, cleaner) Drive the filter later with the MCP4725 DAC (Lab 3.3) generating a sine you can sweep in frequency, and measure \(|H|\) at several frequencies to trace the roll-off and confirm the −3 dB point at \(f_c\).

Deliverable & expected results

Where results go (no firmware or host code in this lab — just the note and the scope exports):

Artifact Path
Bench note (table below, filled in) labs/lab-1-3/notes.md
Two-channel step-response capture, 63.2 % cursor at \(\tau\) labs/lab-1-3/captures/step-tau.png
Input/output amplitude comparison at ~1 kHz labs/lab-1-3/captures/attenuation.png
(Optional) Siglent CSV export of the step for later host-side fits labs/lab-1-3/captures/step.csv
LTspice schematic — the same RC; sim third opinion on \(\tau\) and \(f_c\) hardware/lab-1-3.asc

LTspice sim (third opinion) — mechanics in the LTspice workflow; the lab-specific recipe:

  • Draw (hardware/lab-1-3.asc): source → R = 1.6 kΩ → node AC = 100 nF → ground — use your measured R and C, and label the source node in.
  • Source: PULSE(0 3 0 1u 1u 0.5m 1m) — the ≈1 kHz, ~3 Vpp probe-comp square. For the Bode run, set the same source’s AC amplitude = 1.
  • Directives: .tran 5m (step response) and, as a second run, .ac dec 100 10 100k (magnitude/phase).
  • Plot/export: V(a) and V(in) from the .tran; V(a)/V(in) from the .ac. File → Export data as text into labs/lab-1-3/captures/.
  • Cross-checks: the .tran cursor at 63.2 % of the settled level → the \(\tau\) and \(t_{10\text{–}90}\) rows; the .ac −3 dB cursor → the \(f_c\) row; the .ac magnitude at 1 kHz → the \(|H|\) at ~1 kHz row. To model probe loading, add ~15 pF across C and watch \(\tau\) nudge up.

A two-channel capture of the step response (input square on CH1, exponential output on CH2) with the cursor marking the 63.2% point at \(\tau\), plus the measured \(\tau\), the derived \(f_c = 1/(2\pi\tau)\), and the input/output amplitude ratio at 1 kHz.

Using R = 1.6 kΩ, C = 100 nF as the worked example:

Quantity Predicted Measured
\(\tau = RC\) \(1.6\text{k} \times 100\text{n} = 160\ \mu\text{s}\)
\(f_c = 1/(2\pi RC)\) \(\approx 995\ \text{Hz}\)
\(t_{10\text{–}90} = 2.20\,\tau\) \(\approx 352\ \mu\text{s}\)
Output at 63.2% after edge at \(t = \tau \approx 160\ \mu\text{s}\)
\(|H|\) at ~1 kHz fundamental \(\approx 1/\sqrt{2} \approx 0.71\) (\(f_c\approx f\))

(If you use R = 1 kΩ, C = 100 nF instead: \(\tau = 100\ \mu\text{s}\), \(f_c \approx 1.59\) kHz.)

Analysis & reconciliation

Compute \(\tau\) and \(f_c\) by hand from the measured R and C, then compare to the scope-measured \(\tau\) (63.2% cursor and/or rise-time conversion). Expect a few-percent spread: resistor tolerance (±5%), capacitor tolerance (film ±5–10%, ceramic often worse and voltage-dependent), the LC1020E’s own accuracy, and — importantly — probe loading: the 10× probe adds ~10–15 pF at the output node, which slightly increases the effective C and thus \(\tau\). Check that your two independent \(\tau\) estimates (63.2% cursor vs. rise-time formula) agree; if they don’t, the frame or trigger isn’t clean. Finally, confirm the reciprocal relationship \(f_c = 1/(2\pi\tau)\) holds between your time-domain and frequency-domain numbers — this is the single most important sanity check tying the two descriptions of a filter together.

Going further

  • Swap R (or C) to move \(f_c\) by 10× and confirm both \(\tau\) and the roll-off scale as predicted.
  • Take the output across R instead of C to build a first-order high-pass (\(H = j\omega RC/(1+j\omega RC)\)) and contrast the step response (a decaying spike).
  • Drive it with the MCP4725 sine (Lab 3.3) and measure \(|H|\) and phase at \(0.1f_c\), \(f_c\), and \(10f_c\) to plot a real Bode magnitude/phase curve — the bridge to the digital filter labs in Module 6, where this same \(H\) becomes an IIR filter with a pole (Course 1 Lesson 48).