Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Programmeerbare zakvoeding met OLED-display

Componenten en benodigdheden

Arduino UNO
× 1
Arduino Nano R3
× 1
XL 6009 DC DC Boost
× 1
SparkFun Drukknopschakelaar 12 mm
× 1
16 MHz kristal
× 1
Aansluitblokconnector
× 1
Lineaire regelaar met instelbare uitgang
× 1
Lineaire regelaar (7805)
× 1
1N4007 – Diode voor hoge spanning, hoge stroomsterkte
× 1
USB-A naar B-kabel
× 1
Multi-Turn Precisie Potentiometer - 10k ohm (25 Turn)
× 1
OP07 Instrumentatie OpAmp
× 1
Algemene contactdoos
× 1
FR4 Proto Board
× 1
Jumperdraden (algemeen)
× 1
Mannelijke kop 40 positie 1 rij (0,1")
× 1
Weerstand 10k ohm
× 1
Weerstand 22,1k ohm
× 1
Weerstand 1k ohm
× 1
Arduino-vergrendelingsrelais 5v 2A
× 1
SparkFun MCP 4131 Digitale Potentiometer 10k
× 1
Arduino kopertape
× 1
Arduino LM358 Opamp
× 1
Arduino 1306 OLED
× 1

Benodigde gereedschappen en machines

Soldeerbout (algemeen)
Hot lijmpistool (algemeen)
Mini-boormotor

Apps en online services

Arduino IDE

Over dit project

Het idee

Als hobbyisten moeten we vaak onze prototypes van stroom voorzien, spanning, stroom en vermogenslimieten van onze projecten controleren, een nieuw gekocht onderdeel testen. De behoefte aan een variabele voeding is er altijd in deze branche. Maar helaas hebben we niet allemaal bench/lab-voedingen. Het is ook duur als het wordt gekocht, omvangrijk als het moet worden gedragen. Ik was op zoek naar een programmeerbare voeding tegen lagere kosten, met draagbaarheid en productiviteit voor het voeden van mijn prototypes en testcomponenten. Dus besloot ik er een te maken.

Het heeft de volgende kenmerken:

  • Programmeerbaar
  • Oplaadbaar
  • Draagbaar
  • Stapvariabele
  • Spanning/stroom/vermogensmeter
  • Beveiligd relais
  • Aanpasbaar, compact en schattig
  • Cool OLED-gebruikersinterface
  • Gebruikersbediening met drukknop en menugebaseerde navigatie
  • Firmware kan worden geüpgraded voor meer functies!

En de meest veelzijdige voeding voor elektronicaprojecten met een laag vermogen.

Live actie!

Bekijk deze video die de werking van het apparaat demonstreert:

Specificatie van het apparaat

Het apparaat heeft de volgende specificaties:

  • Max. uitgangsstroom DC-belasting:400 mA
  • Spanningsbereik:2,0 volt - 12,0 volt
  • Spanningstap:ongeveer 0,1 volt
  • Beste efficiëntie:75 %
  • Huidige meetnauwkeurigheid:+/- 1 mA
  • Nauwkeurigheid spanningsmeting:+/- 0,02 volt

Houd er rekening mee dat dit apparaat een snel prototype is. Het is mogelijk om 0-30, zelfs negatieve voeding en meer uitgangsstroom te maken door batterijen met hoge capaciteit, extra elektronica en een verbeterd ontwerp te gebruiken.

Werkingsprincipe

Het ontwerp zelf is hardware-intensief. Er gebeuren hier veel dingen. Een ruw blokschema van het systeem ziet er ongeveer zo uit:

De krachtbron is de 3,7 V Li-Po-batterij die via USB oplaadbaar is. Met behulp van een XL6009 DC-DC boost module maken we eerst 15,6 volt uit de Li-Po. Om de MCU te laten werken, maken we ook een 5 Volt met behulp van 7805 Regulator.

De Arduino UNO-kloon Atmega328P is verbonden met 2 Interrupt-gebaseerde gebruikersinvoerschakelaars, een elegante OLED-uitvoerweergave. Rx/Tx/DTR firmware (schets) uploadpoort via USB/serieel vanaf pc. (module 1)

Het hart van het project is de MCP4131 Digitale Potentiometer (Digipot) + LM 358 OpAmp gebaseerde stapspanningsgenerator. Deze spanning is de stuurspanning van de LM317 verstelbare regelaar. (module 2)

Digipot wordt bestuurd vanuit de Arduino via een Pseudo-SPI-achtige opdracht. LM317 is zo ontworpen dat de Output Pin Voltage is altijd 1,25 Volt hoger dan dePinspanning aanpassen op voorwaarde dat de spanning van de INPUT-pin hoog genoeg is (hier 15,6 volt). (module 3)

De stapspanning wordt naar de aanpassingspin gevoerd om variabele output van de Arduino te creëren zoals de gebruiker dat nodig heeft.

De ADC meet alle spanningen die horen bij bewaking en beveiliging; batterijspanning, opgevoerde spanning, laaddetectiespanning en uitgangsspanning worden geconditioneerd via een spanningsdelernetwerk voor het voeden van het ADC-bereik, dat hier 0-1,1 volt is. Ik heb de INTERNE REFERENTIE van Arduino gebruikt die een referentiespanning van 1,1 volt creëert.

Voor de huidige detectie wordt de retour (Load Gnd) van de Output Load in serie geschakeld met 1 Ohm Current Sense Weerstand naar de System Gnd. Wanneer stroom door de externe belastingen vloeit, is er ook een spanningsval in deze zinsweerstand. Deze spanning wordt versterkt via OP07 Precision Operation Amplifier en toegevoerd aan een van de ADC-pinnen.

Ten slotte is voor het opladen van de batterij 5 volt van de USB in serie verbonden met een 4007-diode en een stroombeperkende weerstand van 5 ohm naar de Li-Po-batterij. Dit is een ruwe oplaadmethode, niet de beste voor Li-Po opladen.

Operatie Zomers: De MCP4131 digitale potentiometer creëert stapspanningen met een bereik van 0-5 volt in stappen van ongeveer 40 mV (7-bit 10K Digipot heeft 129 stappen 5V/128 =0,40 mV), die vervolgens 2,5 keer worden versterkt door de LM358 die 0-12,5 geeft volt stuurspanningsbereik met stappen van 0,1 volt. Dit versterkte stapspanningssignaal wordt naar de afstelpen van LM317 gevoerd. LM317 genereert een uitgangsspanning van V_Step+1,25 Volt die wordt geleverd aan de externe belastingen. De retour/aarde van de externe belasting is verbonden met de interne aarde via 1 Ohm Current Sense-weerstand. Stel:x mA stroom loopt naar externe belasting, het zal x . creëren mV-daling (wet van ohm V=I*R) op de stroomdetectieweerstand van 1 ohm. Dit kleine spanningssignaal wordt toegevoerd aan Low Offset (10uV) OpAmp OP07 geconfigureerd met 2,5X versterking, die 2,5x zal genereren mV-uitgang. De Arduino ADC is geconfigureerd met een interne referentie van 1,1 volt, zodat spanningen van 0 - 1100 mV kunnen worden gedetecteerd in stappen van ongeveer 1 mV (1100/1023). Uitgang van OP07 is verbonden met Arduino ADC voor stroomdetectie. Daarom is de stroomlimiet 400mA. Het kan worden verhoogd/verlaagd door de versterking van OP07 te wijzigen. Op dezelfde manier kan het uitgangsspanningsbereik worden gewijzigd door de boost-spanning en versterking van LM358 te wijzigen. Andere spanningen worden gemeten met resistieve spanningsdelernetwerkverzwakkende spanningen die passen bij het ADC-bereik. Het vergrendelingsrelais heeft 2 spoelen. Door kortstondig vermogen toe te passen op een van de spoel, kunnen relaiscontacten worden geschakeld. Eenmaal geschakeld blijft hij daar, dus de spoel wordt onmiddellijk uitgeschakeld.

Het project bouwen

Eerst beginnen we met een enkele schakeldoos en maken de nodige sneden en uitlijningen voor het plaatsen van de batterij, USB-oplaadpoort, aan / uit-schakelaar, enz.

Vervolgens wordt het koellichaam gemaakt met kopertape en munt voor de DC-DC-boostmodule.

De boost-module wordt in de contactdoos geplaatst:

Met behulp van bovenstaande onderdelen worden de volgende 3 modules gemaakt:

  • Arduino + I/O + besturingsmodule
  • Stapspanning en instelbare regelmodule
  • Huidige detectiemodule

Eindelijk zijn de spinnenwebverbindingen tussen alle borden verbonden en gesoldeerd.

Nadat we de hete lijm als vulmiddel hebben gebruikt, hebben we het eindelijk:

Ontwikkelen van de firmware en gebruiksprocedure

De firmware (Arduino Sketch) is nu 1.0.2 Beta. Niet alle functies zijn momenteel beschikbaar. Maar de belangrijkste functies zoals het regelen van de spanning, het aansluiten/ontkoppelen van relais, het bekijken van informatie zijn ingeschakeld. In de void setup() er zijn weinig initialisatiefuncties om de Arduino-pinnen op te warmen die zijn gekoppeld aan verschillende externe hardware.

INVOER :Er zijn 2 op interrupt gebaseerde ingangsknoppen voor het verhogen/verlagen van de uitgangsspanning, toegangsmenu (niet beschikbaar op deze versie). INT0 &INT1 op Arduino Pin 2 en 3 zijn gecodeerd voor FALLING EDGE INTERRUPT. Je ziet 2 condensatoren parallel staan ​​met mechanische schakelaars voor de-bouncing. Er is een code geschreven om onderbrekingen te activeren wanneer de gebruiker op deze schakelaars drukt om de uitgang via relais in/uit te schakelen of de spanning te verhogen/verlagen (bèta).

UITVOER :De 1306 OLED toont uitgangsinformatie die gegevens verkrijgt van ADC, interne timer (voor de uptime van het apparaat) en vlagvariabelen om de gebruiker te informeren over de status van de uitgang in-/uitschakelen. Gebaseerd op de U8G-bibliotheek drukt de OLED informatie af als tekst en numeriek. Ik heb plannen om grafische (analoge) weergave te gebruiken.

5 digitale pinnen van SSD1306 (OLED van Waveshare) clk,din,cs,d/c,res zijn verbonden met Arduino 10, 9, 11, 13, 12 pinnen en dienovereenkomstig geprogrammeerd. In de hoofdlus update_display() functie wordt elke keer aangeroepen om de informatie op de OLED bij te werken.

Interne timer 1 van Atmega328P is geconfigureerd om periodiek elke seconde te activeren om de tijd bij te houden.

CONTROLE: De MCP 4131 digitale potentiometer is een controller met increment_digipot() & decrement_digipot() functies waarbij gegevens worden verschoven met de juiste kloksnelheid en vertraging met behulp van Pin 6, 7, 8 als CS, Clk, Data Pins. Het is als een langzame zachte SPI. Aangezien ik Hardware SPI-pinnen al ergens anders heb opgebruikt, was dit toen de enige oplossing.

Twee digitale pinnen 4 &5 worden gebruikt om het vergrendelingsrelais te besturen. Een korte hoge puls wordt toegevoerd aan de relais-aandrijftransistors om de 2 spoelen te bekrachtigen om het relais om te draaien. Het gebeurt zowel automatisch (bij overbelasting/kortsluiting) als handmatig door de gebruiker.

ADC: De calc_VI() functie in de hoofdlus voert analogRead uit om 20 keer de gemiddelde spannings- en stroominformatie te krijgen en de variabele bij te werken voor nieuwe informatie die vervolgens op het display wordt afgedrukt

De schets is geschreven in meerdere tabbladen om code te ordenen voor verschillende functies die aan verschillende bewerkingen zijn gekoppeld. Er zijn ADC, Digipot, Display_Fn , Interrupt, Relay en Timer tabbladen die alle door de gebruiker gedefinieerde functies rangschikken. Ik zal ook proberen meer opmerkingen toe te voegen waarin alle functies worden uitgelegd, maar je zou het niet moeilijk moeten vinden om te begrijpen, want die functies zijn gebaseerd op meerdere Arduino-functies die bepaalde taken uitvoeren.

Beperking

Er zijn enkele ernstige beperkingen van dit apparaat:

  • Spanning kan niet lager zijn dan 2,0 V
  • Spanninguitgang is getrapt, niet continu
  • Stroommeting zorgt voor grondverschuiving voor hoge stroom
  • ADC-meting heeft lage resoluties
  • Efficiëntie is de slechtste in zijn klasse bij laagspanning en hoge stroombelasting
  • Niet-standaard, enigszins onveilige Li-Po-oplading

Referenties

U kunt meer leren over elk onderdeel in deze tutorials:

  • Draaipotentiometer
  • Knop-zelfstudie

Conclusie &

Deze programmeerbare voeding zal mij helpen om projecten/prototypes efficiënter te maken. Meting van spanningsstroom zonder multimeter te gebruiken.


Code

  • Arduino programmeerbare draagbare voeding
  • Code versie 1.0.1 bèta
  • Code versie 1.0.2 bèta
  • Code versie 1.0.3
Arduino programmeerbare draagbare voedingArduino
Ver 1.0.1 met Pin-out info in opmerkingen
// Pin Reset, D0 &D1 voor het uploaden van Sketch// Pin D9,D10,D11,D12,D13 voor het bedienen van OLED-display// ADC A0 Pin voor Sensing V_boost// ADC A2-pin voor detectie van V_batt (LiPo)// ADC A3-pin voor detectie van I_Output (belasting)// ADC A4-pin voor detectie van V_USB (opladen)// ADC A5-pin voor detectie van V_Output (laden)// 2 spoelen-aandrijfpin van het vergrendelingsrelais D4 &D5#define RC1 4#define RC2 5// Gebruikersingangsschakelaars aangesloten op pin D2 &D3#define SW1 2#define SW2 3// Pin D6,D7,D8 voor digitale potbesturingspinnen#define CS_PIN 6#define CLK_PIN 7 #define DATA_PIN 8vluchtige uint8_t Switch1 =1;vluchtige 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-schermbedieningspinnen//SSD1306 oled waveshare (clk,din,cs,d/c,res);// DIT VOOR WAVESHAREU8GLIB_SSD1306_128X64 u8g(10, 9,11, 13,12); void setup (void) { // flip screen, indien nodig analogReference (INTERN); u8g.setRot180(); button_init(); relais_init(); init_timer1(); digipot_init(); }void loop(void) { update_display(); calc_VI(); if (Switch1==0) { rc1_latch(); Schakelaar1=1; increment_digipot(); } if (Switch2==0) { rc2_latch(); Schakelaar2=1; decrement_digipot(); } vertraging(100); }
Code Ver 1.0.1 BetaC/C++
Geen voorbeeld (alleen downloaden).
Code Ver 1.0.2 BetaC/C++
Bugfix voor tekst/vakuitlijningen
Bugfix voor overbelastingsreis

In de volgende release worden nog een paar bugs opgelost
Geen voorbeeld (alleen downloaden).
Code versie 1.0.3C/C++
Bugfix-uitgangsrelais uitgeschakeld tijdens opstarten
Bugfix automatisch ingestelde uitgangsspanning 5,00 v na opstarten
Geen voorbeeld (alleen downloaden).

Schema's

Getekend op Whiteboard! https://circuits.io/circuits/4762970-arduino-based-programmable-power-supply

Productieproces

  1. Arduino Pong Game - OLED-scherm
  2. Bedien muntvangers met Arduino
  3. Arduino-controlecentrum
  4. Arduino Temp. Monitor en realtimeklok met 3.2-weergave
  5. Arduino met Bluetooth om een ​​LED te bedienen!
  6. Arduino Power
  7. Spelen met Nextion Display
  8. DIY voltmeter met Arduino en een Nokia 5110-display
  9. Arduino-trainingsplatform
  10. Bouw de Fridgeye-app met een Nextion-display
  11. Zonnestraling meten met Arduino