This is only a preview of the February 2022 issue of Practical Electronics. You can view 0 of the 72 pages in the full issue. Articles in this series:
|
Arduino-based
Adjustable
Power Supply
By
Tim Blythman
We have published all sorts of fancy bench supplies over the years: linear,
switchmode, hybrid, high-voltage, high-current, dual-tracking… But
sometimes, all you need is a basic power supply with voltage and current
monitoring and limiting; something that’s convenient and easy to set up
and use. That’s exactly what this is – a very useful little power supply built
on an Arduino shield!
L
ately, like many others, I
have mostly been working from
home. But unfortunately, my
home workshop is not equipped to
the same degree as my work office/
lab. I could bring my 45V 8A Linear
Bench Supply prototype home (published in October-December 2019).
It would do pretty much everything
I need, but my space is limited, and
it would be a rare event to make use
of its full capabilities.
So I need something more compact
but still useful. I decided to base it on
something I already had at home, an
Arduino Uno. It’s capable of delivering up to 14V at a maximum of 1A.
That is modest, to be sure, but handy
enough for most smaller projects. And
multiple units can be combined if you
need several different voltages (eg, 5V
and 3.3V).
Arduino considerations
Using Arduino hardware means that it
would be possible to add one of many
plentiful shields and modules to add a
custom display or controls for the Power
Supply. But as I already have a computer
on my desk, I decided to use the existing
screen and keyboard to control it.
I wrote a small computer program that
controls the Power Supply, providing all
of its useful functions without taking up
valuable bench space.
Thus, the Power Supply can sit tucked
away out of sight, with nothing more
than the two output leads snaking out to
wherever they are needed. The control
program takes up only a small amount
of screen space.
14
The combination of the microcontroller on the Uno and the control program
allows many features to be added with
no extra hardware.
For example, the control program allows five preset combinations of voltage
and current to be created and instantly
activated. This makes it harder to cause
damage by inadvertently setting the
wrong voltage or current limit.
While the Power Supply does not
have any form of temperature sensing,
it can estimate the thermal effects of a
connected load to warn the user of any
problems with either the load or the
Power Supply itself.
Digital controls
Fig.1 shows the circuit of the Mini Digital
PSU. It is effectively a ‘shield’
or daughterboard which plugs
into the top of an Arduino Uno
microcontroller board. The
Uno board has an ATmega328
microcontroller, a USB-serial
interface IC and some voltage
regulation circuitry.
IC1 is an MCP4251 dual digital
potentiometer; it contains two
5kΩ potentiometers with 257
digitally-controlled steps. This
chip is controlled over an SPI bus
by the Uno, from its pins 4, 13 and
11 to pins 1, 2 and 3 of IC1.
The ‘tracks’ of the two ‘potentiometers’ are grounded at one
end, with a fixed reference voltage
at the other end. So the ‘wiper’
voltages vary linearly with the
programmed position, up to that
reference voltage.
The voltage from pin 6 (‘wiper’ 1)
is proportional to the desired output
voltage, while the voltage from pin 9
(‘wiper’ 0) is proportional to the desired
maximum current.
The wiper at pin 6 must be a fraction
of the desired output voltage, as the
digital pot IC has a maximum 5V supply voltage; hence, it can only generate
voltages up to 5V.
To have a steady output voltage, we
need a stable reference voltage. In this
case, we’re using the Uno’s 3.3V rail. It
comes from a practically unused 3.3V
regulator on the Uno, and this is fed to
IC1 via jumper JP1. This is also connected
to the Uno’s VREF pin, for its internal
analogue-to-digital converter (ADC) peripheral to refer its readings to.
Practical Electronics | February | 2022
Thus the wiper of P1 (P1W, pin 6) produces a voltage in the
range 0-3.3V, which is low-pass filtered by a 10kW/100nF RC
circuit, then fed to non-inverting input pin 3 of op amp IC2.
This is an LMC6482 rail-to-rail input/output CMOS dual op
amp, which allows the output to go all the way down to 0V
without a negative rail, and this also makes current sensing
much easier (as described later).
This op amp compares the wiper voltage to a divided version of the output voltage, produced by a 51kW/10kW divider,
which feeds into its pin 2 inverting input. That gives a gain of
6.1 times. Thus, around 20V at the output corresponds to the
3.3V full-scale output from digital potentiometer IC1.
The output from pin 1 of IC2 drives the base of NPN transistor Q1, which is configured as an emitter-follower. Its collector
draws from the Arduino’s VIN supply while its emitter feeds
the supply output at CON1 via the contacts of relay RLY1
(more on this later).
This transistor effectively boosts the current capability of
the op amp output so that it can supply up to 1A (from the
VIN supply).
The base-emitter voltage drop of Q1 is cancelled out since
Q1 is in the negative feedback loop – from pin 1 of IC2, through
Q1, then through the 51kW/10kW output divider back to pin 2
Features and specifications
• Output voltage and current: 0-14V, 0-1A
• Adjusted and monitored via a computer (eg, desktop/laptop)
• All functions under software control
• Voltage resolution: around 20mV
• Current resolution: around 20mA
• Arduino-based design means it can be expanded.
of IC2. Hence, IC2 adjusts its output voltage higher to achieve
the set voltage at the common contact of RLY1.
While the circuit is set up to enable an output voltage of
up to 20V, in practice, other circuit elements limit the practical output voltage to around 14V. The main limit is the 5V
regulator on the Arduino board, which in the case of clone
boards, is only rated to 15V.
Voltage regulation
Power transistor Q1 is an MJE3055. Usually, its emitter voltage (ie, the output) is around 0.7V below its base voltage (from
output pin 1 of op amp IC2). If the emitter/output voltage
rises (for example, due to the load drawing less current), then
SC
Arduino-based
INO SMini Power
INI POSupply
S PPL
Ó
Practical Electronics | February | 2022
Fig.1: the Power Supply uses an
Arduino Uno to adjust the output
voltage and current, which it does
by sending commands to dual digital
potentiometer IC1. This, in combination
with rail-to-rail op amp IC2 and
transistor Q2, forms a control loop to
adjust the base drive to emitter-follower
power transistor Q1 which regulates
the output voltage. Current feedback is
via a 15m shunt and amplifier op amp
IC3, while the voltages and
output current are monitored at the
Arduino’s A0-A2 analogue inputs.
15
Scope1: the response to an increase in load which
triggers current limiting. The yellow trace is the voltage
across the shunt resistor, so is proportional to the
current, while the green trace is proportional to the
output voltage. There is some current overshoot, mostly
due to the output capacitance, after which the current
limiting kicks in, reducing the output voltage to reach a
steady-state within 1ms.
Scope2: the response to a step-change in the set voltage
from 5V to 3.3V (with no load). It takes just under 100ms
due to the 10µF output capacitor being discharged by
the voltage-sense divider. Any significant load would
speed this up dramatically.
Scope3: a step increase in the set voltage (this time from
3.3V to 5V with a 12W load) is much faster due to the
lower impedance of the output transistor, taking just a
few milliseconds.
16
its base-emitter voltage decreases, which starts to switch it
off, causing its emitter voltage to drop.
Conversely, if the emitter/output voltage falls, the baseemitter voltage increases and Q1 turns on harder, halting the
emitter voltage fall. This ‘local feedback’ provides a very fast
response to load transients.
While the emitter-follower circuit is fairly good at tracking its input at its output, the base-emitter voltage does vary
somewhat depending on the load. To overcome this, the op
amp will adjust Q1’s base voltage to maintain the voltage at
the output voltage divider near that of the reference value on
the digital potentiometer. The op amp reacts more slowly,
though, due to its limited gain-bandwidth.
Transistor Q1 is fitted with a small finned heatsink, as it
works as a linear pass device, dissipating any excess voltage
between the supply and output. This low-profile heatsink
has been chosen so another board can be stacked on top if a
custom control or display needs to be added.
We have designed the shield so that it does not conflict
with pins used for the LCD Adaptor described in June 2020,
meaning we could turn this into an all-in-one unit by adding
an LCD touchscreen in the future. (Although the current version of the software does not support this.)
A 10µF output filter provides modest output bypassing,
which also improves transient regulation. This value is a compromise since too little output capacitance would worsen its
regulation, and too much capacitance would limit the Power
Supply’s ability to quickly limit its output current under
short-circuit conditions.
Between Q1 and IC2, the feedback loop has a lot of gain,
so care must be taken to ensure it does not oscillate. A 100nF
capacitor from the reference voltage at pins 7 and 8 of IC1
prevents transients from being seen by the op amp, which
would otherwise be duplicated at the output. Similarly, the
desired voltage signal at pin 3 of IC2 is stabilised with another
100nF capacitor.
There is also a 100nF feedforward capacitor across the 51kW
upper feedback divider resistor, which reduces closed-loop gain
by a factor of six or so for fast transients. Also, a 1nF capacitor
is connected between the output (pin 1) and inverting input
(pin 2) of IC2, limiting the op amp output slew rate. Another
way of thinking about this is that it provides increased negative
feedback at high frequencies. This prevents it from oscillating.
The low-pass filter formed by Q1’s 100W base resistor and
the 10µF capacitor from its base to ground also helps to stabilise the feedback loop.
Output relay
The output switching relay is a reed relay. Its coil is driven
from the Arduino’s D5 digital output. This is possible since
the coil current of a reed relay is modest.
Unfortunately, the digital potentiometers in IC1 start with
their wipers at mid-point, so a voltage will be present at the
output without RLY1 disconnecting it initially. RLY1 is only
energised once the regulator output voltage has settled at the
desired level.
RLY1 also acts as a load disconnect switch, allowing the
circuit to obtain the desired output voltage without the load
being connected. It can then quickly connect the load to the
already correct voltage, rather than having to ramp it up.
Similarly, it can quickly disconnect the load in case of an
over-current or short-circuit condition.
Current limiting
The current limiting employs a similar feedback loop to the
voltage control. Here, we use the simplest current sensing
possible. A 15mW shunt resistor in the return current path,
from pin 2 of output terminal CON1 to ground, converts the
load current into a voltage.
Practical Electronics | February | 2022
This is fed, via a 1kW/100nF RC lowpass filter, to the non-inverting input
(pin 3) of IC3, a second op amp. Since
this only needs to handle up to
around 3.3V, we’re using a cheaper
MCP6272 dual op amp IC (its
other half is not used).
IC3 amplifies the shunt
voltage by a factor of 151
(150kW/1kW + 1). The amplified sense voltage is then
fed to IC2’s pin 5 (its second
non-inverting input). So 2.2V
voltage at pin 5 of IC2 corresponds
roughly to a 1A output current.
This voltage is compared against the wiper
voltage from the other digital potentiometer in IC1.
If the output current is above the setpoint, output pin 7
of IC2b goes high, forward-biasing the base-emitter junction
of NPN transistor Q2.
When Q2 is switched on, it pulls the voltage at pin 3 of
IC2a down, reducing the output voltage. This should lead to
a reduction in the current drawn by the load until it matches
the current limit, at which point the drive to Q2 is moderated,
so the output voltage should stabilise at a level where the
output current is close to the set current limit.
There are a few things to note here. First, the apparent
reversal of the inverting and non-inverting inputs on IC2b is
because common-emitter amplifier Q2 inverts the polarity of
the signal in the feedback loop. By swapping the inverting
and non-inverting inputs, we effectively re-invert it and get
the correct polarity.
Also, like the voltage feedback loop, stability is improved
by a 1nF capacitor between the output (pin 7) and inverting
input (pin 6), plus there is a 100nF capacitor stabilising the
current set voltage at pin 6.
The voltage and current feedback signals also go to two of
the analogue-capable pins on the Uno board. Thus the Uno
can sense (with its ADC peripheral) the voltage and current
using pins A1 and A0 respectively.
The VIN supply voltage is measured via a second 51kW/10kW
divider at analogue input A2. That allows the micro to calculate
the voltage drop across Q1, and infer its thermal dissipation.
On the PCB, there are test points for the four sense/reference
voltages. These are labelled VFB, IFB (voltage and current
feedback), VSET and ISET (voltage and current setpoints),
plus one for GND.
Arduino software
The Arduino firmware produces SPI data to set the desired
voltage and current limits, then closes the relay to enable the
output when prompted by the user. The hardware on the shield
then manages the output voltage, reducing it if the current
limit is reached as described above.
Once the voltage and current are set, the regulator operation
is automatic; it does not depend on the software for control.
The microcontroller measures the supply and output
voltages, and load current, then sends this data to the program
running on your computer for display.
Calibration consists of determining the exact relationship
between digital values (ADC readings and digital potentiometer settings) and the resulting analogue voltages. These coefficients can be calculated from measured component values.
The Power Supply will be fairly accurate ‘out of the box’.
But its accuracy can be improved by taking readings with a
multimeter, determining the exact ratios and programming
these into the code. A calibration routine in the PC program
simplifies this process, automatically calculating the new
ratios from measurements.
Practical Electronics | February | 2022
Construction
The main part of the assembly is building
the shield. The parts all fit on a doublesided PCB coded 18106201, which
measures 69mm x 54mm and
is available from the PE PCB
Service – see Fig.2.
The first decision to make
is whether you want to build
it with plain headers or stackable headers. You will need
stackable headers if you plan to
plug any shields on top of this one.
But we used regular pin headers on
our prototype, as we don’t plan on
doing that immediately.
Assembly is then straightforward.
To confirm everything is going in the
right place and with the correct orientation, check Fig.2, the PCB silkscreen and the
matching photos as you fit the parts.
Start by fitting the 15mW surface-mounted resistor, which
goes on the underside of the PCB. Some constructors like
to use a wooden clothes peg to hold an SMD component in
place while soldering it.
Flip the board over and tack one lead in place with your
iron. If the part is flat and square within the silkscreen markings, solder the other lead. Otherwise, remelt the first pad
and adjust the resistor, using tweezers if necessary, until it
is placed correctly. Then solder the second lead and flip the
PCB back over.
Fit the 11 through-hole resistors on the top of the PCB, as
indicated by the silkscreen markings. Check their values with
a multimeter, as some of the markings can look quite similar.
Follow with the eight 100nF and two 1nF capacitors, which
should be marked with their values (or codes representing
them, like 104 and 102 respectively). None of those are polarised; nor are the 10µF capacitors which can be through-hole
or SMD types. Mount them now.
Next, install the smaller transistor, Q2. Crank the leads to
fit the PCB pads, ensuring that when mounted, the body sits
low in case you need to add a shield above this one. Ensure
that it matches the outline on the PCB silkscreen.
Follow with the TO-220 transistor, Q1. It is mounted on
a finned heatsink. First, bend the leads backwards by 90°
around 7mm from the transistor body, then thread the leads
through the PCB pads. Check that the larger mounting hole
is aligned and adjust the leads if necessary.
Remove Q1 from the PCB and insert the M3 machine screw
through the back of the PCB. Add the heatsink on top, then
the transistor and thread on the nut. Before tightening, ensure
that the heatsink and transistor are square within the footprint.
Carefully tighten the nut (to avoid damaging the transistor
leads), then solder its leads and trim them.
Most of the remaining parts are in DIL packages. Avoid using IC sockets, as not only will they have a worse connection
than direct soldering; they will also cause the components
to sit much higher.
RLY1 has eight pins but comes in a 14-pin size package. It
sits above Q2; the notch in its case faces to the right. Gently
bend the leads to line up with the pads and fit them. Solder
two diagonally-opposite leads and check that the part is flat;
adjust if it is not. Solder the remaining leads and then go back
and refresh the solder on the first two leads.
IC1 is a 14-pin part; its pin 1 notch should butt right up
to the adjacent capacitor. IC2 is an LMC6482, as marked
on the silkscreen. Do not mix it up with IC3, which is
specified as an MCP6272, although you could use another
LMC6482 instead.
17
Fig.2: this deceptively
simple Arduino shield
turns an Uno into a
regulated bench Power
Supply. Apart from
the pin headers, the
only component on the
underside (and the only
SMD) is the 15mW shunt
resistor. Power transistor
Q1 has a small heatsink
as it can dissipate several
watts. The ICs, relay and
transistors are polarised
so must be oriented as
shown, while the other
components can go in
either way around. Several
test points are provided,
but they are not needed for
calibration.
And to further assist in
construction, here are
the matching same-size
photos of the shield, from
both sides.
Use a similar technique as RLY1 to fit IC1, IC2 and IC3. Once
that is done, check for any bridges or dry solder joints and
repair as necessary by using a solder sucker or solder braid
to remove excess solder. Apply the iron and fresh solder to
finish the solder joint.
Headers and jumper
Attach the Arduino mounting headers, along the edges of the
board, next. If you are using male headers, then fitting them is
straightforward. Use the Uno as a jig and plug the pin headers
into the Uno, then place the PCB on top. After checking that
everything is flush and square, solder the pin headers from
above and unplug the assembly from the Uno.
If you want to use stackable headers, then it is a bit trickier,
although the Uno can still be used as a jig. In this case, the
headers thread through the PCB from above and into the
Uno. Flip the assembly over so that the Power Supply PCB
is at the bottom.
Now you have access to the pins of the stackable headers
from below. That should be sufficient to tack the endmost
pin of each strip to keep the headers in place. Check that the
headers are flat against the PCB and adjust if needed.
Unplug it from the Uno to give better access to the remaining pins. Solder them, then refresh the end pins.
In this case, you will probably also need to solder a two-bythree pin stackable header block to the R3 header location on the
board, to pass those signals through to a board stacked above.
JP1 consists of a male header and jumper shunt. Fit the
shunt to the header, slot it into the PCB and solder its pins.
The shunt will keep the pins in place even if the plastic
shroud melts a little.
Finally, mount the output connector, CON1. We used a
two-way screw header, although you might prefer something
different depending on how you want to use the Power Supply.
Solder CON1 in place and then fit the PCB to the Uno.
Unless the Uno is new and unprogrammed, you should remove JP1, in case the existing sketch uses a different voltage
reference which could conflict with the 3.3V supply and
possibly damage it.
18
Software
There are two elements to the software of this project – the
first is the firmware that runs on the Uno. The second is the
computer application that interfaces with it. The Arduino
firmware ‘sketch’ is available for download from the February
2022 page of the PE website.
We’re assuming that you have some familiarity with the
Arduino IDE (integrated development environment), although
it isn’t too hard to figure out if you’re new to it. The IDE can be
downloaded for free from: https://www.arduino.cc/en/software
We’re using version 1.8.5, but practically any version
should be fine as the sketch is quite simple and doesn’t need
any special libraries.
With that installed, the next step is to load the Uno with
the firmware. Connect the Uno to a USB port, select the Uno’s
serial port from the Arduino IDE Tools menu, then ensure
that the Uno board is selected as the target (Tools -> Board
-> Arduino Uno). Press Upload, and once the sketch has
uploaded, insert JP1 and open the Serial Monitor at 115,200
baud (CTRL + SHIFT + M in Windows).
The sketch is fairly simple; it listens on the serial port for
commands like ‘V100’, ‘I50’ or ‘R1’ to set the voltage, current
or the relay state respectively. Since the communication
to and from the Power Supply is simply over a serial line,
we can also test the unit by typing commands into a serial
terminal program such as the Serial Monitor.
Such a simple scheme means that it can be manually
controlled if necessary. But it also means the Power Supply can be very easily controlled by other software; it
just has to send the correct commands and process the
(simple) responses.
Even if no 12V supply is available, the Uno itself will feed
around 4V to the VIN pin (and thus the Power Supply) for
testing. This is enough for us to do some simple, low-voltage
testing to check that the unit works as expected.
Testing
With the Power Supply plugged in via USB and the Serial
Monitor open, you should see a stream of lines showing
Practical Electronics | February | 2022
values prefixed by J, U and S. The J and U values should be
close to zero, but S will be around 200 (indicating around
4V at VIN). To test the relay, type ‘R1’ or ‘R0’ followed by
Enter. You should be able to hear it gently clicking on (after
R1) and off (after R0).
You can send commands to the digital potentiometer by
typing either V or I, followed by a number in the range of
0-256, then enter.
These numbers are the raw digital potentiometer values, as
all calibration is done on the host computer program. With
the relay on and both the V and I values set to non-zero values,
you should measure a voltage across the output terminals.
The J, U and S values are raw ADC readings (0-1023) of
the input and output voltage and current, taken several
times per second by the Uno. The J, U and S letters chosen
are to avoid confusion with the commands V and I. The
host program converts the 0-1023 readings to real-world
voltages and currents.
To test the output with a multimeter connected to CON1,
enter the command ‘R1’, followed by ‘V255’ and ‘I255’. This
should allow the output to get within about 0.7V of the VIN
supply voltage (limited by the inherent diode drop of the
emitter follower Q1).
Try some lower values for V (eg, V25) to check that the
output can be regulated to a lower level. That should give
you about 2V, while V37 should give about 3V and V13
should give about 1V. To check higher output voltages, you
will need to connect a 12-15V supply to the Arduino’s barrel
socket (but watch that upper voltage limit!).
For this testing, it would be a good idea to connect the
Uno to your computer via a USB Port Protector, like our
design from May 2019. That will mean that even if there is a
fault in your Power Supply that results in 12V or more being
fed back to the USB signal pins (which operate at 3.3V), it
shouldn’t damage your computer.
Processing app
We wrote the computer control app in the Processing language.
The Processing IDE is available on Windows, Mac and Linux
(including the Raspberry Pi). Using the IDE, you can run the
program or compile it to a standalone executable file for your
system. It’s based on Java, so you will probably need a Java
runtime environment (JRE) installed to run the program.
Processing can be downloaded for free from here:
https://processing.org/download/ (we used version 3.5.3).
There are no special libraries or add-ons needed. Open
the Processing sketch (a file with a .pde extension) using
the File menu and run it using the Ctrl-R key combination. A standalone executable can be created from File ->
Export Application.
Referring to Screen1, the actual and set voltages and currents are shown as bar graphs and in digital form at the top
of the window. A similar display below shows the actual
and set currents. Two large buttons are provided to turn the
output on and off. Below this are five preset buttons and a
button to access the calibrations page.
Along the bottom are displays for output power (P) and
transistor Q1 power (Q). These change colour as the power
increases. At bottom right is an indicator for the serial port.
The initial calibration of this software comes from our
prototype, so it should be roughly correct within component
tolerances. It’s easy to fine-tune it, though.
Using it
Press ‘+’ and ‘–’ on your keyboard to cycle through the available serial ports. When the Uno’s port is selected, press ‘s’ to
connect – if the connection is successful, the serial port will
turn green. If it does not connect, check that the port is not
in use by another program (eg, the Arduino Serial Monitor).
Practical Electronics | February | 2022
Parts list – A rduino- b ased Pow er Supply
1 double-sided PCB coded 18106201, 69mm x 54mm, available
from the PE PCB Service
1 Arduino Uno or compatible board
1 12V-15V 1A plugpack with 2.1mm DC plug to suit the Uno,
or a similar power source
1 2-way screw terminal (CON1)
1 6-way pin header (or stackable header, see text)
2 8-way pin headers (or stackable headers, see text)
1 10-way pin header (or stackable header, see text)
1 -22 finned heatsink (for 1) aycar
2
1 2- ay pin header and umper/shorting block ( 1)
1 2x3-way stackable header (optional; needed if another shield
to be attached above)
1
coil
reed relay (R 1) eg, ltronics 41 , aycar
4
supplies built with the Jaycar relay should set the
current limit no higher than 500mA to avoid damage to the
relay, due to this relay only having a 500mA switch rating
Semiconductors
1 MCP4251-5k 5kW dual digital potentiometer, DIP-16 (IC1)
igikey, ouser
1
4 2 dual op amp,
- ( 2) aycar
4 2
1 MCP6272 dual op amp, DIP-8 (IC3; LMC6482 can substitute)
1
1
transistor, -22 ( 1) aycar 22
1
4 1 m
transistor, - 2 ( 2) aycar 21 2
Capacitors
2 10µF 16V leaded X7R ceramic (or SMD M3216/1206-size)
8 100nF MKT (code 103, 100n or 0.1)
2 1nF MKT
(code 101, 1n or .001)
Resistors (all 1/4W 1% a ial metal film e cept here noted)
1 150kW (brown green black orange brown or brown green yellow brown)
1 100kW (brown black black orange brown or brown black yellow brown)
2 51kW (green brown black red brown or green brown orange brown)
4 10kW (brown black black red brown or brown black orange brown)
2 1kW
(brown black black brown brown or brown black red brown)
1 100W (brown black black black brown or brown black brown brown)
1 15mW 1% SMD, M6532/2512-size
NLINE S
4
The ‘s’ key has a toggle action, so it can also be used to
disconnect from the Power Supply.
Drag the arrows on the bar graphs with the mouse pointer
to set the voltage and current. The green arrow is the setpoint,
which corresponds to the leftmost digital display. The red
arrow and rightmost numbers correspond to the actual voltage and current values.
Click the ‘ON’ button to energise the relay and enable
the output. Note that the PSU reads the voltage before the
relay, so it will show a value even if the relay is off. The
‘ON’ button turns green when the relay is on. Use the ‘OFF’
button to shut it off.
Pressing any of the five preset buttons will load that preset
into the voltage and current setpoints. In Screen1, preset
three is loaded, so its button is highlighted.
Calibration
Pressing the ‘Calibration’ button will expand the window
to show the calibration values (see Screen2). Our copy of
Processing stalls for a few seconds when this happens; it is
a known bug which will hopefully be fixed in a later version. To close the Calibration view, click in the lower part
of the window.
Calibration is achieved in two stages. The first is to calibrate the voltage, which requires a voltmeter to be connected
across the Power Supply output (CON1).
Turn on the output and set the current to any value above
zero; this ensures the current limiting doesn’t kick in, which
would reduce the output voltage.
19
Screen1: our Processing application
provides slider controls for voltage and
current at the top, along with simple
switches to switch the output on and
off. Presets are displayed and selected
below, along with power information.
The incoming supply voltage can be
monitored in the title bar.
Screen2: the calibration procedure
is simple. You adjust the controls
until the multimeter reading matches
the voltage and current readings
shown at lower left, after which you
simply copy the parameters to the
configuration file.
Screen3: the ‘config.txt’ file contains
calibration parameters and up to
five named presets. You can also
set the serial port and whether the
application should automatically
connect to it at startup.
Next, adjust the voltage slider until
the multimeter reads as close to 6V as
possible. A 12V-15V DC external supply is ideal for doing this, but even 9V
DC would be sufficient. Note that the
two pointers may not line up to 6V. This
is expected, as we are still calibrating
the unit.
Now, write down the ‘VFACTOR’
and ‘UFACTOR’ values that are displayed in the bottom panel.
To calibrate the current side, turn the
output off and switch your multimeter
into a mode and range capable of reading up to 400mA. You will probably
need to change how the meters leads
are plugged in too.
Since your multimeter is effectively
forming a short circuit, you can include
a power resistor in series with the
multimeter leads for extra protection,
and to reduce dissipation in the output
transistor. For example, a 10W 5W resistor would work well.
Switch on the output and move the
current pointer up until the multimeter
reads 300mA, then note down the lower
(‘IFACTOR’ and ‘JFACTOR’) calibration values and turn the output off. Be
quick about this, as the transistor can
get quite hot during this stage.
Configuration
The calibration factors (along with
other settings) are stored in a file called
config.txt. This must be in the same
folder/directory as the .pde file for the
Processing sketch. Open it and add or
modify the four calibration factors you
wrote down. The result should look
like that shown in Screen3. Note that
the app does not care about upper or
lower case in these settings.
You’ll need to restart the program
to load the new configuration. If you
are running it from the Processing IDE
(rather than an exported app), you
should see that the calibrations are
loaded in the log window at the bottom, like this:
UFACTOR set
VFACTOR set
JFACTOR set
IFACTOR set
If these are not seen, then there may
be an error, and the values have not
been loaded.
End-on views of the sandwiched boards – the Power Supply shield on top; the
standard Arduino Uno (or compatible) below.
20
The configuration file also supports
some other options. SFACTOR is used
for calculating VIN; it is theoretically (within component tolerance) the
same divider as that for UFACTOR,
so you can use the UFACTOR value
here too. It’s only used for display
and dissipation calculations, so isn’t
as critical as the other values.
It is a simple scaling factor from the
raw ADC result (0-1023) to voltage,
so can also be adjusted by comparing with a multimeter reading. For
example, if the displayed supply
voltage is 1% too low, then increase
SFACTOR by 1%.
You can also set the default serial
port and whether or not it should
connect when you run the program
with the PORTNAME and CONNECT
parameters. The nominal supply
voltage can also be provided with
the VIN parameter.
The PORTNAME should be set
before the CONNECT line so that the
correct port is opened. The naming
scheme for ports will differ between
operating systems.
The five presets are set with PRESET1 to PRESET5, with the values
being voltage (in volts), current (in
amps) and name (cropped past seven
characters). These parameters are separated by commas.
Naturally, all configuration variables
have reasonable defaults in case the
configuration file is missing or empty.
We’ve left a few potential lines in the
file prefixed by an apostrophe; the
program ignores these lines until you
remove the apostrophes.
Usage
The Power Supply control app has
been designed so that using it should
be intuitive. We reckon that this way,
it is much easier to use than a supply
with physical controls like a few pots
and a small display.
It is by no means a high-accuracy
piece of test gear but still very handy
to have on your desk, especially since
it doesn’t take up much space.
We haven’t described how to fit it
into any sort of enclosure, as you really
can just use it as-is.
If you do want to enclose it, a UB3
Jiffy Box is the simplest and cheapest
option, and its generous size should
allow some airflow for cooling. A pair
of holes in each end will be sufficient
to run all the necessary leads.
Reproduced by arrangement with
SILICON CHIP magazine 2022.
www.siliconchip.com.au
Practical Electronics | February | 2022
|