hamradioshop.ro
Articole > Echipamente si constructii radio Litere mici Litere medii Litere mari     Comentati acest articol    Tipariti

Sursa de alimentare definita software

Adrian Florescu YO3HJV

In lucrarile efectuate in micul meu laborator m-am aflat deseori in situatia in care am avut nevoie de urmarirea parametrilor sursei de alimentare a unor montaje pe parcursul unui interval de timp extins. Cea mai la indemana varianta a fost, mult timp, utilizarea unor multimetre digitale produse de Voltcraft, care transferau parametrii spre un calculator printr-o interfata optica.

O lista intreaga de dezavantaje, care au mers pana la eliminarea de fum magic dintr-unul dintre DMM-uri (reparat intre timp) m-au facut sa explorez posibilitatea de a utiliza altceva. Varianta unei surse de laborator cu interfatare deja depasea bugetul pe care sunt dispus sa il aloc asa ca sm facut o inspectie rapida in cutiile cu maimute si am decis ca am tot ce imi trebuie sa imi fac o sursa mai desteapta.

Cum, la moda sunt receptoarele definite prin software, de ce nu as incerca o sursa de alimentare definita prin software?

Asadar, mi-am propus urmatoarele obiective pentru aceasta sursa de alimentare de laborator:

-Start/stop
-Tensiune reglabila intre 1.2 si 14V
-Curent: maxim 2A
-Abatere +/-100mV si +/- 50mA
-Raportarea tensiunii si a curentului prin port serial in format “csv” cu includerea marcii temporale a masuratorii
-Protectie rapida prin deconectarea tensiunii la cresterea curentului sau la scaderea curentului fata de un prag reglabil si mentinerea starii pana la resetarea protectiei ori deconectare la atingerea unei tensiuni presetate. Aceste functionalitati sunt necesare pentru caracterizarea acumulatorilor.

Proiectul a fost realizat in jurul unei placi de dezvoltare Arduino Uno, care urma sa realizeze masurarea in timp real a tensiunii si a curentului.

Sursa de alimentare principala a fost modificata dintr-o sursa generica in comutatie, de 12V/8A pentru a furniza circa 18V.

Reglarea tensiunii intre 1.2 si 14.5V se realizeaza cu un modul DC/DC in comutatie bazat pe XL4016E, capabil sa suporte 8A in varf de sarcina. Desi modulul respectiv suporta curent reglabil, aceasta functionalitate nu am folosit-o.

Sursa 85-240Vac – 12V/8A

Este o sursa de alimentare generica, deschisa. Nu intru in detaliile modificarii acestei surse; in esenta acestea constau in inlocuirea divizorului rezistiv care alimenteaza dioda LED din circuitul optocuplor PC817 utilizat in bucla negativa de control a tensiunii.

Bineinteles, se poate folosi orice alta sursa disponibila, cu conditia ca tensiunea acesteia sa fie mai mare cu circa 4 V decat tensiunea pe care dorim sa o obtinem la bornele sursei. O sursa de laptop este excelenta, cele mai multe astfel de surse au 19V/4A.

Modul DC/DC down convertor 8A

Acesta este un modul destul de ieftin, bazat pe circuitul XL4016 si suporta curenti de pana la 10A. Pe piata sunt disponibile doua variante; una care permite controlul tensiunii si al curentului si o varianta care permite doar controlul tensiunii.

Oricare dintre acestea sunt potrivite pentru proiect. In imaginea de mai sus este prezentat modulul cu ambele optiuni. Potentiometrul din partea dreapta sus este cel utilizat pentru controlul variatiei tensiunii, cel de dedesubt pentru stabilirea pragului de curent la care se introduce limitarea.

Intrucat programul care gestioneaza sursa poate fi scris intr-o multitudine de variante, o sa prezint in cele ce urmeaza aspectele principale avute in vedere, schema si o varianta de software cu functionalitatile de baza.

MASURAREA VALORILOR ANALOGICE CU PLACA ARDUINO

Placa de dezvoltare Arduino UNO (ATMEGA328P) poate masura valori analogice pe 6 canale (SPDIP), respectiv intrarile A0-A5. In aplicatia mea, pinii A4 si A5 sunt alocati interfetei I2C pe care este conectat afisajul LCD 16x2 astfel ca raman disponibilite doar 4 intrari analogice.

Pe una din ele este citita valoarea cursorului unui potentiometru care are functii diverse, in principal de stabilire a pragurilor de curent si de tensiune fata de care actioneaza protectiile, pe doua se citesc tensiunile din care calculam mai apoi curentul absorbit de sarcina iar pe alte doua, dupa cum scriam mai sus, avem conectat afisajul LCD. Mai ramane o intrare disponibila pentru dezvoltari ulterioare.

In ceea ce priveste ADC-ul ATMEGA328, acesta are o rezolutie de 10 biti, adica poate reprezenta valoarea unei tensiuni continue in 1024 pasi. Daca ne raportam la tensiuni cuprinse intre 0 si 5V, pentru fiecare dintre cei 1024 de pasi corespund 0,0049V, adica putem masura tensiunea cu o rezolutie de 4,9 mV.

Fara a intra in subtilitatile conversiei AD, trebuie retinut ca masurarea valorilor analogice se realizeaza prin raportarea circuitului de conversie la o tensiune foarte precisa si stabila numita “tensiune de referinta”. Precizia masuratorii este in directa legatura cu precizia tensiunii de referinta intrucat, orice variatie a acestei tensiuni va afecta masurarea tensiunii observate.

ATMEGA328 permite corelarea ADC cu 3 surse de referinta; tensiunea de 5V cu care alimentam circuitul (Avcc), o referinta interna de tip “bandgap” de circa 1,1 V (teoretic) si o referinta externa (AREF), obtinuta dintr-un circuit separat de referinta, cu valoare maxima de 5V.

Una din probleme este legata de valoarea maxima a tensiunii pe care o putem masura in mod direct cu placa Arduino; intrucat tensiunea maxima la intrarea ADC este de 5v va fi necesar un divizor de tensiune care sa permita masurarea tensiunii de 12V, de exemplu.

Ce se intampla insa cu precizia masuratorii in acest caz? Ei bine, ea scade cu acelasi raport dintre tensiunea maxima si cei 5V. Asadar, daca avem in vedere un divizor de tensiune cu 6:1, care sa permita deci masurarea tensiunii maxime de 30 V, atunci si rezolutia ADC va scadea, de la 4,9mV la 24,5mV

Aceasta valoare este calculata pentru o referinta de 5 V (5/1024).

Daca insa vom alege referinta interna de 1,1V, rezolutia ADC va fi de 1,1/1024, adica 0.001 V, adica de 1mV. Ati putea spune imediat ca este o rezolutie mult mai buna, permitand masurarea cu o precizie formidabila. Totusi, valoarea maxima a tensiunii pe care o masuram la intrarea ADC va fi de 1,1V ceea ce inseamna ca avem nevoie de un divizor de tensiune de 30:1 pentru a putea masura aceeasi tensiune maxima de 30V. Drept urmare, rezolutia ADC va scadea la 30mV. Adica o rezolutie inferioara celei obtinute cu o referinta de 5V.

Desigur, intre 24,5 si 30 mV diferenta nu este atat de mare insa poate genera abateri consistente in masuratori care implica divizarea tensiunii de masurat.

Din acest motiv, am ales sa utilizez o referinta de 5V obtinuta din doua referinte shunt, de mare precizie, LM4050 (2,5V, 0,1%) inseriate, alimentate la 9V dintr-un stabilizator LM7809 din care se alimenteaza si placa Arduino.

Pentru a respecta curentul maxim suportat de circuitul LM4050, limitam curentul la circa 5mA cu o rezistenta de 800 Ohm.

MASURAREA TENSIUNII Vcc

Masurarea tensiunii Vcc, la borna de iesire, se face asadar printr-un divizor rezistiv 5:1 intrucat tensiunea maxima pe care blocul SMPS o poate livra este de maxim 18V. Pentru protectia intrarii ADC, in paralel cu aceasta este montata o dioda Zener de 5V1.

Tensiunea maxima pe care o putem masura este, astfel, de 5 * 5 = 25V. Depasirea acestei valori poate duce la distrugerea portului ADC al chip-ului ATMEGA 328, motiv pentru care vom monta o dioda Zener de 5V1 pentru protectie.

MASURAREA CURENTULUI

Initial am incercat masurarea curentului cu un circuit ACS-712.

Evaluarea practica a dovedit insa ca precizia acestuia lasa mult de dorit si ca semnalul analogic rezultat din masuratoare are abateri si zgomot inacceptabile fiind, cel mult, o aproximare a curentului care traverseaza senzorul Hall.

Drept urmare, am abordat masurarea curentului furnizat sarcinii prin masurarea tensiunii pe o rezistenta de 2,2 Ohm/25W instalata pe circuitul de minus al sursei si transformarea aritmetica ulterioara.

Pentru intrarea ADC destinata masurarii tensiunii respective se poate folosi doar o rezistenta de 1kOhm in serie cu intrarea ADC care, si ea, este protejata de o dioda Zener de 5V1.

CIRCUITUL “CROWBAR”

Borna de iesire este comutata cu ajutorul unui releu de 5V intre iesirea DC/DC si masa. Prin punerea la DC/DC, la borne avem iesire de tensiune spre consumator . Am ales aceasta varianta pentru a putea dezvolta ulterior proiectul cu un circuit de descarcare a acumulatorilor; prin comutarea bornei pozitive la sursa asigur incarcarea iar prin comutarea catre o rezistenta de sarcina, eventual variabila cu un MOSFET, se poate asigura un curent variabil de descarcare.

CATEVA PRECIZARI LEGATE DE SCHEMA SI FUNCTIONARE

-Controlul tensiunii variabile a modulului DC/DC Step Down se face printr-un potentiometru digital MCP41010 cu valoarea de 10 kOhm, controlat prin interfata SPI. Intrucat tensiunea maxima de lucru a acestuia este de 5V, pentru a nu risca deteriorarea, acesta controleaza un optocuplor PC817 care, la randul sau este legat la bornele A si B ale convertorului DC/DC.

-Tensiunea la bornele sursei se determina prin diferenta intre tensiunea masurata pe borna + si caderea de tensiune pe rezistenta de masurare a curentului, de 2.2 Ohm/25W. Deoarece valoarea exacta difera, este necesara o calibrare realizata pe valoarea reala a acestei rezistente, calibrare disponibila in software.

Calcularea valorilor se face prin masurarea celor doua tensiuni Vin si Vshunt fata de GND.

Aritmetic, se determina astfel Vload = Vin – Vshunt si I = Vshunt / Rshunt. Dupa determinarea aritmetica, aceste valori sunt utilizate de software pentru diferite functii.

-Pentru reducerea zgomotului digital (ambiguitate), valoarea parametrilor analogici (tensiuni) este realizata prin medierea aritmetica a unui numar de masuratori (sample) efectuate la interval de timp reglabil, de ordinul microsecundelor.

-Deoarece valoarea tensiunii Vin este controlata digital, din software, se pot implementa foarte usor functii de control la atingerea unor praguri minime sau maxime de tensiune sau de curent livrat, astfel ca sursa poate fi utilizata pentru alimentarea montajelor sau pentru incarcarea acumulatorilor.

Soft-ul propus (Firmware) este realizat cu functii distincte apelabile din bucla principala, fara delay(). Se pot astfel implementa functii de control rapide care sa raspunda la modificarea parametrilor (protectii ultrarapide). In varianta hardware prezentata, sunt necesare artificii software pentru extinderea functiilor insa nimic nu impiedica extinderea cu alte butoane si cu inca un potentiometru pe intrarea analogica libera.

INTERFATA CU CALCULATORUL

Platforma Arduino reprezinta un mediu de programare si interfatare deosebit de flexibil. In Arduino IDE exista doua tipuri de interfatare cu modulele compatibile Arduino prin portul serial:

-Serial monitor, care afiseaza in format ASCII informatia transmisa de microcontroller si

-Serial plotter, care afiseaza valorile in format grafic.

Din software, la compilare, putem alege formatul in care datele sa fie transmise spre calculator: csv (comma separated values) sau valori destinate afisarii grafice (separate prin spatiu). Daca alegem prima varianta, avem optiunea de a transmite si marca temporala (secunda) la care s-a efectuat masuratoarea tensiunii si a curentului, astfel incat seria csv sa poata fi afisata intr-un program cum ar fi Excel.

CONCLUZII

Ceea ce am prezentat este un proiect ce se poate realiza intr-un weekend si care completeaza laboratorul de depanare si experimente cu un instrument foarte util si cu cheltuieli minime. Ca oricare alt proiect realizat in jurul unui microcontroler, prin modificarea software-ului se pot obtine functionalitati noi. Varianta de software propusa este in permanenta dezvoltare si are suficiente comentarii care deslusesc modul de functionare si de setare a parametrilor. Utilizarea microcontrolerelor poate fi intimidanta la inceput, curba de invatare necesita ceva timp dar rezultatele sunt spectaculoase.

ASPECTE PRACTICE


Schema electronica - Click pentru imaginea de rezolutie inalta

Realizarea practica


Toate conexiunile din circuitul de tensiune dintre sursa de alimentare principala
si borne sunt realizate cu sarma de Cu de 1.5mm pentru a diminua caderile de tensiune pe acestea.


Identificarea pinilor la care conectam circuitul de comanda al tensiunii pe convertorul DC/DC


Test cu un acumulator LiPo


Comutarea curentului de incarcare a unui acumulator LiPo de la 450 mA la 250mA la atingerea tensiunii de 4.1V


Terminarea incarcarii acumulatorului LiPo la depasirea tensiunii de 4.2V (curent de circa 100 mA)

LINK-URI UTILE:


Firmware pentru sursa – diverse versiuni: https://github.com/yo3hjv/Software-Defined-Power-supply
Arduino UNO pinout: https://bit.ly/2MZbyWJ
Afisaj LCD 16x2 cu I2C: https://bit.ly/3rNdz7p
Sursa de alimentare (necesita modificare) : https://bit.ly/3a8VudH
DC/DC Step down: https://bit.ly/3qob7DK
Schema modul DC/DC cu CI XL4016: https://bit.ly/376bOdr
Modul 1 releu 5V: https://bit.ly/3769KlP
Texas instruments LM4050: https://bit.ly/2Z3Zru6
Microchip MCP41010: https://www.microchip.com/wwwproducts/en/MCP41010
PC817: https://bit.ly/2Z9J9jc
Pentru orice lamuriri suplimentare sau detalii practice, putem discuta in comentarii, pe forum sau puteti trimite un email.

73 de YO3HJV, Adrian Florescu, yo3hjv@gmail.com

Adrian Florescu YO3HJV

Articol aparut la 22-2-2021

3771

Inapoi la inceputul articolului

Comentarii (5)  

  • Postat de Mircea - YO3XX (yo3xx) la 2021-02-23 18:11:07 (ora Romaniei)
  • Felicitari pentru articol, foarte interesanta solutia "SDPS", hi!
    73 Mircea

  • Postat de Adrian - YO3HJV (yo3hjv) la 2021-02-25 16:17:57 (ora Romaniei)
  • Multumesc Mircea.

  • Postat de Dan - YO3GH (yo3gh) la 2021-03-08 07:21:55 (ora Romaniei)
  • Felicitari pentru proiect !

  • Postat de Adrian - YO3HJV (yo3hjv) la 2021-03-08 20:34:45 (ora Romaniei)
  • Multumesc Dan. Proiectul e in continua imbunatatire. Una dintre ele, care pregateste optiuni viitoare este mutarea butonului (deocamdata doar unul) de pe pinul 7 pe pinul 3 pentru a putea fi accesat pe INT1. In acest fel, orice ar face procesorul, in momentul actionarii executa instant functia definita pe buton (Intrerupere). Modificarile software si hardware vor fi reflectate pe contul meu pe Github.
      Comentariu modificat de autor.

  • Postat de Dan - YO3GH (yo3gh) la 2021-03-09 13:44:34 (ora Romaniei)
  • Da, e bine, aceasta facilitate este preluata de la microprocesoarele vechi care aveau un pin cu intrerupere fortata, practic prin actionarea lui se facea salt la o rutina dorita in orice moment din functionare , un salt neconditionat care intrerupea practic orice task al microprocesorului... super , bafta la optimizari ;)

    Scrieti un mic comentariu la acest articol!  

    Opinia dumneavoastra va aparea dupa postare sub articolul "Sursa de alimentare definita software"
    Comentariul trebuie sa se refere la continutul articolului. Mesajele anonime, cele scrise sub falsa identitate, precum si cele care contin (fara a se limita la) atac la persoana, injurii, jigniri, expresii obscene vor fi sterse iar dupa caz se va ridica dreptul de a posta comentarii.
    Comentariu *
     
    Trebuie sa va autentificati pentru a putea adauga un comentariu.


    Opiniile exprimate în articole pe acest site aparţin autorilor şi nu reflectă neapărat punctul de vedere al redacţiei.

    Copyright © Radioamator.ro. Toate drepturile rezervate. All rights reserved
    Articole | Concursuri | Mica Publicitate | Forum YO | Pagini YO | Call Book | Diverse | Regulamentul portalului | Contact