Current version



Completed, ready for production (for EEZ H24005 model)

PCB manufactured

Yes (r5B12)

PCB assembled

Yes (r5B12)


Yes (Farnell, TME, Digikey, Mouser, RS)

File repository shield

(include Eagle, Gerber and BOM files)


TAPR v1.0


C4.1 (Collective Code Construction Contract)

Revision history

2017-02-23: r5B12

  • Encoder with switch mounted directly on the PCB (#20)
  • Power relay MCU controlled on the AUX PS module(#23)
  • Support for 3.5" Riverdi TFT touchscreen display (#24)
  • Micro SD card socket (#30)

2017-01-11: r4B2

  • +3.3V for buzzer (#16)
  • Reorganized capacitors (#17)
  • Wrong positions of DOUT pins on X14 push-in connector (#18)

2016-12-11: r4B1

  • Added isolated output on X14 that is replaced with 8 pin push-in connector (#8)
  • D33 is added to isolate RESET signal (#14)
  • Space for optional R33 is added and IC31 is replaced with 4 AND gate (#15)

2016-10-24: r3B5

  • Small adjustment of TFT display (holes and offset)
  • Removed header for optional WiFi module
  • Ethernet header (X18) is moved to the right (#5)
  • Fixed wrong silkscreen for all red LEDs (#6)
  • Arduino output is used to generate master sync for switching regulators (#7)
  • Additional Cout is added (#12)

2016-07-24: r3B4 (Version 2.0 on GitHub)

  • Corrected WATCHDOG functionality, added possibility to choose between RESET and Power off if MCU stalled
  • Optimized number of parts size and values, renumbered reference designators

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, etc.)
  • 2x4-pin 0.1" header for optional NRF24L01 WiFi module (eBay, etc.)
  • 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: Arduino shield assembled (PCB r5B12, top side)


Fig. 2: Arduino shield assembled (PCB r5B12, bottom side)


The Arduino shield has three important functions:

  • Carrying power output binding posts and remote sense inputs with possibility to connect two channels in series and parallel,
  • MCU programming and supervision of up to two Power boards and
  • Local user interface using TFT color touch-screen display

Additionally it offers the following functionality:

  • Miscellaneous LED indications
  • Soft-start/Stand-by control (hosted on Auxiliary power module)
  • Fan control (hosted on Auxiliary power module)
  • EEPROM storage
  • Real-time clock (RTC) with supercap back-up
  • Reset supervisor with watchdog
  • Beeper
  • Analog inputs for temperature readings
  • Ethernet communication
  • Incremental encoder with switch
  • Switching regulators frequency synchronizations
  • External digital trigger
  • Power relay (DOUT2) control (hosted on Auxiliary power module)
  • Optional audio amplifier and 20-pin FFC connector for 3.5” Riverdi TFT touch-screen displays

Binding posts section

This section is added to simplify wiring of power binding posts, remote sense inputs and serial and parallel connection of two channels without additional wires. Wiring of power outputs controlled by MCU reduce possibility that something goes wrong, like:

  • channel’s output voltage and current are not adjusted properly before connecting them in parallel,
  • power output polarities are mismatched or
  • serial wiring is performed while outputs are enabled that increase a risk of electric shock because of touching output when 50 V or more is present.

Output terminals are placed on the PCB in a way that direct mounting of 4 mm binding posts with standard spacing of 19.05 mm (750 mils) is possible. Power outputs are protected against reverse polarity and over-voltage spikes using TVS (ZD7, ZD10). Output capacitors (C87+R129, C89 and C92+R132, C94) required for both stable operation and lowered output PARD (ripple and noise) of Power modules are also placed here. For additional attenuation of PARD C86 and C96 (elco-polymer like OS-CON) are mounted in close proximity to the power output binding posts.


Fig. 3: Binding post section, relays and LED driver

Connecting two power outputs in series or parallel is accomplished with two 8 A relays (K_SER, K_PAR). Channel’s outputs are separated/isolated when both relays are inactive and J1, J4 and J5, J6 binding post pairs are used for Ch1 and Ch2 respectively. When wiring in series or parallel is selected only two central binding posts (J4, J5) is used. Such design is intentional to decrease possibility to bring higher voltage or current to loads already connected to channel’s outputs. In this way user need to physically move one or another wire to makes new wiring effective.

In addition, with such wiring of K_SER and K_PAR is avoided possibility of Power board’s damage due to some firmware bug that can active both modes concurrently. Following the wiring on the Fig. 4 it’s clear that Parallel mode is more “significant” – when it’s selected it leaves K_SER input contacts without power.


Obvious drawback of such wiring is disconnecting C86, C96 capacitors when power outputs are coupled. Therefore if lower PARD figure is still needed an external capacitor could be used.


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.
  • Coupling outputs in parallel 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 when coupling in parallel is selected

Of course, wiring of two channels can be done independently of built-in functionality. In this case above mentioned recommendations are also valid.

Channel’s outputs by default are “floating” in reference to the earth potential that is provided via separate 4 mm binding post J3. That gives us possibility to connect either negative or positive output to the earth potential.


Note that with positive output connected to the Earth you should not take any measurements with earth referenced instruments such as an oscilloscope. That will create a short circuit and excessive output current could damage connected instrument’s wiring.


Remote sense is performed with signal relays (K_S1, K_S2) and local sensing is selected when they are not active. Activation of remote sensing is indicated with LED (LED_S1, LED_S2) and two additional wires (or e.g. 2-wire shielded cable) has to be used to connect sensing inputs to the load. Caution is required that polarity is not mismatched. But, even if that is happened, a reverse polarity detection circuit on the Power board will limit output voltage and an alarm for the MCU will be triggered.

All relays are indirectly driven (Q26-Q29) by TLC5925 (IC18) that is a 16-channel constant current LED driver. Multiple outputs LED driver device is chosen because we’d like to control 12 LEDs used to indicate status of the following operations:

  • Power outputs is enabled (LED_O1, LED_O2, green, positioned between positive and negative binding posts)
  • Power outputs are coupled in series or parallel (LED_SP, red, positioned between Ch1 negative, and Ch2 positive binding posts)
  • CC mode (LED_CC1, LED_CC2, red, above push-in connector)
  • CV mode (LED_CV1, LED_CV2, yellow, above CC LED)
  • Remote sense is enabled (LED_S1, LED_S2, yellow, above remote sense input pins of the push-in connector)
  • Remote programming is enabled (LED_PROG1, LED_PROG2, red, above remote sense input pins of the push-in connector) and
  • Standby mode (LED_PWR, orange, between reset and power switch)

All allowable binding posts connections with LED indications and programming codes that can be used for controlling TLC5925 can be found here. Please note that TLC5925 is powered with 3.3 V while all connected loads (LEDs and relays) uses 5 V. This is not an issue for powering LEDs because its outputs are constant current (max. current is defined with R130 or ~12.1 mA for 1.8 KΩ).

Arduino board

The Arduino shield could work with any 3.3 V Arduino board. Currently that means with only one – Arduino Due (two :)), a 32-bit ARM Cortex-M3 based board that comes in “Mega” form-factor. Hopefully more board with the same form-factor will be available in the future from Arduino (e.g. .org STAR – OTTO) or other sources. Connection with Arduino board requires 8 connectors (Fig. 5): ICSP, DIGITAL, PWML, PWMH, ADCL, ADCH, COMM and POWER. They are located at the three board sides (with ICSP somewhere in the middle!) 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 Shield side.

Controlling two channels and all peripherals consumed 64 I/O pins (SPI lines on ICSP connector were not counted) leaving “only” six pin available for some future upgrades. Mosft of them (26) are assigned to the TFT LCD with touch-screen display. Using another display with high speed serial interface can potentially reduce that to only 2 or 3 pins (+ SPI). An optional 20-pin FFC connector (X20) for 3.5” Riverdi TFT touch-screen displays is already added on the PCB as possible migration path to the new more efficient local display solution.


Perhaps it’s worth mentioning that each additional Power board requires only four dedicated I/O pin for control. With existing pin mapping that give us room for additional one channels (of course that will also requires a new PCB layout). Newly introduced 16-bit I/O expander on the Power board (r5B12) could reduce this to only two I/O pin (+ SPI that is currently shared between all peripherals). Pin mapping of all used pins is described here.

Input power of the Arduino shield is +5 V supplied by X16 from Auxiliary power module. Despite the fact that Arduino Due is 3.3 V board, a 5 V is used for its powering via POWER header 5V pin (In can also comes from USB ports). An internal 3.3V LDO regulator is used for adjusting the working voltage. That LDO is not used for powering 3.3 V circuits on the Arduino shield. An additional regulator is used for that purpose (IC22).


Fig. 4: Digital isolators, 3.3V LDO and Arduino board connections

Digital isolators

The Arduino Shield can 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 dual rail source (positive output from one channel is connected to the another channel negative output). Digital channel isolation is accomplished using high speed Si86xx series digital isolators.

Two digital isolator are used per channel to isolate 7 outputs and 2 inputs (IC19, IC20 for Ch1 and IC21, IC23 for Ch2). They are represents SPI lines, chip selects for SPI peripherals on the Power board (ADC, DAC and I/O expander) and Master sync for switching regulators frequency synchronization. MISO line (Master-in-Slave-out) SPI line require additional control (ISOLATOR1_EN, ISOLATOR2_EN outputs) to select receiving of data from one channel at the time. Otherwise a data corruption will be inevitable.

Power board I/O connector

Two 26-pin headers (X13, X15) are used for connection with Power boards. Functions of the first ten pins follows the ICSP 10-pin header mapping carrying digital signals for SPI, chip selects and supply voltage for channel's side (B side in accordance to Silicon Labs datasheet) of the digital isolators. The rest of the connector is used for various analog signal and power lines as described in table below.



I/O name










Power board +5 V output




I/O expander chip select




DAC chip select








ADC chip select








I/O expander IRQ / ADC conversion end








Power board ground




Remote voltage programming




Power board ground




Power board temperature sensor (NTC)




Power board ground




Arduino board +3.3 V output




Master sync for switching regulator’s frequency synchornizations




Negative power output




Negative power output




Negative power output




Negative power output




Remote voltage sensing negative signal




Remote voltage sensing positive signal




Positive power output




Positive power output




Positive power output




Positive power output

I/O peripherals

SPI peripherals that are added to the Arduino shield (Fig. 5) provides functions that are not regularly available on the Arduino board. In fact for the Arduino Due that is partially true because its MCU has RTC (Real-time-clock) and even Ethernet. But as far as we know former cannot be easily powered from back-up source when main power is switched off, and later is not exposed to an external connector nor supported through Arduino libraries. On-board RTC (IC24) supply is backed up with 1 F Supercap (C112) that should be enough for running for a couple of weeks when the main power is not present.

Ethernet communication is accomplished using (IC26). In addition to them an EEPROM (IC25) is added since MCU on Arduino Due do not have it.

Fig. 5: Arduino shield peripherals


The TFT display (Fig. 6) has 3.2” diagonal size, 262K (18-bit) colors and 240 x 320 pixels (rotated horizontally!) that gives enough room to place concurrently many important information about both channels and system status and messages. Color coding could improve distinction between data of various importance. This display unfortunately is not available yet through major suppliers mentioned in BOM but it can be easily located on any major on-line shop (eBay, AliExpress, etc.) by searching for name TFT_320QVT. Additionally the search query could be further narrowed with its size (3.2 Inch), resolution (240 x 320) and name of the LCD controller (SSD1289). Newer version comes with another LCD controller (ILI9341) and PSU firmware supports both versions.

This display also comes with SD card slot that can be used as mass storage for e.g. data logging, user’s programs and data, etc.

The touch-screen controller that resides on the TFT color display could be connected to the same (hardware) SPI bus or to software emulated one using three additional I/O lines (TOUCH_SCLK, TOUCH_DIN, TOUCH_DOUT) that is defined with position for JP5, JP6 and JP7.

A few words about selection of SPI bus. It’s very common for devices with similar functionality and complexity as EEZ PSU that for communication with various peripherals an I2C bus is used. Devices with such interface are in general more cheaper, requires only two lines for communications (no SCLK and no dedicated chip select for each device is required!) and well supported with software libraries. I2C can be very beneficial for low MCUs with low I/O pin count. But that also in general means less processing power and memory that makes them unsuitable for firmware complexity we need. We already mentioned that selected Arduino board offers enough I/O ports for addressing 16-bit TFT LCD, various peripherals and at least two Power board (up to 3, or 4 if SPI is used for touch-screen controller). SPI bus offers more flexible device addressing and much faster communication that makes a whole system more responsive.

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


Not all peripherals requires SPI or any other mean of digital bus interfacing. Such examples are:

  • buzzer (SP1) that is driven with PWM output (via Q30),
  • analog inputs for temperature sensors (TEMP_ANALOG, NTC1, NTC2 inputs),
  • isolated analog input for temperature sensor (BATT_NTC, see Fig. 8),
  • TFT display backlight adjustment driven with PWM output (via Q31),
  • incremental encoder (ENC_A, ENC_B, see Fig. 8)
  • external digital trigger input (EXT_TRIG, see Fig. 8) and
  • power relay output (DOUT2)

SPI modes

Working with SPU peripherals require selection of correct mode 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 didn’t specify it clearly. We learned that if IC is not damaged or improperly connected but IC response is erratic, checking the used SPI mode is the first thing that should be done! If you are not sure what mode to use, the fastest way to establish meaningful communication is to simply select them one by one and monitor the results (i.e. the outputs are set correctly or returned data register content is equal to one that is set, etc.).

Remote communication

The EEZ PSU can communicate with external world using USB or Ethernet. The on-board Ethernet controller (IC26) that is already mentioned is only missing a RJ-45 modular jack for connecting LAN cable. Such connector is placed on the Auxiliary power module that is supposed to be mounted directly on the inner side of the enclosure’s rear panel. The similar thing is with USB-B connector – it’s located near RJ-45 for Ethernet and it’s not connected to the Arduino but directly to the Arduino Due USB programming port. A 5-pin to micro-USB cable as one shown on Fig. 7 is used for that purpose.


Fig. 7: Micro USB to 5-pin cable

Supply-voltage supervision, watchdog and reset

The TPS3705-33 (IC31) is used to improve overall reliability of digital control providing the following functions:

  • Supervising 3.3 V supply provided by IC22 (Fig. 5) and generate 200 ms RESET pulse on power up and power fail,
  • Provide “clean” (well defined) reset when manual reset tactile switch (SW3, Fig. 8) is used and
  • Generate reset if MCU due to hardware or firmware issue missed to send another WATCHDOG signal within 1 second.

The reset signal generated by IC31 is used also to immediately deactivate main power by pulling down control outputs (PWR_DIRECT, PWR_SSTART) of both triac on the Auxiliary power board via IC29 as additional precautionary measure against unexpected conditions. The same is with the power relay DOUT2 control.


Fig. 8: Reset supervision, master sync phase shifter and various non-SPI periperals

Special I/O

The Arduino shield has two special inputs that can be used for external control of the PSU. Both inputs are wired to the X12 8-pin push-in connector above Ch1 binding posts. The first, analog input can be used with 10 kΩ temperature sensor that is standard value for batteries that has temperature monitoring output. In addition to monitoring battery during fast charging it can be used to controlling PSU’s channels for different sources. The BAT_NTC output is digital output (popular 555 timer IC28 acts as a Voltage-to-Frequency converter) because it’s easier to isolate it while maintaining good accuracy then analog signal. For better linearity input resistor is not connected directly to the timer but a current mirror circuit is used (IC27). R177 is used to limit current in case that NTC input are incidentally shorted to the ground (if such fault condition last for prolonged period that could cause losing of PWRGOOD signal on the Ch1 when firmware will push a whole unit into standby mode). OK5 is used as an optical isolator.

Another input is pure digital and can be used for triggering various PSU’s functionality via external digital signal that can be connected e.g. to D.U.T. An MCU input is used for connecting such external signal but connection is not direct – that can easily induce MCU’s erratic behavior or even irreversible damage! Therefore MCU input is protected against over-voltage and reverse polarity conditions with D19 and pre-polarized ZD13. R161-R163 limits current to mentioned protection circuit and IC30 that behave as buffer and level-shifter. Finally R164 limits the current that can be drawn by MCU input. Thanks to level-shifting feature input signal could be anything between approx. 2.5 and 5 V.

DOUT line is opto-coupled (OK6) and protected (F1, ZD14) MCU output that can be used for triggering external devices.

Switching regulators frequency synchronization

The PSU have two switching pre-regulators which without synchronization will works with different switching frequency. That could increase possible EMI and can resulted in higher output ripple and noise. Due to that frequency synchronization can be employed (firmware option). When selected the “master clock” is generated by Arduino Due (SYNC_MASTER, Fig. 5) and it’s distributed to switching pre-regulators on the Power boards. Master signal (SYNC_IN) that arrives to Ch1 (SYNC1) and Ch2 (SYNC2) are intentionally inverted (IC32). Switching noise on channel’s outputs will be out of phase for 180o and that should decrease total noise energy especially when they are coupled in parallel.

PCB layout

A two layer PCB (220 x 74 mm) is designed to holds directly not only Arduino board but also TFT LCD, binding posts, LEDs, switches and plug-in connectors (created in Eagle, autorouter is not used). In that way the number of required cables for connecting with the rest of the system is only three. Power board connectors (X13, X15), power input (X16) and Ethernet (X18) are soldered on the top side of the board. Binding posts (including protective earth), LEDs, switches and push-in connectors are soldered on the bottom side.

Distance between PCB and enclosure’s front panel is 18 mm therefore selected binding posts cannot be connected directly to the connection points on the PCB. A screwed spacer sleeve mentioned in BOM has to be used.

Some parts are located in the area beneath Arduino board (e.g. RTC, or EEPROM) therefore they have to be soldered before Arduino is plugged in.


Fig. 9: PCB layout r5B12 (both sides)


For possible modifications and tweaking visit the Hacking area.


Joomla templates by a4joomla