DIY programmable (SCPI) bench power supply

Bridging the gap between professional and DIY/hobbyist bench power supply

Public Chat
Similar projects worth following
Open source project of complete modular dual channel bench power supply. It started with idea to build decent device that includes BOTH hardware and software features that can be found in professional equipment. Also it would be simple or at least modular enough to be understandable without huge effort. Thanks to that its hardware parts could be easily build “as is” by anyone who has intermediate soldering skills or can be modified or partially reused in similar project.

The software part is a firmware written using Arduino IDE and it’s supporting both AVR (Mega2560) and ARM platform (Due). Modified, it could also be used in other projects. It comes with SCPI command set that is obligatory feature of serious commercial equipment and its usually behind the marketing word “programmable”. Thanks to SCPI it’s possible to remotely program and monitor power supply. There is many commercial software suites that allows communication with various laboratory equipment, and some manufacturers such as Keysight offers entry level solution for free (e.g. Command Expert).

This project is now in mature phase leaving many mistakes, misconceptions and dead-ends behind it. I’d like to present here a current status and from now on new ideas and progress will be presented asking of course for your opinions and comments.

In short this project should bridge the huge gap that exists between commercial and simple DIY programmable power supplies (that if we could accept above mentioned notice about programmability hardly deserve such name) – the first offers many features and remains hopelessly closed and later offers OPENNESS in publishing and discussing all challenges and are in general much simpler for building (that not necessary mean that such design is by default questionable, poor performer, unsafe or even dangerous to any party involved).

Let’s continue with the list of main features:

  • “DIY friendly” at beginning presume using many “jelly beans” THT components but after few revisions the advantage of SMD becomes clear: you can pack more components and it’s easier to desolder/resolder during experimentation. All assembly so far is done with soldering iron and due to that “no-leads” packaging such as QFN or BGA was avoided. The “DIY friendly” also means that no exotic, custom or hard to find components are used. Actually all parts are sourced from only two distributors (+ enclosure is the third one).
  • “A complete approach” – the project starts with keeping in mind electrical, mechanical and software aspects concurrently and all the time (almost ;). For example, PCBs are dimensioned to fit suitable heatsink, the enclosure is selected to accept two channels and main transformer, the front panel is designed taking into account usability, etc. Such approach could simplify eventual preparation for group buy started by “closed” group of some forum members or even crowd funding campaign. Who is going to do that is not so important – the whole project is open and will stay open. If selected TAPR 1.0 (hardware) and GPLv3 (firmware) seems too restrictive to any potential manufacturer we are open for discussion.
  • Safety during testing/assembling phase and in daily operation. The power supply has to be safe for the human operator, connected load and itself. Due to that no high voltage circuits are used (that of course would make a complete design more efficient) that could less experienced builder (as myself) could cost eventually life. The mains voltage is present only at the input section of Auxiliary power supply module but even that could be skipped in the future if isolated external AC/DC adapters similar to notebook’s adapter but with higher voltage (e.g. 36 or 48 V) is used. Load protection is achieved with offering constant voltage and constant current mode of operation with software protection against over-voltage and over-current situations. The protection on power supply is achieved with adding AC input and DC output protection components and by deploying software over-temperature and...
Read more »

Enclosure model (Varisom).PDF

The latest custom made enclosure prototype 3D model (created by

Adobe Portable Document Format - 145.91 kB - 07/24/2016 at 14:49


EEZ PSU ILI9341 display

Arduino sketch for testing TFT320QVT 3.2" touch screen. UTFT lib is required and UTFT.cpp modification.

x-zip - 9.49 kB - 05/26/2016 at 13:27



Arduino sketches that can be used to test W5500 Ethernet communication on Arduino Shield r2B6b or later.

x-zip - 10.69 kB - 05/25/2016 at 11:24


CVR-Special -EEZ PSU rev2.PDF

3D model of customized enclosure (280x80x240 mm)

Adobe Portable Document Format - 717.11 kB - 05/02/2016 at 08:53


Software simulator for the EEZ bench power supply firmware. Could be used to test all supported functionality without underlying hardware.

x-zip - 2.10 MB - 02/03/2016 at 22:06


View all 6 files

  • 2 × LP2951 Power Management ICs / Linear Voltage Regulators and LDOs
  • 2 × LM5574 SMPS regulator
  • 2 × MC79L05 Power Management ICs / Linear Voltage Regulators and LDOs
  • 4 × TL072 Amplifier and Linear ICs / Operational Amplifiers
  • 2 × DAC8552 2-channel 16-bit DAC

View all 24 components

  • BB3 sequel to H24005 is coming

    Denis11/22/2019 at 10:40 0 comments

    Perhaps some of you guys who are follow H24005 could be also interesting in BB3. Its crowdfunding campaign is under way, more info at: or go directly to

  • Certified open source hardware

    Denis09/24/2019 at 06:18 0 comments

    The EEZ H24005 became the first piece of certified open source hardware in Croatia (link)

  • Crowdfunding fulfilment, Firmware v1.0

    Denis07/19/2017 at 08:22 0 comments

    The crowdfunding campaign fulfilment is almost accomplished. More then 300 boxes are now on the way to Crowd Supply who is going to dispatch them to their final destinations.

    The Complete kit comes with preload firmware v1.0 that now cover almost all functionality of the unit. Firmware development will continue and new releases can be found on the GitHub.

    I’d like to thank once again all the backers for their support and patience. We tried to do our best and hope you like your kit.

  • Firmware M4 is released (Triggering system and list programming)

    Denis03/22/2017 at 15:46 0 comments

    Firmware M4 is released last week. Two main features are triggering system and list programming (sort of "arbitrary waveform generator"). The later one asked for many optimizations and end results is I believe a very satisfactory for such class of device (DIY and open source).
    Triggering system allows usage of four trigger source:

    1. BUS - software trigger, initiated by receiving *TRG when trigger system is already initiated with INIT command
    2. IMMediate - initiated by changing output from off to on or by receiving INIT command
    3. MANual - when flashing button on the TFT touchscreen is selected and
    4. PIN1 - external trigger input available on the front panel push-in connector

    When channels are triggered they can be programmed to new fixed output voltage and current ("step" mode) or execution of list of output values will be started.
    List could contain up to 256 different output voltage, current with variable duration. Duration (DWELl) could be from 1 ms to 65535 seconds. List can be used when channels are also in "special" modes: tracking and coupling in series and parallel.
    I made two part video about above mentioned functionalities and I hope you'll like how quick and easy one can generate e.g. test pattern directly on the device without any extra software and PC connectivity. Your comments and doubts are highly welcomed.

  • Riverdi 3.5" display demo

    Denis03/13/2017 at 08:14 0 comments

    I manage to activate a 3.5" Riverdi touch screen display. This is a cheaper resistive touch screen model with FT800 controller, and capacitive touch screen model with FT801 controller seems that is pin compatible.

    Please note that display has to be rotated for 180 degrees since it's going to be mounted vertically not horizontally (as in a handheld device) for optimal viewing angle. On the picture below I just place it over Arduino shield but in practice it need its mounting rail or bezel that has to be fixed on the front panel.

    Click the image to open in full size.

    So now we have an upgrade path to more capable display (faster controller, truetype fonts, selection of resistive and capacitive touch screen, built in audio, etc.).

  • r5B12 boards assembled

    Denis03/11/2017 at 14:26 0 comments

    The new r5B12 PCBs arrived from ITEAD few days ago and I managed to assemble them to test if new added features are working as expected. All boards are now a little bit larger and I tried to keep the same mounting holes spacing as in previous builds.

    AUX PS module
    This module now has additional MCU controlled power relay with NO and NC pins exposed and reachable from the rear panel (X6 connector). Cooling fan power is now isolated, 5V buck is removed and dual output 5 W AC/DC module from Vigortronix is used instead.

    Power board
    It's possible now to work with two current range e.g. 0-500 mA and 0-5 A (on the picture that is down left corner section with Q13, Q14, R63, R65). Current shunt monitor op amp (IC7) is changed to LTC2050HV (see sheet #3). I also replaced bias power supply (see Sheet #2) where now TL781 and LTC3260 are used instead of buck regulator (LM5574).
    I found two stupid mistakes on this PCB: the power input connector (X2) is rotated i.e. not the same as on the previous board, and choke L1 that is now smaller need different holes spacing.

    Arduino shield

    The most important changes here is encoder that can be now mounted directly on the PCB. Due to that TFT display is moved to the left. PE (Earth) terminal is moved below encoder.
    I added 20-pin 0.5 mm FFC connector (X20) for future upgrade to Riverdi 3.5" touch screen display with FT800 (resistive) or FT801 (capacitive) controller. Since that display also has audio, a small audio amplifier is also added (TPA6205).
    Playing with PCB layout I succeed to swap control lines for AC power (PWR_SSTART and PWR_DIRECT), but that is corrected and uploaded on the GitHub.

    I need to test few more things and if everything is fine I can send to ITEAD final Gerbers and BOM to initiate PCB assembly of few sets first and after that to proceed with the rest that needed for crowdfunding campaign fulfillment.

  • EEZ Studio preview

    Denis02/20/2017 at 22:44 0 comments

    Finally I managed to make a very short intro video of EEZ Studio. A more videos will follows and its source code will be uploaded on the GitHub in near future.

  • Going down to calibrated zero...

    Denis02/14/2017 at 10:59 0 comments

    Finally I find some time to test one detail that I ignored for too longtime. It's how to go down to zero with programmed output voltage or current when channel is calibrated. I was warned a long time ago that if DAC has not bipolar output (i.e. can generate negative voltage) that it's great chance that if DAC is programmed to zero that you cannot get zero on output due to various parts offsets. The simple solution is to shift reference ground of control loops op-amps to few tens of millivolts. In that case with programmed voltage set to zero output value will become negative and in process of calibration firmware will find a non-zero DAC value that relate to zero on the output.

    Insisting on going down to zero possibly does not make a lot of sense for output voltage as for limiting current because if e.g. your resolution is set to 10 mA and during calibration you cannot reach e.g. less then 15 mA, firmware will lock your range to 20 mA that is a huge amount for many small loads and CC mode of operation is needed.

    I tried that on Power board r5B9 (that changes is added in version r5B10 and later) where you have to do the following:

    Click the image to open in full size.

    ... on the PCB that looks like this where R42 ground is not cut but resistor is moved from its original position and soldered with one end directly to pin 5 of IC6. On current monitor side R60 and R61 is replaced with single resistor that is soldered on R61 position. Only cut on the PCB that is required is to isolate pin 5 on IC7 from ground. Voltage divider 10K+220R produce about 50 mV derived from +2.5 V voltage reference:

    Click the image to open in full size.

    Making this change is not enough. You have to instruct firmware that when channel is not calibrated that take into account ground offset otherwise you'll get strange output values at the beginning of the scale. For example for set 0 V you can expect more then 800 mV or for 0 A a more then 100 mA will be measured without connected load.

    If you have Power board r5B9 and add above described hack you have to add into your conf_user.h the following code:

    #undef CHANNELS
    #define CHANNELS \

    When this hack is applied you are not able to reach full scale (i.e. 40 V) with R47, R57 set to 20K. Use e.g. 24K or 24K9 to ensure full scale for calibrated output.

  • Dual range current (cont.)

    Denis02/05/2017 at 10:12 0 comments

    I was forwarded to Dave's video #931 where only multi-range measurement is covered, and I'm going to test also how it will behave in current control loop. The good thing is that Rds(on) is now removed from equation. Here is schematic (MOSFETs and resistors selection would be different):

  • Dual range current measurement proposal

    Denis02/02/2017 at 09:24 0 comments

    I'd like to include current measurement in two ranges, e.g. 0-500 mA and 0-5 A on the next Power board that will continue to be compatible with Arduino shield and firmware will take care about it like with all previous Power board revisions. If this works fine it will become a candidate for group buy on the CrowdSupply.

    Idea is to use mosfets as range switches that will be well saturated to provide lowest Rdson. The switching between ranges will be accomplished in a "make-before-break" fashion, that both sense resistors will be connected simultaneously for about max. 1-2 ms.

    Additionally I'd like to preserve 4-wire (Kelvin) connections that already exists on the previous board but have no experience nor I had a chance to see how other people design PCB for that. All what I found so far is a not so representative picture of ct'lab DCG power supply (Q8-Q11 for 4-ranges) but without detailed PCB view.

    In our case everything will be done with SMT components and I created a new Eagle components for mosfet and 2512 resistor with exposed addition "sensing" pin. Since the next higher bias voltage then existing +5V is +48V, it is used for Q13, Q14 saturation that is cut to +13 V with ZD17, ZD18. The existing 8-but I/O expander is already fully occupied and therefore it's replaced with 16-bit version (IC7, MCP23S17-E/SS) to provide two more lines for current ranges selection.

    ... and here is PCB layout current sensing section:

    I didn't manage to connect other end of ZD17 in a way to not cross sensitive measurement line but at least that is happened under right angle and on the opposite side of the PCB.

    Your timely comments are highly welcomed (I'd like to place an order for new PCB very soon).

View all 54 project logs

  • 1
    Step 1

    A new folder on GitHub called Building instructions is added. It's a work in progress. You can find there also images of PCB's layers with values displayed if you don't have Eagle nor want to install its free version only for this project.

    To stay informed about changes in this folder simple subscribe to project's psu_hw repository.

View all instructions

Enjoy this project?



Eddy Raj wrote 05/05/2021 at 02:39 point

Good Day

I wish to build a linear 20V3 DC Power Supply with USB Interface that understands SCPI commands.

Can someone be helpful to explain in Block Parts what & how to link a cheap dc power supply to a USB Interface and be able operate using remote SCPI Commands.

Maybe point to me some already available kits Projects.

Many Thanks

  Are you sure? yes | no

ottoragam wrote 09/16/2016 at 06:44 point

Hi Denis, I just saw your power supply on Crowdsupply! I'm launching a campaign for a motor controller over there as well. When does the campaign start?

  Are you sure? yes | no

Denis wrote 09/16/2016 at 07:33 point

Huh, you are faster then me with announcement :) That's pre-launch page and I cannot say anything specific about campaign start in this moment.

  Are you sure? yes | no

Denis wrote 02/05/2016 at 20:58 point

Hi John, yes its missing as the final touch hardware-wise, but real front panel artwork has to be created on the TFT color display with touch screen. Hopefully it will justify removing all switches and keypad for the sake of clarity and user friendliness. You'll be our judge, so stay tuned ;)

  Are you sure? yes | no

John Stockton wrote 02/04/2016 at 13:31 point

Very nicely done.  I can't wait to see the front panel artwork.  This is a great project.

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates