Close

Final Design for Rev 1.0

A project log for Bench Power Supply

Designing an open source, modular bench power supply to rule them all.

the-big-oneThe Big One 04/03/2015 at 18:032 Comments

I think that I have figured out everything that needs to be done here. Yay!

First, some comments on which of my original design goals I was successful with and which I was not.

The final design:

  1. Is modular, allowing for a variety of power sources (transformer + rectifier, dual switch mode supply, or even a wall wart (although the wall wart comes with limitations on functionality)
  2. Allows for up to 6 channels, with each channel able to be defined as either positive or negative.
  3. Each channel's voltage / current limit setpoints and voltage / actual current sense feedback is an analog value in the range 0-5V. They can be driven by potentiometers or DACs, and read by an ADC.
  4. Each channel to go all the way down (or up, for negative channels) to 0
  5. Allows a current limit setpoint all the way down to 0mA
  6. When using the digital control board, encoders + a display allow easy changing of set points and viewing of actual values
  7. The digital control board includes calibration and control over USB
  8. If you use less than 6 channels, you can assign the DAC output of channel 6 as AREF on the microcontroller, allowing for a more stable voltage reference which will improve the ADC accuracy

The biggest limitation that I was unable to overcome (without introducing extra complexity or other limitations) was when using a single supply (e.g. a wall wart); voltage regulation works (down to 1.25V instead of 0V), but current limiting seems iffy at best. Perhaps if a rail to rail op amp was used it would work better (I don't have any rail to rail op amps to test). That said, a split supply (whether it be from a scrap transformer or a couple of cheap isolated switch mode supplies) are cheap enough that I don't think running from a wall wart is really worthwhile.

Another limitation / bug that I can't figure out is the current limiting LED indicator light. It is supposed to come on whenever the actual current matches or exceeds the setpoint current. It works, but it tends to be delayed by a number of seconds (the exact length of time seeming to depend on the current limit setpoint: the higher the setpoint the slower it is). I am not sure why it does that... the actual current limiting kicks in immediately. It is only the indicator light that is delayed, and they are running from the same output.

The final schematic is below:

You will notice a few changes from last time:

  1. A diode D3 between the voltage adjustment pin and the voltage adjustment op amp prevents the op amp from sourcing any current to VOUT. It can essentially only 'pull down' the adjustment pin (if left unconnected, VOUT would rise to its maximum output of about 13.5V on a 16V rail).
  2. The current limit setpoint is now passed through an op amp U2D. This biases the output to go below zero, which is required for current limiting all the way to 0mA.
  3. I have reduced the value of some capacitors (most notably the capacitor on the I_LIM net, to turn the transistor on / off, and the size of the electrolytic capacitors on the main power line). The smaller values seem to be fine across all sorts of loads.

The board layout is also completed, and can be seen below:

I plan on waiting for a day or two to make sure that I have not forgotten anything, and then submitting the board to DirtyPCBs for manufacturing. If anyone in the community notices any issues, please let me know ASAP! :-)

After the board has been submitted, I plan on working on the software some more. The basics are there and working, but there is still lots of room for improvement:

  1. The encoders could use some TLC; currently they sometimes skip signals.
  2. Calibration should use multiple measurements at common values (0, 1.8, 3.3, 5.0, 8.0, 12.0, etc) and interpolate in between them. This will allow for more accuracy across the entire range. This is especially important for current limiting, which does not seem to be quite as linear as the voltage setpoints.
  3. The user interface needs some improvement to allow quickly and easily setting voltage and current setpoints
  4. There should be some functionality for setting common values (say 5V at 500mA maximum to test a USB load)
  5. There needs to be more computer-side utilities for setting and logging data (all the USB HID commands are implemented on the AVR side, I just need to write a simple Python script to tie it all together).

I think that's all for now... feel free to comment below if you have any questions / comments / suggestions.

Cheers

Discussions

Michael Vowles wrote 04/15/2015 at 10:37 point

You have come a long way mate! Glad to see you reached majority of your goals! I think this will end up being my first power supply for my shed once I get some time! 

  Are you sure? yes | no

The Big One wrote 04/15/2015 at 14:17 point

Thanks!  I can't wait to get the boards, and see if everything still works once soldered up (it wouldn't be the first board of mine that had some stupid bug that I missed before sending it off!)  ;-)

  Are you sure? yes | no