The programmable bench power supply (PSU) is an attempt to bridge the gap between so many simple hobbyists/DIY power supplies and commercial solutions trying to combine the best ingredients and practice from both sides. The former solutions are in general open source with limited feature set and without support for some standardized way to communicate with them (e.g. SCPI). The later solutions are costly and not open (and easily "hackable").
This is an ongoing project and our aim is to provide a solution that is comparable with commercial solutions and it's completely open (software and hardware) that anyone can freely replicate it or use some of building blocks for making new solutions.
Currently we have three working prototypes. We named that latest prototype EEZ H24005 that stands for hybrid, dual channel, 40V and 5A.
From the very start we tried to make it modular. In that way would be much easier to understand how it works, assembly and repair it. Currently it's consist of three PCBs:
- Auxiliary power board
- Power module (2 is required per unit)
- Arduino shield for digital control
As an power input it's possible to use affordable toroidal transformer with dual secondary coils or two 48 V AC/DC modules.
To further simplify it's building we succeed to reduce number of wiring to the minimum. That is accomplished by grouping all control and output power lines to the single connector on the Power module, and two of them are directly plugged into Arduino shield that is mounted directly on the enclosure front panel and carry 3.2" TFT color touch-screen display from one side and Arduino Due from another.
The TFT display is used as only local user interface. No additional switches, potentiometers or keypads are required. A lots of space is saved on the front panel in that way, yet it allows that all functions for both channels can be easily accomplished from the single place.
The block diagram that shows all important components are shown below.
Auxiliary Power Board
This board is used to accomplish the following:
- AC input protection
- AC power soft-start/stand-by
- +5 V for Arduino shield supply
- carrying Ethernet and USB connectors (with option to isolate USB) and
- 12 V cooling fan control
It's intended for mounting (with help of few metal spacers) directly on the enclosure rear panel. Dangerous mains voltage is present only on this board and it works with both 115 and 230 VAC (50/60 Hz). More details about this board can be found here.
The power module main purpose is to provide reliably on its output regulated output voltage and current. Most of the important parameters that are usually measured to find out a power supply performance depends of this module design. The current version (r5B9) is a result of many iterations and great feedback from various people on few forums. We believe that this most challenging part of this PSU could be further improved in many ways: e.g. by lowering BOM count without necessarily decrease overall performance, decrease ripple and noise possibly with four layer PCB, etc.
Its power stage is divided in two sections: pre-regulator that is built around LTC3864 buck/step down controller and mosfet post-regulator that is based on excellent work of. This hybrid design comes with one interesting feature: low-ripple mode of operation thanks to used LCT3864 that works with P-channel mosfet and allows "100% duty cycle when the pre-regulator circuit is in fact by-passed and hard to filter switching noise is decreased on the output. Entering that mode of operation is managed by MCU and it's in line with pre-regulator's switching mosfet and post-regulator pass mosfet SOA.
This module also has a bias power supply that are used for powering all analog and digital controlling circuits. It provides +5 V, -5 V for op amps that are used for CV (constant voltage) and CC (constant current) control loops, +5V for digital section (ADC and 8-bit I/O expander). Additionally its provide -9V that is required for so-called "down-programmer" (DP) circuit. The DP is used to speed up output voltage programming when new set voltage is lower. The bias power supply also provides power good signal that is used to indicate MCU the "health" of the controlling circuits power.
Digital part of the module provides 16-bit programming resolution of both voltage and current using DAC8552. Currently the output resolution is firmware limited to two decimal points (10 mV, 10 mA) and leave enough room for better precision (down to 1 mV, 1 mA full scale). The ADS1120 offers 15-bit monitoring resolution of programmed (DAC outputs) and actual (post-regulator outputs) voltage and current.
The power module also has an output enable (OE) circuit. That function could be achieved by programming output voltage to zero, but in this way it's possible to easily add a manual switch independently from MCU operation (as extra measure of precaution in case of failure).
Remote voltage sensing is also implemented an important feature when accurate output voltage is required with high current to compensate voltage drop on wiring between output binding posts and load terminals. It's complemented with reverse polarity protection when Sense input is mistakenly connected to power output of opposite polarity (e.g. Sense+ to Out- and/or vice versa). That will result in instant increase of the output voltage that could results with connected load damage if current limitation is not set. Thanks to this circuit output voltage cannot exceed approx. 1.5 V (so extra precaution with wiring is still needed when remote sensing is selected).
Finally, the power module offers remote voltage programing when external analog signal is used to set output voltage.
The Arduino platform is initially chosen for digital control for obvious reason: it is widely available, many people are already familiar with it and they represents a great user community that helped that its IDE and libraries offers many building blocks that can saves a lot of development time. As time went by, however, it became increasingly clear we'll reach its limits on both sides: hardware and software capability.
We started with Arduino Leonardo that was enough for driving LCD 128x64 display and no extra libraries as one for the Ethernet communication. The Mega2560 was the next candidate that is used to drive 240x320 color display among other stuff, but latency is visible and to great extent tolerable. But its modest 8 Kb of SRAM requires lots of trick that many processes can works withing such limits. Finally we comes to Arduino Due, still the most powerful model in "Mega" form factor, that also have enough I/O pins that is needed when as in our case a low cost TFT display without built-in processor is selected.
It might be more easier and cost efficient that "shield" concept is not selected and that MCU is directly placed on the digital control board. But, from other side it offer more modularity and leave a room for connecting a more then Arduino Due board in the future. Of course the manufacturer is not necessarily Arduino.
The Arduino shield provides some interesting functionality that make the PSU more attractive:
- Carry power output binding posts, and two channels outputs can be connected in serial or parallel thanks to built-in power relays and that activity is MCU managed for improved safety
- Compact push-in connectors is used to wiring remote sensing, remote programming, digital trigger and load temperature sensor
- Switching regulators frequency synchronizations
- WiFi module connection (optional)
- Incremental encoder input
- Soft-start/Stand-by control (located on Auxiliary power board)
- Analog inputs for temperature measurements
- LEDs as as additional indication for some key functions (i.e. CV mode, CC mode, Output enable, Remote sense, Remote programming, Stand-by mode, Serial/parallel coupling)
- Cooling fan PWM control and speed measurement
It also have hosts some parts that are missing or partially supported on Due:
- EEPROM storage
- Real-time clock (RTC) with supercap back-up
- Reset supervisor with watchdog
- Ethernet communication
- External Ethernet module connection (optional)
- External digital trigger
More details about this board can be found here.
The major differentiator between this project and many DIY solutions is its software. That also makes it more similar to many commercial solutions with that exception that is and will stay open source. The software part currently has the following components:
- Firmware (works on both 32-bit ARM Due and AVR 8-bit Mega2560)
- Software simulator
- EEZ Studio
Development of the firmware starts from remote control, an unusual point for device that has local control. A SCPI programming is chosen and as command parser a forked version of Jan Breuer's SCPI parser is used. The first version M1 (Milestone One) released in December 2015 offers comprehensive support for SCPI remote programming as described in SCPI Reference guide.
With SCPI the PSU can be seamlessly integrated into any laboratory environment and can be managed with SCPI controller's such as LabVIEW (NI) or VEE Pro (Keysight), etc.
We are finalizing M2 that is bringing local control using the TFT touch-screen display. Here is a partial list of supported functionality:
- Various protections (max. voltage, current, temperature and power)
- Calibration (voltage and current)
- User profiles
- Self-test, diagnostics
- Fan control
- Low-ripple mode, etc.
Another possibly unique feature of this project is Software simulator that is actually a by-product of firmware development. It's created to speed up firmware uploading and debug procedures. With the Software simulator one can test all implemented functionality on any of the major OS without having a physical device.
The EEZ Studio is another software component that cannot be standardly found withing Arduino software framework. The Arduino IDE greatly simplified MCU software development but still do not offer a lot when e.g. one need to design and animate GUI on color touch-screen displays. Since PSU has a lot of options that requires a lot of menus/pages on the screen to make it accessible and useful. At least we are not aware of such solution and partially open concept of e.g. Nextion is still not too attractive for us.
It's very frustrating task trying to guess when one or more pixels on the screen has to be changed. We made our situation even more complex with decision to move from "portrait" to "landscape" display orientation in the latest revision and wants to support previous prototypes. That double the number of required GUI menus.
The EEZ Studio in its current version (pre-GitHub :) is helping us with the following tasks:
- Importing bitmap fonts, character map management and editing
- WYSIWYG editor of display pages in both portrait and landscape orientation
- Storyboard, a complete pages/menus structure on the single place