An RC low pass filter circuit is a fundamental passive network that allows low-frequency signals to pass while attenuating frequencies above a specific cutoff threshold. The direct answer to finding your cutoff frequency ($f_c$) is the formula $f_c = \frac{1}{2\pi RC}$. For a target cutoff of roughly 500 Hz using standard E24 component values, a 10 kΩ series resistor and a 33 nF parallel capacitor will yield an actual cutoff of 482 Hz, providing approximately -20 dB of attenuation at 5 kHz.
While the math is straightforward, real-world implementation requires accounting for load impedance, capacitor dielectrics, and failure modes. Below is a complete design and verification guide based on bench-tested parameters.
Topology, Node Labels, and Component Behavior
The standard first-order passive topology consists of a series resistor and a shunt (parallel) capacitor. Understanding the node labels is critical for troubleshooting and simulation:
- Vin (Input Node): The junction where the source signal enters the series resistor.
- Vout (Output Node): The junction between the series resistor and the shunt capacitor. This is where the load connects.
- GND (Reference Node): The bottom leg of the capacitor, tied to the system ground.
The circuit operates on the principle of a frequency-dependent voltage divider. The resistor provides a fixed impedance, while the capacitor's reactance ($X_c = \frac{1}{2\pi fC}$) drops as frequency increases, shunting high-frequency energy to ground.
| Parameter Changed | Direction | Effect on Cutoff Frequency ($f_c$) | Effect on DC / Low-Freq Gain | Effect on High-Freq Roll-off |
|---|---|---|---|---|
| Series Resistor (R) | Increases | Decreases (shifts left) | Unchanged (if unloaded) | Unchanged (-20 dB/decade) |
| Series Resistor (R) | Decreases | Increases (shifts right) | Unchanged (if unloaded) | Unchanged (-20 dB/decade) |
| Shunt Capacitor (C) | Increases | Decreases (shifts left) | Unchanged | Unchanged (-20 dB/decade) |
| Shunt Capacitor (C) | Decreases | Increases (shifts right) | Unchanged | Unchanged (-20 dB/decade) |
| Load Impedance ($Z_L$) | Decreases (Heavy Load) | Increases (shifts right) | Decreases (voltage divider loss) | Flattens if $Z_L \ll X_c$ |
Why Passive RC Over Active or RL Alternatives?
When designing a filter, you must choose between passive RC, passive RL (Resistor-Inductor), and active (Op-Amp based) topologies. For 95% of microcontroller and audio hobbyist applications, the passive RC low pass filter circuit is the superior choice.
Why not RL? Inductors are physically bulky, expensive, and suffer from parasitic resistance (DCR) and electromagnetic interference (EMI). An RL filter requires a magnetic core that can saturate under high current, making it unsuitable for low-impedance power filtering without massive physical footprints.
Why not Active (Op-Amp)? Active filters (like the Sallen-Key topology) provide gain and isolate the load, preventing the impedance loading issues mentioned above. However, they require a power supply (often dual rails for AC signals), introduce op-amp noise, and are limited by the gain-bandwidth product (GBWP) of the silicon. If you simply need to strip high-frequency noise from a DC sensor reading or smooth a PWM signal, an active filter is over-engineered and adds unnecessary BOM cost.
The passive RC topology wins on simplicity, zero quiescent current draw, and lack of magnetic emissions. Its only drawback is the lack of buffering, which is easily solved by adding a unity-gain op-amp buffer after the RC network if load impedance is a concern.
Design Walkthrough: Smoothing a 5kHz PWM Signal
Let’s design a filter for a common embedded systems task: converting an ESP32’s 5 kHz PWM output into a pseudo-analog DC voltage to drive a motor controller’s analog input.
Step 1: Define the Target Cutoff
We want to pass the slow-changing DC envelope (0–10 Hz) but aggressively kill the 5 kHz PWM carrier. A good rule of thumb is to set $f_c$ at least one decade (10x) below the carrier frequency. Let’s target $f_c = 500 \text{ Hz}$.
Step 2: Pick the Resistor
The ESP32 GPIO can safely source/sink up to 40 mA, but we want to keep the current low. Furthermore, the motor controller’s analog input has an impedance of roughly 100 kΩ. We need a resistor large enough to save current, but small enough not to form a voltage divider with the 100 kΩ load. A 10 kΩ resistor (standard E24 value) is perfect. It draws only 0.33 mA at 3.3V and is 1/10th of the load impedance.
Step 3: Calculate the Capacitor
Rearranging the cutoff formula: $C = \frac{1}{2\pi R f_c}$
$C = \frac{1}{2 \cdot \pi \cdot 10,000 \cdot 500} = 31.83 \text{ nF}$
Step 4: Select the Real Component
The closest standard E12 capacitor value is 33 nF.
Recalculating the actual cutoff: $f_c = \frac{1}{2 \cdot \pi \cdot 10,000 \cdot 33 \times 10^{-9}} = 482.28 \text{ Hz}$.
Step 5: Dielectric Selection (Crucial for Precision)
Do not just grab any 33 nF capacitor. Standard X7R or Y5V ceramic capacitors exhibit severe voltage coefficient (capacitance drops as DC bias increases) and microphonics (they act as piezoelectric microphones, picking up mechanical vibration). For a stable DC output, specify a C0G (NP0) dielectric ceramic capacitor. It costs a few cents more but guarantees the 33 nF value remains stable regardless of voltage or temperature.
According to filter design principles outlined by All About Circuits, verifying the attenuation at the carrier frequency is the final design check. At 5 kHz (roughly 10x our 482 Hz cutoff), a first-order filter provides -20 dB of attenuation, reducing the 3.3V PWM ripple to approximately 330 mV peak-to-peak. If you need less ripple, cascade a second identical RC stage, but remember to buffer the first stage to prevent the second stage from loading it.
Failure Modes: What Breaks at the Extremes?
Understanding how the circuit behaves when components fail is critical for troubleshooting. Unlike symmetrical topologies, the series-shunt arrangement of the RC low pass filter circuit produces distinct failure signatures.
| Component | Failure State | Circuit Behavior & Symptoms | Risk to Source / Load |
|---|---|---|---|
| Series Resistor (R) | Open | Vout floats. No signal reaches the output. Scope shows high-Z noise. | None. Safe condition. |
| Series Resistor (R) | Short | Vin connects directly to Vout and the capacitor. Filter is bypassed. | High inrush current into C. May damage GPIO if C is large (>1 μF). |
| Shunt Capacitor (C) | Open | Filter action ceases. Vout follows Vin, attenuated only by the load divider. | High-frequency noise passes to the load. |
| Shunt Capacitor (C) | Short | Vout is hard-tied to GND. Output reads 0V DC. | R limits current to $V_{in}/R$. If R is too small, source may overheat. |
The Shorted Resistor Edge Case: If your series resistor shorts (rare, but possible with physical damage or solder bridges), the source sees the raw capacitance of the shunt capacitor. A 33 nF cap is harmless to an ESP32 GPIO. But if you scaled this filter up for a power supply and used a 1,000 μF electrolytic capacitor, a shorted resistor would cause a massive inrush current spike, potentially tripping your bench supply’s overcurrent protection or destroying the driving MOSFET.
Step-by-Step Breadboard Testing and Verification
Do not trust SPICE simulations blindly; parasitic breadboard capacitance and probe loading alter real-world high-frequency behavior. Follow this bench procedure to verify your 10 kΩ / 33 nF design.
- Prepare the Test Setup: Insert the 10 kΩ resistor and 33 nF C0G capacitor into the breadboard. Connect the function generator’s output to Vin, and tie the generator’s ground to the breadboard ground rail.
- Configure the Function Generator: Set the output to a 1 Vpp sine wave with a 0V DC offset. Start at a low frequency (10 Hz) to establish your baseline passband amplitude.
- Probe the Output: Connect your oscilloscope probe to Vout. Critical: Ensure your probe is set to 10x attenuation. A 1x probe adds roughly 100 pF of capacitance in parallel with your 33 nF capacitor. While 100 pF won’t ruin a 500 Hz filter, it will completely destroy a 1 MHz RF filter design by shifting the cutoff frequency.
- Find the -3dB Point: Slowly increase the function generator frequency. Watch the Vpp measurement on the scope. The -3dB point occurs when the output voltage drops to $0.707 \times V_{in}$. For a 1 Vpp input, look for exactly 0.707 Vpp. Note the frequency on the generator. It should read very close to 482 Hz.
- Verify the Roll-off Rate: Increase the frequency to 4.82 kHz (one decade above $f_c$). The voltage should drop by a factor of 10, reading approximately 0.1 Vpp (a -20 dB drop). This confirms the first-order -20 dB/decade slope.
- Test the PWM Response: Switch the function generator to a 5 kHz square wave (simulating the ESP32 PWM). Observe Vout. You should see a relatively flat DC line with a small sawtooth ripple. Measure the AC ripple using the scope’s AC coupling mode to zoom in on the noise floor.
For further reading on component parasitics and advanced filter scaling, the Electronics Tutorials filter guide provides excellent reference charts for cascading multiple stages to achieve steeper roll-off rates.
By selecting the correct E24 values, specifying C0G dielectrics, and accounting for load impedance, your RC low pass filter circuit will perform exactly as the math predicts, translating cleanly from the breadboard to the final PCB layout.






