Inhoudsopgave:

Digitale USB C Powered Bluetooth Powersupply - Ajarnpa
Digitale USB C Powered Bluetooth Powersupply - Ajarnpa

Video: Digitale USB C Powered Bluetooth Powersupply - Ajarnpa

Video: Digitale USB C Powered Bluetooth Powersupply - Ajarnpa
Video: Power Anything with USB-C Instead! (USB PD DIY) 2024, Juli-
Anonim
Digitale USB C-aangedreven Bluetooth-voeding
Digitale USB C-aangedreven Bluetooth-voeding
Digitale USB C Powered Bluetooth Powersupply
Digitale USB C Powered Bluetooth Powersupply
Digitale USB C-aangedreven Bluetooth-voeding
Digitale USB C-aangedreven Bluetooth-voeding
Digitale USB C-aangedreven Bluetooth-voeding
Digitale USB C-aangedreven Bluetooth-voeding

Altijd al een voeding willen hebben die je onderweg kunt gebruiken, zelfs zonder een stopcontact in de buurt? En zou het niet gaaf zijn als het ook nog eens heel precies, digitaal en bestuurbaar was via pc en je telefoon?

In deze instructable laat ik je zien hoe je precies dat kunt bouwen: een digitale voeding, die wordt gevoed via USB C. Het is Arduino-compatibel en kan worden bestuurd via de pc via USB of via je telefoon via Bluetooth.

Dit project is een evolutie van mijn vorige voeding, die op batterijen werkte en een display en knoppen heeft. Bekijk het hier! Ik wilde echter kleiner gaan, dus daarom heb ik dit gemaakt!

De voeding kan worden gevoed via een USB C-batterijbank of telefoonoplader. Dit zorgt voor maximaal 15 W vermogen, wat voldoende is om de meeste elektronica met een laag vermogen van stroom te voorzien! Om een goede gebruikersinterface op zo'n klein apparaat te hebben, heb ik Bluetooth en een Android-app voor de bediening toegevoegd. Dit maakt deze voeding ultradraagbaar!

Ik zal het hele ontwerpproces laten zien en alle projectbestanden zijn te vinden op mijn GitHub-pagina:

Laten we beginnen!

Stap 1: Functies en kosten

Functies en kosten
Functies en kosten

Functies

  • Aangedreven door USB C
  • Bediend via Android-app via Bluetooth
  • Bediening via Java via USB C
  • Constante spanning en constante stroommodi
  • Gebruikt een lineaire regelaar met weinig ruis, voorafgegaan door een tracking-preregulator om vermogensdissipatie te minimaliseren
  • Aangedreven door ATMEGA32U4, geprogrammeerd met Arduino IDE
  • Kan worden gevoed door een USB C-batterijbank om het draagbaar te maken
  • USB C- en Apple-opladerdetectie
  • Banaanstekkers met een tussenafstand van 18 mm voor compatibiliteit met BNC-adapters

Specificaties:

  • 0 - 1A, stappen van 1 mA (10 bit DAC)
  • 0 - 25V, stappen van 25 mV (10 bit DAC) (echte 0V-werking)
  • Spanningsmeting: 25 mV resolutie (10 bit ADC)
  • Stroommeting:< 40mA: 10uA resolutie (ina219)< 80mA: 20uA resolutie (ina219)< 160mA: 40uA resolutie (ina219)< 320mA: 80uA resolutie (ina219)> 320mA: 1mA resolutie (10 bit ADC)

Kosten

De complete voeding kostte me ongeveer $ 100, met alle eenmalige componenten. Hoewel dit misschien duur lijkt, kosten voedingen met veel minder prestaties en functies vaak meer. Als u het niet erg vindt om uw componenten van ebay of aliexpress te bestellen, zou de prijs dalen tot ongeveer $ 70. Het duurt langer voordat de onderdelen binnen zijn, maar het is een haalbare optie.

Stap 2: Schema en werkingstheorie

Schema en werkingstheorie
Schema en werkingstheorie

Om de werking van het circuit te begrijpen, zullen we naar het schema moeten kijken. Ik heb het opgedeeld in functionele blokken, zodat het makkelijker te begrijpen is; Ik zal dus ook stap voor stap de werking uitleggen. Dit deel is behoorlijk diepgaand en vereist een goede elektronica kennis. Als u alleen wilt weten hoe u het circuit moet bouwen, kunt u doorgaan naar de volgende stap.

Hoofdblok

De werking is gebaseerd op de LT3080-chip: het is een lineaire spanningsregelaar, die op basis van een stuursignaal spanningen kan verlagen. Dit stuursignaal wordt gegenereerd door een microcontroller; hoe dit wordt gedaan, wordt later in detail uitgelegd.

Spanningsinstelling

Het circuit rond de LT3080 genereert de juiste stuursignalen. Eerst bekijken we hoe de spanning wordt ingesteld. De spanningsinstelling van de microcontroller is een PWM-signaal (PWM_Vset), dat wordt gefilterd door een laagdoorlaatfilter (C23 & R32). Dit levert een analoge spanning op - tussen 0 en 5 V - evenredig met de gewenste uitgangsspanning. Aangezien ons uitgangsbereik 0 - 25 V is, zullen we dit signaal met een factor 5 moeten versterken. Dit wordt gedaan door de niet-inverterende opamp-configuratie van U7C. De versterking naar de ingestelde pin wordt bepaald door R31 en R36. Deze weerstanden zijn 0,1% tolerant om fouten te minimaliseren. R39 en R41 doen er hier niet toe, omdat ze deel uitmaken van de feedbacklus.

Huidige instelling

Deze set-pin kan ook worden gebruikt voor de tweede instelling: huidige modus. We willen de stroomafname meten en de uitgang uitschakelen wanneer deze de gewenste stroom overschrijdt. Daarom beginnen we opnieuw met een PWM-signaal (PWM_Iset), gegenereerd door de microcontroller, dat nu laagdoorlaatfilter is en verzwakt om van een bereik van 0 - 5 V naar een bereik van 0 - 2,5 V te gaan. Deze spanning wordt nu vergeleken met de spanningsval over de stroomdetectieweerstand (ADC_Iout, zie hieronder) door de comparatorconfiguratie van opamp U1B. Als de stroom te hoog is, zal deze een led aanzetten en ook de ingestelde lijn van de LT3080 naar aarde trekken (via Q1), waardoor de uitgang wordt uitgeschakeld. Het meten van de stroom en het genereren van het signaal ADC_Iout wordt als volgt gedaan. De uitgangsstroom vloeit door weerstand R22. Als er stroom door deze weerstand vloeit, ontstaat er een spanningsval, die we kunnen meten, en deze wordt voor de LT3080 geplaatst, aangezien de spanningsval erover de uitgangsspanning niet mag beïnvloeden. De spanningsval wordt gemeten met een verschilversterker (U7B) met een versterking van 5. Dit resulteert in een spanningsbereik van 0 - 2,5 V (daarover later meer), vandaar de spanningsdeler bij het PWM-signaal van de stroom. De buffer (U7A) is er om ervoor te zorgen dat de stroom die naar de weerstanden R27, R34 en R35 vloeit niet door de stroomdetectieweerstand gaat, wat de uitlezing zou beïnvloeden. Merk ook op dat dit een rail-to-rail opamp moet zijn, omdat de ingangsspanning op de positieve ingang gelijk is aan de voedingsspanning. De niet-inverterende versterker is alleen voor de koersmeting, voor zeer nauwkeurige metingen hebben we de INA219-chip aan boord. Deze chip stelt ons in staat om zeer kleine stromen te meten, en wordt aangesproken via I2C.

Extra dingen

Aan de uitgang van de LT3080 hebben we nog wat meer spullen. Allereerst is er een stroomput (LM334). Deze trekt een constante stroom van 677 uA (ingesteld door weerstand R46), om de LT3080 te stabiliseren. Het is echter niet verbonden met aarde, maar met VEE, een negatieve spanning. Dit is nodig om de LT3080 tot 0 V te laten werken. Bij aansluiting op aarde zou de laagste spanning ongeveer 0,7 V zijn. Dit lijkt laag genoeg, maar houd er rekening mee dat dit ons verhindert de voeding volledig uit te schakelen. Helaas bevindt dit circuit zich aan de uitgang van de LT3080, wat betekent dat de stroom zal bijdragen aan de uitgangsstroom die we willen meten. Gelukkig is het constant, zodat we voor deze stroom kunnen kalibreren. De zenerdiode D7 wordt gebruikt om de uitgangsspanning te klemmen als deze boven 25 V komt, en de weerstandsdeler verlaagt het uitgangsspanningsbereik van 0 - 25 V tot 0 - 2,5 V (ADC_Vout). De buffer (U7D) zorgt ervoor dat de weerstanden geen stroom trekken van de uitgang.

Laad pomp

De negatieve spanning die we eerder noemden wordt opgewekt door een merkwaardig circuit: de ladingspomp. Het wordt gevoed door 50% PWM van de microcontroller (PWM).

Boost-omzetter

Laten we nu eens kijken naar de ingangsspanning van ons hoofdblok: VCC. We zien dat het 5 - 27V is, maar wacht, USB geeft maximaal 5 V? Inderdaad, en daarom moeten we de spanning opkrikken, met een zogenaamde boost-converter. We kunnen de spanning altijd verhogen tot 27 V, ongeacht welke output we willen; dit zou echter veel stroom verspillen in de LT3080 en het zou lekker heet worden! Dus in plaats van dat te doen, verhogen we de spanning tot iets meer dan de uitgangsspanning. Ongeveer 2,5 V hoger is geschikt om rekening te houden met de spanningsval in de stroomdetectieweerstand en de uitvalspanning van de LT3080. De spanning wordt ingesteld door weerstanden op het uitgangssignaal van de boost-converter. Om deze spanning on-the-fly te wijzigen, gebruiken we een digitale potentiometer, de MCP41010, die wordt aangestuurd via SPI.

USB C

Dit leidt ons naar de echte ingangsspanning: de USB-poort! De reden voor het gebruik van USB C (USB type 3.1 om precies te zijn, USB C is gewoon het type connector) is omdat het een stroom van 3A bij 5V toelaat, dat is al behoorlijk wat vermogen. Maar er is een addertje onder het gras, het apparaat moet compliant zijn om deze stroom te trekken en te 'onderhandelen' met het hostapparaat. In de praktijk gebeurt dit door twee 5,1k pulldown-weerstanden (R12 en R13) aan te sluiten op de CC1- en CC2-lijn. Voor USB 2-compatibiliteit is de documentatie minder duidelijk. Kortom: je trekt de stroom die je wilt, zolang de host die maar kan leveren. Dit kan worden gecontroleerd door de USB-busspanning te controleren: als de spanning onder de 4,25V komt, trekt het apparaat te veel stroom. Dit wordt gedetecteerd door de comparator U1A en zal de uitgang uitschakelen. Het stuurt ook een signaal naar de microcontroller om de maximale stroom in te stellen. Als bonus zijn er weerstanden toegevoegd om de detectie van de oplader-ID van Apple- en Samsung-opladers te ondersteunen.

5V-regelaar

De 5 V-voedingsspanning van de arduino komt normaal gesproken rechtstreeks van de USB. Maar aangezien de USB-spanning kan variëren tussen 4,5 en 5,5 V volgens de USB-specificatie, is dit niet nauwkeurig genoeg. Daarom wordt een 5V-regelaar gebruikt, die 5V kan genereren uit lagere en hogere spanningen. Toch is deze spanning niet erg precies, maar dit wordt opgelost door een kalibratiestap waarbij de duty cycle van het PWM-signaal dienovereenkomstig wordt aangepast. Deze e-spanning wordt gemeten door de spanningsdeler gevormd door R42 en R43. Maar omdat ik geen vrije ingangen meer had, moest ik een pin dubbel laten trekken. Als de voeding opstart, wordt deze pin eerst als ingang ingesteld: hij meet de voedingsrail en kalibreert zichzelf. Vervolgens wordt het ingesteld als een uitgang en kan het de chipselectielijn van de potentiometer aansturen.

2,56 V spanningsreferentie

Deze kleine chip levert een zeer nauwkeurige 2,56 V spanningsreferentie. Dit wordt gebruikt als referentie voor de analoge signalen ADC_Vout, ADC_Iout, ADC_Vbatt. Daarom hadden we spanningsdelers nodig om deze signalen terug te brengen tot 2,5 V.

FTDI

Het laatste onderdeel van deze voeding is de verbinding met de wrede, buitenwereld. Hiervoor moeten we de seriële signalen omzetten in USB-signalen. Gelukkig wordt dit gedaan door de ATMEGA32U4, dit is dezelfde chip die in de Arduino Micro wordt gebruikt.

Bluetooth

Het Bluetooth-gedeelte is heel eenvoudig: een standaard Bluetooth-module wordt toegevoegd en regelt alles voor ons. Aangezien het logische niveau 3,3 V is (VS 5 V voor de microcontroller), wordt een spanningsdeler gebruikt om het signaal te verschuiven.

En dat is alles!

Stap 3: PCB & elektronica

PCB & Elektronica
PCB & Elektronica
PCB & Elektronica
PCB & Elektronica
PCB & Elektronica
PCB & Elektronica

Nu we begrijpen hoe het circuit werkt, kunnen we beginnen met het bouwen ervan! Je kunt de print gewoon online bestellen bij je favoriete fabrikant (de mijne kost ongeveer $ 10), de gerber-bestanden zijn te vinden op mijn GitHub, samen met de stuklijst. Het in elkaar zetten van de print is dan eigenlijk een kwestie van de componenten op hun plaats solderen volgens de zeefdruk en de stuklijst.

Terwijl mijn vorige voeding alleen doorlopende componenten had, maakte de groottebeperking voor mijn nieuwe dit onmogelijk. De meeste componenten zijn nog relatief eenvoudig te solderen, dus wees niet bang. Ter illustratie: een vriend van mij die nog nooit eerder had gesoldeerd, heeft dit apparaat weten te vullen!

Het is het gemakkelijkst om eerst de onderdelen aan de voorkant te doen, dan de achterkant en af te werken met de doorgeboorde onderdelen. Daarbij zal de print niet wiebelen bij het solderen van de moeilijkste onderdelen. Het laatste onderdeel dat gesoldeerd moet worden is de Bluetooth module.

Alle componenten kunnen worden gesoldeerd, behalve de 2 banaanstekkers, die we in de volgende stap zullen monteren!

Stap 4: Case & Montage

Koffer & Montage
Koffer & Montage
Koffer & Montage
Koffer & Montage
Koffer & Montage
Koffer & Montage

Met de printplaat gemaakt, kunnen we verder met de zaak. Ik heb de PCB specifiek ontworpen rond een aluminium behuizing van 20x50x80mm (https://www.aliexpress.com/item/Aluminum-PCB-Instr…), dus het wordt niet aanbevolen om een andere behuizing te gebruiken. U kunt echter altijd een hoesje met dezelfde afmetingen 3D-printen.

De eerste stap is het voorbereiden van het eindpaneel. We zullen gaten moeten boren voor de bananenjacks. Ik deed dit met de hand, maar als je toegang hebt tot een CNC, zou dat een nauwkeurigere optie zijn. Steek de banaanstekkers in deze gaten en soldeer ze op de printplaat.

Het is een goed idee om nu wat zijdepads toe te voegen en ze op hun plaats te houden met een kleine druppel superlijm. Deze zorgen voor warmteoverdracht tussen de LT3080 en LT1370 en de behuizing. Vergeet ze niet!

We kunnen ons nu concentreren op het voorpaneel, dat gewoon op zijn plaats wordt geschroefd. Met beide panelen op hun plaats kunnen we het geheel nu in de behuizing plaatsen en alles sluiten. Op dit punt is de hardware klaar, het enige dat overblijft is om er wat leven in te blazen met de software!

Stap 5: Arduino-code

Arduino-code
Arduino-code

Het brein van dit project is de ATMEGA32U4, die we gaan programmeren met de Arduino IDE. In deze sectie zal ik de basiswerking van de code doornemen, de details zijn te vinden als opmerkingen in de code.

De code doorloopt in principe deze stappen:

  1. Gegevens naar app verzenden
  2. Gegevens van app lezen
  3. Spanning meten:
  4. Stroom meten:
  5. Poll-knop

De USB-overstroom wordt afgehandeld door een interruptserviceroutine om deze zo responsief mogelijk te maken.

Voordat de chip via USB kan worden geprogrammeerd, moet de bootloader worden gebrand. Dit gebeurt via de ISP/ICSP-poort (de 3x2 mannelijke headers) via een ISP-programmeur. Opties zijn de AVRISPMK2, USBTINY ISP of een arduino als ISP. Zorg ervoor dat het bord stroom krijgt en druk op de 'burn bootloader'-knop.

De code kan nu via de USB C-poort naar het bord worden geüpload (omdat de chip een bootloader heeft). Bord: Arduino Micro Programmeur: AVR ISP / AVRISP MKII Nu kunnen we kijken naar de interactie tussen de Arduino en de pc.

Stap 6: Android-app

Android-app
Android-app

We hebben nu een volledig functionele voeding, maar nog geen manier om deze te besturen. Heel irritant. We gaan dus een Android-app maken om de voeding via Bluetooth te bedienen.

De app is gemaakt met het MIT app-uitvinderprogramma. Alle bestanden kunnen worden opgenomen om het project te klonen en te wijzigen. Download eerst de begeleidende app MIT AI2 naar uw telefoon. Importeer vervolgens het.aia-bestand op de AI-website. Hiermee kunt u de app ook downloaden op uw eigen telefoon door te kiezen voor "Build>App (Qr-code voor.apk)"

Om de app te gebruiken, selecteert u een Bluetooth-apparaat uit de lijst: het wordt weergegeven als HC-05-module. Bij aansluiting kunnen alle instellingen worden gewijzigd en kan de uitgang van de voeding worden uitgelezen.

Stap 7: Java-code

Java-code
Java-code

Voor het loggen van data en het aansturen van de voeding via de PC heb ik een java applicatie gemaakt. Hierdoor kunnen we het bord eenvoudig bedienen via een GUI. Net als bij de Arduino-code zal ik niet op alle details ingaan, maar een overzicht geven.

We beginnen met het maken van een venster met knoppen, tekstvelden etc; basis GUI-dingen.

Nu komt het leuke gedeelte: het toevoegen van de USB-poorten, waarvoor ik de jSerialComm-bibliotheek heb gebruikt. Zodra een poort is geselecteerd, luistert java naar binnenkomende gegevens. We kunnen ook gegevens naar het apparaat sturen.

Bovendien worden alle binnenkomende gegevens opgeslagen in een csv-bestand, voor latere gegevensverwerking.

Bij het uitvoeren van het.jar-bestand moeten we eerst de juiste poort kiezen in het vervolgkeuzemenu. Na het aansluiten komen er gegevens binnen en kunnen we onze instellingen naar de voeding sturen.

Hoewel het programma vrij eenvoudig is, kan het erg handig zijn om het via een pc te besturen en de gegevens te loggen.

Stap 8:

Afbeelding
Afbeelding
Afbeelding
Afbeelding
Afbeelding
Afbeelding

Na al dit werk hebben we nu een volledig functionele voeding!

We kunnen nu genieten van onze eigen zelfgemaakte voeding, wat goed van pas zal komen tijdens het werken aan andere geweldige projecten! En het belangrijkste: we hebben onderweg veel geleerd.

Als je dit project leuk vond, stem dan op mij in de wedstrijd voor zakformaat en microcontrollers, ik zou het erg op prijs stellen!

Aanbevolen: