零基礎(chǔ)入門智能射頻—— 基于python的PCB對(duì)數(shù)周期天線設(shè)計(jì)(一)
1 前言
天線是一種變換器,它把傳輸線上傳播的導(dǎo)行波,變換成在無界媒介(通常是自由空間)中傳播的電磁波,或者進(jìn)行相反的變換。在無線電設(shè)備中用來發(fā)射或接收電磁波的部件。凡是利用電磁波來傳遞信息的,都依靠天線來進(jìn)行工作。一般無源天線都具有可逆性,即同一副天線既可用作發(fā)射天線,也可用作接收天線。同一天線作為發(fā)射或接收的基本特性參數(shù)是相同的。這就是天線的互易定理。
本系列將陸續(xù)探究各種類型的天線,通過該系列的學(xué)習(xí)讓剛?cè)胄械男氯擞蓽\到深地掌握天線設(shè)計(jì)理論知識(shí),同時(shí)也有助于不是天線專業(yè)的系統(tǒng)工程師結(jié)合系統(tǒng)指標(biāo)要求,根據(jù)各型天線特點(diǎn)對(duì)天線選型。
2 對(duì)數(shù)周期偶極子天線理論
2.1 概述
偶極子天線是一種經(jīng)典的天線形式,偶極子天線可分為電偶極子和磁偶極子天線兩種形態(tài)。其中,電偶極子天線在其 E 面,輻射方向圖形狀為∞,在 H 面,其輻射方向圖形狀為O形。而磁偶極子在 E 面,H 面的輻射方向圖正好與電偶極子的輻射方向圖相反。理論上,只要增加單個(gè)偶極子的輻射體表面積,便可拓展其帶寬,然而當(dāng)fH/fL>3即實(shí)現(xiàn)3個(gè)倍頻程以上時(shí),此時(shí)需要將一組按照一定比例關(guān)系偶極子天線組合從而實(shí)現(xiàn)超寬帶天線,這便是下面要介紹的對(duì)數(shù)周期偶極子天線(LPDA)。
按照LPDA的實(shí)現(xiàn)形式,可以分為線天線和PCB平面天線兩大類,如圖1所示。LPDA是一種非頻變天線,即天線按照任何比例變動(dòng)后仍等效于其原先的結(jié)構(gòu),那么,其電性能就與頻率不相關(guān),即天線的尺寸與工作的頻帶按相同百分比變化,天線的特征仍舊穩(wěn)定。
圖1 對(duì)數(shù)周期偶極子天線
2.2 對(duì)數(shù)周期偶極子天線特點(diǎn)
對(duì)數(shù)周期偶極子天線具有如下特點(diǎn):
a) 具有超寬帶,通常倍頻程可達(dá)3以上;
b) 工作帶寬范圍內(nèi)增益平坦;
c) 增加偶極子的數(shù)量可提高天線增益;
d) 增加偶極子的數(shù)量可擴(kuò)展天線帶寬;
但是對(duì)于相同尺寸的八木等天線而言,LPDA增益要略低。
2.3 對(duì)數(shù)周期偶極子天線結(jié)構(gòu)
傳統(tǒng)的LPDA天線由一對(duì)集合線和N對(duì)偶極子組成,如圖2所示。兩根集合線形成了空氣介質(zhì)的傳輸線,作為偶極子天線的饋源。在天線后端由金屬緊固件固定兩根集合線,同時(shí)也可看作是短路端。因此,集合線間距決定了傳輸線的特征阻抗,也決定了天線的駐波比。
圖2 LPDA天線組成
每一對(duì)偶極子均直接與集合線相連,這里的集合線就是偶極子天線的饋源。由偶極子天線工作原理可知,偶極子天線的振子長度為工作頻率的半波長λ/2,此時(shí)LPDA其他振長度如果大于λ/2,則其作用等效于反射器;如果其他振子長度小于λ/2,則其作用等效于導(dǎo)引器,如圖3所示。借由不同長度的偶極子天線組合,LDPA擴(kuò)寬工作頻段。
圖3 LPDA不同頻率諧振振子
2.4 傳統(tǒng)對(duì)數(shù)周期偶極子天線設(shè)計(jì)
a) 參數(shù)設(shè)計(jì)
目前比較實(shí)用的LPDA設(shè)計(jì)法是由卡雷爾提出的,平行排列且相互對(duì)稱的振子的 N 個(gè)交叉饋電構(gòu)成對(duì)數(shù)周期偶極天線。Ln表示每個(gè)偶極子天線的長度,每個(gè)天線振子的末端用一條線連接,其延長線相較于一點(diǎn),其被稱為虛擬頂點(diǎn),夾角為2α。從虛擬頂點(diǎn)對(duì)每個(gè)天線單元的垂直距離由Rn表示,各偶極子間距為Sn,每個(gè)振子的直徑為dn。
圖4 LPDA天線結(jié)構(gòu)
LPDA各參數(shù)如下:
頂角α
式中,τ是比例因子,σ是間隔因子。
只要確定了其中的一組振子的直徑,其他振子的直徑便可依據(jù)上述公式得出。但是其計(jì)算結(jié)果并不利于工程實(shí)現(xiàn),主要有以下原因:
· 找不到參數(shù)一樣的型材做振子
· 振子型材種類多不利于控制成本
鑒于此,工程實(shí)現(xiàn)中通常使用同一口徑的振子在保證性能的同時(shí)降低生產(chǎn)成本。
b) 工程實(shí)現(xiàn)
通常而言,LPDA的集合線是空中的鋁材,在集合線的短路端安裝射頻連接器(如N型、SMA型等),同軸線纜此時(shí)穿過空中的其中一個(gè)集合線到達(dá)LPDA的開路端,實(shí)現(xiàn)LPDA的饋電。
圖5 LPDA天線饋電方式
2.5 PCB平面對(duì)數(shù)周期偶極子天線設(shè)計(jì)
2.4節(jié)介紹了基于LPDA設(shè)計(jì)理論的線天線設(shè)計(jì),該類型天線受限于加工與裝配工藝,通常設(shè)計(jì)的截至頻率為1GHz。而1GHz以上則采用PCB形態(tài)實(shí)現(xiàn)LPDA,如下圖所示。
PCB印制LPDA天線的設(shè)計(jì)參數(shù)也采用卡雷爾設(shè)計(jì)法。
圖6 PCB LPDA
PCB LPDA天線同樣是由一對(duì)集合線和N對(duì)偶極子組成。其中,
集合線做成PCB走線形式分布于介質(zhì)板的上下兩側(cè);
各個(gè)振子可以按照計(jì)算參數(shù)實(shí)現(xiàn);
剛性線纜焊接到一側(cè)的集合線上固定,同軸線纜的一頭裝接插件,另一頭通過PCB上的過孔焊機(jī)至另一側(cè)的集合線上。
3 基于python的對(duì)數(shù)周期偶極子天線聯(lián)合仿真設(shè)計(jì)
3.1 聯(lián)合仿真概述
Python語言依靠強(qiáng)大的社區(qū)支持和各種大量豐富的數(shù)據(jù)分析庫、人工智能庫,使得其在科學(xué)計(jì)算領(lǐng)域的潛力巨大。因此,從本篇起我們將逐步學(xué)習(xí)如何借助Python實(shí)現(xiàn)天線設(shè)計(jì)的自動(dòng)化、智能化設(shè)計(jì)。
目前腳本語言+HFSS聯(lián)合設(shè)計(jì)主要有兩種方法:
a) HFSS加載腳本語言。該方法需要人工打開HFSS軟件,然后手動(dòng)操作HFSS加載腳本語言。
b) 程序調(diào)用HFSS。該方法可以實(shí)現(xiàn)從打開HFSS、模型建模、參數(shù)設(shè)置、結(jié)果分析等一站式服務(wù)。這也是本學(xué)習(xí)系列的主導(dǎo)方向。
3.2 項(xiàng)目實(shí)例
圖7所示,在HFSS建立一個(gè)PCB LPDA,,PCB選用FR-4材料,PCB頂部和底部均為PCB振子。
a) 參數(shù)計(jì)算
按照2.4節(jié)的計(jì)算公式,首先確定比例因子τ和間隔因子σ,這兩個(gè)參數(shù)同時(shí)決定了設(shè)計(jì)的PCB LPDA天線的尺寸。
接著,依次計(jì)算得到各個(gè)振子的寬度、長度。
圖7 PLPDA 天線
b) python建模腳本語言
python腳本語言代碼如下,注意和vbs腳本是有區(qū)別的。這里包含了從建模、參數(shù)設(shè)置以及仿真自動(dòng)運(yùn)行的命令,下列代碼可直接運(yùn)行。
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仿真結(jié)果
經(jīng)過HFSS軟件運(yùn)行之后得到圖8所示的運(yùn)行結(jié)果。可以看出該頻點(diǎn)的天線增益9dBi。
圖8 PCB LPDA 輻射圖