Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Programmierbares Taschennetzteil mit OLED-Display

Komponenten und Verbrauchsmaterialien

Arduino UNO
× 1
Arduino Nano R3
× 1
XL 6009 DC DC Boost
× 1
SparkFun Drucktastenschalter 12 mm
× 1
16-MHz-Kristall
× 1
Anschlussklemmenblock
× 1
Linearregler mit einstellbarem Ausgang
× 1
Linearregler (7805)
× 1
1N4007 – Hochspannungs-, Hochstrom-Nenndiode
× 1
USB-A-zu-B-Kabel
× 1
Multi-Turn-Präzisionspotentiometer - 10k Ohm (25 Umdrehungen)
× 1
OP07 Instrumentation OpAmp
× 1
Generic Socket Box
× 1
FR4 Proto Board
× 1
Jumper (generisch)
× 1
Männliche Kopfzeile 40 Position 1 Zeile (0.1")
× 1
Widerstand 10k Ohm
× 1
Widerstand 22,1 kOhm
× 1
Widerstand 1k Ohm
× 1
Arduino Stromstoßrelais 5v 2A
× 1
SparkFun MCP 4131 Digitalpotentiometer 10k
× 1
Arduino Kupferband
× 1
Arduino LM358 Opamp
× 1
Arduino 1306 OLED
× 1

Notwendige Werkzeuge und Maschinen

Lötkolben (generisch)
Heißklebepistole (generisch)
Mini-Bohrmotor

Apps und Onlinedienste

Arduino-IDE

Über dieses Projekt

Die Idee

Als Bastler müssen wir häufig unsere Prototypen mit Strom versorgen, Spannung, Strom und Leistungsgrenzen unserer Projekte überprüfen, eine neu gekaufte Komponente testen. Die Notwendigkeit einer variablen Stromversorgung ist in dieser Branche immer vorhanden. Aber leider haben nicht alle von uns Labor- / Labornetzteile. Es ist auch teuer, wenn es gekauft wird, und sperrig, wenn es getragen werden muss. Ich war auf der Suche nach einem programmierbaren Netzteil zu geringeren Kosten, mit Portabilität und Produktivität, um meine Prototypen mit Strom zu versorgen und Komponenten zu testen. Also beschloss ich, einen zu machen.

Es hat die folgenden Funktionen:

  • Programmierbar
  • Wiederaufladbar
  • Tragbar
  • Schrittvariable
  • Spannungs-/Strom-/Leistungsmesser
  • Geschütztes Relais
  • Anpassbar, kompakt und niedlich
  • Coole OLED-Benutzeroberfläche
  • Benutzersteuerung per Tastendruck und menübasierte Navigation
  • Firmware aktualisierbar für mehr Funktionen!

Und vielseitigstes Netzteil für Low-Power-Elektronikprojekte.

Live-Action!

Sehen Sie sich dieses Video an, das die Gerätebedienung demonstriert:

Spezifikation des Geräts

Das Gerät hat folgende Spezifikation:

  • Max. Ausgangs-DC-Laststrom:400 mA
  • Spannungsbereich:2,0 Volt - 12,0 Volt
  • Spannungsschritt:ca. 0,1 Volt
  • Beste Effizienz:75 %
  • Genauigkeit der Strommessung:+/- 1 mA
  • Genauigkeit der Spannungsmessung:+/- 0,02 Volt

Bitte beachten Sie, dass dieses Gerät ein schneller Prototyp ist. Es ist möglich, 0-30, sogar eine negative Versorgung und mehr Ausgangsstrom zu erreichen, indem Batterien mit hoher Kapazität, zusätzliche Elektronik und ein verbessertes Design verwendet werden.

Arbeitsprinzip

Das Design selbst ist hardwareintensiv. Hier passiert viel. Ein grobes Blockdiagramm des Systems sieht in etwa so aus:

Stromquelle ist der 3,7 V Li-Po Akku, der über USB wiederaufladbar ist. Mit einem XL6009 DC-DC-Boost-Modul machen wir zuerst 15,6 Volt aus dem Li-Po. Um die MCU zu betreiben, stellen wir auch einen 5 Volt mit dem 7805-Regler her.

Der Arduino UNO-Klon Atmega328P ist mit 2 Interrupt-basierten Benutzereingabeschaltern verbunden, einem eleganten OLED-Ausgabedisplay. Rx/Tx/DTR-Firmware (Skizze) Upload-Port über USB/Seriell vom PC. (Modul 1)

Das Herzstück des Projekts ist das MCP4131 Digital Potentiometer (Digipot) + LM 358 OpAmp basierender Stufenspannungsgenerator. Diese Spannung ist die Steuerspannung des einstellbaren Reglers LM317. (Modul 2)

Digipot wird vom Arduino über einen Pseudo-SPI-ähnlichen Befehl gesteuert. LM317 ist so ausgelegt, dass die Ausgangs-Pin-Spannung ist immer 1,25 Volt höher als die Pin-Spannung anpassen vorausgesetzt, die Spannung des INPUT-Pins ist hoch genug (hier 15,6 Volt). (Modul 3)

Die Schrittspannung wird dem Adjust-Pin zugeführt, um einen variablen Ausgang vom Arduino nach Bedarf des Benutzers zu erzeugen.

Der ADC misst alle mit Überwachung und Schutz verbundenen Spannungen; Batteriespannung, Boostspannung, Ladesensorspannung und Ausgangsspannung werden durch ein Spannungsteilernetzwerk aufbereitet, um den ADC-Bereich zu speisen, der hier 0-1,1 Volt beträgt. Ich habe die INTERNE REFERENZ von Arduino verwendet, die eine Referenzspannung von 1,1 Volt erzeugt.

Für die Strommessung wird die Rückleitung (Load Gnd) von der Ausgangslast in Reihe mit dem 1 Ohm Strommesswiderstand an die Systemmasse angeschlossen. Wenn Strom durch die externen Lasten fließt, kommt es auch in diesem Sense-Widerstand zu einem Spannungsabfall. Diese Spannung wird durch den OP07 Precision Operations Amplifier verstärkt und einem der ADC-Pins zugeführt.

Schließlich werden zum Laden der Batterie 5 Volt vom USB in Reihe mit einer 4007-Diode und einem 5 Ohm Strombegrenzungswiderstand an die Li-Po-Batterie angeschlossen. Dies ist eine grobe Lademethode, nicht die beste zum Aufladen von Li-Po.

Operation Summery: Das digitale Potentiometer MCP4131 erzeugt Schrittspannungen im Bereich von 0-5 Volt in Schritten von etwa 40 mV (7-Bit 10K Digipot hat 129 Schritte 5 V/128 =0,40 mV), die dann vom LM358 2,5-fach verstärkt werden, was 0-12,5 ergibt Volt Steuerspannungsbereich in Schritten von 0,1 Volt. Dieses verstärkte Stufenspannungssignal wird dem Adjust Pin von LM317 zugeführt. LM317 erzeugt eine Ausgangsspannung von V_Step+1,25 Volt, die den externen Lasten zugeführt wird. Die Rückleitung/Masse der externen Last ist über einen 1 Ohm Strommesswiderstand mit der internen Masse verbunden. Angenommen:x mA Strom fließt zur externen Last, es erzeugt x mV-Abfall (Ohms Gesetz V=I*R) am 1 Ohm Strommesswiderstand. Dieses kleine Spannungssignal wird dem Low Offset (10uV) OpAmp OP07 zugeführt, der mit 2,5-facher Verstärkung konfiguriert ist, was 2,5x . erzeugt mV-Ausgang. Der Arduino ADC ist mit einer internen Referenz von 1,1 Volt konfiguriert, sodass Spannungen von 0 -1100 mV in Schritten von etwa 1 mV (1100/1023) erfasst werden können. Der Ausgang von OP07 ist zur Strommessung mit dem Arduino ADC verbunden. Aus diesem Grund beträgt die Stromgrenze 400 mA. Sie kann durch Änderung der Verstärkung von OP07 erhöht/verringert werden. In ähnlicher Weise kann der Ausgangsspannungsbereich durch Ändern der Boost-Spannung und Verstärkung des LM358 geändert werden. Andere Spannungen werden mit einem ohmschen Spannungsteilernetzwerk gemessen, das die Spannungen dämpft, um in den ADC-Bereich zu passen. Das Latch-Relais hat 2 Spulen. Durch Anlegen einer kurzzeitigen Spannung an eine der Spulen können Relaiskontakte geschaltet werden. Nach dem Umschalten bleibt es dort, sodass die Spule sofort ausgeschaltet wird.

Das Projekt aufbauen

Zuerst beginnen wir mit einer einzelnen Schalterdose und nehmen die notwendigen Schnitte und Ausrichtungen vor, um den Akku, den USB-Ladeanschluss, den Netzschalter usw. zu platzieren.

Als nächstes wird der Kühlkörper mit Kupferband und Münze für das DC-DC-Boost-Modul hergestellt.

Das Boost-Modul befindet sich in der Sockelbox:

Aus den obigen Teilen werden die folgenden 3 Module hergestellt:

  • Arduino + E/A + Steuermodul
  • Stufenspannungs- und einstellbares Reglermodul
  • Stromerfassungsmodul

Schließlich werden die Spinnennetzverbindungen zwischen allen Platinen verbunden und gelötet.

Nachdem wir den Heißkleber als Füllstoff verwendet haben, haben wir es endlich:

Entwicklung der Firmware und des Betriebsverfahrens

Die Firmware (Arduino Sketch) ist derzeit 1.0.2 Beta. Derzeit sind nicht alle Funktionen verfügbar. Aber die wichtigsten Funktionen wie Spannungsregelung, Relais zum Verbinden/Trennen und Anzeigen von Informationen sind aktiviert. Im void setup() Es gibt nur wenige Initialisierungsfunktionen zum Aufwärmen der Arduino-Pins, die mit unterschiedlicher externer Hardware verbunden sind.

EINGABE :Es gibt 2 unterbrechungsbasierte Eingabetasten zum Erhöhen/Verringern der Ausgangsspannung, Zugriff auf das Menü (bei dieser Version nicht verfügbar). INT0 &INT1 auf Arduino Pin 2 und 3 sind für FALLING EDGE INTERRUPT codiert. Sie sehen 2 Kondensatoren parallel mit mechanischen Schaltern zum Entprellen. Code wird geschrieben, um Interrupts auszulösen, wenn der Benutzer diese Schalter drückt, um den Ausgang über das Relais ein- / auszuschalten oder die Spannung zu erhöhen / zu verringern (Beta).

AUSGABE :Das 1306 OLED zeigt Ausgangsinformationen an, die Daten vom ADC, internen Timer (für die Gerätebetriebszeit) und Flag-Variablen erfassen, um den Benutzer über den Aktivierungs-/Deaktivierungsstatus des Ausgangs zu informieren. Basierend auf der U8G-Bibliothek druckt das OLED Informationen als Text und Zahlen. Ich habe Pläne für die Verwendung einer grafischen (analogen) Darstellung.

5 digitale Pins von SSD1306 (OLED von Waveshare) clk,din,cs,d/c,res werden mit Arduino 10, 9, 11, 13, 12 Pins verbunden und entsprechend programmiert. In der Hauptschleife update_display() Funktion wird jedes Mal aufgerufen, um die Informationen auf dem OLED zu aktualisieren.

Der interne Timer 1 des Atmega328P ist so konfiguriert, dass er regelmäßig alle 1 Sekunde ausgelöst wird, um die Zeit zu verfolgen.

KONTROLLE: Das digitale Potentiometer MCP 4131 ist ein Controller mit increment_digipot() & decrement_digipot() Funktionen, bei denen Daten mit richtiger Taktung und Verzögerung unter Verwendung von Pin 6, 7, 8 als CS, Clk, Data Pins herausgeschoben werden. Es ist wie langsames weiches SPI. Da ich schon woanders Hardware-SPI-Pins verbraucht habe, war dies damals die einzige Lösung.

Zwei digitale Pins 4 und 5 werden verwendet, um das Stromstoßrelais zu steuern. Ein kurzer hoher Impuls wird den Relaistreibertransistoren zugeführt, um die 2 Spulen zu erregen, um das Relais umzuschalten. Dies geschieht sowohl automatisch (bei Überlast/Kurzschluss) als auch manuell durch den Benutzer.

ADC: Der calc_VI() Funktion in der Hauptschleife führt analogRead . aus um 20-fach gemittelte Spannungs- und Strominformationen zu erhalten und die Variable für neue Informationen zu aktualisieren, die dann auf dem Display gedruckt werden

Die Skizze ist in mehrere Registerkarten geschrieben, um Code für verschiedene Funktionen zu organisieren, die mit verschiedenen Operationen verbunden sind. Es gibt ADC, Digipot, Display_Fn , Interrupt, Relais und Timer-Registerkarten mit allen benutzerdefinierten Funktionen. Ich werde auch versuchen, weitere Kommentare hinzuzufügen, die alle Funktionen erklären, aber Sie sollten es nicht schwer zu verstehen finden, da diese Funktionen auf mehreren Arduino-Funktionen basieren, die bestimmte Aufgaben ausführen.

Einschränkung

Es gibt einige schwerwiegende Einschränkungen dieses Geräts:

  • Spannung darf nicht unter 2,0 V sinken
  • Spannungsausgang wird nicht kontinuierlich gestuft
  • Strommessung erzeugt Masseverschiebung bei hohen Strömen
  • ADC-Messung hat niedrige Auflösungen
  • Der Wirkungsgrad ist der schlechteste seiner Klasse bei Niederspannungs-Hochstrombelastung
  • Nicht standardmäßiges, etwas unsicheres Aufladen von Li-Po

Referenzen

In diesen Tutorials erfahren Sie mehr über die einzelnen Komponenten:

  • Drehpotentiometer
  • Schaltflächen-Tutorial

Fazit &

Dieses programmierbare Netzteil wird mir helfen, Projekte/Prototypen effizienter zu gestalten. Messung der Spannung Strom Leistung ohne Multimeter.


Code

  • Programmierbares tragbares Arduino-Netzteil
  • Code Ver 1.0.1 Beta
  • Code Ver 1.0.2 Beta
  • Code-Version 1.0.3
Arduino programmierbares tragbares NetzteilArduino
Ver 1.0.1 mit Pin-Out-Info in den Kommentaren
// Pin Reset, D0 &D1 zum Hochladen von Sketch// Pin D9, D10, D11, D12, D13 zum Steuern des OLED-Displays// ADC A0 Pin zum Sensing V_boost// ADC A2 Pin zum Erfassen von V_batt (LiPo) // ADC A3 Pin zum Erfassen von I_Output (Load) // ADC A4 Pin zum Erfassen von V_USB (Laden) // ADC A5 Pin zum Erfassen von V_Output (Load) // Latch Relay's 2 Coils Driving Pin D4 &D5#define RC1 4#define RC2 5// Benutzereingangsschalter verbunden mit Pin D2 &D3#define SW1 2#define SW2 3// Pin D6,D7,D8 für Digital Pot Control Pins#define CS_PIN 6#define CLK_PIN 7 #define DATA_PIN 8volatile uint8_t Switch1 =1;volatile uint8_t Switch2 =1;float V_Out =0.0;float I_Out =0.0;float V_Bat =0.0;float V_Bst =0.0;float V_Chg =0.0;uint32_t time =0;#include "U8glib. h"// OLED Display Control Pins//SSD1306 Oled Waveshare (clk,din,cs,d/c,res);// DIES FÜR WAVESHAREU8GLIB_SSD1306_128X64 u8g(10, 9,11, 13,12); Void setup (void) {// Bildschirm umdrehen, falls erforderlich analogReference (INTERNAL); u8g.setRot180(); button_init(); Relais_init(); init_timer1(); digipot_init(); }void loop (void) { update_display(); calc_VI(); if (Switch1==0) {rc1_latch(); Schalter1=1; inkrement_digipot(); aufrechtzuerhalten. Wenn (Switch2==0) {rc2_latch(); Schalter2=1; decrement_digipot(); } Verzögerung (100); }
Code Version 1.0.1 BetaC/C++
Keine Vorschau (nur Download).
Code Version 1.0.2 BetaC/C++
Fehlerbehebung für Text-/Box-Ausrichtungen
Fehlerbehebung für Überlastungsauslöser

Einige weitere Fehler werden in der nächsten Version behoben
Keine Vorschau (nur Download).
Code Version 1.0.3C/C++
Fehler behoben, bei dem das Ausgangsrelais während des Einschaltens deaktiviert wurde
Bugfix Automatische Einstellung der Ausgangsspannung auf 5,00 V nach dem Einschalten
Keine Vorschau (nur Download).

Schaltpläne

Auf Whiteboard gezeichnet! https://circuits.io/circuits/4762970-arduino-based-programmable-power-supply

Herstellungsprozess

  1. Arduino Pong-Spiel - OLED-Display
  2. Münzprüfer mit Arduino steuern
  3. Arduino-Kontrollzentrum
  4. Arduino-Temp. Monitor und Echtzeituhr mit 3.2 Display
  5. Arduino mit Bluetooth zur Steuerung einer LED!
  6. Arduino-Power
  7. Mit Nextion Display spielen
  8. DIY Voltmeter mit Arduino und einem Nokia 5110 Display
  9. Arduino-Schulungsplattform
  10. Erstellen Sie die Fridgeye-App mit einem Nextion-Display