Main Content

Analyzing Crosstalk Between PCB Traces

This example shows how to create a pair of close traces using traceLine object and performs analysis on those traces to calculate the amount of unwanted coupling to the passive trace.

Create Traces

trace1 = traceLine;
trace1.Length = [10 5*sqrt(2) 10 5*sqrt(2) 10]*1e-3;
trace1.Angle  = [0 45 0 -45 0];
trace1.Width  = 3e-3;
trace1.Corner = "Miter";
trace2 = copy(trace1);
trace2.Length = [11 6*sqrt(2) 6 6*sqrt(2) 11]*1e-3;
trace2 = translate(trace2, [0,-5e-3,0]);
trace = trace1 + trace2 ;
figure
show(trace);

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.

Create PCB Component

Use the pcbComponent to create the PCB stack for the shape. For creating a PCB stack, the trace created above is used as a top layer. The middle layer is a dielectric and the bottom layer is a ground plane. Use the dielectric object to create the Teflon dielectric. Use traceRectangular object to create a rectangular ground plane. Assign the trace, dielectric(d), and groundplane to the Layers property of the pcbComponent. Assign the FeedLocations at the ends of the trace and visualize it.

pcb = pcbComponent;
d = dielectric("Teflon");
d.Thickness = pcb.BoardThickness;
groundplane = traceRectangular(Length=40e-3,Width=40e-3,Center=[40e-3/2,0]);
pcb.Layers = {trace,d,groundplane};
pcb.FeedLocations = [0,0,1,3;40e-3,0,1,3;40e-3,-5e-3,1,3;0e-3,-5e-3,1,3];
pcb.BoardShape = groundplane;
pcb.FeedDiameter = trace1.Width/2;
figure
show(pcb);

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

Use current function to plot the current distribution on the trace

figure
current(pcb,1e9,scale="log");

Figure contains an axes object. The axes object with title Current distribution (log), xlabel x (m), ylabel y (m) contains 5 objects of type patch.

Use the layout function to show the layout of the pcbComponent.

figure
layout(pcb);

Figure contains an axes object. The axes object with title PCB Component Layout, xlabel x (m), ylabel y (m) contains 8 objects of type line, text. One or more of the lines displays its values using only markers These objects represent Board Shape, Layer1, Layer3, Feed.

Use sparameters function to calculate the leakage power from Trace 1 to Trace 2.

spar = sparameters(pcb,linspace(0.1e9,10e9,51));
figure
rfplot(spar,2:4,1)

Figure contains an axes object. The axes object with xlabel Frequency (GHz), ylabel Magnitude (dB) contains 3 objects of type line. These objects represent dB(S_{21}), dB(S_{31}), dB(S_{41}).

The S31 shows the power coupled from the top trace to the bottom trace. This is the unwanted coupling from the top line to the bottom line and must be reduced. To reduce the coupling, increase the spacing between the traces.

Increase the Spacing Between Traces

trace1 = traceLine;
trace1.Length = [10 5*sqrt(2) 10 5*sqrt(2) 10]*1e-3;
trace1.Angle  = [0 45 0 -45 0];
trace1.Width  = 3e-3;
trace1.Corner = "Sharp";
trace2 = copy(trace1);
trace2.Length = [11 6*sqrt(2) 6 6*sqrt(2) 11]*1e-3;
trace2 = translate(trace2, [0,-10e-3,0]);
trace = trace1 + trace2 ;
figure
show(trace);

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.

Create PCB Component

Update the properties of the created earlier and visualize it.

groundplane = traceRectangular(Length=40e-3,Width=40e-3,Center=[40e-3/2,0]);
pcb.Layers = {trace,d,groundplane};
pcb.FeedLocations = [0,0,1,3;40e-3,0,1,3;40e-3,-10e-3,1,3;0e-3,-10e-3,1,3];
figure
show(pcb);

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

Use current function to plot the current distribution on the trace.

figure
current(pcb,1e9,scale="log");

Figure contains an axes object. The axes object with title Current distribution (log), xlabel x (m), ylabel y (m) contains 5 objects of type patch.

Use the layout function to show the layout of the pcbComponent.

figure
layout(pcb);

Figure contains an axes object. The axes object with title PCB Component Layout, xlabel x (m), ylabel y (m) contains 8 objects of type line, text. One or more of the lines displays its values using only markers These objects represent Board Shape, Layer1, Layer3, Feed.

Use sparameters function to calculate the leakage power from Trace 1 to Trace 2.

spar = sparameters(pcb,linspace(0.1e9,10e9,101));
figure
rfplot(spar,2:4,1)

Figure contains an axes object. The axes object with xlabel Frequency (GHz), ylabel Magnitude (dB) contains 3 objects of type line. These objects represent dB(S_{21}), dB(S_{31}), dB(S_{41}).

When the spacing between the traces is doubled to 10 mm, the coupling also reduces by around 10 dB and reaches to less than -25 dB.

Plot the Crosstalk Induced Voltage

Define a pulse signal with rise time and fall time and use the timeresp function to plot the output signal at port 2 for the input pulse signal.

sampleTime = 1e-9;
t = (0:999)'*sampleTime;
input = [0.05*(0:20)';ones(1,78)'; 0.05*(20:-1:0)'; zeros(1,80)'];
input = repmat(input,5,1);
fit   = rationalfit(spar,3,1,NPoles=128);
output = timeresp(fit,input,sampleTime);
figure
yyaxis left;
plot(t,input);
yyaxis right;
plot(t,output);
title("Crosstalk between the Traces");
xlabel("Time (sec)");
ylabel("Voltage (volts)");
legend("Vinput","Output",Location="SouthWest");

Figure contains an axes object. The axes object with title Crosstalk between the Traces, xlabel Time (sec), ylabel Voltage (volts) contains 2 objects of type line. These objects represent Vinput, Output.

The output signal magnitude is around 0.1 mV as seen from the result.

References

1) https://incompliancemag.com/visualizing-crosstalk-in-pcbs/

2) Basic Principles of Signal Integrity, Altera