In 2021/2022 I designed a DC electronic load that would be more capable, but also much more complex than the usual DIY solutions. However, after building a working breadboard prototype of the analog circuitry with 12 ICs including multiple precision and dual opamps, I thought that it might be better to start with a smaller project that would allow me to gain a lot of experience and write much of the non-application specific code that I could use later on for the digital part.
And this is how I started working on a programmable decade resistor, a pretty specialized tool for niche applications. At the time of this post the project is maybe 70% completed, so I think it’s reasonable to start writing about it.
Introduction
A programmable resistor is a electronic device whose electrical resistance can be adjusted typically through digital signals. Programmable resistors are available in form of integrated circuits (often referred to as digital potentiometers) as well as stand-alone devices/expansion cards. There are many different applications, each with their own set of requirements e. g.:
- programmable gain amplifiers
- sensor emulation, e. g. for integration tests with hardware-in-the-loop simulators
- automated testing
- calibrators
- prototyping
This diy project shall provide a general-purpose stand-alone device for use in a (home) electronics lab that can replace or complement resistor decade boxes for low power applications. The following table could be seen as a starting point for the design.
Requirement | Value |
---|---|
Range | short circuit, \(1\Omega\) … \(999.999 \textrm{ k}\Omega\), open circuit |
Resolution | \(1 \Omega\) |
Accuracy* | \(<<\pm 0.5\% \textrm{ of value} + 0.3 \Omega\) |
Thermal drift | \(<<50 \textrm{ ppm/K}\) |
Power Rating** | \(0.5 \textrm{ W}\) |
Bandwidth | unspecified |
Switching | make-before-break, break-before-make |
User interface | Num pad and rotary encoder |
Interface | USB (SCPI), two digital inputs (trigger etc.) |
The programmable resistor closely follows the main prinicple of resistor decade boxes: connecting multiple devices (“decades”) in series, with each of the devices having a settable resistance of \(0 \Omega\), \(1 \cdot 10^n \Omega\), \(2 \cdot 10^n \Omega\), …, \(9 \cdot 10^n \Omega\) where \(n\) specifies the decade in question.
Those devices are simple resistor networks complemented by one (multi-throw) or more (single- or multi-throw) switches. While the actual topology and resistor values vary vastly, the switch(es) will always either short out or connect certain resistors or simply tap certain nodes of the resistor network. A simple implementation uses a 10-throw rotary switch to tap the nodes of a series resistor network of nine resistors.
In the next post I’ll discuss two different topologies and the reasoning behind my choice.