Main Content

Dual-Fed Square Microstrip Patch Antenna for BLE Applications

This example shows how to use the pcbComponent and pcbcascade functionality of RF PCB Toolbox™ to design and analyze the dual-fed square microstrip patch antenna for Bluetooth Low Energy (BLE) applications.

You can use different feed arrangements to achieve circular and elliptical polarization or by using two orthogonal modes excited with a 90 degree phase difference between them. The two orthogonal modes can be accomplished by adjusting the physical dimensions of the patch and using either single or multiple feeds. For a square patch element, the easiest way to excite for circular polarization is to feed the element at two adjacent edges, to excite the two orthogonal modes as shown in the figure. For a quadrature phase difference, feed the element with a 90 degree power divider or a 90 degree hybrid as shown in the figure below.

Create Variables

Centerfreq = 2.4e9;
freq       = linspace(2e9,3e9,41);

Design of Branchline Coupler

Use the design function on the couplerBranchline object to create a branchline coupler at the desired frequency and visualize it. The default substrate for branchline coupler is Teflon.

coupler = design(couplerBranchline,Centerfreq);
figure;
show(coupler);

Figure contains an axes object. The axes object with title couplerBranchline element, xlabel x (mm), ylabel y (mm) contains 8 objects of type patch, surface. These objects represent PEC, feed, Teflon.

Create Variables for Square Patch and Connecting Feed Lines

The patchLength variable creates a square patch. The feedLineWidth and feedLineLength variable creates the feed lines to the antenna. The portSpacing matches the gap between the feed lines to that of the output ports of the branchline coupler. The patchLength and feedLineLength are close to half wavelength at design frequency.

patchLength    = 41.9e-3;
feedLineLength = 65.7e-3;
feedLineWidth  = 3e-3;
portSpacing    = coupler.ShuntArmLength/2+coupler.PortLineWidth/2;

Use the traceRectangular object to create a square patch with side length as patchLength. Use the rotateZ function to rotate the shape by 45 degrees and visualize it.

patch    = traceRectangular('Length',patchLength,'Width',patchLength);
patch    = rotateZ(patch,45);
figure; 
show(patch);

Figure contains an axes object. The axes object with xlabel x (mm), ylabel y (mm) contains 2 objects of type patch. These objects represent PEC, mytraceRectangular.

Use the traceRectangular object to create two feed lines with same length, width, and equal spacing on either side of the X-axis. Perform a Boolean add operation for the shapes patch, feedline1 and feedline2 and visualize it.

feedLine1 = traceRectangular('Length',feedLineLength,'Width',feedLineWidth,'Center',[-feedLineLength/2,portSpacing]);
feedLine2 = traceRectangular('Length',feedLineLength,'Width',feedLineWidth,'Center',[-feedLineLength/2,-portSpacing]);
antShape = patch+ feedLine1+ feedLine2;
figure;
show(antShape);

Figure contains an axes object. The axes object with xlabel x (mm), ylabel y (mm) contains 2 objects of type patch. These objects represent PEC, mypolygon.

Translate the shape along the X-axis such that the feedlines are aligning at x = 0.

translate(antShape,[feedLineLength,0,0]);

Figure contains an axes object. The axes object with xlabel x (mm), ylabel y (mm) contains 2 objects of type patch. These objects represent PEC, mypolygon.

Define the substrate parameters and create a dielectric object. Create a groundplane using the antenna.Rectangle object and use pcbStack to create a PCB antenna. Assign the dielectric and ground plane to the Layers property on pcbStack. Assign the FeedLocations to the edge of the feedline and set the BoardThickness to Height on the pcbStack and visualize the antenna.

EpsilonR     = coupler.Substrate.EpsilonR;    % Dielectric EpsilonR
Height       = coupler.Height;                % Height of the Substrate 
LossTangent  = coupler.Substrate.LossTangent; % Loss Tangent of the Substate

d1  = dielectric('Name',{'Teflon'},'EpsilonR',EpsilonR,'LossTangent',LossTangent,'Thickness',Height);
Gnd = antenna.Rectangle('Length',120e-3,'Width',80e-3,'Center',[120e-3/2,0]); 


ant = pcbStack;
ant.BoardThickness = Height;
ant.Layers = {antShape,d1,Gnd};
ant.BoardShape    = Gnd;
ant.FeedLocations = [0 portSpacing 1 3;0,-portSpacing 1 3];
figure;
show(ant);

Figure contains an axes object. The axes object with title pcbStack antenna element, xlabel x (mm), ylabel y (mm) contains 7 objects of type patch, surface. These objects represent PEC, feed, Teflon.

Use the impedance function to plot the impedance of the antenna from 2.2 GHz to 2.6 GHz

figure;
impedance(ant,linspace(2.2e9,2.6e9,31));

Figure contains an axes object and other objects of type uicontrol. The axes object with title Active Impedance, xlabel Frequency (GHz), ylabel Impedance (ohms) contains 2 objects of type line. These objects represent Resistance Element 1, Reactance Element 1.

The result shows that the impedance of the patch is around 400 ohms at 2.4 GHz. In order to match the impedance of the patch with the 50 ohm line, connect a quarter wavelength transformer at the end of the feedline to transform the impedance to 50 ohm. The impedance of the quarterwave transformer is the geometric mean of the impedances to be matched. Hence the geometric mean of 50 ohm and 400 ohm value comes out to be 141 ohms.

Use the microstripLine design to calculate the width of the line with a Z0 of 141 ohm.

line = microstripLine;
line.Height = coupler.Height;
line = design(line,Centerfreq,"LineLength",0.25,"Z0",141);

Use the traceRectangular object to create two quarter wave transformer lines with same length, width, and equal spacing on either side of the X-axis. Perform a Boolean add operation for the shapes patch, Line1 and Line2 and visualize it.

Line1     = traceRectangular('Length',line.Length,'Width',line.Width,'Center',[line.Length/2,portSpacing]);
Line2     = traceRectangular('Length',line.Length,'Width',line.Width,'Center',[line.Length/2,-portSpacing]);
translate(antShape,[line.Length,0,0]);

Figure contains an axes object. The axes object with xlabel x (mm), ylabel y (mm) contains 2 objects of type patch. These objects represent PEC, mypolygon.

antShape  = antShape + Line1+ Line2;
show(antShape);

Figure contains an axes object. The axes object with xlabel x (mm), ylabel y (mm) contains 2 objects of type patch. These objects represent PEC, mypolygon.

Define the substrate parameters and create a dielectric to use in the PCB stack of the antenna. Create a groundplane using the antenna.Rectangle shape.

Use the pcbStack to create a PCB antenna and assign the dielectric and ground plane to the Layers property on pcbStack. Assign the FeedLocations to the edge of the feedline and set the BoardThickness to Height on the pcbStack and visualize the antenna. The below code performs these operations and creates the PCB antenna.

EpsilonR     = coupler.Substrate.EpsilonR;    % Dielectric EpsilonR
Height       = coupler.Height;                % Height of the Substrat 
LossTangent  = coupler.Substrate.LossTangent; % Loss Tangent of the Substate

d1  = dielectric('Name',{'Teflon'},'EpsilonR',EpsilonR,'LossTangent',LossTangent,'Thickness',Height);
Gnd = antenna.Rectangle('Length',120e-3,'Width',80e-3,'Center',[120e-3/2,0]); 
ant               = pcbStack;
ant.BoardThickness = Height;
ant.Layers        = {antShape,d1,Gnd};
ant.BoardShape    = Gnd;
ant.FeedLocations = [0 portSpacing 1 3;0,-portSpacing 1 3];
figure,show(ant);

Figure contains an axes object. The axes object with title pcbStack antenna element, xlabel x (mm), ylabel y (mm) contains 7 objects of type patch, surface. These objects represent PEC, feed, Teflon.

Use the pcbcascade object to join the coupler and the patch antenna. To obtain the circular polarization, connect the isolated port on the branchline coupler to a matched load of 50 ohm. The isolated port feed location in FeedLocations property of the pcbStack is copied into the ViaLocations. The feed location on the isolated port is deleted. The lumpedElement object is used to create an impedance of 50 ohms and the location of the Lumped Element is given at the ViaLocations. Assign this lumpedElement to the Load property on the pcbStack and visualize the antenna. The below code performs these operations.

pcbAntenna                    = pcbcascade(coupler,ant);
pcbAntenna.ViaLocations       = pcbAntenna.FeedLocations(2,:);
pcbAntenna.ViaDiameter        = pcbAntenna.FeedDiameter;
pcbAntenna.FeedLocations(2,:) = [];
r = lumpedElement;
r.Impedance = 50;
r.Location  = [pcbAntenna.ViaLocations(1:2),pcbAntenna.BoardThickness];
pcbAntenna.Load = r;
figure;
show(pcbAntenna);

Figure contains an axes object. The axes object with title pcbStack antenna element, xlabel x (mm), ylabel y (mm) contains 7 objects of type patch, surface. These objects represent PEC, feed, Teflon, load.

Use the sparameters function to calculate the s-parameters of the antenna and plot the result using the rfplot function.

spar = sparameters(pcbAntenna,freq);
figure;
rfplot(spar);

Figure contains an axes object. The axes object with xlabel Frequency (GHz), ylabel Magnitude (dB) contains an object of type line. This object represents dB(S_{11}).

The result shows that the antenna is a good match from 2 GHz to 3 GHz.

Use the pattern function to plot the 3D radiation pattern of the antenna.

figure;
pattern(pcbAntenna,Centerfreq);

Figure contains 2 axes objects and other objects of type uicontrol. Axes object 1 contains 6 objects of type patch, surface. This object represents Teflon. Hidden axes object 2 contains 18 objects of type surface, line, text, patch. This object represents Teflon.

The antenna has a gain of around 7 dBi at the design frequency.

Use the axialRatio function to plot the axial ratio of the antenna at 2.45 GHz. Use the axial ratio to determine the polarization of the antenna. For the circular polarization, the axial ratio must be less than 3 dB.

figure;
axialRatio(pcbAntenna,Centerfreq,90,0:5:180);
title('Axial Ratio for Azimuth = 90 Plane');

Figure contains an axes object. The axes object with title Axial Ratio for Azimuth = 90 Plane, xlabel Elevation (degree), ylabel Axial Ratio (dB) contains an object of type line.

The result shows that the axial ratio is below 3 dB for all the elevation angles and hence the antenna exhibits a circular polarization. In the orthogonal plane when azimuth angle is 0 degrees, the circular polarization is obtained between the elevation angles of 60 to 90 degrees.

Use the axialRatio function to plot the axial ratio of the antenna with frequency.

figure;
axialRatio(pcbAntenna,freq,0,90);
title('Axial Ratio with Frequency');

Figure contains an axes object. The axes object with title Axial Ratio with Frequency, xlabel Frequency (GHz), ylabel Axial Ratio (dB) contains an object of type line.

The axial ratio with frequency shows that the antenna exhibits circular polarization around 2.4 GHz.

References

[1] Balanis, C.A. "Antenna Theory. Analysis and Design", p. 860, Wiley, New York, 3rd Edition, 2005.