allez001 Postat August 18, 2018 Partajează Postat August 18, 2018 Buna ziua , astazi ma gandeam la un mic proiect, ridicator de tensiune de la 5 la 12V ( DC-DC ) ~ 400ma .Pentru aceasta as vrea sa folosesc pic12f675 pentru ca deastea am in casa. Problema este ca nu stiu logica cu feedback-ul. Ceea ce am gasit pe neteste: Intuiesc ca GP1 este folosit ca ADC dar cam atat. Din cate am vazut pe youtube si imi dau seama GP1 are trebui sa controleze PWM sau chiar frecventa lui GP4. Va rog din experienta dvs. daca ma puteti ajuta si pe mine. Ceea ce am gasit eu este https://allanfaulds.weebly.com/pic-psu-dc-dc-converter-project.html Deci cum as putea face un programel in MikroC pentru acest proiect ? Cred ca ar veni cam asa dar mai departe nu stiu ce sa pun in functia step_up( ) ..... void hardware(){ ANSEL = 0; ADC_Init(); ADCON0 = 1; // Select analogue input AN0 CMCON = 7; // All comparators off TRISIO1_bit = 1; // GP1 input TRISIO2_bit = 0; // GP2 output } void step_up(){ ???.........??? } void main (){ hardware(); step_up() ; } Link spre comentariu
cirip Postat August 18, 2018 Partajează Postat August 18, 2018 (editat) Salut allez001, Treaba e putin mai complicata si nu o vei rezolva doar in cateva linii de cod. Am sa incerc sa arat intr-un fel de pseudocod cam ce trebuie facut si ce probleme apar. Personal nu cred ca un procesor de tipul lui 12F675 poate sa "tina" bucla unei surse in comutatie. O alegere mai potrivita ar putea fi 12F683, care are PWM hardware in interior. dar daca 675 ai in sertar, hai sa vedem cam ce ar fi d efacut. 1) Trebuie sa generezi pe GP1 un semnal dreptunghiular a carui frecventa sa fie cea necesara pentru valorile alese ale bobinei si condensatorului de la iesire. Sa presupunem ca e de 50KHz. Asta inseamna o perioada de 20us. Daca operezi procesorul la 4MHz, asta iti da posibilitatea sa executi 20 de instructiuni intr-un ciclu al sursei. Nu e prea mult. 2)Trebuie sa pastrezi perioadele 1/0 la iesire destul de precis. Perioadele individuale in 0 si 1 vor stabili factorul de umplere, adica valoarea PWMului. Daca procesorul lucreaza la 4MHz, rezolutia nu e prea buna. Bucla principala, numai ptr PWM, ar arata cam asa: while(1){ GP1=1; intarziere(valoare1); GP1=0; intarziere(valoare2); } Si cu asta ai generat comanda tranzistorului. Acest while(1) trebuie pus in main. Asa cum e scris acum, executa main o data, apoi iese prin porumb. Trebuie tinut in bucla infinita cu while(1). 3)Nu uita ca, printre picaturi, trebuie sa masori cu ADCul tensiunea de la iesirea divizorului rezistiv si in functie de ea sa ajustezi valoare1 si valoare2. Asta ia timp si iti va afecta frecventa si factorul de umplere ale undei dreptunghiulare de la iesire. O posibila solutie pentru a pastra frecventa corecta la iesire este sa folosesti intreruperi periodice de la unul din timere. Asta complica programul. 4) Valoarea citita nu poate fi aplicata imediat si oricum, pentru ca in mod garantat bucla va intra in oscilatie. Valoarea citita trebuie trecuta printr-un filtru trece jos digital, iar rezultatul filtrului poate modifica valoare1 si valoare2. Filtrul, la randul lui, trebuie sa tina si el seama de defazajul introdus de sistem, astfel ca reactia negativa sa nu se transforme in pozitiva si bucla sa oscileze. De asemenea trebuie tinut cont de timpul de raspuns, altfel, cand conectezi/deconectezi o sarcina, vei avea variatii mari de tensiune. Toate cele de mai sus sunt necesare ca sa obtii un montaj care merge bine. Acuma, ca sa nu te descurajez complet, poti incerca doar bucla while de mai sus si ar trebui sa obtii ceva, dar fara stabilizare, stabilitatea buclei de control si alte fineturi. Probabil ca e bun ca proiect didactic, dar nu e simplu. Spor! Editat August 18, 2018 de cirip Link spre comentariu
modoran Postat August 18, 2018 Partajează Postat August 18, 2018 Are rost sa te complici cu microcontroller pentru o astfel de aplicatie ? Sunt bune microcontrollerele, dar au si ele rolul lor, nu inseamna ca trebuie sa le folosim oriunde. Pana la urma costul software-ului devine mai mare ( chiar daca il scrii singur - asta necesita timp, debugging si tot mai poti avea buguri in cod - se merita ? ) decat costul unui integrat dedicat step-up. Link spre comentariu
allez001 Postat August 19, 2018 Autor Partajează Postat August 19, 2018 15 hours ago, cirip said: 2)Trebuie sa pastrezi perioadele 1/0 la iesire destul de precis. Perioadele individuale in 0 si 1 vor stabili factorul de umplere, adica valoarea PWMului. Daca procesorul lucreaza la 4MHz, rezolutia nu e prea buna. Bucla principala, numai ptr PWM, ar arata cam asa: while(1){ GP1=1; intarziere(valoare1); GP1=0; intarziere(valoare2); } Atunci am sa incerc sa folosesc un un crystal 12 ~ 16 Mhz , cred ca am sa incerc sa scriu ceva gen Vdelay_us si toata treaba sa mearga cat se poate dinamic pentru usurarea codului din bucla principala. Dar ca idee: Cand am cadere de tensiune ar trebui sa creasca duty cycle ? Sau frecventa ..... sau ambele ?? Nu trebuie sa fie foarte stabil avand in vedere ca voi alimenta o lampa cu LED-uri => Deci consumul o sa fie constant ceea ce inseamna ca pic-ul nu ar trebui sa aiva prea mari batai de cap cu ajustarile. ok poate nu este cea mai buna idee, dar as vrea sa realizez mai mult pentru satisfactia reusitei. Pentru ca stiu ca nu sunt scumpe astfel de surse in comutatie Link spre comentariu
UDAR Postat August 19, 2018 Partajează Postat August 19, 2018 Proiectul pe care l-ai prezentat în link folosește comparatorul NU ADC - cel puțin așa rezultă din sumara descriere. Chiar și așa, în condițiile în care nu există o referință absolută nu există nici măsurătoare . De altfel luminozitatea din poze la 3.2V pare mult redusă față de cea la 5V . Deci eu cred că proiectul respectiv NU stabilizează! Faptul că necesită reprogramare când crește consumul ( la aceeași tensiune ! ) îmi întărește convingerea că e așa. Mai mult frecvența de oscilație este foarte scăzută - circa 7 kHz - ceea ce poate determina manifestări audibile . În concluzie eu cred că proiectul propus nu merită a fi copiat . Dacă vrei să faci ceva poți opta, așa cum s-a propus, pentru PIC12F683 . Dacă vrei totuși să faci cu PIC12F675 poți implementa un PWM soft relativ lent , poți face o buclă de control și mai lentă dar folosind o referință externă ( ex. TL431 ) pentru ADC. În acest caz, pentru sarcini lent variabile, poți obține rezultate decente. Link spre comentariu
allez001 Postat August 19, 2018 Autor Partajează Postat August 19, 2018 Ok, am sa caut PIC12F683... Link spre comentariu
UDAR Postat August 19, 2018 Partajează Postat August 19, 2018 Poți totuși încerca mai întâi cu 675 . Faci un PWM soft bazat pe TMR0 - de exemplu . Ceva de genul - încarc M în TMR0 , fac OUT=1, incrementez până la overflow, fac OUT=0 și încarc N în TMR0. Dacă mențin M+N = constant frecvența va fi constantă și DC va fi variabil . Pui un TL431 pe intrarea GP1 și Feedback-ul pe GP0 . Măsori ieșirea , mediezi ( = filtare trece jos ) , în funcție de diferența față de valoarea prescrisă modifici M ( și N simultan ) Link spre comentariu
validae Postat August 19, 2018 Partajează Postat August 19, 2018 Dacă vrei să alimentezi leduri cu sursa, ține cont că nu ai nevoie de tensiune stabilizată, ci de curent stabilizat.Adică în funcție de rezistența de sarcină (ledurile consumă mai mult când se încălzesc, fiindcă le scade rezistența) tensiunea va scădea sau crește, pentru a menține curentul constant. Link spre comentariu
cirip Postat August 19, 2018 Partajează Postat August 19, 2018 (editat) 22 hours ago, cirip said: while(1){ GP1=1; intarziere(valoare1); GP1=0; intarziere(valoare2); } Rectificare. Acu' mi-am dat seama ca am gresit. Semnalul de comanda a tranzistorului trebuie scos pe GP4. Prin urmare, in pseudocodul de mai sus, GP1 se va inlocui cu GP4. 6 hours ago, allez001 said: Cand am cadere de tensiune ar trebui sa creasca duty cycle ? Sau frecventa ..... sau ambele ?? Trebuie sa cresca factorul de umplere, dar asta se poate face in mai multe feluri: fie maresti raportul dintre perioada de 1 si cea de 0, pastrand suma perioadeleor constanta, fie pastrezi perioada de 1 constanta si o misorezi numai pe cea de 0, ceea ce duce la cresterea frecventei. Cresterea, insa, nu se poate face la ghici. In general cresterea fact. de umplere e mica si are menirea de a compensa pierderile rezistive datorate cresterii de curent. In realitate, daca nu ar exista pierderi, relatia tensiune de iesie fct. de tensiunea de intrare conduce la un factor de umplere constant. Oricum, asta e cea mai mica grija. Intr-adevar, nu observasem ca nu exista referinta. Si asta e o problema. Nu am citit cu atentie articolul original. Daca foloseste comparatorul , nu ADCul ptr masurarea tensiunii de iesire, atunci filozofia scrierii programului se cam schimba. Cum spuneam, pentru inceput, ca sa fie mai simplu, foloseste oscilatorul intern de 4MHz si scoate un dreptunghi de 30-50KHz pe GP4, conecteaza tranzistorul si celelalte piese si vezi ce iese. Editat August 19, 2018 de cirip Link spre comentariu
allez001 Postat August 19, 2018 Autor Partajează Postat August 19, 2018 ok multumesc mult .... daca am timp, saptamana asta incerc sa vedem ce iese, totusi am o indoiala .... RANDAMENTUL Link spre comentariu
UDAR Postat August 19, 2018 Partajează Postat August 19, 2018 Randamentul, în principiu, nu este afectat de mecanismul de control - de PIC în acest caz. El este determinat în principal de căderile de tensiune pe tranzistor ( care la rândul lor depind de cum este acesta comandat ) respectiv pe diodă precum și de calitatea ( pierderile ) bobinei . Ca să scoți 12V din 5V la o putere relativ mică ar trebui să atingi ușor 75-80% cu bipolar și peste 80% cu MOSFET . Dar ăsta e un alt subiect de la o altă secțiune . Link spre comentariu
sesebe Postat August 19, 2018 Partajează Postat August 19, 2018 Dacă tot vrei microcontroler vezi ca aveau chiar ăștia de la microcip niște integrate pt surse SMPS jumătate controler analogic jumătate microcontroler special dezvoltate pt SMPS-uri. Nu mai știu acum cum se numeau. Link spre comentariu
modoran Postat August 20, 2018 Partajează Postat August 20, 2018 Uite aici controllerele astea de la Microchip: http://www.microchip.com/ParamChartSearch/chart.aspx?branchID=9013 Link spre comentariu
nico_2010 Postat August 21, 2018 Partajează Postat August 21, 2018 @modoran: sper ca initiatorul topicului sa aiba capabilitatea tehnica de a lipi pinii capsulelor QFN !!. In alta ordine de idei, pentru initiatorul topicului: in atasament gasesti sursa pentru partea de generare a tensiunii de 12V din programatorul PicKit2. Te poti inspira de acolo cu privire la modul de realizare a proiectului tau. Vpp.zip Link spre comentariu
Dan57 Postat August 21, 2018 Partajează Postat August 21, 2018 Si cat de simplu ar fi cu un mic integrat dedicat, de cativa lei. Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum