In this article, I am going to review the variable trace resistance simulator that I've designed for this project. I'll go over some design options and how I made my decision, and wrap up with the completed design, whose PCB is being produced even as I type. In case you've just missed the blogs leading up to this point, you can find them here.
Ways to Make Variable Resistances
One way would be to make a bunch of PCBs using traces of different materials, say for example, a whole bunch of different conductive inks. Then you would have a couple of dozen otherwise identical boards to test. This isn't a good idea for this experiment, but I could see merit if you were evaluating two or three different inks in applications which were pushing the limits of the technology. But for this project, I've decided it is better to make one board. As I wrote in the last article, that board will accept variable resistance modules which are selectively installed in circuits of interest.
There are a few ways one could make a variable resistance:
There are all kinds of pots available, and they have some attractive properties. But they all have one negative point: they require a mechanical motion to move the wiper. I wouldn't rule them out on this point alone. In fact, it would be fun to build up such a module based on a precision potentiometer and a tiny stepper motor. But I ruled out this idea based on the size and weight that such a module would have. You will recall from the concept sketch last article that this module is only supported by a small 2 x 2 position pin header.
Discrete Resistor Arrays
As its name implies, this approach would use a bunch of resistors which could be selectively switched in or out. One nice thing about this scheme is that you don't need a widget to experiment -- you could vary resistances manually if desired by using a handful of shunt-like pin header sockets to which 1206 resistors have been soldered. This allows you to mix and match to get different values. And if we were working in conductance, this would be easy because mhos add when combined in parallel. But if working in resistances, this method might bring on nightmares about those crazy resistor network problems you may have encountered beginning electronics classes:
Another benefit is that a variable resistance widget made for this scheme would be more sturdy when plugged in. There are any number of pins, 2 x 6 in this sketch, versus the 2 x 2 of the method I ultimately decided upon. And sturdiness would be a necessity if the stepper-motor + cam shaft idea below was implemented. Thankfully, it wasn't.
There are some down sides to this idea. A widget design could switch in and out resistors using small relays, but even six reed relays would be a tight fit. I considered a mechanical arrangement, such as a cam shaft of sorts that would raise and lower resistive "shunts" just like the above sketch. That would only require a single shaft and possibly one stepper motor. The vertical travel needed didn't jive with a 64 (or more) position cam shaft, so I gave up on this idea. I don't doubt that a clever mechanical engineer could construct such a mechanism, but it seems too outlandish for this project. Maybe something to consider as a fun project down the road.
And one final point. Ideally, you want to insert this simulated trace resistance with minimal disturbance to the original circuit signals. You don't want your testing method to introduce artifacts into the circuit that can make your measurements questionable. I ultimately gave up on this approach, as much as I liked it. The simpler, two-pin approach just had too many things going for it.
One option that came to mind from the beginning are digital potentiometers, or digipots. They are adjusted with just a few signals and can be easily controlled by a computer. This fits well in our application, where the test computer could sweep through many values of trace resistances while observing the results, all under automatic control. Digipots are basically a bunch of resistors in series, with CMOS switches connecting each node to the wiper. By controlling these switches, you simulate moving the wiper of a traditional potentiometer.
All is not perfect with digipots, however. They are primarily designed to be used a voltage dividers. In these applications, the total resistance of the digipot is in the tens of kilohms, too high for our application. They have a non-zero wiper resistance, that is, the residual resistance when the digipot is set to zero. Typically this is in the tens of ohms, again, seemingly too high for our application. They have a limited operating voltage range, typically constrained to fall within the supply rails powering the digipot. Other undesirable characteristics include bandwidth limitations and low power rating.
All these negative points almost eliminated them from consideration. The smallest value I could find that was even close to acceptable was 1 kΩ, and even that one had 50 Ω of wiper resistance (recall from part 2 that the trace resistances we are trying to simulate range from a few ohms to a few hundred ohms). I was about to give up when I stumbled on this Analog Devices application note about operating digipots in parallel. I picked the AD8403 four channel 1 kΩ digipot and will operate all four channels in parallel, giving me a 250 Ω variable resistor. I also got lucky as far as bandwidth goes, which has a strong dependence on resistance. The 10, 50, and 100 kΩ digipots have only tens of kilohertz bandwidth, but the 1 kΩ version goes out to 4 MHz or more. This still isn't great, and I'll want to check the bandwidth of the parallel combination, but it is suitable for most measurements we want to make.
The Winning Design
The design I settled on has a digipot chip, plus one reed relay switch to short the signal completely for those tests where you really want zero ohms. Physically, the PCB is 22 x 45 mm, tapered at one end (the connector end). The width of the PCB is set by the size of the 24-pin SOIC package plus the reed relay. I decided to populate both sides of the board, so this gives is two channels per board -- and also explains why it uses a four-pin socket instead of two.
The length of the board is determined by the circuitry needed to control these digipots. This, too, is a choice made after considering several alternatives. Since these digipots are controlled using a clocked serial data format and multiple chips can be cascaded, I was initially tempted to make these widgets chained together on a bus. But this becomes complicated, because of the addressing and power requirements. I also had to decide between controlling them from a program running on the MCU board, or independently from a test computer. I wanted this to be as simple as possible, and also was worried about the weight of the assembly (since it's only supported by four pins).
After bouncing many ideas around in my head, I decided to use ordinary USB cables to connect to each widget. They would be connected to a USB hub that is attached to a test computer. If the final result is too heavy, I'll just prop up the cabling with a fixture. This approach also give me a chance to test out an interesting new Tiny 2040 development board which uses the new RP2020 embedded microprocessor from the Raspberry Pi foundation. This board is the size of a postage stamp, can run C or Micropython, and has more than enough pins for this application.
I added a 0.49 inch OLED display to the opposite side of the board from Tiny 2040. Not because I really need it, but because it looks cool and I had plenty of I/O pins to spare. This opens the possibility of making the widget stand-alone in the future, a revision that would require some way to get power (other than USB) and a couple of buttons. For now, it is just going to display the active resistance settings of both channels.
The design files for the TraceR are available on its GitHub repository.
We'll take a look at the overall test and the programming plan next article, part 5b. And there will be a one more sub-article, part 5c, discussing the MCU board in more detail.
From Analog Devices AD840x Digital Potentiometer datasheet: https://www.analog.com/media/en/technical-documentation/data-sheets/AD8400_8402_8403.pdf
From Renesas Digitally Controlled Potentiometer X9C102P datasheet: ihttps://www.renesas.com/us/en/document/dst/x9c102-x9c103-x9c104-x9c503-datasheet