Current version



Completed, ready for production

PCB manufactured

Yes (r1B9 08/2015, r2B6b 03/2016)

PCB assembled

Yes (r1B9 08/2015, r2B6b 03/2016)


Yes (Farnell, TME)

File repository shield

(include Eagle, Gerber and BOM files)


TAPR v1.0

Revision history

2016-06-14: r3B3

  • Removed suport for Mega2560 – only 3.3 V board such as Due (and hopefully soon STAR - OTTO) is supported
  • TFT touch screen rotated (landscape view) for housing in more compact (2U height) enclosure. Tested with both SSD1289 and ILI9341 display controllers
  • Reset supervisor and watchdog (TPS3705-33)
  • Power connector replaced with 10-pin IDC to carry master sync out
  • W5500 Ethernet controller
  • 10-pin IDC for channel's SPI bus replaced with 26-pin IDC that carry output power signals, remote sense, remote programming, temperature sensor and SMPS sync
  • Redesigned wiring of output serial/parallel connection
  • Ethernet RJ-45 connector replaced with 8-pin 0.1" header (see also new AUX PS board)
  • 2x5-pin 0.1" header for optional W5500 Ethernet module (eBay)
  • 2x4-pin 0.1" header for optional NRF24L01 Wifi module (eBay)
  • Added support for incremental encoder
  • 4 mm binding posts for remote sensing inputs replaced with 0.1" push-in connector

2016-04-06 r1B14 (Version 1.0 on github)

  • Added fan control (FAN_PWM, FAN_SENSE)
  • Power connector replaced with 6-pin IDC as on the AUX PS r4B41
  • Removed optional reset connector

2016-03-28 r1B13a

  • Change remote sense inputs position on X4

2016-03-27 r1B13

  • Fixed remote sense wiring
  • Output protection redesigned (TVS moved, SAR and MOVs removed)
  • Smaller footprint
  • Remote sense 4 mm banana binding posts replaced with compact "push-in" connectors
  • Digital trigger input (with buffer and level shifter) added
  • THT LEDs replaced with SMD counterparts (lightpipes are now required)

2015-12-07 r1B12b – First public release



Fig. 1: PSU enclosure with Arduino shield (second working prototype, front mask is still missing)


Table of contents

First try – an Arduino Leonardo compatible MCU board

The power supply becomes programmable when the Arduino Shield module is added. Although the Arduino shield as a concept was our first choice, we decided to make our own MCU board based on Arduino Leonardo design (Fig. 2). It has been chosen because it is built around Atmel ATmega32u4 that includes USB interface. That simplifies design when that important interface is supported. Trying to add MCU support based on Arduino was a natural choice for our project since it is completely open source hardware and software.

Other important features of our first MCU board was RTC, external EEPROM, Ethernet controller, beeper, 1-wire keypad (Fig. 3), monochrome 128 x 64 display (Fig. 3), two non-isolated SPI bus ports (5 V and 3.3 V logic) and of course two isolated required for communication with post-regulators. 5 V non-isolated SPI port mimicked 10-pin ICSP pinout that was used for initial MCU programming before USB became functional as a channel for uploading Arduino sketches. 3.3 V SPI port was intended for communication with external SD-card.


Fig. 2: Arduino Leonardo compatible MCU board (r2B32) (obsolete)


Fig. 3: 128 x 64 LCD graphic display and 4 x 4 keypad (obsolete)


Fig. 4: Binding posts PCB (r2B32) (obsolete)


Unfortunately we found pretty early that this module is inadequate for our project. The main obstacle is rather small Atmega32u4 memory capacity: 32 Kb of flash memory and 2.5 Kb of SRAM. That was barely enough to accomplish setting and monitoring voltage and current on two channels. Adding e.g. support for the Ethernet controller was not possible due to lack of flash memory space. 1-wire keypad concept (that was a separate PCB) also was not a good choice: it was prone to errors and inaccurate inputs.

Even if we put hardware obstacle aside one mechanical issue became apparent: we had three PCB: MCU, 4 x 4 keypad and Binding posts PCB (Fig. 4) that needs to be mounted on enclosure front panel with different mounting distance from it. That requires spacers of various length and keypad alone requires drilling of 20 holes that could increase manufacturing cost of the front panel.

Second try – the Arduino Shield with binding posts section

All perceived shortfalls has been taken in account during development of the next digital control board. We decided to design it as an Arduino Shield and become less dependent of memory but also MCU type that is used on some of the Arduino boards. We decide to step up from the Entry level boards (that is entry level indeed) to the level with the Enhanced Features. In this category we can find two boards with the same form factor but two completely different architecture. The first one is Mega2560 is a 8-bit, AVR powered by 5 V, and another one is Due, 32-bit, ARM powered by 3.3 V. Regardless of the obvious differences on hardware and software level (AVR and ARM have different command sets) we decided to support both. Both comes with much more memory then previously used Atmega32u4: on Mega we have on disposal 256 Kb of flash memory and 8 Kb of SRAM (that is not a great improvement in comparison to 2.5 Kb) while Due comes with 512 Kb of flash memory and 96 Kb of SRAM and much faster clock frequency: 84 MHz instead of 16 MHz on Mega and Leonardo variants.

Trying to make an Arduino shield that support both will makes it really multi-platform in the Arduino terms and in that way more attractive for broader audience. Hopefully Arduino team will offer even more powerful boards using the same form factor in the future and give us more room for adding new features. The software difference is currently well managed thanks to the Arduino IDE. Most of the time the same sketch could be used for both AVR and ARM, and programmer just need to select before compilation a target platform.

Level shifting

Hardware difference will require some electrical adaptation because powering Due with 5 V is not allowed and could damage the board. This issue is easily solved by providing voltage selector and two power sources: 3.3 V and 5 V. The former could be derived from the later by adding a LDO on the Shield powered by 5 V that comes from the Auxiliary power module.

But, this is just a part of the problem. Arduino board has to communicate with peripherals that is located on the Shield that have their own power requirements. For example if we decide that external EEPROM will be powered with 5 V that is fine for Mega I/O voltage levels but will be inappropriate for Due that can provide only 3.3 V on its outputs. On the other side if we decide to power it with 3.3 V that could be insufficient to successfully trigger Mega’s inputs. It become obvious that some sort of logic level shifting has to be deployed for proper support of the both board. Fig. 5 shows different communication scenarios (bidirectional, output only, input only) and various ICs and logic families that can be used as a logic level shifters.

Fig. 5: Logic level shifting scenarios


One IC in particular catches the eyes: SN74LVCC3245A, a octal bus transceiver with adjustable output voltage and 3-State outputs. It has two separate power inputs and adjustable output voltage has a really special meaning covering all imaginable combination between “A-side” and “B-side” within allowed voltages. That also include possibility to have the same voltage level on the both sides what cannot be found in most of the other level shifters. This is actually the case if we want that all peripherals are powered with 3.3 V and Due board is used.

Merging three into one

Three PCBs used in the first version are now merged into the single one. That was possible thanks to switching from LCD / 4 x 4 keypad combination to the TFT display (Fig. 6) that has touch-screen that not just replacing keypad as an input devices limited to 16 keys but also gives us a pointing device that can be used for simpler and more efficient navigation throughout various application features. The selected TFT display model price is very attractive and it could be easily find on many on-line shops by searching for name TFT_320QVT. Additionally the search query could be further narrowed with size (3.2 Inch), resolution (240 x 320) and LCD controller model (SSD1289).


Fig. 6: 3.2" Color TFT display with touch screen and SD-card socket


There is many other benefits that comes with such display:

  • Colors for highlighting important messages and display sections for better user experience
  • Simpler front panel that reduces manufacturing costs (no drilling for multiple keys is needed)
  • SD-card socket that removes requirement for an SPI extra 10-pin SPI connector
  • Lower overall cost then combination of separate LCD display and keypad

The only possible disadvantage of such device in comparison with previous LCD display is higher pinout count required for the connection. The LCD controller is a 16-bit device that use just for the data transfer 16 digital lines. Additional 8 will be required for the touch screen and SD-card control. Fortunately both Mega and Due offers more then enough I/O pins to satisfy that. When I/O requirements for the other peripherals has been taken into accounts we still have 15 I/O lines unused (See Arduino Shield pin mapping).


Fig. 7: Arduino Shield +BP (r1B9) top side without Arduino board attached


Fig. 8: Arduino Shield +BP (r1B9) top side with Mega2560R3 installed


Fig. 9: Arduino Shield +BP (r1B9) bottom side


The Arduino Sketch +BP module (BP stands for binding posts) after merging of three previously described boards has the following features:

  • Outputs and remote sense inputs protection using TVS
  • LED indications for output enable, remote sense and Stand-by mode
  • Power relays for making serial or parallel connection of two outputs
  • Signal relays for remote or local voltage sense
  • Connectors for hosting Arduino Mega/Due board
  • On-board 3.3 V / 1 A LDO powering all peripherals
  • Analog input for temperature sensor
  • Soft-start/Stand-by control for the Auxiliary power supply module
  • Level shifters for 3.3 V ↔ 5 V (3.3 V ↔ 3.3 V is also supported)
  • Digital isolators for two SPI ports for output channels control (Post-regulator module)
  • Buzzer
  • External EEPROM
  • Real-time clock (RTC) with supercap back-up
  • Ethernet controller
  • TFT color display with touch-screen
  • LED CV/CC mode indicators
  • Optional V/F (Voltage-to-Frequency) converters for isolated temperature sensors (NTCs) that can be used for battery temperature monitoring
  • r1B13: External digital trigger input with protection and level shifter

The schematic diagram is consists of five sheets that will be discussed in sections that follows.

Binding posts section

This section is added to simplify wiring of power outputs, remote sense inputs and serial and parallel connection of two channels without external wires. The is another maybe not so obvious advantage of such wiring: it does not leave a room for erroneous wiring and programming, e.g. that polarity are mismatched or that channels connected in parallel are programmed with different output voltages.

Output terminals and remote sense input terminals are protected against reverse polarity and over-voltage spikes using TVS (ZD1 – ZD4).


Fig. 10: Arduino Shield binding posts section


Serial connection is established through power relay K_SER while for parallel connection the K_PAR power relay is used. Both relays is rated for 8 A and should withstand 50 VDC switching without load connected. When driving serial or parallel relay the following things has to be taken into consideration:

  • Voltage and current has to be set to zero before channels are connected or disconnected. The easiest way to do that is to disable output (OE is off) but it's also recommended to also program output values to zero.
  • Parallel connection could follows only if programmed output voltages are the same on both channels
  • Optionally down-programmer circuit could be disconnected on one of the channels that are connected in parallel

Mentioned recommendations should be taken seriously otherwise it is possible to damage either the PSU and/or connected load. For example when we tested outputs connection in serial with connected load and OE was switched on when total voltage became higher then 60 V, the K_SER relay was irreparably damaged during disconnection! Contacts were simply melted down and left shorted.

Since separate power relays is used for outputs connection is serial and in parallel it is possible to activate it simultaneously by software. If that case the outputs of the both channels will become shorted that could be dangerous if e.g. over-current protections was not set. To avoid such situation a hardwired blockage is added (the Q4 mosfet) to inhibit parallel power relay (K_PAR) when serial power relay (K_SER) is activated.

Two tiny signal relays (K_S1, K_S2) are used to control voltage sense that could be local or remote. By default (when relay is not polarized) sense inputs are connected locally – to the power outputs. When load is remote and voltage accuracy is critical for the connected load, sense inputs become connected to a separate pair of binding posts.

All relays are controlled by TLC5925 that is a 16-channel constant current LED driver that is intentionally selected because we wants to add a LED indications of biding posts states and makes them in that way more obvious to the user. Therefore one LED is added above each of eight binding posts as shown on Fig. 9. When channel’s outputs are enabled a pair of green LEDs are illuminated. Remote sensing is backed with illumination of yellow LEDs. Connection of output channels in serial or parallel is also indicated thanks to bi-color LEDs used above channel one power outputs. In that case LEDs are illuminated in red.

All allowable binding posts connections with LED indications and programming codes that can be used for controlling TLC5926 can be found here.

Arduino board interface

Arduino Mega and Due have seven female headers used for interfacing with I/O pins, power, reset, etc. They are located at the three board sides and we learned that such arrangement is quite impractical when board has to be removed. A close attention is required to not bend one or more pins on the Arduino Sketch side. Interfacing with the Arduino board is done using SN74LVCC3245A as a level shifter. Five (IC2, IC3, IC4, IC5, IC7) are used for pins that will be programmed as digital outputs and an another one (IC8) is used for digital inputs. IC3 and IC5 are handling LCD 16-bit data bus and rest of the outputs controls various “chip selects”, SPI bus output signals (SCLK and MOSI) and similar signals.

Input level shifter (IC8) is passing SPI bus input (MISO) and interrupt requests from the installed peripherals. Pin mapping of all used pins is described here.


Fig. 11: Arduino board interface


Main power comes to the pin 5 V (MCU_POWER header) that is also applicable in the case of Due since it has on-board LDO to step down to the working 3.3 V. That is visible on an excerpt from the Arduino Due schematic shown in the fig. 12 (IC4 encircled in red).


Fig. 12: Arduino Due power section


Attentive reader who is familiar with Arduino boards will probably notice that something is missing on the first assembled version of the sketch (Fig. 7). The ICSP 6-pin header does not exist! That mistake was based on the naive presumption that because Mega and Due are sharing the same form factor they must have the same pin mapping. That is almost true, the only exception is SPI bus signals available on Mega (pin 50, 51, 52) are not connected on the Due. ICSP is primarily used for MCU programming using SPI bus but Arduino designers decide to make it as the only port for communication with SPI peripherals. Therefore all Due compatible shields have to communicate using 3.3 V logic levels but also should incorporate 6-pin female header if SPI programming supported by standard libraries is required.

We noticed that too lately, when Due board was attached for the first time on the shield. Fortunately with few cuts on Due and two wires the problem was solved and we could use Due for the firmware testing. This mistake is now corrected, as it is shown on the Fig. 13.


Fig. 13: Arduino shield PCB r1B9 and r1B12b with added ICSP pin header


Digital isolators

The Arduino Shield has to control two PSU channels that are electrically isolated by default and they have to stay isolated when are connected to the shield. That means that digital control signals cannot share the common ground. If such connection exists it could be even dangerous when e.g. channel outputs are connected in serial or when the PSU is used as a symmetrical source (positive output from one channel is connected to the another channel negative output). Digital channel isolation is accomplished using high speed digital isolators.


Fig. 14: SPI ports isolation


The SPI bus port pin mapping is compatible with the ICSP 10-pin header:


Pin No.














Not connected

I/O expander chip select




DAC chip select








ADC chip select








I/O expander IRQ / ADC conversion end










Eight lines in total has to be isolated for each channel and both input and output directions is needed. Six line isolators (IC9, IC12) are used for outputs and two line isolators (IC10, IC11) for input signals. MISO input require special attention. Used isolators are not 3-state what is a requirement for the MISO signal since only one device could send data to the MCU at the time. Lack of 3-state outputs on the isolators is fixed with additional buffer gate (IC10C, IC10D) that can provide 3-state output.

On-board peripherals

The SPI bus used for isolated communication with peripherals that resides on two PSU channels is also used for making connection with few other SPI peripherals located on the shield itself. They are added to “equalize” features on both Arduino board variants. EEPROM (IC15) and RTC (14) are added because Due is lacking former and Mega is lacking later. The RTC is also powered with a 1 F Supercap that should be enough for running for a couple of weeks when the main power is not present.

On top of that SPI Ethernet controller (IC16) is added and socket (LCD1) for hosting TFT display. Display controller use parallel 16-bit data bus, but touch screen controller also need SPI.


Fig. 15: On-board peripherals


Few other things that are directly connected to the MCU pins are also included:

  • Buzzer driven with digital output (via Q8)
  • Temperature sensor connected directly to an ADC input and
  • Display back light adjustment driven with PWM output (via Q9)

SPI modes

A few words about SPI modes of operation. Four modes are available and defined by serial clock (SCK or SCLK) polarity and phase. For example the Arduino IDE provides four data constants for them: SPI_MODE0, SPI_MODE1, SPI_MODE2 and SPI_MODE3. Selecting a right mode of operation could be frustrating if IC manufacturers missed to specify it. We learned that if IC is not damaged or improperly connected but IC is responding in a wrong way, checking SPI mode is the first thing that should be done. If you are not sure what to specify the easiest way is to simply select them one by one and see the results (i.e. the outputs are set correctly or returned data register content is equal to one that is set, etc.).

CC/CV indicators, load temperature sensing and external trigger

Channel output mode of operation is indicated using two LEDs: Yellow for constant voltage or CV (LED_CV1, LED_CV2) and red for constant current or CC mode (LED_CC1, LED_CC2). Most of the time the channel output will be in one of that two modes. But there is also the third mode that is called unregulated or UR when output is possibly under influence of both CV and CC control loops. This mode is indicated by switching off both LEDs.


Fig. 16: CC/CV indicators and optional temperature sensing


Finally the shield contains one optional circuit that could be used for isolated measurement of the outside temperature. That could be a battery NTC sensor used for monitoring battery during fast charging or discharging cycles. Temperature sensor inputs are located on 6-pin push-in connectors (X3, X4) that are located near the channel’s binding posts (J1, J2, J3, J5). Its output is analog, a variable resistance that depends of the temperature. It has to be isolated for the same reason that is mentioned for SPI buses: to avoid connection of their grounds to the same potential. Analog isolator circuit is not used here because it’s in general more complex or expensive for the same precision. Therefore the sensor output is first converted to a digital signal by mean of V/F (voltage-to-frequency) conversion using popular 555 timer. For better linearity NTC is not connected directly to the timer but a current mirror circuit is used (IC17, IC19). Timer output signal could be now digitally manipulated and it’s delivered to the MCU using opto-coupler (OK1, OK2).

An external digital trigger circuit is added as a mean of controlling the PSU from external process. This input has simple protection circuit against over-voltage (ZD5, D8) and reverse voltage (D9). Additional protection of MCU input is proveded with buffer (IC21 together with R42 and R43). Selected buffer also offers level-shifting therefore trigger signal could comes from circuits with different logic level (e.g. 1.8 translated to 3.3 V or 3.3 to 5 V).

PCB layout

A two layer PCB (175 x 105 mm) is used with clearly separated analog (output protections, relays and V/F converters) and digital section. Binding posts (five of them) can be directly mounted on the PCB from the PCB rear side (that is enclosure front side).

The Ethernet RJ-45 jack is also hosted on the PCB. Therefore additional short (30 cm) adapter cable is required to make it reachable from the enclosure rear panel.

The Arduino is positioned in the way that neither part on the shield or Arduino board touch each other.


Fig. 17: PCB layout (both layer)


Fig. 18: PCB layout (top layer)


Fig. 19: PCB layout (bottom layer)


Possible improvements and further development

This shield could be further developed in various ways without leaving used Arduino platform. Here is some ideas that should be feasible within existing PCB dimensions:

  • Add support for more output channels; at least one to have under control some kind of “aux” low voltage/high current output e.g. 0 – 8 V / 0 – 5 A
  • Add automatic recognition of board using Arduino IOREF pin (jumper JP2 could stay on the PCB if one don’t want to solder components required for IOREF monitoring)
  • Replace or complement the Ethernet with wireless (e.g. using nRF24L01+)
  • Add two more signal relays to cover remote sensing case when two channels are connected in serial
  • Rearrange binding posts to have in one row power outputs and in another remote sense inputs that uses much smaller connectors
  • Somehow combine LED indicators from the BP section with CC/CV indicators
  • Dedicate more inputs for NTC temperature sensors
  • Add digitally isolated outputs for e.g. relays control
  • Add isolated and clamped analog input (i.e. 0 – 2.5 V) for direct control of output voltage or current. That can be used in scenario when e.g. the channel output acts as an pre-regulator that track output voltage of the connected D.U.T.

The shield could be sized down both physically and “logically/electrically” when budget is tighter. If smaller PCB is required a complete BP section that contains output protections and convenient connection between two channels without extra wires could be removed and cut PCB size in half. “Electrical” reduction will decrease circuit complexity and parts count. That can be done by removing support for the Mega board when all level shifting logic (IC2, IC3, IC4, IC5, IC7 and IC8) are not needed anymore.

More radical intervention could be giving up from Arduino board/shield concept and incorporate MCU on the PCB.

Other possibility is to move from Arduino to some other open hardware platform such as BeagleBone Black or not so open Raspberry PI. Such boards comes with much more processing and memory capabilities that whole operating system such as Linux could be run. On top of that they comes with Ethernet port and multiple USB ports. Former removes need for Ethernet controller that is currently deployed on the shield and later opens new possibility for communication with PSU’s channels. For example, instead of 10-pin flat cable connection that is limited to max. 30 cm it’s possible to use 4-wire USB cable that is terminated on the other side with USB-to-SPI bridge such as MCP2210. That could also simplify isolation: instead of 8 signals that requires two digital isolators it is possible to use only one USB isolator such as ADuM3160.


One of the above mentioned shield variant is already designed. More info


Current version



Completed, ready for production

PCB manufactured

Yes (r4B43a 08/2015)

PCB assembled

Yes (r4B43a 08/2015)


Yes (Farnell, TME)

File repository

(include Eagle, Gerber, BOM files and SPICE simulations)


TAPR v1.0

Revision history

2016-03-27 r4B45

  • Battery NTC V/F input replaced with SET_100% output required for SMPS pre-regulator based on LTC3864

2015-11-10 r4B44 – first public release


Fig. 1: Post-regulator module assembled (r4B43a)


The post-regulator module is inspired by exceptional work of Leonid Ivanovitch that is presented on the EEVblog forum. Major difference between Leonid’s work and this design is based in the selection of main transformer’s multiple tap secondary winding versus single tap. Lack of multiple tap requires pre-regulator as a mean of lowering the input and output voltage on the post-regulator.

The connection between pre-regulator and post-regulator module is accomplished with a single 18-pin connector (X2) that is used to deliver variable power output (few volts above programmed output voltage), power mosfet bias voltage output, bias power outputs for analog and digital sections. Post-regulator output voltage is also present on this connector (X2-9) as an input that is used for programming pre-regulator output voltage.

Despite the fact that four pins are used for power lines that even in case of 5 A setup put reasonable load of 800 mA per pin it’s highly recommended to use known brand connector with specified max. current. It’s quite possible that some of low-cost variants could not safely carry such load for extended period of time that can results in mechanical damages such as isolation melting due to overheating.


Fig. 2: CV and CC control loops, serial mosfet driver, OE, DP

Series/pass element and control loops

The N-channel mosfet (Q1) connected as common drain is used as series regulator. There is many possible mosfets that could be used for Q1 and it has to be carefully selected to not compromise its SOA for the desired output voltage and current range. Q1 requires for normal operation a bias voltage applied on its gate that is few volts above drain voltage. Usually for that purpose an additional bias power source derived from auxiliary secondary transformer winding or charge pump is employed. The output of such power source is floating on top of drain voltage since its negative output is connected to the drain voltage ensuring constant difference between gate and drain potential regardless of the input voltage (applied to the drain). Instead of dedicated gate bias supply we are using rectified voltage from main transformer that are present on the pre-regulator’s input. The pre-regulator that resides between that voltage and Q1 drain (post-regulator input) ensure that regardless of programmed output voltage. For example if 40 VAC main transformer is used, rectified voltage on the pre-regulator’s input will be max. 57 V and pre-regulator output could be 3 to 43 V depending of programmed output voltage. That gives us difference from 54 to 14 V that could be used for gate bias. That difference is not constant and that put some more load on Q4 but it’s dimensioned for that and for heat dissipation a small cooper area of the top PCB layer is used. The zener diode ZD1 insures that gate-source voltage (Vgs) stays within allowed limits (i.e. below 20 V).

Diode D1 protects Q4 from B-E junction breakdown and D2 (the same is with D4) is added to prevent current flowing from the external source when output is switched off.

Output voltage on Q1 that is controlled with two control loops: Constant Voltage (IC1) and Constant Current (IC2, IC3) and in general only one of them could be active at the time. Diodes D5 and D7 ensures that output signal from one control loop do not affect the other loop functionality. Q9 is common base voltage amplifier stage and R8 and R18 forms local negative feedback.

Both control loops are using the same precise voltage reference REF5025 (IC7, Fig. 7) for programming output voltage and current. The voltage reference output is 2.5 V. Therefore gain of both control loop has to be adjusted in a way that output range returns positive value between zero and 2.5 V. That is accomplished by selecting feedback loop resistors of IC1B and IC3 that are connected as differential amplifiers. For example if we’d like to have output voltage in the range from zero to 50 V the IC1B gain has to be 2.5 / 50 = 0.05 (actually the output signal has to be attenuated 20 times).

Output voltage could be “sensed” locally or remotely. In former case inputs X1-3 and X1-4 has to be connected to the power output pins (X1-1, X1-2) and in the later case such connection is accomplished on the load’s input terminals using twisted pair cable. Remote sensing cable could be also shielded when cable shield has to the connected on the protective earth terminal only on the one end to avoid creation of the ground loop.

The output current is measured as a voltage drop on the current sense resistor (R40) and current range can be also defined by changing the value of that resistor – higher value will produce the higher voltage drop for the same current and therefore IC3 gain could be smaller. In that way we could improve precision of the measured value, but from other side using the value that is too high could produce excessive heating of the current sense resistor since the dissipated power rise with the square of the current.

It is important to take into account that heating of the current sense resistor decrease accuracy because its resistance is temperature dependent. Choosing a resistor with low TCR while keeping dissipation low gives the best results.

With selected value of 20 mΩ and max. current of 5 A dissipated power will be only 100 mW that is acceptable for selected power rate of 2 W. Tables in the lower left corner on Fig. 2 contains required values for feedback loop resistors for the following ranges:



Required gain

0 – 30 V

0.8333 (5/6)

0 – 40 V

0.625 (5/8)

0 – 50 V

0.05 (1/20)

0 – 3.12 A

40 (R40 = 20 mΩ)

0 – 5 A

25 (R40 = 20 mΩ)


Since voltage and current are programmed separately and combination of output current and voltage is possible that give us in this case six variations. That also mean that dual channel power supply if required could be build with two different output ranges (e.g. 0 – 40 V / 5 A and 0 – 50 V / 3.12 A).

Output enable (OE) and down-programmer (DP)

Two important functionality that are located on the post-regulator module are output enable and down-programmer. Output enable is a two-state circuit for enabling power output and quick disabling it in the case of emergency (e.g. connected load is start to overheat because of erroneously programmed voltage and current levels). Output enable circuit consists of Q7, Q8 current mirror controlled by Q10 and Q11 (Fig. 6) that regulate bias voltage that is delivered by Q4 to Q1.

The down-programmer circuit is built using Q5, Q2 that are controlled by Q6, Q12 (Fig. 6). It’s improving programming output voltage fall time (hence the name down programmer).

Thanks to it the fall time (from previously programmed higher voltage to the newly programmed lower voltage) could be for the order of magnitude shorter in comparison with power supplies that do not have regardless of how small is power supply’s output capacitor since it could actively sink power stored in mentioned power supply’s output capacitor (in our case C1, C2) but also input capacitor that could exist on the connected load or device.

Fig. 3 and Fig. 4 shows the difference in programmed output step from 20 to 0 V with and without down-programmer circuit activated.

Fig. 3: Output voltage with DP enabled


Fig. 4: Output voltage with DP disabled

The common practice is that down-programmer follows the state of the output enable circuit: it is enabled when output is enabled and vice versa. The down-programmer circuit of this post-regulator module could be controlled independently if required and its default state is on, therefore DP control circuit will be disabled when 5 V is applied to its input (SET_DP signal).

The down-programmer has a finite sinking capability that is set to approx. 300 mA (limited with R2). That starts to be visible when device with huge capacitor (or such capacitor alone) is connected to the post-regulator output. Fig. shows fall time of ~150 ms with 1 000 μF capacitor charged to 50 V.


Fig. 5: Output voltage fall time from 50 to 0 V with 1 000 μF

CC/CV comparators

Power supply when output is enabled could work in one of the following mode of operation:

  • CV (constant voltage) when voltage control loop (IC1) is controlling the output. This mode is assumed as default for power supplies with series regulator element.
  • CC (constant current) when current control loop (IC2, IC3) take over output control and
  • UR (unregulated or not regulated) when neither (or even both) of above mentioned control loop are controlling the output. Unregulated state can occur when the input voltage is not high enough, for example, due to decreased mains voltage, or external voltage is applied to the output that is above the programmed value.

CC and CV circuits (Fig. 6) uses “window comparators” that requires two comparators to detect lower and upper voltage level. CV signal is generated by comparing U_SERVO output from IC1A using IC4B, IC4A as window comparator. In the same fashion CC signal use I_SERVO output from IC2 and IC4D, IC4C comparators. Generated signals are level shifted for TTL inputs (R53, R55 and R60, R62 voltage dividers). They could be also optionally buffered for driving LEDs using small signal mosfets Q13, Q14.


Fig. 6: CC/CV comparators and optional manual control

Output programming

Post-regulator is an analog circuit controlled by control loops that are also analog. Therefore any function that we want to accomplish digitally using e.g. MCU will require some kind of signal conversion. For that purpose the following three devices are added on board (see Fig. 7):

  • DAC8552 dual channel 16-bit Digital to analog converter (IC6),
  • ADS1120 15-bit delta-sigma (ΔΣ) analog to digital converter (IC8) and
  • MCP23S08 8-bit I/O expander (IC5)

IMPORTANT: All digital devices are powered with 5 V therefore they cannot be directly connected to the Arduino Due (or any other 3.3 V MCU board). Also if more then one post-regulator modules wants to be connected to the single MCU board their SPI buses (X7 10-pin connector) must be isolated from each other even if used MCU board is capable of working with 5 V logic levels.

Digital to analog converter (DAC)

DAC device is used to provide the control voltage and current for the power supply. Using a SPI bus the user communicates to the DAC to program the new voltage at the DAC outputs (U_SET and I_SET). Also incorporated into the device is a power-on reset circuit which ensures that the DAC outputs power up at zero-scale and remain there until a valid write takes place.

The range of voltage the DAC can output is determined by the voltages at its reference pin (Vref) that is connected to the precision voltage reference of +2.5 V (IC7).

Important parameter that is used to determine DAC speed is settling time that represents the elapsed time from input code application until the output arrives at and remains within a specified error band around the final value. In our case it is max. 10 μs. Another factor is how complex and how much time require DAC channel programming. For this device it is accomplished by sending 24-bit stream (first byte represents command/register selection and remaining two 16-bit value that will be converted into analog voltage). SPI clock frequency used for transferring 24-bit value could go up to 30 MHz (!). Mentioned characteristics of the DAC provides enough margin to use it efficiently for the power supply programming where is typical that new output value is set in tens of milliseconds (that also include execution time of MCU code used for programming).

Analog to digital converter (ADC)

ADC is equipped with four channel input multiplexer and can accomplish up to 2 000 sampling per seconds. Its SPI clock is 4.096 MHz (4.5 MHz max). It is used to measure voltage and current control loops levels (U_MON, I_MON) but also DAC outputs (U_SET, I_SET). Selected ADC is 16-bit bipolar, but for our application only positive half of the full scale that represents only (unipolar) 15-bit. It also with internal 2.048 V voltage reference and many other interesting features that are not used in this project.

In contrast to DAC, the ADC requires bidirectional communication with the MCU. ADC’s output is used to transfer results of data acquisition at the end of each initiated measurement. For that purpose DOUT/DRDY output is used that is connected to MISO line. That output could be also used to notify SPI master (MCU) that data acquisition cycle on the selected input (one of four) is finished and that data are ready. Another possibility that is used in this design is deploying of dedicated DRDY output as a mean of notification. For more flexibility JP1 section is added which determine how DRDY will be used: directly by MCU or indirectly as state of the I/O expander’s bit 0. In the current firmware version the later method is used. Therefore JP1 require two jumpers on positions 1-2 and 3-4.


Fig. 7: Voltage reference, I/O expander, ADC and DAC

8-bit I/O expander

I/O expander is used to minimize number of required signal lines between post-regulator and MCU. In this way cable and connector’s pin numbers is reduced to 10 (that include 5 V and ground for supplying digital isolators) while total number of required digital isolator’s lines became 8 (6 input and 2 output lines). I/O lines are used in the following manner:




I/O name







Generate MCU interrupt triggered by ADC DRDY or other I/O expander’s inputs





Enable or disable down programmer circuit





CC (constant current) mode of operation is active





Heatsink or transformer temperature presented as frequency.





If SMPS pre-regulator is used this signal controls so-called 100% duty cycle mode when switching mosfet is in continuous conducting mode. When active no high-frequency noise is presented that improve output ripply and noise figure (PARD).





CV (constant voltage) mode of operation is active





Power good input received from the pre-regulator module





Enable or disable power output


Some of the starting requirements for this project was resolution of 10 mV and 10 mA and output range of up to 50 V and up to 5 A. Mentioned requirements defines also resolution of digital devices required for programming and monitoring output voltage and current. For 50 V range we need at least 5 000 programming steps. Therefore DAC and ADC resolution has to be 13-bit or higher to provide 8 192 or more combinations (12-bit gives as only 4 096 possible combinations).

Quest for the proper DAC and ADC devices included interface selection, speed, availability (no exotic sources) and, of course the cost. Above mentioned devices used in the post-regulator provides decent price/performance for such kind of project and with 16-bit programming resolution and 15-bit measuring resolution theoretically the following precision could be achieved:



16-bit programming

15-bit measurement

0 – 30 V

0.457 mV

0.916 mV

0 – 40 V

610 mV

1.22 mV

0 – 50 V

763 mV

1.53 mV

0 – 3.12 A

0.0476 mA

0.0952 mA

0 – 4.16 A

0.0636 mA

0.127 mA

0 – 5 A

0.0763 mA

0.153 mA

Optional manual control

Despite the fact that the power supply is intended to work with MCU for programming and monitoring, with few additional components it is possible to accomplish basic control manually. The manual control should simplify testing in the early stage when digital control such as Arduino shield is still not available.

Manual control of output voltage and current is possible using two additional multi-turn potentiometers (one for each function connected to the X3, as shown on Fig. 6) and one or two toggle switches for enabling power output (connected to the X4) and disabling down-programmer (X5).

Additionally it’s possible to connect LEDs for indication of the CV and CC mode (X6), OE (X4) and DP (X5) status.

PCB layout

PCB layout shown on Fig. 8 follows includes all mandatory and optional parts from schematics shown on Fig. 2, 6 and 7. Its design is influenced with some conclusions from discussion started here. Single ground plane is used under both analog and digital section that are located on two separate part of the board and special attention is taken to keep away digital from analog signals. Power mosfets Q1 and Q2 that are two only THT components are positioned on the same side on which the external heatsink has to be mounted. Power positive and negative lines are traced in close proximity with removed solder mask as it is shown on Fig. 9. That allows depositing of additional solder that makes power traces capable of carrying higher currents. Multiple vias that are used for power lines interconnection between top and bottom layer are also without solder mask for the same purpose. The PCB has 4 mounting holes on each corner with inner diameter of 3.2 mm for firm fixture.


Fig. 8: PCB layout (both sides, top, bottom)


Fig. 9: PCB bottom side (r4B43a)

SPICE model

zip LTspice EEZ PSU model 0.1 HOT

LTspice model of mosfet pre-regulator and post-regulator with CC and CV loops, OE and DP circuits. CC/CV indications are not

License GNU GPLv3 link_extern Author;This email address is being protected from spambots. You need JavaScript enabled to view it. WebsiteWebsite link_extern DateMonday, 11 January 2016 11:32 Language  English File Size 170.91 KB Download 1,007 Download
zip TINA post-regulator model 0.1 HOT

TINA-TI model of mosfet post-regulator CV loop, OE and DP circuits.

License GNU GPLv3 link_extern Author;This email address is being protected from spambots. You need JavaScript enabled to view it. WebsiteWebsite link_extern DateMonday, 11 January 2016 11:44 Language  English File Size 8.71 KB Download 782 Download

Possible improvements and further development

  • DAC is currently connected to the same 5 V power supply that is used for the ADC and I/O expander. No separate analog and digital ground plane exists. According to the DAC8552 datasheet (pg. 20) its GND ideally would be connected directly to an analog ground plane that is separate from the ground connection for the digital components until they are connected at the power entry point (X2 in our case). Therefore some ground plane split could be introduced. As with the GND connection Vdd should be connected to a positive power-supply plane or trace that is separate from the connection for digital logic until they are connected at the power entry point.
  • Precise current measurement especially below 100 mA could make the power supply more useful when experimenting with low consumption circuits designed for battery operation. For that one or more current sense resistors could be introduced with selection that is based on the programmed max. current value. For resistor selection relays or mosfets could be used.
  • Currently post-regulator together with pre-regulator board have to be mounted with one side touching the read panel. That requires assembly of few cables that leads from connectors X1, X7 and optionally X8 to the Arduino Shield mounted on inner side of the front panel. Choosing another enclosure such as Galaxy Maggiorato 2U that has sides that can be used as a heatsink both pre- and post-regulator board could be mounted differently and rearranging of mentioned connectors would remove requirement for any extra cables. That requires also intervention on the Arduino shield board side but the end result will be simpler assembly and better usage of enclosure space so that for the same power rating a smaller enclosure can be used. The auxiliary power supply board in that case could be relocated somewhere on to the inner side of the rear panel.



Current version



Completed, when used with toroidal main transformer and higher loads a forced cooling of enclosure’s interior is required

PCB manufactured

Yes (r3B3a)

PCB assembled

Yes (r3B3a)


Yes (Farnell, TME)

File repository

(include Eagle, Gerber and BOM files)


TAPR v1.0


Fig. 1: Post-regulator module assembled (r3B3a)


The post-regulator module contains circuits for conditioning all input voltages required for the post-regulator module. It can be separated in two sections: “power” part (Fig. 2) and “biasing” part (Fig. 6)

Power pre-regulator

The power pre-regulator helps in keeping power dissipation of the post-regulator’s pass element within safe limits. That is accomplished by delivering output voltage that is only few volts higher then programmed level that appear at the post-regulator’s output. For example if output voltage is set to 10 V, the power pre-regulator output should be in average between 12 to 14 V depending of the load. Thanks to that total dissipation is limited to only few watts instead of tens of watts that will require much bigger heatsink or forced cooling that continuously works (and make additional unnecessary noise).



Fig. 2: Phase controlled mosfet pre-regulator

As power pre-regulator is used circuit presented here by EEVblog member blackdog. Mosfet Q2 is used as a switch to charge and keep capacitor’s C2 voltage few volts over programmed output. Tracking of output voltage is accomplish with Q1 and P1 can be used to set voltage difference. It’s also possible to replace it with Zener diode of e.g. 3 to 3.9 V. The difference has to be set in accordance with desired max. current. Smaller difference will further improve (decrease) power dissipation on the post-regulator side but if it’s too small a higher load current will cause post-regulator’s output ripple that goes below programmed output voltage level preventing post-regulator to deliver desired voltage.

Fig. 3 and Fig. 4 shows how pre-regulator (cyan trace) and post-regulator (yellow trace) outputs correlate with connected load of 1 A and 4.8 A. In later case is visible that pre-regulator is close to programmed output voltage and that is achieved experimentally by setting value of P1 to 240 Kohm. For model with max. output current of 3.12 A it can be set to ~ 80 Kohm (78.8 Kohm fixed value can be used) and that voltage difference remains preserved regardless of connected load.

Also note that bias voltage (magenta trace) stays almost unchanged and well above pre-regulator output voltage that is required for normal operation of N-Chanel mosfet used as pass element in the post-regulator.




Fig. 3: Voltage difference with 1 A load

An example of pre-regulator’s output ripple is shown on Fig. 5 (cyan trace) with corresponding Q3 gate control signal while delivering 3 A. Despite of it huge value (~ 2.5 V) it can be easily flatten out because of its low frequency.


Fig. 4: Voltage difference with 4.8 A load


Fig. 5: Pre-regulator output ripple (Vout = 50 V, Iout = 3 A, C3 = 560 pF)

Q2 switching time (Fig. 5 blue trace) is controlled by C3. The switching has to be synchronized with AC mains voltage that is provided using D1 and D2 that are connected to AC input from main transformer secondary coil.

Bias power supply

The bias power supply has two stages: high voltage SMPS pre-regulator and low voltage LDO’s for final regulation. The LM5574 (IC3) buck regulator from the TI Simple switcher family is in the core of the bias pre-regulator and has integrated power mosfet that is rated for output current of up to 500 mA while allowed input voltage could be up to +75 V. Principally it works like LM25575 on the auxiliary power supply with one exception – an coupled inductor TR1 is used to generate both positive and negative voltage. Pre-regulator feedback loop is very simple and derived from R22, R27 voltage divider that cannot guarantee good load regulation what in our case is really not important since final regulation is determined with LDO’s that follows. For that reason pre-regulator’s positive output is set to ~11.6 V what will generate at least -10.5 V on negative rail with connected load (post-regulator’s operational amplifiers).

IC1, IC2, and IC4 provide final regulated outputs of +5 V and -5 V for linear circuits and +5 V for digital circuits of the post-regulator module. The LP2951 is selected because it also provide “Power good” indication (ERROR output) that is used for checking power lines “health”. The MCU will not enable output when that signal is low.


Optional circuits

Fig. 6: Bias supply, sync isolator and temperature V/F converter

Two optional circuits are also added to the pre-regulator module: bias pre-regulator sync isolator and V/F (voltage-to-frequency) converter (IC6) used for channel’s related temperature measurement (e.g. of the output heatsink).

Switching frequency synchronization

LM5574 and LM25575 used on auxiliary power supply module have SYNC pin that can be used for switching frequency synchronization between multiple devices. Synchronization could be beneficial in suppressing undesirable sub-harmonic so-called beat frequencies and EMI effects. If multiple SMPS nodes shares same ground sync signal isolation is not required that is not our case. Therefore an single channel digital isolator (IC5) is used and two of them is enough to provide isolation between three devices. The SMPS controller with the highest programmed clock frequency will serve as the master and control the switching frequency of the all the devices with lower oscillator frequency.

One possible scenario is presented on Fig. 7. Connection between modules is accomplished with 3-wire cable (+5 V, SYNC and GND). One of the LM5574 on pre-regulator module is promoted to sync master and its RT or R24 value is set to 30 Kohm. Slaves’ frequency should not be too low otherwise erratic behavior is possible (not lower then 25 % of the frequency set on the sync master) therefore 33 or 36 Kohm could be used to set “free-running” frequency (without sync deployed).


Please note that SMPS controller (LM25575) on the Auxiliary power supply module cannot be master because it cannot provide isolated signal.

Fig. 7: Switching frequency synchronization

V/F converter for temperature measurement

Monitoring temperature of the heatsink on which regulation elements of both pre-regulator and post-regulator modules are mounted is of the paramount importance if the power supply has to continuously deliver high currents (2 A and above). For temperature measurement an NTC is used which resistance depends of surrounding temperature. That value is analog and if we want to monitor it digitally an A/D conversion device is required.

The simplest way to achieve that is to use some of MCU’s ADC inputs directly. More complex way is to use external ADC device as in case of measuring programmed voltage and current on the post-regulator module. That will require additional analog inputs or dedicated ADC device. Here added V/F converter is a simple way to “digitize” analog value by generating signal which frequency vary with NTC value. Resulting frequency is then possible to measure with the MCU. Such solution offers flexibility because it is not dependent of a MCU type used (if it has ADC inputs or not) and also do not require additional analog input on dedicated ADC.

Voltage (that is set by NTC’s resistance that depends of temperature) to frequency conversion is achieved using popular 555 timer device. It’s RC constant is defined by C26 and external 10 Kohm NTC and set to generate ~100 Hz per degree Celsius for temperatures over 25 oC. Output signal is delivered to one of the digital input of the I/O Expander located on the post-regulator module.

PCB layout

The PCB is designed to withstand up to 50 V and up to 5 A. It also provides place for an additional switching mosfet (Q1) if one wants to remove some load from the Q2. Please note that such configuration is not tested. This PCB also allows two options for the main capacitor (C3) – single Ø35 mm or three Ø22 mm capacitors.


Fig. 8: PCB layout (both sides, top, bottom)

Possible improvements and further development

  • Replace bridge rectifier with circuit using ideal diode bridge controller such as LT4320. That should further improve efficiency especially for 5 A model when power dissipation on rectifier diodes could goes above 7 W.