Pi Day has been and gone for this year but I can't resist doing one more very simple electronics
experiment. I'm going to do it quickly, without a great deal of precision, simply to look at the
basic ideas involved. If you want to see it done better, and you have a Pi and a reasonable
oscilloscope, you could try it for yourself. This is a follow-on from my Pi Day blog, which you
can find here Experimenting with a Raspberry Pi GPIO Pin .
OK, what simple experiment can I do with this collection of items? A Raspberry Pi 3 Model B+, a
couple of 1m 50 ohm coax cables [RG58C cable], a 22R resistor, and a SIL connector.
Yes, I'm going to experiment with a transmission line. (Hopefully you already knew that from
reading the title.) There are various ways we can drive a transmission line. One popular way, in
the situation where we have transmission from one output to one input and the input at the end of
the line is a high impedance load, is to series terminate. This has a single resistor at the
transmit end. Here's how my experiment looks on paper:
Having previously determined that each of the pair of MOSFETs in the pin driver has a resistance
of about 30 ohms when turned on, the output will, crudely speaking, look like a voltage source in
series with 30R. To series terminate that to a 50 ohm cable, I'll need about 20 ohms of
additional resistance in series. That's where the 22R resistor comes in.
Here's what it looks like connected up to the Pi.
As before, I'm going to use a simple Python program to drive the pin. This time it will take the
pin high, immediately take it low, and then wait for a while. The wait between the high pulses
that I generate is there in case I accidentally short the output after the 22R - it will keep the
average pin driver dissipation down to something fairly safe, even though it would be sourcing
something like 66mA for the short time that the pin was high.
This is how the output looks with no coax connected to the BNC socket.
The Python program manages to take the pin high and then low again in about 4uS, though the width
is very variable (which we'd expect as interrupts aren't disabled). It is fine for what I want
here. I'm not interested in the pulse width itself: I'm going to be looking at the start of the
pulse and what happens over the first few tens of nanoseconds.
Here's the leading edge in more detail. I'm probing this without the probe's flying ground lead,
using the collar for the ground connection instead. Ideally, I'd use a connector or some handmade
'springy clips', but, being lazy, I'm just precariously holding the probe in place and trying to
operate the 'scope with the other hand. Don't worry, trust me, it'll work! There's a small amount
of ringing evident on the trace, but it's not too bad [this is all going to be less than perfect
because of the signal having to find it's way across the Pi board and through the connector,
before encountering the 22R, but it's good enough for my purposes here].
Now. What I'm going to do is I'm going to connect the two lengths of coax to the output, with a
'T' piece connecting the two together. BTW there's nothing significant about two cables and a 'T'
piece: I just wanted something a bit longer than a metre to work with. The T piece will have very
little effect: it maintains the 50 ohms impedance of the cable nicely through the junction and
the stub it adds is so short that I probably won't even be able to see the effect on the trace.
So I have a 2m length of coax on the output, with nothing at the other end. The far end is just
an open circuit.
The result is this
Initially, the characteristic impedance of the cable (50R) forms a potential divider with the
series-termination resistance (50R). Since they're equal, the level we see is half of the supply
voltage. The signal propagates along the cable at a steady rate, charging the incremental line
capacitance, as it goes, to half the supply. The charge current is 3.3V/(2 x 50R) = 33mA. The
reason that the voltage doesn't change, like it would with a lumped capacitor is that the
capacitance involved is steadily increasing as the signal propagates along. When the signal
reaches the other end, it discovers that there's nothing there. But it doesn't stop. Instead it
reflects from the end and propagates back along the cable, now charging the distributed
capacitance to double what it was before which, if we've got it right, will be approximately the
rail voltage. When it gets back to the start, everything finally stops because the series
termination resistor now has no voltage across it, so there's no longer a charging current to
keep everything going. Hope I got that more or less right [please tell me in the comments
if I have it wrong].
Note that the characteristic impedance isn't a resistance. The line isn't dissipating power,
instead it has stored the energy in the electric field that's established between the inner and
For a much better treatment, read a text book or look at the Wikipedia article linked below.
With cursors measuring the interval between the two edges it's like this
and from that I can see that the 'there and back' time is 25.44ns. The one-way distance is 2.47m
(when I measured them, the cables turned out to be longer than the nominal 1m that they were sold
as), so the time per metre for the signal works out to be 5.15ns. The wave velocity is then
3.333ns[time for photon to travel 1m]/5.15ns x 100% = 64.7%. The value given on a datasheet is
around 66% for RG58C, so I'm in the right sort of area.
What else can I work out about the cable? How about the capacitance per unit length? I know the
length, the time, the voltage that we charge to, and the current, so I can work it out from
C = i dt/dV = 33mA x 25.44ns / 3.3V = 254.4pF total or 254.4pf/2.47m = 103pF/m.
I've got a datasheet that gives 101pF/m for RG58C/U, so close enough given a very simple
experiment [hmm, I suspect I was a little bit lucky there].
So, what does the signal look like when it reaches the other end? From all of the above, you
might be worrying that it's a mess, but it all works out right. At the far end, when the signal
reaches that point, the signal reflects and immediately doubles, so the waveform seen by anything
with a high impedance (like a CMOS gate input) will look very like the original signal coming
from the IO pin.
Here it is. The signal at the start of the line is yellow again, the signal at the other end is
blue. I did that by simply plugging the end of the BNC cable into the second channel connector,
so the termination is 1MEG and 11.5pF.
Um, except that's wrong. The signal is emerging before it should do. [It appears to be getting to
the end faster than a photon in free space could, which is going some! Hang on just a minute
whilst I run off and patent my faster-than-light gadget.] On second thoughts, the reason is
really that the two channels of the scope are only time-balanced if we have similar probes
attached to both channels. Here it is again with the cable output being probed by another 10x
probe, identical to the first.
Now the output is in the right place, halfway along. Whilst not perfect, the signal at the far
end isn't too bad given that it has travelled a couple of metres and the series termination at
the start is far from perfect anyway [ideally, the resistor would be right next to the processor
Update 24th March 2020
I found a short length of CAT-5E cable, 2.11m in length [no screen, just the four twisted pairs], so I thought I'd try the same test as I did with the 50R coax on a single pair in the cable.
The characteristic impedance is apparently 100R, so I've used a 68R series resistor for the termination. Here's how it looks at the sending end.
That works out to be a velocity factor of 63.7%, so a little slower than the coax.
Here's what emerges at the other end [blue trace].
It's not as nice as the coax: the probe connected at the end seems to be having more effect on the waveshape than what I saw with the coax.
I hope that was all of some interest. Not sure the Pi area was quite the right place for it, but
If you found this interesting and would like to see more blogs I've written, a list can be found
here: jc2048 Blog Index