Sari la conținut
ELFORUM - Forumul electronistilor

Sursa laborator ajustabila V2


Postări Recomandate

Salutari tuturor.

 

Va prezint cel mai recent proiect personal al meu, este vorba despre o sursa de laborator ajustabila U/I.

 

 

 

Nevoia unei surse cu ceva mai mult curent decat poate aceasta:

http://www.elforum.info/topic/78095-sursa-ajustabila-simetrica-de-laborator/

 

M-a convins in vara sa incep lucrul la o noua sursa de laborator, una cu 0-30Vcc si 0-10A. Din start am plecat pe LM317+PNP fiind o configuratie confirmata deja la cealalta sursa, astfel incat in colaborare cu Smilex am modificat schema, optimizandu-o pentru ajustare tensiune de la 0, si curent de la 0 la 10A. Proiectul a fost initiat in iulie asta vara, dar din lipsa de timp abea acum am reusit sa-l termin. Schema imi apartine si este aceasta:

Schema.png

 

Configuratia LM317+PNP este destul de cunoscuta deci nu voi insista asupra ei. Am recurs la o negativa extrasa asa cum se poate observa, din insasi alimentarea regulatorului, pe care am stabilizat-o la 2,5V cu un TL431 pentru a putea avea iesire la 0V. Inca o stabilizare de +2,5V insumata cu negativa deja descrisa au constituit si alimentarea AO de la partea de curent. Ajustarea limitarii este destul de simpla ca ideie, un amplificator de eroare monitorizeaza un shunt si la depasirea pragului setat de referinta prin intermediul potentiometrului, actioneaza un tranzistor Q1 care deschizandu-se, trage pinul Adj al LM in jos catre negativa, Q2 este actionat de deschiderea Q1 si comanda un led care indica interventia limitarii. Conexiunile S- si S+ de jos sunt cele pentru afisaj, pentru partea de curent, unde am un AO neinversor comandat chiar de shuntul de pe placa regulatorului, asta pentru a nu mai folosi inca un shunt. In rest o filtrare la Adj care curata iesirea si ajuta si in urma testelor am descoperit ca ajuta si compensarea, care se face de la colectorul Q1 direct la inversoare, am gasit la teste ca este mai stabila asa, filtrarea principala este constituita din 2 electrolitici de 10mF ( 10000 uF ) la 63V, puntea redresoare una patrata la 50A. R1 semireglabil multitura 100k, asigura reglajul precis al referintei de la inversoare ( valoarea maxima ) si deci maximul curentului cu P1 la maxim. R16 semireglabil multitura 1k, asigura reglajul necesar aducerii iesirii la 0V atunci cand potentiometrul P2 de tensiune este la minim.

 

Cablajul regulatorului deasemenea facut de mine este:

Dispunere-componente.png

 

Tranzistorii de putere, rezistentele din emitoarele lor si D2, sunt fixati direct pe radiator, iar legaturile se fac cu 3 fire la placa, motiv pentru care lipsesc de pe cablaj, in fapt si LM-ul este fixat tot pe radiator langa PNP-uri, si este conectat cu fire la placa. Ledurile deasemeni fixate pe panou, si conectate cu fire la placa.

 

Transformatorul este recuperat dintr-un UPS cu 2 acumulatori inseriati, UPS-ul era functional dar nu mai avea acumulatori ( asa l-am primit ca plata pentru repararea unui amplificator ), la ceva verificari am ajuns la concluzia ca traful este tocmai bun pentru sursa asta, secundar de 30Vca masurati pe la 240Vca la retea, motiv pentru care am recurs la LM317HV care permite o diferenta pe el mai mare decat LM-ul clasic. In sarcina de 10A tensiunea din secundarul trafului scade cu cca 2,5V, ceea ce mi s-a parut in regula si a fost unul din principalele motive pentru care l-am ales. Asta este:

Traf1.jpg

Traf2.jpg

 

Radiatorul este acesta:

Rad1.jpg

Rad2.jpg

Rad3.jpg

 

Este un monstru si principalul vinovat pentru o inghesuiala infernala in carcasa, dar isi face treaba cu brio, asadar merita.

L-am curatat, i-am pregatit fata slefuind-o cat mai bine cu smirglu coala P1000 plus apa, si apoi am fixat semiconductorii pe el ( evident, pasta, mica, niplu, etc...):

Rad4.jpg

 

Una dintre cele 2 TO220 este LM317HV, iar cealalta este LM35DT, adica senzorul de temperatura necesar afisajului.

 

Placa regulatorului:

001.jpg

 

002.jpg

 

003.jpg

 

004.jpg

 

005.jpg

 

006.jpg

 

007.jpg

 

Afisajul se foloseste de PIC16F876A, quart de 4 Mhz, si LCD de 2x16, codul sursa scris de mine:

/* Descriere: * Afisaj Digital Multiplu pentru Sursa de Laborator. * Afisare Tensiune 0-35Vcc; Curent 0-10A; Temperatura 0-99*C si Putere. * Protectii: * Avertizare vizuala prin LED,   la atingerea pragului limita la Curent. * Blocare sursa prin decuplarea alimentarii trafului   principal de catre un releu, si afisare avertisment   pe ecran la atingerea a 80*C pe radiatorul regulatorului. * Configuratie: * Microcontroller PIC16F876A * Oscilator XT 4.000 Mhz * LCD Alfanumeric 2x16 caractere * Autor: Marian. * Iul-2015*///Conexiuni LCDsbit LCD_RS at RB7_bit;sbit LCD_EN at RB6_bit;sbit LCD_D4 at RB5_bit;sbit LCD_D5 at RB4_bit;sbit LCD_D6 at RB3_bit;sbit LCD_D7 at RB2_bit;sbit LCD_RS_Direction at TRISB7_bit;sbit LCD_EN_Direction at TRISB6_bit;sbit LCD_D4_Direction at TRISB5_bit;sbit LCD_D5_Direction at TRISB4_bit;sbit LCD_D6_Direction at TRISB3_bit;sbit LCD_D7_Direction at TRISB2_bit;//Declarare variabileunsigned char ch, ADCx;unsigned int Tensiune, Curent, Temp, ProtI, ProtT;unsigned long V, A, Pw, T;//Functie principalavoid main() {     INTCON = 0;                             // Dezactivare intreruperi     TRISA = 0x07;                           // RA0, RA1 si RA2 setate ca intrari     TRISC = 0;                              // Portul C setat ca iesire     PORTC = 0;                              // Resetare port C     Lcd_Init();                             // Initializare LCD     Lcd_Cmd(_LCD_CURSOR_OFF);               // Dezactivare cursor     Lcd_Cmd(_LCD_CLEAR);                    // Stergere Ecran     Delay_ms(1000);                         // Delay 1 secunda     Lcd_Out(1,1,"Sursa Laborator");         // Mesaj initial 1, prima linie     Lcd_Out(2,3,"0-35V 0-10A");             // Mesaj initial 1 linia 2     Delay_ms(3000);     Lcd_Cmd(_LCD_CLEAR);                    // Stergere ecran     Lcd_Out(1,6,"Autor");                   // Mesaj initial 2, prima linie     Lcd_Out(2,2,"Marian@Elforum");          // Mesaj initial 2, linia 2     Delay_ms(3000);     Lcd_Cmd(_LCD_CLEAR);     Lcd_Out(1,15,"C");                      // Afiseaza caracter "C", linia 1, coloana 15      while (1) {            //Achizitie ADC            Tensiune = 0;            Curent = 0;            Temp = 0;            for (ADCx=0; ADCx<10; ADCx++) {            Tensiune += ADC_Read(0);         // Achizitie ADC pentru tensiune            Curent += ADC_Read(2);           // Achizitie ADC pentru curent            Temp += ADC_Read(1);             // Achizitie ADC pentru temperatura            Delay_ms(10);            }            //Tensiune            Tensiune = Tensiune/ADCx;        // Alocare valoare tensiune            V = (long)Tensiune*3500;         // Converteste rezultat in milivolti            V = V/1023;                      // 0...1023 => 0...3500mV            ch = V/1000;                     // Extrage zeci 10.00            Lcd_Chr(1,1,48+ch);              // Afisare rezultat in format ASCII            ch = (V/100) % 10;               // Extrage unitati 01.00            Lcd_Chr_CP(48+ch);               // Afiseaza rezultat in format ASCII            Lcd_Chr_CP('.');                 // Afiseaza caracter '.'            ch = (V/10) % 10;                // Extrage sutimi  00.10            Lcd_Chr_CP(48+ch);            ch = V % 10;                     // Extrage zecimi  00.01            Lcd_Chr_CP(48+ch);            LCD_Chr_CP('V');                 // Afiseaza caracter 'V'            Delay_ms(10);            //Curent            Curent = Curent/ADCx;            // Alocare valoare curent            A = (long)Curent*1000;           // Convertire rezultat in milivolti            A = A/1023;                      // 0..1023 => 0-1000mV            ch = A/1000;                     // Extragere zeci            Lcd_Chr(2,1,48+ch);              // Scrie rezultatul in format ASCII            ch = (A/100) % 10;               // Extragere unitati            Lcd_Chr_CP(48+ch);               // Scrie rezultatul in format ASCII            Lcd_Chr_CP('.');            ch = (A/10) %10;                 // Extragere sutimi            Lcd_Chr_CP(48+ch);               // Scrie rezultatul in format ASCII            ch = A % 10;                     // Extragere zecimi            Lcd_Chr_CP(48+ch);            Lcd_Chr_CP('A');                 // Afisare caracter 'A' la final            Delay_ms(10);            //Temperatura            Temp = Temp/ADCx;                // Alocare valoare temperatura            T = (long)Temp*9900;              // Converteste rezultat in milivolti            T = T/1023;                      // 0...1023 => 0...9900mV            ch = T/1000;                     // Extrage zeci 10.00            Lcd_Chr(1,9,48+ch);            ch = (T/100) % 10;               // Extrage unitati 01.00            Lcd_Chr_CP(48+ch);            Lcd_Chr_CP('.');            ch = (T/10) % 10;                // Extrage sutimi 00.10            Lcd_Chr_CP(48+ch);            ch = T % 10;                     // Extrage zecimi 00.01            Lcd_Chr_CP(48+ch);            Lcd_Chr_CP(223);                 // Afisare caracter "Grad"            Delay_ms(10);            //Putere            Pw = V*A/1000;                   // Seteaza valoare Putere            ch = Pw/1000;                    // Extrage sute            Lcd_Chr(2,9,48+ch);            ch = (Pw/100) % 10;              // Extrage zeci            Lcd_Chr_CP(48+ch);            ch = (Pw/10) %10;                // Extrage unitati            Lcd_Chr_CP(48+ch);            Lcd_Chr_CP('.');            ch = (Pw/1) % 10;                // Extrage sutimi            Lcd_Chr_CP(48+ch);            ch = Pw % 10;                    // Extrage zecimi            Lcd_Chr_CP(48+ch);            Lcd_Chr_CP('W');                 // Afiseaza "W" la sfarsit            Delay_ms(10);            //Protectii            ProtI = ADC_Read(2);             // Ahizitie ADC pentru protectie Curent            if (ProtI > 1021) {            PORTC.F5 = 1;                    // Aprinde LED daca curentul este 9.9A            }            else {            PORTC.F5 = 0;                    // Resetare RC5            }            ProtT = ADC_Read(1);             // Achizitie ADC pentru protectie temperatura            if (ProtT > 827) {            PORTC.F2 = 1;                    // Activeaza releu daca temperatura este mai mare de 80*C            Lcd_Cmd(_LCD_CLEAR);             // Sterge ecran            Lcd_Out(1,4,"PROTECTIE!");       // Afisare mesaj avertisment,            Lcd_Out(2,1,"SUPRATEMPERATURA"); // "protectie supratemperatura"                do {                }                            // Endless loop               while (1);            }            else {            PORTC.F2 = 0;            }      }}

Schema afisajului evident imi apartine si este:

Schema.png

 

Alimentarea sa se face de la un traf separat micut de 2x9Vca@600mA. Din el se formeaza o alimentare simetrica la +/-8Vcc necesara AO, plus o alimentare simpla de 5V pentru uC, display si releu. La partea de curent IC1A monitorizeaza tensiunea de pe shunt-ul regulatorului si o amplifica cu o gama 0-5V pentru o plaja de curent 0-10A, iesirea sa comanda ADC-ul uC. La partea de temperatura avem un simplu LM35DT in capsula TO220 care monitorizeaza temperatura radiatorului si alimentat de la +8Vcc, ofera o iesire catre IC1B care este proportionala cu temperatura. R3 semireglabil multitura 20k asigura calibrarea afisajului de curent, R5 semireglabil multitura 5k asigura calibrarea afisajului temperaturii, calibrare care se face destul de simplu daca se detine un multimetru cu functie de temperatura *C, se monitorizeaza cu acesta temperatura radiatorului si se ajusteaza R5 pana afisajul indica aceeasi valoare cu multimetrul. R7 si R8 multiture de 100k si respectiv 10k asigura calibrarea afisajului de tensiune.

 

Una din masurile de protectie este cea la supratemperatura, daca radiatorul atinge o anumita temperatura ( momentan setat pragul pe la 80*C dar nu e batut in cuie ), uC intra si ramane intr-o bucla continua in care comanda activarea portului RC2 care activeaza Q1, si acesta din urma alimenteaza releul care decupleaza alimentarea in primarul trafului de forta, concomitent se afiseaza pe display ( 2x16 ) un mesaj de avertisment, reluarea functionarii se poate face prin resetarea uC sau oprirea alimentarii. LED1 indica faptul ca s-a atins pragul maxim de curent al sursei, am setat eu indicarea undeva putin peste 9A, dar nici asta nu este batut in cuie.

 

Cablajul tot al meu e si cam asa arata:

Dispunere-componente.png

 

Cateva simulari si poze cu partea de afisaj:

001.png

 

002.png

 

003.png

 

004.png

 

005.png

 

006.png

 

LCD1.jpg

 

LCD2.jpg

 

010.jpg

 

011.jpg

 

Carcasa este una de osciloscop Romanesc E104, panourile din fata si spate sunt facute de mine din placi de cablaj simplu imprimat, am folosit softul "front panel" pentru proiectarea sa, si am transferat desenul cu metoda de transfer toner pe partea top a cablajului, decupajele s-au facut cu burghiuri si cutter. Panourile au fost consolidate structural pe dinauntru cu fasii de cablaj lipite perpendicular in puncte cheie. Dupa montaj cam asa arata interiorul:

Interior.jpg

 

Este o inghesuiala cum n-ati vazut, si vina este in mare parte a radiatorului, dar am asigurat o buna ventilatie a interiorului ( in special a radiatorului ), si izolare optima a cablurilor, deci inghesuiala aia este una asumata si acceptata. Nu va recomand insa sa faceti ca mine, folositi-va de o carcasa ceva mai spatioasa, si eventual de un radiator montat pe dinafara, eu pe asta am avut-o si deci pe asta am folosit-o.

 

Iata in continuare cateva teste, tensiune minima:

Tensiune-minima.jpg

 

Tensiune maxima:

Tensiune-maxima.jpg

 

Curent minim:

Curent-minim.jpg

 

Curent maxim:

Curent-maxim.jpg

 

Si ultimele poze:

Fata.jpg

 

Spate.jpg

 

Ansamblu.jpg

 

Atasez in continuare 2 arhive .rar care contin proiectele complete pentru regulator si afisaj, scheme, cablajuri, fisiere in eagle, proiect complet soft in microC, proiect simulare proteus, etc... Tot ce va trebuie pentru reproducerea sursei in caz ca sunteti interesati.

http://www.mediafire.com/download/o2f7v889bccf93r/Regulator_LM317_Iadj.rar

http://www.mediafire.com/download/sng8vi69p5c37hh/Afisaj.rar

 

Aici este schema revizuită, cablajul și arhiva acestuia:

 

Schema_rev.png

 

Pcb_rev.png

https://www.elforum.info/applications/core/interface/file/attachment.php?id=133026

Rog sa fie respectata intocmai de catre oricine este interesat de proiect.

Daca aveti probleme cu vreo componenta din schema, nu puneti voi la plesneala ce va vine in cap, imi spuneti mie ca nu gasiti ceva, si va recomand eu inlocuitor potrivit.

 

Multumiri ( cer scuze daca am omis pe cineva ):

Smilex pentru asistenta;

D-lui Flomar60 pentru radiator;

D-lui Tehnic Dan pentru carcasa;

Thunderer pentru LM317HV;

D-lui Vcdec pentru PIC16F876;

D-lui Bolek pentru afisaj;

Maxim_Sadilec pentru comutatorul cu cheie;

 

Inchei cerandu-mi scuze pentru postarea atat de lunga insa este un proiect complex la care am lucrat foarte mult, si pe care doream sa-l prezint in detaliu asa cum merita.

 

Va multumesc pentru atentie si pentru rabdarea de a citi prezentare aici de fata si va doresc toate cele bune.

Cu stima,

Marian.

Editat de Marian
Corectie link-uri
Link spre comentariu

Felicitari, dar am si eu 2 observatii. Prima e legata de transformator, trafurile de ups sunt in general economice si facute sa functioneze pe timp scurt. Chiar si cu ventilator nu rezista la putere maxima mult timp. A doua e legata de AO folosite. In cazul de fata lm358 nu e o alegere prea inspirata deoarece ai un shunt foarte mic si lm358 are ofsetul mare. Eu ti-as recomanda un lt1013 care e cam la acelasi pret si are cam aceleasi caracteristici ca 358 mai putin ofsetul care e de 10 ori mai bun. Si ultima chestia asa mai mult ca o curiozitate, care e faza cu intrerupatorul cu cheie ?

Link spre comentariu

Asa cum am spus am testat traful inainte sa il pun la proiectul asta, ca sa ma lamuresc daca este bobinat economic l-am lasat sa functioneze in gol si s-a incalzit ce-i drept dupa mai mult timp, dar undeva pe la 45-50*C cu retea masurata de 240Vca, ceea ce mi s-a parut in regula, in sarcina bobinajul economic este irelevant, miezul nu se va incalzi mai mult indiferent de magnitudinea sarcinii, contributia la temperatura in sarcina va fi exclusiv de la pierderile pe cupru, si asa cum am zis, in 10A, caderea a fost de cca 2,5V, ceea ce nu este deloc mult pentru un asemenea curent. Nu am nici un stres in privinta trafului, oricum o astfel de sursa prin definitie nu trebuie sa functioneze permanent, dar n-as avea probleme nici sa incarc acumulatori spre exemplu.

 

La AO am folosit alimentare simetrica pentru a evita limitarile de capat de cursa, alimentarea simetrica limiteaza si influenta offset-ului, insasi testele din poze arata asta, LM358 isi face treaba ok am aratat asta, deci nu avea sens un alt AO. Evident daca cineva doreste sa o reproduca, daca vrea poate sa foloseasca alt AO, si eventual poate ajusta schema si cablajul pentru a acomoda integratul preferat, am pus la dispozitie fisierele complete in eagle pentru asta, pentru a fi cat mai simplu de facut asta, se detine deja o configuratie testata si bine pusa la punct de mine.

 

Intrerupatorul cu cheie il aveam printr-o cutie de mai mult timp si aici mi s-a parut tocmai potrivit, si totodata inedit, e o chestie subiectiva si atata tot, face fiecare cum vrea.

Link spre comentariu

Schimba titlul ... la mine apare " la borator " , cred ca e o greseala nefericita ...

Chiar n - a vazut nimeni ? ... iar o sa ma acuze lumea ca scriu la caterinca , precum la Bodega ... oricum e irelevant ... tot din " ziceri " !

Altminteri , spor ... frumos proiect !

Editat de gauss
Link spre comentariu

Asa este, nu stiu cum s-a strecurat eroarea asta, probabil o greseala a mea la tastare, regretabil este ca nu am verificat inainte sa postez pentru ca acum nu mai pot modifica nimic, motiv pentru care rog pe colegul moderator sa editeze titlul si sa scoata spatiul dintre "la" si "borator".

 

Multumesc pentru observatie si totodata imi cer scuze pentru eroare.

Link spre comentariu

M-am uitat acum prin sertarul de piese si mai am 2 lt1013 varianta "OBSOLETE PACKAGE" care e compatibila la pini cu 358. Daca vrei sa scapi de eroare iti dau eu unul sa-l inlocuiesti in voltmetru ca acolo ai amplificare si acolo e eroarea cea mai mare. Ai mai mult de jumatate de amper eroare, eu nu l-as lasa asa mai ales ca e vorba de inlocuit o piesa pe care ti-o dau eu gratis. Tu decizi. V offset nu are legatura cu alimentarea. 

Link spre comentariu

Foarte frumos, Marian, o remarca as avea si o intrebare:

 

Remarca: ai folosit vaselina siliconica pentru ungere (nu termica), daca nu ma insel.

 

Intrebarea: cu ce soft ai proiectat cablajul?

Link spre comentariu

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 cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum
×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări