Silicon ChipAutomated Test Bench - April 2023 SILICON CHIP
  1. Outer Front Cover
  2. Contents
  3. Publisher's Letter: Renewable energy costs are seriously understated by the media
  4. Feature: Underground Communications by Dr David Maddison
  5. Project: 500W Class-D Mono Amplifier by Phil Prosser
  6. Project: Wideband Fuel Mixture Display Part 1 by John Clarke
  7. Subscriptions
  8. Review: T48 Universal Programmer by Tim Blythman
  9. Project: Automated Test Bench by Richard Palmer
  10. Project: Silicon Chirp – the pet cricket by John Clarke
  11. Feature: Using TestController by Richard Palmer
  12. Serviceman's Log: Tips on kit and bits by Dave Thompson
  13. Product Showcase
  14. Vintage Radio: Browning-Drake 6A by Dennis Jackson
  15. PartShop
  16. Market Centre
  17. Advertising Index
  18. Notes & Errata: Secure Remote Mains Switch, July & August 2022; Capacitor Discharge Welder, March & April 2022; Programmable Hybrid Lab Supply with WiFi, May & June 2021
  19. Outer Back Cover

This is only a preview of the April 2023 issue of Silicon Chip.

You can view 39 of the 112 pages in the full issue, including the advertisments.

For full access, purchase the issue for $10.00 or subscribe for access to the latest issues.

Articles in this series:
  • Underwater Communication (March 2023)
  • Underwater Communication (March 2023)
  • Underground Communications (April 2023)
  • Underground Communications (April 2023)
Items relevant to "500W Class-D Mono Amplifier":
  • 500W Class-D Amplifier cutting diagrams (PDF download) (Panel Artwork, Free)
Items relevant to "Wideband Fuel Mixture Display Part 1":
  • Wideband Fuel Mixture Display PCB [05104231] (AUD $10.00)
  • PIC16F18877-E/PT programmed for the Wideband Fuel Mixture Display (WFMD) [0510423A.HEX] (Programmed Microcontroller, AUD $15.00)
  • Wideband Fuel Mixture Display short-form kit (Component, AUD $120.00)
  • Firmware for the Wideband Fuel Mixture Display (WFMD) [0510423A.HEX] (Software, Free)
  • Wideband Fuel Mixture Display PCB pattern (PDF download) [05104231] (Free)
Articles in this series:
  • Wideband Fuel Mixture Display Part 1 (April 2023)
  • Wideband Fuel Mixture Display Part 1 (April 2023)
  • Wideband Fuel Mixture Display, Pt2 (May 2023)
  • Wideband Fuel Mixture Display, Pt2 (May 2023)
  • Wideband Fuel Mixture Display, Pt3 (June 2023)
  • Wideband Fuel Mixture Display, Pt3 (June 2023)
Items relevant to "Automated Test Bench":
  • Automated Test Bench Swiss Army Knife PCB [04110221] (AUD $10.00)
  • 5V to ±15V boost module (Component, AUD $5.00)
  • ESP32 DevKitC microcontroller module with WiFi and Bluetooth (Component, AUD $25.00)
  • Testbench Swiss Army Knife short form kit (Component, AUD $50.00)
  • Laser-cut UB1 Jiffy box lid for the Test Bench Swiss Army Knife (PCB, AUD $10.00)
  • Firmware and laser cutting files for the Automated Test Bench Swiss Army Knife (Software, Free)
  • Automated Test Bench Swiss Army Knife PCB pattern (PDF download) [04110221] (Free)
Items relevant to "Silicon Chirp – the pet cricket":
  • Silicon Chirp cricket PCB [08101231] (AUD $2.50)
  • PIC16F15214-I/SN programmed for Silicon Chirp [01810123A.hex] (Programmed Microcontroller, AUD $10.00)
  • Silicon Chirp kit (Component, AUD $25.00)
  • Firmware for Silicon Chirp [01810123A.HEX] (Software, Free)
  • Silicon Chirp cricket PCB pattern (PDF download) [08101231] (Free)

Purchase a printed copy of this issue for $11.50.

This handy device can provide test voltages, test signals, vary a resistance, switch a component in or out of circuit and even measure some voltages. It ties into automation software so it performs tests automatically and records input and output values for analysis. Swiss Army Knife An Automated Test Bench by Richard Palmer W hen testing something on the bench, I often need to fish around in the parts drawer for some control component, like a switch or a pot. That’s so I can test some circuitry across a range of voltages, with different component values or with some element in and out of circuit. I’m usually also measuring the impact of changes at one or two places in the circuit. It’s remarkable how often I reach for the same components: a switch, a 100kW pot, a sinewave generator and a 0-10V control voltage source being among the most frequent. A collection of these most-used elements would be like a ‘Swiss Army Knife’ for the test bench. Most pocket knives don’t pretend to have all the tools you’ll ever need or even the absolute best of each kind of tool. Still, they offer a set of robust, basic tools that will get the job done when the perfect tool isn’t at hand or isn’t needed. The cost and complexity of the project have been kept down by controlling it via WiFi using a web interface rather than an LCD screen. That also means it can be teamed up with test automation software, such as TestController, to automate many test bench tasks. Features and performance Pocket knives range from a single blade to monsters with more than thirty functions. We’ve settled on nine functions for this project, and focused on making them simple to use while 60 Silicon Chip designing them to tolerate moderate abuse. The input and output connections are made with spring-loaded or cam-operated terminals and multiple ground connections are provided. Two 16-bit analog inputs with over-voltage protection can measure ±10V DC to within a few millivolts with excellent linearity. As long as both input terminals are kept within that range, it can measure differentials up to 20V. The input range can be extended by adding series resistance to the inputs. The 0-10V DC analog output has 256 steps of approximately 40mV (see Screen 1). While the accuracy isn’t at the same level as the analog inputs, 256 individual test values should be enough for most purposes. The sinewave generator operates from 133Hz to 55kHz. The generator has two output voltages: 6V peak-topeak (2.1V RMS) and 775mV peak-topeak (0.27V RMS). The available frequencies are multiples of 133.33 Hz, and the software rounds settings down to the nearest available value. Despite being driven by an 8-bit digital-to-analog converter (DAC), the noise and distortion total less than 1.5% across the range (see Scope 1 & 2) after low-pass filtering. Major contributors to this are the sine generator DAC’s voltage steps and a jump of Features & Specifications ∎ 256-step, 0-10V output (from a DAC) ∎ 133Hz-55kHz sinewave generator ∎ Two ±10V fully-differential analog inputs (16-bit ADC) ∎ Analog inverter with ±10V input and output ranges ∎ Two 3.3V digital outputs ∎ Two 5V-tolerant digital inputs ∎ 100kΩ digital pot with ±15V terminal ranges ∎ One 10A SPDT relay ∎ One 350mA SPST reed relay ∎ ±15V and +5V power supply rails ∎ Remote control via serial terminal and WiFi telnet SCPI commands ∎ Web interface ∎ TestController integration (see the article starting on page 80) ∎ Powered by a 5V plugpack ∎ Open-source code (excluding web interface) Australia's electronics magazine siliconchip.com.au Screen 1: here, the DAC output has been fed to both ADC inputs, and we are plotting the desired voltage (mauve) against the actual voltage read by a multimeter (red) and ADC channels one (blue) and two (dark grey) over the range of 0-250mV. The ADC2 plot tracks the external multimeter almost exactly; ADC1 has a slight offset error due to using 5% resistors in the prototype. several steps at the zero-crossing point. These artefacts are much less visible on the high output range, making that the range of choice. When finer voltage control is desired, the sinewave generator can be teamed up with the digital pot to provide 256 voltage attenuation steps for either of the basic output voltages. A general-purpose op amp based inverter is included to provide additional flexibility in handling negative input or output voltages. We’ve included two different relays: RLY1 is a 350mA SPST reed relay, useful for switching signals, while RLY2 is a 10A SPDT type that can switch power supplies and similar. Both have LED indicators. The maximum recommended voltage across both relays is limited to 50V by safety considerations for breadboard-style operation, rather than the relays themselves. Both can switch in less than 10ms. The digital inputs and outputs connect to ESP32 3.3V GPIO pins with series resistances to limit current if they are misconnected. The inputs have zener diode protection, will correctly read 5V logic and are tolerant of up to 20V. The inputs and outputs all have LED indicators. A 256-step 100kΩ digital potentiometer completes the feature set. We have specified a high-voltage type, which allows the pot terminals to be at any voltage within the ±15V analog supply rails. If your preference is for a different resistance (or you simply can’t get the 100kΩ type), you can substitute any of the other MCP45HV Scope 1: the direct sine output from the DAC at 400Hz (blue trace) on the low-level output range shows some noise and a zero-crossing discontinuity. The filtered output (yellow trace) shows a significant reduction in noise at the cost of a slight overshoot at each step change. siliconchip.com.au values (5kΩ, 10kΩ and 50kΩ). The project is housed in a UB1 Jiffy box and powered by a 5V plugpack. A readily available switching boost converter module is used to provide ±15V supplies for the op amps and digital pot. The ±15V and +5V supply rails are available to power external circuitry. The specified boost converter can supply 500mA at +15V and 200mA at -15V. At idle, the unit draws less than 100mA from the 5V supply and around 200mA with both relays energised and all the LEDs lit. While a 1A plug pack is more than adequate to power the unit itself, we recommend a 1.5A model if you will be powering much in the way of external circuitry. Even with relatively high conversion Scope 2: the distortion artefacts from the sinewave output are much less prominent on the filtered output at 5kHz as it spends much less time on each step. Australia's electronics magazine April 2023  61 Fig.1: the Swiss Army Knife is based around an ESP32 WiFi microcontroller module. Besides its digital inputs and outputs, its internal DAC at pin 9 (IO25) is used. Because the ESP32 ADC is poor, an external two-channel differential I2C ADC chip (IC1) is used, along with a digital pot IC for that function (IC2) and a quad op amp to buffer and filter the DAC signal plus provide an externally accessible voltage inverter (IC3b). efficiency, the 5V supply current draw will be around three times that drawn from either the +15V or -15V rails, and more than six times that drawn by a device across those rails. 62 Silicon Chip While the project can be USB-­ powered for commissioning, the USB cable voltage drop during operation might cause the brownout detector on the ESP32 to trigger, resulting in a Australia's electronics magazine potentially endless reboot cycle. The unit features a flexible suite of remote control functions, which is fortunate as there are no controls on the unit itself! It has been specifically siliconchip.com.au Keeping with our pocket knife theme, we’ve specified critical resistors as readily available 1% values to provide a full-scale accuracy of a few percent ‘out of the box’. With a simple calibration process that only requires a multimeter, you can make the analog accuracy better than 1%. While this isn’t a highly calibrated instrument, it has sufficient flexibility, accuracy and connectivity to make life on the test bench far more productive. Circuit details designed to be compatible with TestController, or via its web interface. You can also control it via SCPI text commands from the USB serial monitor in Arduino or via Telnet from a siliconchip.com.au terminal program like PuTTY. The manual included in the project downloads has full details of the SCPI command set and communication parameters. Australia's electronics magazine As shown in Fig.1, the heart of the project is an ESP32 WiFi microcontroller module. The ESP32 handles the digital inputs and outputs directly via its GPIO pins, plus it has a DAC and sinewave generator. It also manages WiFi and serial communications. The nominally 3.3V digital inputs have 4.7kΩ series resistors and 3.3V zener clamping diodes ZD1 and ZD2 to make them reasonably fault tolerant. They draw minimal current from 3.3V logic and around 0.3mA from a 5V source. The inputs will register ‘high’ for any voltage above 2.5V at pins 5 & 6 (IO34 & IO35) and are weakly pulled down by 50kΩ resistors within the ESP32. The input LED indicators are driven by pins 29 & 30 (IO5 & IO18) to avoid loading the digital inputs. Pins 24 & 26 (IO2 & IO4) drive the digital outputs. When low, they will be below 0.3V, and when high, above 2.7V. 220Ω series resistors limit the output current and, with zener clamping diodes ZD3 and ZD4, provide a measure of protection against misconnection. Op amp IC3a amplifies the output from the DAC line (pin 9) that’s nominally 0-3.3V to 0-10V full scale. The feedback resistor has been chosen to provide a little more than the required three times gain so that component variations can be corrected by calibration. The 10kΩ resistor and 100pF capacitor form a low-pass filter to reduce the noise from the DAC. IC3d is an amplifying Sallen-Key low-pass filter for the sinewave output, with a -3dB frequency of around 70kHz. The op amp gain is set to two, as Sallen-Key filters with gains of more than three are unstable. The MC33079 op amps can drive their outputs within 1.5V of the supply rails and have a 175kΩ input April 2023  63 impedance. They can source and sink up to 30mA and feature short-circuit current limiting. 100Ω resistors in series with the outputs provide an extra margin of safety if they are misconnected. As the op amps use an industry-­ standard footprint, substitution should be possible if the specified devices aren’t available. While the MC33079 is a more modern op amp with better specifications, for most jobs the Swiss Army Knife will be used for, the venerable LM324 will work fine. While the ESP32 has in-built analog-­ to-digital converter (ADC) channels, they are not linear enough for even basic measurements. Analog voltages fed in via CON4 & CON5 are measured by a two-channel, 16-bit differential ADS1115 ADC (IC1) which is set to have a 2.048V input range. 91kΩ/10kΩ resistive dividers on the inputs reduce 10V signals to just under 1V, allowing for excess input voltages to be sensed and some component variation to be corrected by calibration. As it is desired to measure both positive and negative voltages, both divider chains are referenced to the 1.1V bias supply (VREF) rather than ground. resistors to filter noise from the input, with a corner frequency of 160kHz (1 ÷ [2π × 10kW × 100pF]). Digital potentiometer The pins on this dual-supply boost converter (5V to ±15V) match those on the PCB (MOD2). Other 5V to ±15V modules could be used but would need to be wired to the PCB appropriately. The ADS1115 has inbuilt over-voltage and negative voltage protection for input currents of less than 10mA, which are limited by the upper resistors in the dividers. If the ADS1115 isn’t available, an ADS1015 can be substituted with a slight drop in accuracy. The bias voltage for the ADC is provided by IC3c, which amplifies D1’s 0.65V forward voltage to the required 1.1V. This diode is biased with 1mA from the 3.3V rail via a 2.7kW current-­ limiting resistor. Inverting amplifier IC3b completes the analog functions. Its gain is set to -1 and input impedance to 10kW by the pair of 10kW resistors. The 100pF capacitor combines with those The terminal voltages of digital pots are generally limited to the device’s digital supply rails. The MCP45HV51 (IC2) is a somewhat unusual high-­ voltage component with an extended analog-­ side voltage range. Its ±15V analog power rails allow the pot terminal voltages to be anywhere within that range. While we chose the 100kW model for our prototype, the MCP45HV series also has 5kW, 10kW and 50kW variants, any of which may be substituted without any circuit changes. Both the ADS1115 ADC and MCP45HV digital pot are controlled over an I2C serial bus by the ESP32. Both devices have their additional address pins tied low. Two relays are provided, driven by NPN transistors Q1 and Q2, with diodes D2 & D3 to quench back-EMF of the coils at switch-off. RLY1 is a 350mA SPST reed relay with a 15mA coil, while RLY2 is a heavy-duty, 10A model with SPDT contacts and a 5V 85mA coil. The indicator LEDs light when a coil is energised. Fig.2: the Swiss Army Knife board can be used bare, or housed in a plastic UB1 Jiffy box. Just with four holes and one large rectangular cut-out need to be made on the lid, plus one hole on the side for access to the DC power input socket. 64 Silicon Chip Australia's electronics magazine siliconchip.com.au Power comes from a 5V plugpack and a boost converter module (MOD2) that supplies ±15V. All three supply rails are brought out to a terminal block for breadboard use. Case preparation If you aren’t using our laser-cut lid replacement, start by marking out and cutting the holes in the lid as shown in Fig.2. There are just the four corner mounting holes to drill to 3mm, plus the rectangular cut-out to make. You can do that by drilling a series of holes just inside the rectangular outline, cutting between the holes to remove the plastic inside and then filing the edges smooth and to full size. We’re doing this before assembling the PCB because, to assist you in locating the holes, you can place the blank PCB on the underside of the Jiffy box lid with the component side showing. It should sit neatly inside the locating ridges. Mark and drill the four mounting holes, then make the cutout, which should be 3mm outside the terminal block outlines. While not necessary, it would be nice to countersink those four mounting holes and use countersunk screws, so they are flush with the lid. PCB assembly Given the current global supply shortage of electronic components, some substitution of the active components may be required. Alternatives are noted in the circuit details above and in the parts list. Our kit (mentioned in the parts list) should make getting the critical parts a lot easier. The 142 × 83.5mm double-sided PCB is coded 04110221 and the component locations are shown in Figs.3 & 4. Most of the components and the ESP32 are on one side, with just the connectors and LEDs on the other side. It’s best to fit the three SMD ICs first. Locate their pin 1 indicators and line them up with the pin 1 indicators on the PCB or Fig.3. Spread flux paste on the IC pads, then tack one pin of the IC to a corner pad. Figs.3 & 4: fit the components to the board as shown here, paying particular attention to the orientations of the ICs, LEDs, zener diodes, relay RLY1 and the boost module. Also, don’t get the transistors (Q1 & Q2) and small signal diodes (D1 & D2) mixed up. The resistors and capacitors are not polarised; while the resistors will be marked with coded values, the capacitors won’t. While the boost module is shown mounted vertically here, using a straight header, you can mount it horizontally as shown in the photo overleaf. siliconchip.com.au Australia's electronics magazine April 2023  65 that the wire entries face the outside of the board, as that will be the most convenient way to use it. Final assembly The underside of the PCB is where most of the components are mounted. This prototype differs from the final version, hence the added wires and components. Check that the part is flat on the PCB and all the leads line up with the pads, re-check the orientation of pin 1, then tack a diagonally opposite pin. Solder the remaining pins with minimal solder on the iron and clean up any bridges between pins with more flux paste and some solder wick. Once you’ve finished, clean off all the flux residue and scrutinise the pins under magnification to ensure all solder joints have formed properly. Move on to the four SOT-23 devices and solder them using a similar technique. Note that there are two devices using this package, so don’t get them mixed up. Then solder the four zener diodes, ensuring their cathode stripes face as shown. Follow with the SMD capacitors and resistors; the resistors will be marked with codes indicating their values, but you’ll have to refer to the ceramic capacitor packages to see their values (or measure them if unsure). Now flip the board over and solder the six SMD LEDs using a similar technique. Their cathodes are usually marked, and they go opposite the + markings in Fig.4 and on the PCB (+ indicates the anodes, not cathodes). You can check their polarity using a DMM set on diode test mode; they should light up with the red lead touching the anode and the black lead touching the cathode. With all the SMDs on the board, clean off any remaining flux residue before fitting the through-hole parts. We have specified header sockets for the ESP32 and the boost module so you can make those items pluggable. While it might be possible to solder them directly, we don’t advise that as it will interfere with the testing and programming sequence. On the side with most of the components, fit the DC socket (CON1), ESP32 (MOD1), boost module (MOD2) and relays. When fitting the boost module, refer to Fig.3 and the photo above. There is an extra row of pins for the ESP32 on the PCB, as some variants of the ESP32 DevkitC come with narrower spacing. You only need to populate the row that matches your module. Mount the terminals (CON2-CON12) on the other side of the board. You’ll probably want to orientate them so The PCB mounts under the lid of a UB1 jiffy box with a hole cut in its top, exposing the rectangular area shown in Fig.4. It is a tight fit; some trimming of the PCB locating slots on the case’s side walls may be required. There is no need for a decal or cover plate as the critical information is silk-screened directly onto the PCB. Clip or file off any pins protruding more than 1.5mm from the silkscreened side of the board, and mount it on the lid using 2mm spacers (eg, two 1mm-thick washers stacked) to provide clearance for the component pins. Mark and drill the hole in the case for the coaxial power socket, as shown in Fig.2, if you haven’t already. Loading the software You should now program the ESP32 separated from the PCB. As well as programs being compiled and loaded via an integrated development environment (IDE) such as the Arduino IDE, the ESP32 can load binary files using an over-the-air (OTA) update program. That has the convenience of being able to update its firmware away from your computer. The first step is to load the OTA program, which also conducts validation of the PCB. Install the Arduino ESP32 board files, following the instructions at siliconchip.au/link/abh9 Next, install the ESP32 exception decoder and file uploader plug-in (Releases: https://github.com/me-nodev/EspExceptionDecoder). Select “ESP32 Dev Module” as the board in the Tools menu of the Arduino IDE and edit the “OTA-Test.ino” file from the project download package (available on the Silicon Chip website) to include your WiFi credentials. Compile and run the program; the Serial Monitor will display the IP OTA loader and Swiss Army Knife basic tests. Starting with WiFi with SSID = [MYSSID], password = [MYPASSWD] ....... Connected to MYSSID IP address: 192.168.1.XX OTA loader at http://SwissArmy.local or the IP address above. ADC NOT found at I2C address 0x48 Digital pot NOT found at I2C address 0x3C Setup done. Now toggling relays and digital outputs, DAC staircases. Screen 2: the expected output of the OTA-Test program on the serial monitor, before the ESP32 is plugged into the main PCB. 66 Silicon Chip Australia's electronics magazine Screen 3: the Over The Air (OTA) login page displays when first accessing the ESP32 via a browser. siliconchip.com.au Address of the ESP32. You should get an output similar to Screen 2 with the Arduino Serial Monitor baud rate set to 115,200. As expected, the program has failed to find the ADC and digital pot. If you miss the messages on the Serial Monitor, simply push the boot (EN) button on the ESP32 module, and it will restart. Power down the ESP32 and plug it into the PCB sockets with the USB socket near the power input barrel socket, leaving off the boost module for now. Re-connect its USB cable to the computer. The two I2C devices should now show as available. All six LEDs and the two relays should turn on and off at two-second intervals. Now connect the boost converter (with power briefly removed) and check the ±15V rails while still operating on USB power. The DAC output should vary slowly between 0 and 10V at the terminal block. The sinewave output should be a series of pulses at the terminal block, as its buffer is AC-coupled, and we’re feeding it a staircase signal. Connect the DAC signal to the inverter input and check that the inverter’s output varies inversely with its input voltage. You can fully test the digital pot and ADC once the main program is loaded. For now, we have confirmed that they are responding to I2C messages. In the Data folder that is associated with the OTA-Test program, edit the profile.json file, find the section that looks like the following and replace the placeholder “ssid” and “pass” values with those for your WiFi network: { } “ssid” : “your SSID”, “pass” : “WiFi password”, “hostname” : “SwissArmy” Next, close the Serial Monitor window. In the Arduino Tools menu, click “ESP32 Sketch Data Upload” to copy the files in the Data folder to the ESP32’s local file system. The rest of the files in this folder are needed for the web interface. This uploaded file system will remain intact when new programs are uploaded. Open up a web page using the IP address or URL indicated by the Serial Monitor. On the OTA-Test program’s web interface, log in using “admin” and “admin” as the credentials (see Screen 3). siliconchip.com.au Parts List – Test Bench ‘Swiss Army Knife’ 1 double-sided PCB coded 04110221, 142mm × 83.5mm 1 UB1 Jiffy box [Altronics H0201 or H0151, Jaycar HB6011] 1 laser-cut UB1 Jiffy box lid (optional; 3mm acrylic) [Silicon Chip SC6337] 1 5V 1A or 1.5A plugpack with 2.1mm inner diameter coaxial plug [Altronics M8903A, Jaycar MP3144] 1 Espressif ESP32-DEVKITC-32D (MOD1) [Silicon Chip SC4447, Altronics Z6385A, Jaycar XC3800] 1 +5V to ±15V boost regulator module (MOD2) [Silicon Chip SC6587] 1 micro-USB cable (to program MOD1) 1 5V SIP reed relay (RLY1) [Pan Chang SIP-1A05, Littelfuse HE3621A0510, Teledyne SIP-1A05-D] 1 5V DC coil 10A SPDT relay (RLY2) [Altronics Z6325, Jaycar XC4419] 2 19-pin female 2.54mm headers (for MOD1) 1 5-pin female 2.54mm header (for MOD2) (can be cut from longer header) 1 2.1mm inner diameter PCB-mount DC barrel socket (CON1) [Altronics P0620, Jaycar PS0519] 7 2-pole, 5mm pitch ‘Euro’ type spring terminal blocks (CON2, CON4, CON5, CON10-CON12) [Altronics P2068, Jaycar HM3140, DECA MX722-500M or Eaton EM278502] 5 3-pole, 5mm pitch ‘Euro’ type spring- or cam-operated terminal blocks (CON3, CON6-CON9) [Altronics P2070, Jaycar HM3142, DECA MX732-500M or Eaton EM278503] 4 M3 × 12mm countersunk machine screws and hex nuts 8 M3 x 1mm Nylon washers Semiconductors 1 ADS1115IDGST or ADS1115IDGSR ADC, MSOP-10 (IC1) 1 MCP45HV51-x0xE/ST 8-bit I2C digital potentiometer, TSSOP-14 (IC2) (x0x = 502 [5kΩ], 103 [10kΩ], 503 [50kΩ] or 104 [100kΩ]) 1 LM324D or MC33079 quad op amp, SOIC-14 (IC3) [Altronics Y2523, Jaycar ZL3342] 2 BC817 or BC846-BC850 SMD NPN transistors, SOT-23 (Q1, Q2) [Altronics Y1312, Jaycar ZT2118] 6 SMD LEDs, M2012/0805 or gull-wing [Altronics Y1107, Jaycar ZD2000] 4 3.3V 1/2W+ zener diodes, DO-214AC or DO-213AA/SOD-80/MiniMELF (ZD1-ZD4) [eg, BZG05C3V3 or MLL5226B] 3 BAS16, BAV99 or similar signal diode, SOT-23 (D1-D3) [Altronics Y0089] Capacitors (all 50V SMD ceramic M2012/0805 size) 4 1μF X7R 8 100nF X7R 2 270pF NP0 2 100pF NP0 Resistors (all 1% SMD metal film, M2012/0805 size) 1 100kΩ 5 91kΩ 1 22kΩ 1 15kΩ 1 12kΩ 15 10kΩ 2 4.7kΩ 1 2.7kΩ 2 1.8kΩ 2 1.5kΩ 4 1kΩ 2 220Ω 3 100Ω SC6589 Kit ($50 + P&P) This short-form kit includes the PCB, lid, all the SMDs, the 5V to ±15V boost module and the SIP reed relay. All the other parts such as the case, connectors, 10A relay etc should be available from local retailers – see above. After logging in, select the downloaded project BIN file with the “Choose file” button, and then press the Update button. The web page will track the upload progress, and after a short delay, the ESP32 will reboot. Re-open the Arduino Serial Monitor, and start-up commands should be displayed, ending with an “SCPI Command?” prompt. If you type “*IDN?” (without quotes) into the command Australia's electronics magazine field on the Serial Monitor and click Send, the software should respond with something like “Platy,SwissArmy,00,v0.1”. The unit can now be sealed up in the Jiffy box, powered via the plugpack and remotely controlled via the web interface. If using a USB connection from this point on, we strongly recommend that a USB isolator be used to avoid April 2023  67 Screen 4: the Swiss Army Knife web interface main page. ADC1 and ADC2 are reading 5.10V and 5.11V respectively, while digital inputs D1 and D2 are both low. On the Settings panel, relay RLY2 is on, and digital output D1 is high. The digital pot is set at 128 steps (50%). The sinewave is currently being adjusted (setting highlighted) to 5.09V; turning the dial will result in 0.1V steps (radio buttons under the dial). Screen 5: the calibration page. If the external multimeter reads 9.61V, DAC1’s output voltage reading would need to be boosted by 0.1V. Changes are not stored until the Save button is clicked but calibration values are saved between sessions. The source code and other software files are available from GitHub at: https://github. com/palmerr23/ SwissArmyKnife damage to the ESP32 in the event of a misconnection. Changing the WiFi credentials If you have difficulty connecting to your local WiFi or need to change the settings, you can issue the following commands from a terminal program or the Arduino Serial Monitor: :SYST:SSID your-WiFi-SSIDwithout-quote-marks :SYST:PASS your-WiFi-Passwordwithout-quote-marks You can also change the WiFi credentials by editing the profile.json file on your computer and uploading it again, using the instructions above. You only need to open the OTA-Test program and re-upload the sketch data. The OTA-Test program does not need 68 Silicon Chip to be compiled or uploaded, but the unit will need to be re-calibrated after the profile upload. Remote control & calibration The unit has been primarily designed to work with the open source software TestController (siliconchip.com.au/ link/abev) or via its web interface. SCPI commands can also be issued via an isolated USB serial connection or over WiFi, using a terminal program such as PuTTy or TeraTerm. TestController uses SCPI commands to control all functions besides calibration and communication settings. Further details of the remote control modes and SCPI commands are available in the manual included in the download for this project: siliconchip. com.au/Shop/6/58 Australia's electronics magazine The web interface can control all the outputs and display all the input readings on its Main tab (Screen 4). It also offers calibration functions on its Cal tab (Screen 5). It’s best if only one of the remote control options is active at any time, as settings made on one interface may not seamlessly update on all the others. Web interface The Main tab of the web interface is accessible via http://swissarmy.local and has the input readings on the left and settings on the right. To set a numeric value, click on the setting to be changed and wind the knob. The radio buttons under the knob determine the size of the increment, from 0.1 to 100 units. Under the sinewave generator siliconchip.com.au Screen 6: adding the Swiss Army Knife via TestController’s “Load devices” screen. The option won’t be available until you’ve installed the device definition file and restarted TestController. frequency setting are buttons to select the low and high output ranges. The digital pot has two linked scales, one in counts (0 to 255) and the other in percent of rotation. Either may be used, and the other will change synchronously. The relay and digital output buttons are on the far right. Calibration The analog inputs and outputs can be calibrated using a multimeter on the Cal tab. Connect the analog output to both analog inputs, set the DAC value to around 9.5V on the Main tab then move to the Cal tab. Measure the analog input voltage with your multimeter and set the difference between the external multimeter’s reading and the analog input in the ‘difference’ column for each input (positive if the multimeter reading is higher than shown). Once that is done, set the difference value for the DAC, then click the Save button. DAC calibration is somewhat less accurate than for the ADCs, given that it only has 256 steps to cover the entire 10V range. You don’t need to calibrate all the inputs and outputs at once as the calibration for any input or output, where the difference value is zero, will remain unchanged when Save is clicked. needs to be loaded into the Devices folder wherever you have installed TestController; the default location is “C:\TestController\Devices”. Restart TestController and add the device on the Load devices tab in TestController (Screen 6), using the address “swissarmy.local” rather than its IP number, which could change if the unit hasn’t been used for some time. Then click the Reconnect button. On the TestController command screen, click the Setup button, and the pop-up window in Screen 7 should appear. The input values displayed at the top of the window will update once Conclusion While this is a relatively simple project, it has the potential to improve both the productivity and flexibility of your test bench. That’s particularly true when coupled with other remote-controlled instruments such as the Programmable Hybrid Lab Power Supply (May & June 2021; siliconchip.au/Series/364) and the WiFi-controlled Programmable DC Load (September & October 2022; siliconchip.au/Series/388). ...continued on page 70 Screen 7: the TestController Setup pop-up window shows the readings and allows most functions to be controlled. Input values are updated every second. TestController integration The TestController interface can control all functions other than calibration and communication parameters. The device definition file included in the downloads (“SwissArmyKnife.txt”) siliconchip.com.au a second, and you can set all output values in the lower sections. Australia's electronics magazine April 2023  69 Using the Swiss Army Knife to test itself The performance graphs in Screen 1 and Screen 8 were created by connecting the analog output to an analog input on the unit, then using TestController to control the analog output. The values were logged by TestController, along with voltage measurements from a Bluetooth-connected multimeter. TestController was used to create the charts. The results could also have been exported to Excel for analysis. While I wrote a script (shown adjacent) to do this, TestController has a built-in step generator function that would have worked equally well. I ran the script several times with different parameters. The first iteration tested the basic linearity of the device before calibration, using 0.25V steps to ramp the control value (Math.sVal) from 0 to 10V. The analog input (blue) line in Screen 8 is almost hidden behind the multimeter results (red), indicating excellent linearity. The analog output (grey) had not been calibrated before the test run and shows a fullscale error of around 300mV. The second test (Screen 1), using increments of 10mV, tested behaviour close to 0V and how the floating-point control value mapped to the 256-step DAC output voltage. As the analog output has a step size of 40mV, the output voltage stays the same for four 10mV control variable increments, allowing time for each output level to be sampled four times pre-step. The ADC1 input has a negative offset of -10mV. This was traced to a mismatch between the divider resistors R2 and R4, as 5% 10kW resistors were used in the prototype. The second analog input (dark grey trace) shows almost no offset voltage and tracks the multimeter reading accurately across the entire range. The code averages 16 samples per reading to reduce the variation between readings. The ADS1115 is capable of 860 samples per second. Over the two ADC channels, averaging sixteen samples gives 25 readings per second, more than fast enough for our purposes. To demonstrate how much this helps, compare Screen 1 to Screen 9, which is the same measurement without the averaging. The analog input measurement (blue trace) also has some unevenness, representing a variation of a few counts between ADC readings. These scripts were run many times during the project’s development, saving time and avoiding transcription errors. Even at a modest hourly rate, the time saved more than equalled the entire cost of the Swiss Army Knife’s components. SC 70 Silicon Chip ; ADC & DAC voltage tracking test ; create a control variable that can be logged =globalvar sVal=0 ; set initial value, let it settle and wait until value is logged =sVal=0.0 PlatyKnife::SOUR:A1 0.00 #delay 3 ; don’t log commands and log values every 3 seconds #logcmds 0 #log 3 #hasLogged ; each iteration: update analogue output and wait for logging #while (sVal<10.2) PlatyKnife::SOUR:A1 (sVal) #hasLogged =sVal=(sVal+0.25) #endwhile #hasLogged #log 0 A TestController script I used to test the Swiss Army Knife. After setting up the initial values, the analog output value is incremented by 0.25V until the limit is reached. Each cycle waits for the log entry to be written before updating to the next value. Screen 8: the tracking of the analogs input and output against the value measured on a B41T multimeter over the complete output range of 0-10V. Note that while the analog input and multimeter readings track well, the analog output had not yet been calibrated and is low (Math.sVal is the analog output setting). Screen 9: the performance at the low end of the analog scale without input sample averaging. You can see the DAC steps of just over 40mV. The ADC’s offset is around -1mV and tracks the multimeter well at low voltages. The 1 LSB jitter seen here is all but eliminated by the averaging done by the firmware. Australia's electronics magazine siliconchip.com.au