PETH-8093.php 11285 Bytes 13-01-2022 20:10:17
PETH-8093 Power Supply
A compact quadruple Power Supply
✈ The building Blocks • Functional Description
This Power Supply was mainly designed to recycle a bunch of toroid transformers, having worked hard
in their previous life in AOM-Controllers. On the bottom board, we therefore find three times a bridge
rectifier with a storage capacitor. The only "easy" way to get to "reasonable" voltages
was the use of step down converters. We used : TSR 2-2450, TSN 1-24150A and P78E15-1000 or similiar.
On the top board, again, a bridge rectifier with some storage capacitors are placed. As we wanted
an adjusteable output voltage, the regulation is a cascade of a step down converter (LM5005MH) which
can handle input voltages up to 75 V, followed by a linear regulator (LT3081). The output voltage
of the later controls the feedback loop of the step down regulator. By that, the input of the linear
regulator is always approx. 2 V above the output voltage. The setpoint is defined by a 20 kΩ Potentiometer,
sitting on the bottom board.
Finally, an arduino nano is used to monitor the temperature as well as the output voltage. It is displayed
with 5 led's, indicating the voltage in a binary fashion.
✈ Downloads
✈ Arduino Sketch - The Code
Double click on code to select ...
/* //////////////////////////////////////////////////////////////////
ARDUINO/Genuino Project "PETH-8093", yet another Power Supply
https://www.changpuak.ch/electronics/PETH-8093.php
Software Version 1.0
26.12.2021 by ALEXANDER SSE FRANK
USES ARDUINO NANO EVERY
////////////////////////////////////////////////////////////////// */
// /////////////////////////////////////////////////////////////
// T E M P E R A T U R E, 1 µA/°C * 5k1 = 5.1 mV/°C
// /////////////////////////////////////////////////////////////
float Temperature = 0.0 ;
const int TempPin = A6 ;
const int TempLEDPin = A4 ;
int Tempomat = 0 ;
void UpdateTemperature()
{
Temperature = 0.5 * (Temperature + analogRead(TempPin) * 0.9583501) ;
}
// /////////////////////////////////////////////////////////////
// C U R R E N T
// /////////////////////////////////////////////////////////////
float Current = 0.0 ;
const int CurrentPin = A5 ;
void UpdateCurrent()
{
Current = 0.5 * (Current + analogRead(CurrentPin) * 0.4887585) ;
}
// /////////////////////////////////////////////////////////////
// P R I M A R Y V O L T A G E
// /////////////////////////////////////////////////////////////
float Primary = 0.0 ;
const int PrimVoltPin = A7 ;
void UpdatePrimary()
{
Primary = 0.5 * (Primary + analogRead(PrimVoltPin) * 0.0782014) ;
}
// /////////////////////////////////////////////////////////////
// S E C O N D A R Y V O L T A G E
// /////////////////////////////////////////////////////////////
float Output = 0.0 ;
const int OutVoltPin = A0 ;
const int LED1Pin = 6 ;
const int LED2Pin = 5 ;
const int LED3Pin = 4 ;
const int LED4Pin = 3 ;
const int LED5Pin = 2 ;
int Ganz = 0 ;
void UpdateOutput()
{
Output = 0.5 * (Output + analogRead(OutVoltPin) * 0.0293255) ;
Ganz = (int)(Output + 0.5) ;
if((Ganz & 0x01) > 0) digitalWrite (LED1Pin, HIGH ) ;
else digitalWrite (LED1Pin, LOW ) ;
if((Ganz & 0x02) > 0) digitalWrite (LED2Pin, HIGH ) ;
else digitalWrite (LED2Pin, LOW ) ;
if((Ganz & 0x04) > 0) digitalWrite (LED3Pin, HIGH ) ;
else digitalWrite (LED3Pin, LOW ) ;
if((Ganz & 0x08) > 0) digitalWrite (LED4Pin, HIGH ) ;
else digitalWrite (LED4Pin, LOW ) ;
if((Ganz & 0x10) > 0) digitalWrite (LED5Pin, HIGH ) ;
else digitalWrite (LED5Pin, LOW ) ;
}
// /////////////////////////////////////////////////////////////
// S E T U P
// /////////////////////////////////////////////////////////////
void setup()
{
Serial.begin(115200) ;
// INPUTS
pinMode( CurrentPin , INPUT ) ;
pinMode( PrimVoltPin, INPUT ) ;
pinMode( OutVoltPin, INPUT ) ;
// OUTPUTS
pinMode( LED1Pin, OUTPUT ) ;
pinMode( LED2Pin, OUTPUT ) ;
pinMode( LED3Pin, OUTPUT ) ;
pinMode( LED4Pin, OUTPUT ) ;
pinMode( LED5Pin, OUTPUT ) ;
pinMode( TempLEDPin, OUTPUT ) ;
digitalWrite (LED1Pin, HIGH ) ;
digitalWrite (LED2Pin, HIGH ) ;
digitalWrite (LED3Pin, HIGH ) ;
digitalWrite (LED4Pin, HIGH ) ;
digitalWrite (LED5Pin, HIGH ) ;
digitalWrite (TempLEDPin, HIGH ) ;
delay(3000) ;
digitalWrite (LED1Pin, LOW ) ;
digitalWrite (LED2Pin, LOW ) ;
digitalWrite (LED3Pin, LOW ) ;
digitalWrite (LED4Pin, LOW ) ;
digitalWrite (LED5Pin, LOW ) ;
digitalWrite (TempLEDPin, LOW ) ;
}
// /////////////////////////////////////////////////////////////
// M A I N L O O P
// /////////////////////////////////////////////////////////////
void loop()
{
UpdatePrimary() ; Serial.print(Primary,3) ;
Serial.print(",") ;
UpdateOutput() ; Serial.print(Output,3) ;
Serial.print(",") ;
UpdateCurrent() ; Serial.print(Current,3) ;
Serial.print(",") ;
UpdateTemperature() ; Serial.println(Temperature,3) ;
Tempomat = millis() % 10000 ; // PWM, F = 0.1 Hz
if((100*Temperature) > Tempomat) digitalWrite (TempLEDPin, HIGH ) ;
else digitalWrite (TempLEDPin, LOW ) ;
delay(50) ;
}
// /////////////////////////////////////////////////////////////
// END OF FILE.
// /////////////////////////////////////////////////////////////
The Bottom Board. Keep it simple was the order of the day ...
The Top Board. A cascaded approach for the adjusteable voltage is used.
✈ Share your thoughts
The webmaster does not read these comments regularely. Urgent questions should be send via email.
Ads or links to completely uncorrelated things will be removed.
Your Browser says that you allow tracking. Mayst we suggest that you check that DNT thing ?