PCB 上的四分之一波长短截线实际上可以有多长?
在射频设计中,将四分之一波长短截线长度作为 PCB 上短截线的最大长度是一个常用的经验法则。但是,在不同频率和 PCB 材料下,这些短截线实际上可以有多长呢?
这张实用的图表可以帮助你立即做出判断:
生成此图表的代码
我们使用 UliEngineering 根据不同 PCB 材料的相对介电常数(epsilon r)计算传播速度,并使用 matplotlib 创建图表:
Plot-Quarter-Wavelength-Stub-Length.py
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import FuncFormatter, LogLocator
# UliEngineering 导入
from UliEngineering.Electronics.PropagationSpeed import propagation_speed
from UliEngineering.EngineerIO import format_value
# 固定 mu_r,非磁性材料通常为 1.0
mu_r = 1.0
# Epsilo_r 范围 - https://techoverflow.net/2025/11/18/relative-permittivity-epsilon-r-of-different-pcb-materials-collection/
ers = [2.14, 4.2, 4.8]
er_labels = [r"超低 $\epsilon_r$ PTFE 层压板", "铝基 PCB", "标准 FR4 PCB"]
# 频率轴:10 MHz 到 10 GHz
frequencies = np.logspace(np.log10(10e6), np.log10(10e9), num=500)
# 绘图
plt.style.use("ggplot")
fig, ax = plt.subplots(figsize=(10, 12))
# 生成颜色
colors = plt.cm.viridis(np.linspace(0, 1, len(ers)))
for er, c in zip(ers, colors):
v = propagation_speed(er, mu_r) # 传播速度,单位 m/s
lengths = v / (4.0 * frequencies) # 四分之一波长,单位米
ax.loglog(frequencies, lengths, color=c, lw=2, label=rf"$\epsilon_r={er:.1f}$ - " + er_labels[ers.index(er)])
# 添加包含 epsilon_r(LaTeX)的图例
legend = ax.legend(loc='upper right', fontsize='small')
ax.set_xlabel("频率")
ax.set_ylabel("λ/4 长度")
ax.set_title("λ/4 短截线长度与频率的关系")
ax.grid(True, which="both", ls="--")
# 使用 EngineerIO format_value 的坐标轴格式化器
ax.xaxis.set_major_formatter(FuncFormatter(lambda x, pos: format_value(x, "Hz")))
ax.yaxis.set_major_formatter(FuncFormatter(lambda y, pos: format_value(y, "m")))
# 启用次刻度并在 Y 轴上添加次刻度标签
ax.minorticks_on()
# 对于对数坐标轴,确保设置了次定位器以正确显示次刻度
ax.yaxis.set_minor_locator(LogLocator(base=10.0, subs=(2,3,4,5,6,7,8,9)))
ax.yaxis.set_minor_formatter(FuncFormatter(lambda y, pos: format_value(y, "m")))
# 设置次刻度标签样式:缩小 30%,灰色 70%
maj_ylabels = ax.yaxis.get_ticklabels(which='major')
if len(maj_ylabels) > 0:
base_size = maj_ylabels[0].get_size()
else:
base_size = plt.rcParams.get('ytick.labelsize', plt.rcParams.get('font.size', 10))
ax.tick_params(axis='y', which='minor', labelsize=base_size * 0.7, labelcolor='0.7', colors='0.7')
# 同时设置 x 轴次刻度并用较小的旋转标签进行样式设置
ax.xaxis.set_minor_locator(LogLocator(base=10.0, subs=(2,3,4,5,6,7,8,9)))
ax.xaxis.set_minor_formatter(FuncFormatter(lambda x, pos: format_value(x, "Hz")))
maj_xlabels = ax.xaxis.get_ticklabels(which='major')
if len(maj_xlabels) > 0:
base_x_size = maj_xlabels[0].get_size()
else:
base_x_size = plt.rcParams.get('xtick.labelsize', plt.rcParams.get('font.size', 10))
ax.tick_params(axis='x', which='minor', labelsize=base_x_size * 0.7, labelcolor='0.7', colors='0.7')
for tl in ax.get_xminorticklabels():
tl.set_rotation(90)
for tl in ax.get_xmajorticklabels():
tl.set_rotation(90)
fig.tight_layout()
plt.savefig("Quarter-Wavelength-Stub-Length.svg")Check out similar posts by category:
Electronics, Python
If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow