The readout for a power-supply, or any bench instrument for that matter, needs to be LED, OLED or VFD. In my opinion LCD lacks the eye-catching ‘at a glance’ contrast of LED or VFD. VFD is beautiful to look at but expensive to buy in module form. Small OLED modules are available cheaply and were a contender for this design but I decided to go for two 4-digit 7-segment LED modules.
The controller is the MAX7221 from Maxim. This controller can multiplex 8 LED digits, it’s available in a DIP package and information about its usage is readily available on the internet. Basically you just send it a digit number and the state of the segments for that digit and it will hold the digit in that state without intervention until you come back and tell it a new state. Easy.
During normal operation the voltage and current readouts from the INA226 will be continuously displayed on each of the modules. I will reuse the displays as a rudimentary UI to set configurable parameters for this controller. These modules are a common-cathode design and are readily available on ebay. I’ll go into more detail in the bill of materials section.
There’s a heatsink built in to the NXA66 for a good reason. At the higher current levels the module will need to dissipate a significant amount of heat. To help with that I’ve included a temperature sensing module and fan controller. The MCP9700-E/TO is a thermistor in a TO-92 package that outputs a voltage proportional to the temperature that it senses.
I plan to tape this sensor to the heatsink of the NXA66 right above the power MOSFET. The sense voltage will be fed to the ADC on the Atmega328p where it will be converted into Celsius. If the temperature exceeds a preset value then a standard 12V 40mm DC fan will be switched on until the temperature drops back below another threshold.
As with anything ADC-related the sensed reading as well as the ADC supply and reference level need to be carefully filtered to avoid erroneous readings due to noise and glitches on the lines.
Not a lot going on here. It’s a simple breakout of the pins on the Atmega328p. I will attach these to one of those small external UART driver boards that you can get on ebay. The MCU will continually output the voltage and current readings so that you can collate them on a PC for data logging.
This is the programming header. The pinout exactly matches that of the USBASP programmer so it can be directly plugged on to program the MCU.
The front panel of this PSU will have SPST toggle switches for output-enable and voltage-select functionality. There will also be a rotary encoder with a built-in push-button function that I will use for adjusting the configurable controller parameters.
Both switches and the button are normally-open and will connect to ground when closed. Each one is attached to an input pin on the MCU that has its internal pull-up enabled meaning that it will read high when the switch is open and low when it’s closed. Wiring is simplified because after connecting one pin of each switch/button to the correct MCU input pin all the remaining pins are then common’d together and connected to a ground terminal.