Projekt Mini Labor-(Schalt-)Netzteil

TommyB

Team Bitschubse
17. Mai 2010
2.151
80
48
40
127.0.0.1 ;)
Sprachen
  1. C#
  2. VB.Net
  3. LunaAVR
  4. Assembler
  5. Python
Wo Dino hier sein im übrigen sehr interessantes Projekt mit dem Magierstab (aka LED Halogen Fluter ^^) dokumentiert hab ich mir gedacht ich poste hier auch mal mein aktuelles Projekt.

5 Volt hab ich hier nahezu überall im Haus, nicht nur über USB Ports am Laptop, auch am Handy Ladegerät und auf meinem BreadBoard. Aber manchmal braucht man auch mal andere Spannungen, z. B. 12V oder (grade für den Raspberry Pi und Ähnliche) 3,3V. Problem: Ich habe kein regelbares Netzteil. Außerdem wäre es schön das Ding portabel zu haben, also optional mit Akkubetrieb.

Also ran an's Reißbrett :)
Ich hab hier noch 2 DC-DC Konverter die ich dafür verwenden will (für die Ausgänge). Das schöne an denen ist dass das sowohl Step-Up alsauch Step-Down Wandler sind. Sprich im Volksmund: Es ist scheiß egal was du reingibst, die geben das raus was du willst. Dazu kommt noch 1 KIS3R33 (um die 5V für die Logik bereitzustellen). Der erste Wandler gibt schon mal die Eingangsspannung vor, maximal 15V, der 2. begrenzt es auf minimum 6V. Kann also mit so gut wie jedem Netzteil was man noch zu liegen hat betrieben werden. Ich hab hier eins mit 15V 3A, für meine Zwecke mehr als ausreichend. Ausgang wäre also maximal 2x 0,5..30V 3A (gemeinsame Masse). Bei Batteriebetrieb würde ich mich aber nicht auf die Stromwerte verlassen. Ich weiß nicht wie viel die Akkus wirklich leisten können. 15W pro Zelle ist kein Problem (es sind aber 2 drin), so weit konnte ich testen.

Ich hatte beide Module schon vorher im Einsatz, die Ausgangsspannung ist super und maximal 3A ist perfekt. Und besser als diese Teile die die Leistung in Wärme verbrennen ist es allemal, vor allem im Sommer und wenn man wie ich direkt unterm Flachdach wohnt. Hmpf...

Ein OLED Display (16x2 Zeichen) soll als Anzeige für Spannung und Strom dienen. Gehäuse und übrige Bauteile waren alle da, also kanns los gehen :)

Ok, das Gehäuse hatte ich schon mal verwendet, da war ein 4x20 Zeichen LCD drin was ein bisschen größer ist. Aber egal, die Lücke wurde mit 2 Komponenten Kleber zugespachtelt. Dann noch die Schrauben festkleben (müssen ja eh nichts halten, da ist das egal, und durchs Gehäuse durch würde mir optisch nicht gefallen).

Die 3 Wandler und das LCD passen mal grade so in das Gehäuse rein.
IMAG0376.jpg
Bei den 2 großen Wandlern habe ich die Spindeltrimmer ausgelötet (werden durch Potis mit Achse ersetzt) und ebenfalls den Jumper (Ein/Aus), das wird durch den Controller gesteuert.

In die Unterseite kommt ein Batteriehalter für 2x 18650 LiIO Akkus (18mm Durchmesser, 65mm länge, 0=rund), also 8,4 .. 6,6V. Parallel dazu natürlich die Buchse für den Netzanschluss. Und natürlich die Platine mit einem ATtiny 861 der sich um das Messen von Strom und Spannung kümmert und das auf dem LCD anzeigt. Interne Ladeelektronik wäre via MAX1811 leicht lösbar, ist aber erstmal nicht geplant. Hab genug Ladegeräte hier.

Geplant ist auch noch dass der die Wandler abschaltet wenn zu viel Strom fließen sollte (eine Software-Sicherung sozusagen). Kurzschlussfest sind die Module ansich ja, aber schaden tuts ja nicht.

Was auch noch kommen wird ist ganz simpel. Stabile 5V sind ja drin, also brauch ich nur noch eine USB Buchse und ich könnte damit auch unterwegs mein Handy aufladen :)
Sinnvoll grade wenn man mal wieder wegen nicht fahrender Bahn in der Pampa fest sitzt <_<


2-be-continued ... :)
 
Hallo Tommy,

nettes Projekt - hab ich mir auch schonmal gedacht so was zu bauen...

Aber pass bloß auf, mit den Akkus, die 18650 gehen ziemlich schnell hoch bzw. brennen ab
und sind extrem Empfindlich gegenüber Tiefentladung...:eek:
Nimm also unbedingt geschütze Zellen, z.B von Wolfeyes, die billigen halten auch die
Kapazitätsangabe nicht annähernd ein...unter 15€ kannst du solche Akkus vergessen...
Zum Laden möglichst in einen Feuerfesten Behälter legen z.B Blumtopf mit Sand drin!

Ansonsten ein schönes Projekt, wünsche dir viel Erfolg!:)
 
Also mit dem Laden der Akkus hatte ich noch nie Probleme. Sogar nicht mit dem billigem China Ladegerät was ich hier habe. Meißt lade ich die aber mit meinem selbstgebautem Ladegerät (via MAX1811). Da ist schon seit 1 Jahr mindestens 1x täglich ein Akku drin zu laden, sowohl 18650 alsauch 14500 (sprich Mignon Größe). Man muss sich also nicht verrückt machen :)

Ich hab aber auch noch 14500er mit PCB drin hier (Überwachung gegen Tiefentladung, Überladung, Überstrom)
E-Zigarette sei Dank hat man sowas zu liegen ^^
Daher kann ich auch ungefähr die Leistung beurteilen.

Zum Thema Billig Akkus:
MadeInChina.jpg
Man kann immer mal pech haben.

Ich werd das auch erstmal mit 14500 machen (müssen) weil ich leider erst zu spät fest gestellt habe dass das Gehäuse n bissl zu klein ist :eek:
Lässt sich ja aber jederzeit ändern.
 
Ich sag ja nicht das die nicht funktionieren, oder zwangsweise Hochgehen,
bei Billig-akkus und unsachgemäßer Behandlung ist das Risiko allerdings recht hoch...

Und wenn die Teile abfackeln sind die Teile auch nicht so einfach wieder auszukriegen...
 
Mittlerweile gehts etwas weiter, ich hab mal n Schaltplan gekritzelt.
Da es für die Power Module verständlicherweise kein Schaltbild gibt hab ich mich mit WirePads beholfen (die sitzen wie das LCD eh im Deckel und nicht auf der Platine)

Netzteil2.png

Ist nur ein erster Entwurf.
Da mir der Controller etwas unterfordert vorkam hab ich mir gedacht ich bau noch einen Frequenzzähler mit ein. Und wenn der schon mit drin ist kann man ja auch gleich mit überlegen an "Fremd-ICs" OSCCAL mit zu kalibrieren (daher der ISP Stecker). I²C hab ich mir mal für weitere Verwendungen reserviert. (I²C Chipkarten zum mobilen Flashen?)
Kann man ja alles mal gebrauchen :)

Leider fällt die Software Sicherung (Überstrom) raus weil wegen Pin Mangel. Ich könnte das natürlich via I²C erweitern... Naja, mal schaun. Wäre ja eh doppelt gemoppelt gewesen.
 
Es ist vollbracht :)

*** CrossPost ins LunaAVR Forum ***


Nachdem Version 1 ein Reinfall war und Version 2 zwar funktionierte (auch mit 14500er Akkus) kam auch da ein trivales Problem auf. Die Bauteile passten zwar alle ins Gehäuse rein, die Kabel die Ober und Unterseite miteinander verbunden haben jedoch nicht. Hmpf! Also Version 3 mit größerem Gehäuse (und gleich den größeren 18650 Akkus, sprich 3x 2000mAh).

Praktisch: Die Gehäuse "SD 10" (klein) und "SD 20" (groß) von Reichelt sind untereinander kompatibel, sprich ein großes und ein kleines geholt, großen Boden (Akkus, Controller, Kondensatoren und Shunts) und kleinen Deckel (OLED und DCDC Wandler) genommen, perfekt :)

Die Akkus brauchen viel Platz, daher viel der Platz für die Platine wesentlich kleiner aus als in den ersten 2 Versionen. Aber mit dem Unterschied dass ich ja jetzt auch in die Höhe gehen konnte. Somit wurde kurzerhand die Platine aufgeteilt in "Leistungs-" und "Steuerungsteil". Sprich unten die Kondensatoren, Shunts und die Ausgänge und oben drauf der Controller + seinem Vogelfutter und den Trimmern für die Spannungseinstellung und die Kalibrierung.

Zugegebenermaßen, der Controller langweilt sich etwas, immerhin wird er nur zum Spannung und Strom messen und anzeigen gebraucht, alles Andere machen fertige DCDC Wandler. Näheres dazu in der Stückliste.

Dazu ist dies mein erstes Projekt in LunaAVR. Erstaunlicherweise ging es mir verdammt leicht von der Hand, obwohl ich noch eine Library anpassen musste weil das OLED doch nicht so 100%ig kompatibel mit den Standard LCDs ist (die Initialisierung ist etwas anders).

Zu den Spec's:
* 2x 25W Ausgang (ca. 0.5V - 35V regelbar, max. 3A)
* 1x 5V 3A Ausgang (nicht ganz da die Elektronik ja auch noch etwas zieht). Sollte aber locker reichen um ein Handy/Tablet zu laden
* 3x 18650 Akku (LiIO / LiPO, optional) für die Stromversorgung unterwegs (keine integrierte Ladeelektronik)
* Netzanschluss. Da ich ungerne mit 230V arbeite 15V DC.

Bauteilliste (nur das Gröbste, kein Vogelfutter):
2x Auto StepUp StepDown converter (für Ausgänge)
1x KIS3R33 Modul (StepDown, für 5V)
1x OLED Display 16x2 (ein normales LCD würde es natürlich auch tun)
1x ATtiny 861
6x Präzisionspoti / Spindeltrimmer / was auch immer grade greifbar ist
2x 0,1 Ohm Shunt (5W, 1% oder besser)
3x 470µF LowESR Kondensatoren (um die lütten Dinger auf den Wandlern zu unterstützen)

Das Vogelfutter kann man sich bei Bedarf aus dem Schaltplan ziehen :)

LunaAVR kann man sich ja frei runter laden. Dann wird noch ein Programmer benötigt den AVRDude unterstützt (sind aber fast alle) um den Chip zu programmieren und ggf. Änderungen vorzunehmen.

Obwohl die gefühlten 1000 Worte schon geschrieben sind hier trotzdem noch ein paar Bilder :)

Die untere Platine und -Gehäusehälfte:
IMAG0430.jpg IMAG0431.jpg IMAG0432.jpg

Und die obere Hälfte:
IMAG0435.jpg IMAG0436.jpg


*** Attachment Limit, weiter im nächstem Post...
 
And the beat goes on...

IMAG0439.jpg IMAG0438.jpg

Nicht meine beste Arbeit, aber ich finds trotzdem recht gelungen :)

Dem versiertem Kenner brauche ich glaube ich nicht zu erklären dass bei diesem Aufbau auch mal angezeigte 0,3A in wirklichkeit 0,2 sein können. Für meine Zwecke ist dies aber mehr als ausreichend.

Sodelle, zum überraschend kurzem Quelltext:
Code:
' Tiny Power Supply (TPS) V1.3
' (C) Thomas Baumann - thomas.baumann -at- devs-on.net
' User TommyB @ avr-praxis.de
'
' Calibration:
'   Remove microcontroller!
'   Adjust output voltage to 25V DC
'   Adjust all 4 trimmer so the output voltage to the ADC channels are <= 2V
'   Insert microcontroller
'   Fine adjust the negative trimmer so the displayed voltage equals the output voltage
'   Set output voltage to 3V
'   Attach a 1 ohm resistor (minimum 5W, as less tolerance as possible) to the output
'   Adjust the positive trimmer so the ampere displays gets 3.0A
'   Repeat for 2nd channel.
'   Done :)



' Setup environment
AVR.Device = attiny861 ' Chip: ATtiny861A
AVR.Clock = 20000000   ' @ 20 MHz
AVR.Stack = 64         ' 64 Bytes for Stack

' Libs & Includes
#LIBRARY "Library/OLED4.interface"
#LIBRARY "Library/Adc.interface"
#LIBRARY "Library/Sleep.interface"

' Wireing
OLED4.PinDB4 = PortB.0
OLED4.PinDB5 = PortB.1
OLED4.PinDB6 = PortB.2
OLED4.PinDB7 = PortB.3
OLED4.PinEN  = PortA.7
OLED4.PinRS  = PortA.3

' Variables
Const VCalib = 25 / 61440	' Voltage calibration: Multiplicator. = 0.00040690104. 25V = 0xF000.
Const ACalib = 3 / 0x23D0	' Ampere calibration: Multiplicator. 3A = 0x23D0
Dim tmpCH1V As Word			' Channel 1 voltage (0x0000-0xFFC0). Only for ISR.
Dim tmpCH1A As Word			' Channel 1 ampere (0x0000-0xFFC0). Only for ISR.
Dim tmpCH2V As Word			' Channel 2 voltage (0x0000-0xFFC0). Only for ISR.
Dim tmpCH2A As Word			' Channel 2 ampere (0x0000-0xFFC0). Only for ISR.
Dim CH1V As Word			' Channel 1 voltage (0x0000-0xFFC0)
Dim CH1A As Word			' Channel 1 ampere (0x0000-0xFFC0)
Dim CH2V As Word			' Channel 2 voltage (0x0000-0xFFC0)
Dim CH2A As Word			' Channel 2 ampere (0x0000-0xFFC0)
Dim ADCCnt As Byte			' ADC sample counter (0..63)
Dim ADCStp As Byte			' ADC step (0..3: 1V, 1A, 2V, 2A)

' Launch the program
Init()
Main()



' Initializes the controller
Procedure Init()
  
  OLED4.Init
  
  'ADC.Comparator.Disable	' Not usable for this chip!
  AVR.ACSRA = 0b10000000	' Disable AC
  AVR.PRR = 0b00001110		' Disable Timer1, Timer0 and USI, leave ADC active
  ADC.Clock = 128			' = 156.250KHz
  ADC.Mode.Free				' Free running mode
  'ADC.Reference = AVCC2	' Not usable for this chip!
  'ADC.Channel = 1			' Not usable for this chip!
  AVR.ADMUX = 0b10000001	' 2.56V reference (1/2), channel 1
  AVR.ADCSRB = 0b01010000	' 2.56V reference (2/2), high gain (32x)
  AVR.DIDR0 = 0b01100011	' Disable I/O on ADC 0, 1, 4, 5
  ADC.Enable				' Enable ADC
  ADC.ISR = OnADC			' Set ISR
  ADC.ISR.Enable			' Enable ADC Interrupt
  
  Sleep.Enable
  Sleep.Mode = AdcDenoise
  
  AVR.Interrupts.Enable		' Enable global interrupts
  
EndProc

' Main application loop
Procedure Main()
  
  OLED4.Cursor.Set(1, 1)
  OLED4.TextD("CH1:")
  OLED4.Cursor.Set(2, 1)
  OLED4.TextD("CH2:")
  
  Do
    
    Asm
      WDR					' Kick the dog
    EndAsm
    
    ' Refresh display if ADC finished
    If ADCCnt = 0 Then
      
      AVR.Interrupts.Disable
      
      ' Update values CH1
      OLED4.Cursor.Set(1, 6)
      OLED4.Text(Format("00.00", CH1V * VCalib) + "V")
      OLED4.Cursor.Set(1, 13)
      OLED4.Text(Format("0.0", FRound(CH1A * ACalib * 10) / 10) + "A")
      'OLED4.Hex(CH1A.HighByte)
      'OLED4.Hex(CH1A.LowByte)
      
      ' Update values CH2
      OLED4.Cursor.Set(2, 6)
      OLED4.Text(Format("00.00", CH2V * VCalib) + "V")
      OLED4.Cursor.Set(2, 13)
      OLED4.Text(Format("0.0", FRound(CH2A * ACalib * 10) / 10) + "A")
      'OLED4.Hex(CH2A.HighByte)
      'OLED4.Hex(CH2A.LowByte)
      
      AVR.Interrupts.Enable
      
    EndIf
    
    Sleep.Now
    
  Loop
  
EndProc



ISR OnADC
  
  ' Add ADC value to sum
  Select Case ADCStp
  Case 0						' New value for CH1 Volt
    tmpCH1V += ADC.ADCW
  Case 1						' New value for CH1 Ampere
    tmpCH1A += ADC.ADCW
  Case 2						' New value for CH2 Volt
    tmpCH2V += ADC.ADCW
  Case 3						' New value for CH2 Ampere
    tmpCH2A += ADC.ADCW
  EndSelect
  
  ' Check data counter. If collected 64 measures switch channel
  If ADCCnt = 63 Then
    ADCStp += 1
    Select Case ADCStp
    Case 1						' CH1 Volt finished, switch to CH1 Ampere and prepare it
      AVR.ADMUX = 0b10000000	' 2.56V reference (1/1), ch0=+, ch1=-
      AVR.ADCSRB = 0b01011000	' 2.56V reference (2/2), high gain (32x)
      tmpCH1A = 0
    Case 2						' CH1 Ampere finished, switch to CH2 Volt and prepare it
      AVR.ADMUX = 0b10000100	' 2.56V reference (1/1), channel 4
      AVR.ADCSRB = 0b01010000	' 2.56V reference (2/2), high gain (32x)
      tmpCH2V = 0
    Case 3						' CH2 Volt finished, switch to CH2 Ampere and prepare it
      AVR.ADMUX = 0b10001110	' 2.56V reference (1/1), ch5=+, ch4=-
      AVR.ADCSRB = 0b01011000	' 2.56V reference (2/2), high gain (32x)
      tmpCH2A = 0
    Case 4						' CH2 Ampere finished, switch to CH1 Volt and prepare it
      AVR.ADMUX = 0b10000001	' 2.56V reference (1/1), channel 1
      AVR.ADCSRB = 0b01010000	' 2.56V reference (2/2), high gain (32x)
      ' Cycle complete, copy working- to result registers
      CH1V = tmpCH1V
      CH1A = tmpCH1A
      CH2V = tmpCH2V
      CH2A = tmpCH2A
      ' ... and start from the beginning
      tmpCH1V = 0
      ADCStp = 0
    EndSelect
    ADCCnt = 0
  Else
    ADCCnt += 1
  EndIf
  
EndISR

Es wird noch die OLED4 Library benötigt (nicht bei LunaAVR enthalten). Sollte ein normales LCD verwendet werden können auch alle Aufrufe von "OLED4" auf "LCD4" geändert werden. Sonst sind keine weiteren Änderungen nötig.
Anhang anzeigen OLED4.zip


Schaltplan:
V3.png
 
Sieht doch nicht schlecht aus.
Das mit der OSCCAL-Kalibrierung hast Du (erstmal) verworfen?
Den Tiny aus der 26er-Serie hast Du wegen der differentiellen ADC-Inputs gewählt, oder?
Aber den externen Quarz brauchst Du bisher eigentlich nicht.

Hmm... die Ausgänge bieten natürlich Verpolungsgefahr - hast Du aber bei solchen Bastelleien immer. Kennzeichnest Du das noch irgendwie?

Achso, sind die Wandler-Module leerlauf- und kurzschlussfest?
 
Hi :)

Ja das mit OSCAL ist erstmal verworfen. Wie im erstem Schaltplan (dem Entwurf) zu sehen ist wollte ich ursprünglich auch noch einen Frequenzzähler mit einbauen (daher der Quartz). Vielleicht kommt das auch noch, aber die eigentliche Netzteil Funktion ist erstmal gegeben und das war mir das Wichtigste :)

Den Tiny hattest du mir ja extra deswegen empfohlen (lang lang ists her). Klappt super auf die Weise den Strom zu messen. Ist nur eine Fummelei die Spannungsteiler einzustellen. Für eine spätere Version werd ich da wohl Präzisionswiederstände nutzen statt Spindeltrimmer. Aber für Prototypen nutz ich die lieber. Try and Error kann so schnell mit einem Schraubendreher korrigiert werden.

Die 3 Wandler sind Leerlauf- und Kurzschlussfest. Wobei die 2 für den Ausgang bei Kurzschluss abschalten bis man die durch wegnehmen der Eingangsspannung zurücksetzt. Etwas ungünstig, aber was solls. Das mit Verpolung ist ein gutes Argument. Ich hab es mir angewöhnt dass GND immer unten, also auf der Platinenseite ist, aber wenn das wer Anders in der Hand hat... Naja ist ja aber kein Problem, kann ja n paar Etiketten ausdrucken und drauf kleben :)
Oder einfach vernünftige Buchsen nutzen (hatte aber keine da). Find das so auch ehrlich gesagt schöner, einfach ein Draht rein. Diese 4mm Bananen Dinger hab ich hier nirgends 0.o

Code:
        CH1          CH2
USB    +++          +++
        ---          ---
 
Hi Tommy,

der Quellcode erinnert ein wenig an Pascal. Aber zu dem Pascal wie ich es mal gelernt habe fehlt doch noch ein bischen was. Darum also nur ähnlich. Aber schön übersichtlich und gut strukturiert

Ist nur eine Fummelei die Spannungsteiler einzustellen. Für eine spätere Version werd ich da wohl Präzisionswiederstände nutzen statt Spindeltrimmer. Aber für Prototypen nutz ich die lieber. Try and Error kann so schnell mit einem Schraubendreher korrigiert werden.

Pack auf beide Seiten der Trimmer Widerstände damit du den Regelbereich eingrenzt. Dann ist das auch keine Fummelei mehr. Also ...

GND ----RRR----TTTT-----RRRR----Shunt (T = Trimmer)

Du mußt nur noch die Widerstände entsprechend anpassen. Da die Eingänge recht hochohmig sind kannst du selbst bei den 10k-Trimmern noch auf beiden Seiten Widerstände ranpacken ohne neue kleinere Trimmer zu besorgen.

Gruß
Dino
 
Soo zwecks Abgleich der Strommessung hab ich jetzt mein hochpräzisen multifunktions Messwiderstand gebastelt ^^
20x 20 Ohm, 0,1%, 0,6W, ergo 1 Ohm (alle parallel).

IMAG0453.jpg


Interessant zu wissen wäre jetzt wie es sich mit der Leistung verhält... Es müssten doch 20 x 0,6W sein, also 12W. Oder nicht?
 
Ist genau das gleiche, als wenn du 2 x Labornetzteile oder Akkus parallel schalten würdest...! Hast ja auch so gesehen die doppelte Leistung ;)
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)