1 前言
天線是一種變換器,它把傳輸線上傳播的導行波,變換成在無界媒介(通常是自由空間)中傳播的電磁波,或者進行相反的變換。在無線電設備中用來發射或接收電磁波的部件。凡是利用電磁波來傳遞信息的,都依靠天線來進行工作。一般無源天線都具有可逆性,即同一副天線既可用作發射天線,也可用作接收天線。同一天線作為發射或接收的基本特性參數是相同的。這就是天線的互易定理。
本系列將陸續探究各種類型的天線,通過該系列的學習讓剛入行的新人由淺到深地掌握天線設計理論知識,同時也有助于不是天線專業的系統工程師結合系統指標要求,根據各型天線特點對天線選型。
2 對數周期偶極子天線理論
2.1 概述
偶極子天線是一種經典的天線形式,偶極子天線可分為電偶極子和磁偶極子天線兩種形態。其中,電偶極子天線在其 E 面,輻射方向圖形狀為∞,在 H 面,其輻射方向圖形狀為O形。而磁偶極子在 E 面,H 面的輻射方向圖正好與電偶極子的輻射方向圖相反。理論上,只要增加單個偶極子的輻射體表面積,便可拓展其帶寬,然而當fH/fL>3即實現3個倍頻程以上時,此時需要將一組按照一定比例關系偶極子天線組合從而實現超寬帶天線,這便是下面要介紹的對數周期偶極子天線(LPDA)。
按照LPDA的實現形式,可以分為線天線和PCB平面天線兩大類,如圖1所示。LPDA是一種非頻變天線,即天線按照任何比例變動后仍等效于其原先的結構,那么,其電性能就與頻率不相關,即天線的尺寸與工作的頻帶按相同百分比變化,天線的特征仍舊穩定。
圖1 對數周期偶極子天線
2.2 對數周期偶極子天線特點
對數周期偶極子天線具有如下特點:
a) 具有超寬帶,通常倍頻程可達3以上;
b) 工作帶寬范圍內增益平坦;
c) 增加偶極子的數量可提高天線增益;
d) 增加偶極子的數量可擴展天線帶寬;
但是對于相同尺寸的八木等天線而言,LPDA增益要略低。
2.3 對數周期偶極子天線結構
傳統的LPDA天線由一對集合線和N對偶極子組成,如圖2所示。兩根集合線形成了空氣介質的傳輸線,作為偶極子天線的饋源。在天線后端由金屬緊固件固定兩根集合線,同時也可看作是短路端。因此,集合線間距決定了傳輸線的特征阻抗,也決定了天線的駐波比。
圖2 LPDA天線組成
每一對偶極子均直接與集合線相連,這里的集合線就是偶極子天線的饋源。由偶極子天線工作原理可知,偶極子天線的振子長度為工作頻率的半波長λ/2,此時LPDA其他振長度如果大于λ/2,則其作用等效于反射器;如果其他振子長度小于λ/2,則其作用等效于導引器,如圖3所示。借由不同長度的偶極子天線組合,LDPA擴寬工作頻段。
圖3 LPDA不同頻率諧振振子
2.4 傳統對數周期偶極子天線設計
a) 參數設計
目前比較實用的LPDA設計法是由卡雷爾提出的,平行排列且相互對稱的振子的 N 個交叉饋電構成對數周期偶極天線。Ln表示每個偶極子天線的長度,每個天線振子的末端用一條線連接,其延長線相較于一點,其被稱為虛擬頂點,夾角為2α。從虛擬頂點對每個天線單元的垂直距離由Rn表示,各偶極子間距為Sn,每個振子的直徑為dn。
圖4 LPDA天線結構
LPDA各參數如下:
頂角α
式中,τ是比例因子,σ是間隔因子。
只要確定了其中的一組振子的直徑,其他振子的直徑便可依據上述公式得出。但是其計算結果并不利于工程實現,主要有以下原因:
· 找不到參數一樣的型材做振子
· 振子型材種類多不利于控制成本
鑒于此,工程實現中通常使用同一口徑的振子在保證性能的同時降低生產成本。
b) 工程實現
通常而言,LPDA的集合線是空中的鋁材,在集合線的短路端安裝射頻連接器(如N型、SMA型等),同軸線纜此時穿過空中的其中一個集合線到達LPDA的開路端,實現LPDA的饋電。
圖5 LPDA天線饋電方式
2.5 PCB平面對數周期偶極子天線設計
2.4節介紹了基于LPDA設計理論的線天線設計,該類型天線受限于加工與裝配工藝,通常設計的截至頻率為1GHz。而1GHz以上則采用PCB形態實現LPDA,如下圖所示。
PCB印制LPDA天線的設計參數也采用卡雷爾設計法。
圖6 PCB LPDA
PCB LPDA天線同樣是由一對集合線和N對偶極子組成。其中,
集合線做成PCB走線形式分布于介質板的上下兩側;
各個振子可以按照計算參數實現;
剛性線纜焊接到一側的集合線上固定,同軸線纜的一頭裝接插件,另一頭通過PCB上的過孔焊機至另一側的集合線上。
3 基于python的對數周期偶極子天線聯合仿真設計
3.1 聯合仿真概述
Python語言依靠強大的社區支持和各種大量豐富的數據分析庫、人工智能庫,使得其在科學計算領域的潛力巨大。因此,從本篇起我們將逐步學習如何借助Python實現天線設計的自動化、智能化設計。
目前腳本語言+HFSS聯合設計主要有兩種方法:
a) HFSS加載腳本語言。該方法需要人工打開HFSS軟件,然后手動操作HFSS加載腳本語言。
b) 程序調用HFSS。該方法可以實現從打開HFSS、模型建模、參數設置、結果分析等一站式服務。這也是本學習系列的主導方向。
3.2 項目實例
圖7所示,在HFSS建立一個PCB LPDA,,PCB選用FR-4材料,PCB頂部和底部均為PCB振子。
a) 參數計算
按照2.4節的計算公式,首先確定比例因子τ和間隔因子σ,這兩個參數同時決定了設計的PCB LPDA天線的尺寸。
接著,依次計算得到各個振子的寬度、長度。
圖7 PLPDA 天線
b) python建模腳本語言
python腳本語言代碼如下,注意和vbs腳本是有區別的。這里包含了從建模、參數設置以及仿真自動運行的命令,下列代碼可直接運行。
oAnsoftApp = win32com.client.Dispatch('AnsoftHfss.HfssScriptInterface') oProject = oDesktop.GetActiveProject() oProject.InsertDesign("HFSS", "HFSSDesign2", "DrivenModal", "" ) oDesign = oProject.SetActiveDesign("HFSSDesign2") oEditor = oDesign.SetActiveEditor("3D Modeler") oEditor.Import( [ "NAME:NativeBodyParameters", "HealOption:=" , 0, "Options:=" , "-1", "FileType:=" , "UnRecognized", "MaxStitchTol:=" , -1, "ImportFreeSurfaces:=" , False, "GroupByAssembly:=" , True, "CreateGroup:=" , True, "SourceFile:=" , "F:\\LPDA.stp" ]) oEditor.AssignMaterial( [ "NAME:Selections", "Selections:=" , "top_element,top_element_1" ], [ "NAME:Attributes", "MaterialValue:=" , "\"pec\"", "SolveInside:=" , False, "IsMaterialEditable:=" , True, "UseMaterialAppearance:=", False ]) oEditor.AssignMaterial( [ "NAME:Selections", "Selections:=" , "substrate" ], [ "NAME:Attributes", "MaterialValue:=" , "\"FR4_epoxy\"", "SolveInside:=" , True, "IsMaterialEditable:=" , True, "UseMaterialAppearance:=", False ]) oEditor = oDesign.SetActiveEditor("3D Modeler") oEditor.CreateRectangle( [ "NAME:RectangleParameters", "IsCovered:=" , True, "XStart:=" , "-1.67001336815218mm", "YStart:=" , "3mm", "ZStart:=" , "915.17837372953mm", "Width:=" , "3.34002673630436mm", "Height:=" , "-6mm", "WhichAxis:=" , "Z" ], [ "NAME:Attributes", "Name:=" , "Rectangle1", "Flags:=" , "", "Color:=" , "(143 175 143)", "Transparency:=" , 0, "PartCoordinateSystem:=", "Global", "UDMId:=" , "", "MaterialValue:=" , "\"vacuum\"", "SurfaceMaterialValue:=", "\"\"", "SolveInside:=" , True, "IsMaterialEditable:=" , True, "UseMaterialAppearance:=", False ]) oEditor.CreateRectangle( [ "NAME:RectangleParameters", "IsCovered:=" , True, "XStart:=" , "1.67001336815218mm", "YStart:=" , "-3mm", "ZStart:=" , "10.0200802089131mm", "Width:=" , "-3.34002673630436mm", "Height:=" , "6mm", "WhichAxis:=" , "Z" ], [ "NAME:Attributes", "Name:=" , "Rectangle2", "Flags:=" , "", "Color:=" , "(143 175 143)", "Transparency:=" , 0, "PartCoordinateSystem:=", "Global", "UDMId:=" , "", "MaterialValue:=" , "\"vacuum\"", "SurfaceMaterialValue:=", "\"\"", "SolveInside:=" , True, "IsMaterialEditable:=" , True, "UseMaterialAppearance:=", False ]) oModule = oDesign.GetModule("BoundarySetup") oModule.AssignPerfectE( [ "NAME:PerfE1", "Objects:=" , ["Rectangle2"], "InfGroundPlane:=" , False ]) oModule.AssignLumpedPort( [ "NAME:1", "Objects:=" , ["Rectangle1"], "RenormalizeAllTerminals:=", True, "DoDeembed:=" , False, [ "NAME:Modes", [ "NAME:Mode1", "ModeNum:=" , 1, "UseIntLine:=" , True, [ "NAME:IntLine", "Start:=" , ["0mm","-3mm","915.17837372953mm"], "End:=" , ["0mm","3mm","915.17837372953mm"] ], "AlignmentGroup:=" , 0, "CharImp:=" , "Zpi", "RenormImp:=" , "50ohm" ] ], "ShowReporterFilter:=" , False, "ReporterFilter:=" , [True], "Impedance:=" , "50ohm" ]) oEditor.Delete( [ "NAME:Selections", "Selections:=" , "mesh_assist" ]) oModule = oDesign.GetModule("AnalysisSetup") oModule.InsertSetup("HfssDriven", [ "NAME:Setup1", "AdaptMultipleFreqs:=" , False, "Frequency:=" , "1.2GHz", "MaxDeltaS:=" , 0.02, "PortsOnly:=" , False, "UseMatrixConv:=" , False, "MaximumPasses:=" , 10, "MinimumPasses:=" , 1, "MinimumConvergedPasses:=", 1, "PercentRefinement:=" , 30, "IsEnabled:=" , True, "BasisOrder:=" , 1, "DoLambdaRefine:=" , True, "DoMaterialLambda:=" , True, "SetLambdaTarget:=" , False, "Target:=" , 0.3333, "UseMaxTetIncrease:=" , False, "PortAccuracy:=" , 2, "UseABCOnPort:=" , False, "SetPortMinMaxTri:=" , False, "UseDomains:=" , False, "UseIterativeSolver:=" , False, "SaveRadFieldsOnly:=" , False, "SaveAnyFields:=" , True, "IESolverType:=" , "Auto", "LambdaTargetForIESolver:=", 0.15, "UseDefaultLambdaTgtForIESolver:=", True, "RayDensityPerWavelength:=", 4, "MaxNumberOfBounces:=" , 5, "InfiniteSphereSetup:=" , -1, "SkipSBRSolveDuringAdaptivePasses:=", True ]) oModule.InsertFrequencySweep("Setup1", [ "NAME:Sweep", "IsEnabled:=" , True, "RangeType:=" , "LinearCount", "RangeStart:=" , "1GHz", "RangeEnd:=" , "2GHz", "RangeCount:=" , 10, "Type:=" , "Interpolating", "SaveFields:=" , False, "SaveRadFields:=" , False, "InterpTolerance:=" , 0.5, "InterpMaxSolns:=" , 250, "InterpMinSolns:=" , 0, "InterpMinSubranges:=" , 1, "ExtrapToDC:=" , False, "InterpUseS:=" , True, "InterpUsePortImped:=" , False, "InterpUsePropConst:=" , True, "UseDerivativeConvergence:=", False, "InterpDerivTolerance:=", 0.2, "UseFullBasis:=" , True, "EnforcePassivity:=" , True, "PassivityErrorTolerance:=", 0.0001 ]) oProject.SaveAs("F:\\PLPDA\\Project3.aedt", True) oDesign.AnalyzeAll() |
c) PLPDA仿真結果
經過HFSS軟件運行之后得到圖8所示的運行結果。可以看出該頻點的天線增益9dBi。
圖8 PCB LPDA 輻射圖