Electronic – Driver impedance of a microcontroller pin, for series termination

impedancemicrocontrollertermination

Many guides instruct that digital signals should have a series resistor placed by the driver, whose resistance is equal to the line impedance (Z0) minus the driver impedance (Zd). Here is one such guide.

However, I can't find output impedance specs for any microcontrollers. I've looked in the datasheets for the Renesas and PIC MCUs I use, and it's not even mentioned.

The situation I'm currently facing is a Renesas MCU talking to an SD card via 21cm-long traces, at 33MHz I think. (Some of the signals are bidirectional, but that's another story.) In order to avoid ringing and EMI emissions, which seem like they could be a problem with such long traces and high frequency, I want to terminate correctly.

Possible solutions – would it be likely that the driver impedance is really low, like only 1 ohm or so? I can calculate my line impedance, and if the driver impedance is far smaller, perhaps I could just neglect it?

Or, could I possibly attempt to detect the EMI caused by the ringing by (don't laugh) holding an AM radio next to the transmission lines, and try different termination resistor values until the ringing is minimized? Is there any better way to do this at home?

Best Answer

It's not the frequency of the signal that's sent down a PCB trace, but the risetime that's important.

A 21cm PCB trace is about 30cm 'air equivalent', and as the speed of light is 1nS/ft (in units convenient for the engineer), that's about 2nS round trip. If the output gate risetime is longer than this, and most modern 'low speed' MCUs and SoCs will have either slow drivers, or drivers that can be selected slow/fast for just this reason, then there is no need to add extra series termination.

A 33MHz signal has a 30nS period, or 15nS high and low. A signal of this rate could get away with >2nS risetimes, as long as the receiver could cope with that and meet tsu and th times. Check the documentation of your MCU to see if risetime or drive strength (selectable low output current) is specified.

Even if the output impedance is not specified, it may be possible to infer it from drive current/voltage graphs, or output voltage specified at multiple currents in the electrical characteristics tables. Failing that, you could measure it by loading an output with various resistors and measuring the output voltage drop.

The usual assumption about driver output impedances is 'around 10 ohms'. It's difficult to make them much less, and much more and they won't meet dynamic high/lows for logic. In the absence of more information, a series termination resistor of 'several tens of ohms', so 33 or 47 ohms is not uncommon. If you you err, erring lower rather than higher is probably better. The board trace Z0 is unlikely to be lower than 50 ohms or higher than 100.

Once you have a series resistor there, the best way to tune it is to use an oscilloscope, but it will need to be a fast one, you need to be able to see <2nS features. A scope this fast will have a 50 ohm input impedance, and you'd use a 1k resistor tapped onto the line as a probe. This gives you a nice pot down into the scope, and very low capacitance tap point to measure with.

Bear in mind that a series resistor can only be used for single-point receiver at the end of the line. If the several receivers are spread out down a trace, a series resistor is the worst thing you can do, this configuration needs a low impedance driver, and a matched termination at the far end of the line.

Related Topic