使用 PyAEDT 设计参数化对数周期偶极子天线 LPDA
HFSS 配备了许多工具,可帮助 RF 设计人员设计不同类型的组件、滤波器、匹配网络和天线。其中一个工具是 ACT 扩展。从 View>ACT 扩展。
在 ACT 扩展中,有一个与天线相关的部分。用户可以使用 ACT 向导设计许多天线。其中一根天线是对数周期偶极子天线 (LPDA)。但是,该工具不允许合成天线,因此用户仅限于给定的情况。
此外,HFSS 具有组件 Libraries。用户可以在其中找到更多组件的另一个位置。View>Component 库。此外,此库仅包含一种设计。
本博客讨论了如何创建一个脚本来为任何所需频段设计对数周期天线。该脚本以 PyAEDT 格式编写。HFSS 可以读取多种类型的脚本,例如 Python、IronPython 和 PyAEDT。PyAEDT 比 IronPython 具有更多的功能,并且提供了更多的函数。因此,重点是为此目的开发 PYAEDT 计划。
PADL 天线具有众所周知的公式。我们将使用这些公式来设计天线。设计人员可以运行 HFSS 并参数化天线以进一步优化。
对数周期天线的公式为:
L_max(最长偶极子)= c/(2*Fmin)
L-min(最短偶极子) = c/(2*Fmax)
其中 Fmin 和 Fmax 是目标频带的极限。
N (元素数) = int (max (log(L_min/L_max)/log(tau)))+1
其中 tau 代表逐渐减量,介于 0.8-0.95 之间。
sigma 是间距与波长 al Fmin 的比率
天线方向性是 tau 和 sigma 的函数。减小 sigma 将减小天线长度,但减小 tau 将减少天线长度和元件数量(间距不变)
编号: Log‑Periodic Dipole Array Calculator
吊杆的大小和间距与天线的阻抗有关。设计人员需要使用 HFSS 运行仿真,以组装一个结构,该结构可以在没有偶极子的情况下提供正确的阻抗。一些设计改变了两个动臂之间的间距,较宽的动臂位于最长的偶极子处,较窄的动臂位于最短的偶极子处。
构造 PyAEDT 代码:
首先,首先初始化代码:
from pyaedt import Hfss
import math
下次启动 HFSSL
hfss = Hfss(projectname="LPDA", designname="LPDA", solution_type="DrivenModal", new_desktop_session=True)
定义主要参数。在运行之前,需要在代码中定义这些参数,因为代码必须执行许多计算才能得出天线的尺寸:
f_min = 300e6 # Hz
f_max = 3e9 # Hz
c = 3e11 # mm/s
tau = 0.9
sigma = 0.05
r = 1 # mm
Zshift = 3 (Pitch between the two booms and the dimension of the boom's cross-section) # mm
Zgap = 1 (spacing between the two booms) # mm
现在我们开始计算偶极子和其他维度:
L_max = c / (2 * f_min)
L_min = c / (2 * f_max)
N = int(math.ceil(math.log(L_min / L_max) / math.log(tau))) + 1
x_pos = 0 # X-position start
# Create Dipoles
dipole_names = []
for n in range(N):
L_n = L_max * (tau ** n)
d_n = sigma * L_n
half_len = L_n / 2
name1 = f"Dipole{n}_1"
name2 = f"Dipole{n}_2"
hfss.modeler.primitives.create_cylinder(cs_axis="Y",
position=[x_pos, -half_len, 0],
radius=r,
height=L_n,
name=name1,
matname="copper")
hfss.modeler.primitives.create_cylinder(cs_axis="Y",
position=[x_pos, half_len, 0],
radius=r,
height=-L_n,
name=name2,
matname="copper")
dipole_names.extend([name1, name2])
x_pos += d_n
上述代码产生了一个对数周期天线,其中偶极子连接到一个吊杆上。我们把它们分成两部分,然后我们用 Zshift 移动它们:
split_names = hfss.modeler.split(dipole_names, plane="ZX")
moved_objects = [name for name in split_names if "_Split1" in name]
hfss.modeler.move(moved_objects, [0, Zshift, Zshift])
我们现在创建吊杆:
Startofthebar = -r - Zshift
Lengthofthebar = x_pos + 2 * (r + Zshift)
StartofGap = (Zshift - Zgap) / 2
box1 = hfss.modeler.primitives.create_box(
[Startofthebar, 0, -(Zshift-Zgap)/2],
[Lengthofthebar, Zshift, Zshift-Zgap],
name="Box1",
matname="vacuum"
)
hfss.modeler.change_material("Box1", "copper")
hfss.modeler.duplicate_along_line("Box1", [0, 0, Zshift], 2)
现在我们有了天线,我们需要添加一个端口:
Endofthebar = x_pos + (r + Zshift)
HZshift = Zshift / 2
HZgap = Zgap / 2
EndofGap = StartofGap + Zgap
rectangle = hfss.modeler.primitives.create_rectangle(
position=[Endofthebar, 0, StartofGap],
dimension_list=[Zshift, Zgap],
cs_axis="X",
name="Rectangle1",
matname="vacuum"
)
分配集总端口:
hfss.create_lumped_port_to_sheet(sheet_name="Rectangle1",
axisdir="Z",
impedance=50,
start_point=[Endofthebar, HZshift, StartofGap],
end_point=[Endofthebar, HZshift, EndofGap])
最后,我们可以关闭项目:
hfss.save_project()
hfss.release_desktop()
用户拥有专为所需带宽设计的天线。如果我们想对天线进行参数化以进一步优化它怎么办?我们希望优化偶极子长度,同时保持第一个和最后一个偶极子长度固定。因此,我们将创建偶极子的代码更改为以下内容:
# Create Dipoles
dipole_names = []
for n in range(N):
L_n = L_max * (tau ** n)
d_n = sigma * L_n
half_len = L_n / 2
name1 = f"Dipole{n}_1"
name2 = f"Dipole{n}_2"
name3= f"DipoleLength{n}"
hfss[‘name3’] = L_n
hfss.modeler.primitives.create_cylinder(cs_axis="Y",
position=[x_pos, -half_len, 0],
radius=r,
height=”name3”,
name=name1,
matname="copper")
hfss.modeler.primitives.create_cylinder(cs_axis="Y",
position=[x_pos, half_len, 0],
radius=r,
height=”-name3”,
name=name2,
matname="copper")
dipole_names.extend([name1, name2])
x_pos += d_n
具有参数化偶极子的最终模型如下所示。