Avtor: Brian Millier
email: bmillier1@gmail.com
Mislim, da nisem nič drugačen od številnih navdušencev nad elektroniko/računalniki, ki imajo veliko napajalnikov za prenosnike, ki se jim potikajo po sobi in na katerih se nabira prah.
Vsi smo opustili starejše prenosne računalnike, v mojem primeru pa sem bil pred upokojitvijo odgovoren za zbiranje starih računalnikov, ki jih je bilo treba poslati v obrat za recikliranje. Zato jih imam kar nekaj v svojih zabojnikih za rezervne dele.
Večina teh napajalnikov zagotavlja 19 ali 20 voltov enosmerne napetosti in ima zmogljivost od 75 do 100 vatov. Zanima me, kako je bila prvotno določena vrednost 19-20 V. Zagotovo visokozmogljivi procesorski čipi v prenosnem računalniku delujejo pri manj kot 3 voltih, preostalo vezje matične plošče pa uporablja 3,3 V in 5 V. Z izbiro višje napetosti, kot je 19 V, se zmanjša potrebna tokovna zmogljivost povezovalnega kabla. Ker bo prenosnik potreboval različne napetosti, enake ali manjše od 5 V, bodo tako ali tako potrebni stikalni regulatorji tipa buck, zakaj torej ne bi izbrali visoke napetosti, kot je 19 V.
Ta vsebina je samo za naročnike
Vendar pa 19 V večinoma ni uporabna vrednost za projekte „naredi sam“. Poleg tega je nekoliko manjša od 30 V, ki bi jih morda želeli imeti v namiznem napajalniku. V tem članku sem skušal izdelati napajanjalnik, ki bi zagotavljal od 1,2 do 30 voltov. Nazivni tok pri različnih napetostih bi bil različen, vendar bi bil omejen s 75-100 W, ki so na voljo iz napajalnika prenosnega računalnika.
Za zagotavljanje napetosti nad in pod 19-20 V, ki so na voljo v napajalnikih prenosnega računalnika, sem moral dodati stikalni modul buck-boost. Ti se včasih imenujejo SEPIC pretvorniki (single-ended primary inductor converter – enosmerni pretvornik s primarno induktivnostjo). Čeprav ga lahko izdelate sami, je veliko bolj ekonomično in hitreje uporabiti module, ki so na voljo na Amazonu/Alibabi itd. Slika 1 prikazuje modul, ki sem ga uporabil.
Amazon za te stvari ne navaja številk delov, vendar ga lahko najdete z uporabo njihovega opisa:
DC 5-30V to 1.25-30V Power Module DC-DC Step Up/Down Buck Converter Boost Converter Module Voltage Regulator Converter Module Continuously Adjustable
Ta modul ima največji vhodni tok 8 A, kar je več kot zagotavlja napajalnik prenosnih računalnikov. Njegov izhodni tok je največ 10 A, vendar je omejen z omejitvami odvajanja toplote, ki jih določa velikost hladilnika. Brez težav sem iz njega pri 5 V izvlekel 8 A, pri čemer se je z naraščanjem zahtevane izhodne napetosti tok sorazmerno zmanjšal. Edino nekoliko težavno opravilo je odstranitev večobratnega potenciometra za nastavitev napetosti in njegova zamenjava z večjim potenciometrom, nameščenim na sprednji plošči.
Ta buck/bost pretvornik je neizoliran. To pomeni, da je vhodna negativna sponka povezana z izhodno negativno sponko. Pravzaprav je med tema dvema sponkama upor 0,007 Ω, ki se uporablja za omejevanje toka. V moji zasnovi je ta upor kratko vezan tako, da sta obe negativni sponki povezani skupaj. Namesto tega sem uporabil bolj vsestransko vezje za omejevanje toka (prvotno vezje za omejevanje toka po mojem mnenju ni bilo zadovoljivo).
Osnovno napajanje sestavljajo napajalnik prenosnega računalnika, stikalni regulator in potenciometer za nastavitev napetosti. Vendar sem želel imeti še digitalni prikaz napetosti in toka ter nastavljiv nadzor omejitve najvišjega toka. Ta nastavitev tokovne omejitve ne bi bila odvisna od tega, ali uporabnik napajanje kratko sklene ali močno obremeni in nastavi potenciometer tokovne omejitve, dokler ne preseže želene tokovne omejitve (tako je delovala prvotna zasnova modula).
Za digitalni prikaz napetosti/toka in funkcijo omejevanja toka sem se odločil uporabiti zelo priljubljen MCU Raspberry Pi RP2040 (Pico). To je bil vedno zelo poceni MCU, zdaj, ko ga podpira Arduino IDE, pa je bil zelo dobra izbira. Prav tako je zelo enostavno napisati ugnezdeno programsko opremo za ta MCU. Ko ga vklopite v računalnik prek USB in pritisnete tipko Boot, se v računalniku prikaže kot Flash pomnilnik. Vse, kar morate storiti je, da na ta pogon povlečete datoteko šestnajstiške kode, in čip bo to šestnajstiško kodo sprogramiral v svoj pomnilnik. Pravzaprav Arduino IDE poskrbi celo za to majhno nalogo namesto vas, saj lahko na daljavo „pritisne tipko Boot“ in nato sam kopira hex datoteko.
RP2040 ima vgrajen 12-bitni ADC. To ni najbolj natančen 12-bitni ADC MCU, ki je na voljo, vendar ga z uporabo samodejne kalibracije nekoliko izboljšam. Vgrajeni ADC uporabljam samo za merjenje izhodne napetosti napajalnika in je vsekakor dovolj natančen za to, glede na uporabljeno štirimestno prikazovanje na LED displeju (od tega sta dve številki na desni strani decimalne vejice). Na sliki 2 je razvidno, da izhodna napetost vodi skozi 200k upor (R2), preden doseže kalibracijski potenciometer R3.
S tem se najvišja izhodna vrednost 30 V zmanjša na polni obseg ADC 3,3 V. Potenciometer R3 se nastavi enkrat, med začetnim umerjanjem. Diodi D1 in D2 ščitita vhodni ADC priključek RP2040 pred prenapetostjo, C1 pa nekoliko filtrira vhodno napetost ADC-ja za stabilnejše odčitke.
Merjenje toka in vezje za omejevanje toka sta nekoliko bolj zapletena. Namesto 0,007Ω tokovnega soupora na modulu buck/boost stikalnega regulatorja, (ki je v tej zasnovi kratko sklenjen) uporabljam 0,02Ω 5W upor (R9). Pri polnem toku 10 A bo ta soupor imel padec napetosti 200 mV. To je veliko premalo, da bi ga lahko izmeril ADC RP2040, ne da bi pred njim uporabil ojačevalnik.
Odločil sem se, da bom uporabil 16-bitni ADC ADS1115 podjetja Analog Devices. Ti so na voljo na razvojni ploščici za le nekaj evrov na Amazonu ali Alibabi itd. Tako kot pri večini takšnih razvojnih plošč sem presenečen, da jih lahko dobim za manj kot 3 €, tudi tukaj v Kanadi, ko pa samo čip ADS1115 stane približno 6 €.
Na sliki 3 je prikazana blok shema ADS1115. Vsebuje 4 vhode, ki se lahko uporabljajo v različnih nesimetričnih ali diferencialnih konfiguracijah. Izhod bloka MUX je priključen na PGA ojačevalnik ali programabilni ojačevalnik. Pri tem projektu sem uporabil nastavitev PGA ojačitve, ki zagotavlja območje ADC ± 256 mV v polni skali. To se dobro ujema z največjo napetostjo tokovnega soupora R9, ki znaša 200 mV (pri 10 A). ADS1115 ne potrebuje zunanje referenčne napetosti, saj je ta vsebovana v samem ADS1115. Ko je vhodni signal pretvorjen v digitalno vrednost, se prenese na:
I2C vmesnik, ki je na voljo za MCU RP2040 prek I2C vodila.
Digitalni komparator.
Za spremljanje napajalnega toka uporabljam digitalni komparator. Komparator je mogoče konfigurirati v naslednjih načinih:
Monostabilen ali bistabilen
Način praga ali histrezere
Število odčitkov, potrebnih za proženje primerjalnega izhoda.
Aktivno-nizek ali aktivno-visok alarmni izhod
Konfiguriram ga v monostabilnem načinu, brez histereze, z aktivnim nizkim signalom na izhodu in določim 2 odčitka, ki sta potrebna za sprožitev primerjalnega izhoda. Na ta način ADC neprekinjeno pretvarja, izhodni pin Alert komparatorja pa se uporablja za odklop napajanja modula Buck/Boost stikalnega regulatorja, ko raven toka preseže uporabniško določeno nastavitev tokovne meje. Takšno delovanje olajša program RP2040 v jeziku C, saj se mu ni treba takoj odzvati na tokovno preobremenitev – za to poskrbi ADS1115.
Na sliki 2 je vidno, da je Alert signal od ADS1115 povezan z bazo T1 prek diode D3. T1 je običajno vklopljen z R5. Če pa pride do previsokega toka, signal Alert izključi prednapetost na T1. Ko je T1 izklopljen, se Q1, P-kanalni MOSFET (AOD4189), izklopi, saj se njegova sponka Gate dvigne na 19 do 20 V (odvisno od uporabljenega napajalnika).
Dioda D4 je prav tako priključena na bazo T1 in jo poganja priključek GP15 RP2040 – to omogoča tudi, da RP2040 vklaplja in izklaplja napajanje pod nadzorom uporabnika. Tako D3 kot D4 morata biti Schottkyjevi diodi, sicer ne bosta mogli potegniti baze T1 dovolj nizko, da bi ga izklopili (v preteklosti me je ta težava že doletela!).
Q1, P-kanalni MOSFET, je povezan med pozitivnim izhodom 19V napajalnika in pozitivnim vhodom stikalnega regulatorja buck/boost. Ta regulator lahko preklaplja 40 A, zato zlahka prenese tokove <10 A, ki so potrebni za to napajanje.
Modul buck/boost stikalnega regulatorja vsebuje majhen 10-obratni linearni trimer potenciometer za nastavitev napetosti z vrednostjo 200k. Želel sem uporabiti večji potenciometer z enim obratom, ki se namesti na ploščo. Čeprav so potenciometri za montažo na ploščo z upornostjo 200k zlahka na voljo, imam na voljo dobro izbiro zelo kakovostnih potenciometrov za montažo na ploščo, ki so bili odstranjeni iz starejše opreme. Ker nisem imel 200k potenciometrov, sem se odločil, da bom uporabil 100k potenciometer, ki sem ga imel pri roki, in dodal dodatni 100k (R8), ko sem potreboval napetosti od 15 do 30 voltov. Z uporabo potenciometra prave vrednosti bi bila R8 in stikalo nepotrebna.
Želel sem vključiti velik 8-mestni LED zaslon za hkratni prikaz napetosti in toka – izražen na 2 decimalni mesti. Odločil sem se, da bom uporabil zelo običajne 8-številčne LED prikazovalnike (z gonilnikom MAX7219), ki jih najdete na Amazonu in Alibabi. Prepričajte se le, da imajo tisti, ki jih dobite, gonilni čip MAX7219 (čeprav mislim, da ni takih, ki ga ne bi imeli).
Napetost, potrebna za delovanje nekaterih vezij, je 5 V. Ta se na ploščo RP2040 Pico pripelje s priključkom VBUS. Plošča Pico zagotavlja napetost 3,3 V, ki jo potrebujejo nekatera preostala vezja – razen osemmestnega LED zaslona, ki bo deloval le pri napetosti 5 V.
Teh 5 V zagotavlja običajni 3-pin regulator 7805. Ker vhodna napetost 19 V pade na 5 V, bo moč, ki se bo trošila na njem glede na tok, ki ga porablja osemmestni LED, razmeroma velika. Funkcijo „MAX7219_SetBrightness“ knjižnice MAX7219 lahko uporabite za zmanjšanje intenzivnosti, če se 7805 preveč segreje s hladilnikom, ki ga uporabljate. Pri tem projektu sem namesto tega uporabil modul stikalnega regulatorja OKI-78SR-5, ki sem ga imel pri roki, in tako odpravil težavo z disipacijo energije. Vendar so veliko dražji od 7805.
Nastavitev najvišjega toka se izvaja z enim samim vrtljivim enkoderjem (SW2A) z integriranim stikalom (SW2B). Ko pritisnete tipko, enota preide v način nastavitve tokovne omejitve, dejanska vrednost tokovne obremenitve pa se nadomesti z vrednostjo tokovne omejitve, ki jo nastavite z vrtenjem enkoderja. Ko je ustrezno nastavljena, ponovno pritisnete gumb.
Na GP13 je vezana tipka za vklop/izklop/ponastavitev tokovne omejitve. S pritiskom na to tipko vklopite in izklopite izhodno napetost ali izbrišete pogoj za sprožitev tokovne omejitve (to storite šele po odstranitvi vira previsokega toka).
Na sliki 4 je fotografija dokončane enote v ohišju. Če se sprašujete, zakaj je modul stikalnega regulatorja nameščen na plastično ploščo, je odgovor preprost: Ponovno sem uporabil ohišje, ki je imelo v spodnji plošči izrezano veliko okroglo luknjo, v katero je bil vgrajen ventilator. Tako sem lahko uporabil ohišje, ki bi običajno šlo v nič.
Na sliki 5 je fotografija sprednje plošče delujoče enote, ki zagotavlja 2,25 V. 0,03 A je dejanski tok, ki teče skozi upor, priključen na izhod. Svetlobna dioda (LED1) nad enkoderjem za omejevanje toka je le priključena na vhodne sponke stikalnega regulatorja (prek upora za omejevanje toka 2k). Ta kaže, ali je RP2040 izklopil napajanje modula stikalnega regulatorja ali ne.
Programska oprema
Ugnezdena programska oprema enote je bila napisana kot skica z uporabo okolja Arduino 2.3.2 IDE. Najprej je treba naložiti podporni paket plošče za MCU RP2040. To storite z orodji Tools > Board Manager in vnesite RP2040. Na voljo bosta dve možnosti – izberite možnost Raspberry Pi RP2040 boards NE možnost Mbed. (mimogrede, ARM je nedavno ukinil operacijski sistem Mbed, če ste ga uporabljali v preteklosti). Nato kot ciljno ploščo izberite Raspberry Pi Pico.
V tem projektu je uporabljenih več knjižnic tretjih oseb:
Na voljo so tako, da uporabite „Library Add“ rutino in jih poiščete po imenu. Uporabil sem rutino PicoAnalogCorrection, ki opravi preprosto dvotočkovno kalibracijo ADC RP2040 z naslednjo rutino:
pico.calibrateAdc(GND_PIN, VCC_PIN, 5000);
(kjer je 5000 povprečje odčitkov)
Upoštevajte, da sem priključek GPIO GP28_A2 priključil na Vcc. Ta se uporablja za kalibracijo Vcc. Podobno je GP27_A1 priključen na GND za kalibracijo GND.
Potrebna je še ena dodatna knjižnica – za ADS1115 ADC. Adafruit je napisal dobro knjižnico za to napravo: adafruit_ADS1X15 library. Vendar sem moral narediti nekaj sprememb, da sem omogočil uporabo komparatorja v želenem načinu, ter dodal nekaj drugih izboljšav. Ta (spremenjena) knjižnica se imenuje „ADS1115_BM in jo lahko skupaj s skico najdete na spletni strani Svet Elektronike. Ti dve knjižnični datoteki se morata nahajati v isti mapi kot skica. Naučil sem se, da ne smem vzeti že obstoječe knjižnice, jo spremeniti za lastno uporabo in jo nato namestiti v isto mapo kot skico, ki jo uporablja – razen če ji dam drugačno ime. V nasprotnem primeru bo veriga orodij za sestavljanje Arduino prikazala veliko napak!
V drugem delu tega članka bom opisal popolnoma drugačen pristop k poceni napajalniku. Ta uporablja polnilnike mobilnih telefonov USB-C PD itd., ki so danes pogosto na voljo.