Sari la conținut
ELFORUM - Forumul electronistilor

sursa cu pic


aetius

Postări Recomandate

La Fortran io am fost mai putin norocos, am programat pe Felix C256... primul meu cod pt. trasarea bioritmurilor avea 2,5kg... :rade:

Editat de informer
Link spre comentariu

Multumesc pentru schema si promptitudine, am vazut si realizarea practica , o sursa deosebita originala merita actualizata pentru valori mai mari si felicitari pentru cse-electronics, cu realizari de exceptie.

Pasii urmatori:

- salvarea ultimelor valori de lucru in EEPROM, astfel incit sursa sa porneasca ca orice sursa analogica;

- pornire silentioasa;

- blocarea iesirii pana cand se initializeaza uC si se stabilizeaza tensiunea de iesire.

 

@gsabac

Link spre comentariu

VERSIUNE 1.04

 - afisaj temperature pe LCD.

 - pornire/oprire ventilator la 55-45 grade in functie de temperature radiator.

 - supra temperatura la 100 grade cu avertizare pe ecran ( in proteus e doar un led de avertizare inca nu m-am hotarit ce s-a intrerupa).

 

@gsabac, va rog verificati si modificati daca este cazul.

Si imi cer scuze de intirziere, dar am piticu bolnav si serviciul pe deasupra si nu am avut timp.

 

New folder.rar

Link spre comentariu

Sanatate pentru copil si nu trebuie sa va cereti scuze, suntem useri fara obligatii ai unui forum de exceptie si in legatura cu acest proiect, de la inceput m-am gandit ca va dura multe luni pana la finalizarea proiectului, dar si mai multe pana la un produs final, daca se va face vreodata. In orice situatie, toti cei interesati sunt in castig ca informatie si ca un posibil "learning" de la idee, concept spre un produs final.

 

La teste, sursa functioneaza in totalitatea ei, cu reglajele de tensiune, curent, comutarea transformatorului si pornirea ventilatorului cu temperatura.

Deoarece ati trecut codul in MPLAB, pe care nu stiu sa il folosesc si nu il am pe calculator, nu pot sa completez codul pentru a imbunatati versiunea,

 de aceea va rog sa postati codul sursa in C al programului. Este interesant cum ati reusit trecerea de la un HEX de 45K la unul de 15K, tot de circa 15K este si la mine.

 

Versiunea 1.04 este pentru inceput prea complexa, de aceea cred ca ar trebui simplificata pentru o tensiune de iesire de 25V fara prize pe transformator si un curent de 2A, in total vreo 80-100W din transformator,  deoarece asa cum este ar trebui spre 350-400W si ar iesi o cutie mare, cu cateva butonele pe fata, un afisaj mititel si un sistem de ventilatie complex cu radiatoare mari. Pentru o varianta de lux cu claviatura si afisaj mare, versiunea 1.03, ca idee, ar fi foarte potrivita.

 

@gsabac

Link spre comentariu
// Name : Power Source MCP4921 12 bit DAC si PIC16F877 microcontroler cu conexiune SPI
         //Version 1.02 din 29 septembrie 2019  Autori @gsabac si @aetius
         //Sound_Play(2000,650);  //trebuie pus buzerul play in Proteus
         // Eeprom_Write(0x00,Tensiune);         // save setting
         //Delay_ms(5);
         //Tensiune = Eeprom_Read(0x00);        // read last set
//Conexiuni LCD
sbit LCD_RS at RB1_bit;
sbit LCD_EN at RB3_bit;
sbit LCD_D4 at RB4_bit;
sbit LCD_D5 at RB5_bit;
sbit LCD_D6 at RB6_bit;
sbit LCD_D7 at RB7_bit;

sbit LCD_RS_Direction at TRISB1_bit;
sbit LCD_EN_Direction at TRISB3_bit;
sbit LCD_D4_Direction at TRISB4_bit;
sbit LCD_D5_Direction at TRISB5_bit;
sbit LCD_D6_Direction at TRISB6_bit;
sbit LCD_D7_Direction at TRISB7_bit;

// modulul DAC
 sbit Chip_Select at RC0_bit;
 sbit Chip_Select_Direction at TRISC0_bit;
 #define TensiuneMax  4080            // 831 mV pentru10V   si   4080mV pentru 50V la iesire
 #define CurentMax  1022              // curentul maxim 5A
 unsigned int container ;
 unsigned int MSB;
 unsigned int LSB;
 unsigned int Tensiune;
 unsigned char ch, ADCx;
 unsigned int TensADC, Temperatura;
 unsigned int TensiuneSUNT;
 unsigned int LimitaCurent;
 unsigned long V, T, A, A1;
 unsigned int numar_Bit;
 void convert_DAC(unsigned int value)
{
   /*Step Size = 2^n, Therefore 12bit 2^12 = 4096
     For 5V reference, the step will be 4096/4095 = 0.001000000 or 1mV (approx)*/

  /*Step: 1, stored the 12 bit data into the container
   Suppose the data is 4095, in binary 1111 1111 1111*/
  container = value;
  /*Step: 2 Creating Dummy 8 bit. So, by dividing 256, upper 4 bits are captured in LSB
   LSB = 0000 1111*/
  LSB = container/256;
  /*Step: 3 Sending the configuration with punching the 4 bit data.
   LSB = 0011 0000 OR 0000 1111. Result is 0011 1111 */
  LSB = (0x30) | LSB;
  /*Step:4 Container still has the 21bit value. Extracting the lower 8 bits.
   1111 1111 AND 1111 1111 1111. Result is 1111 1111 which is MSB*/
  MSB = 0xFF & container;
}

 void main()
{
     ADCON0  = 0b00001101;
     ADCON1 = 0b00000000;

     //CMCON = 0b00000111;             // Disable comparators
     //CVRCON = 0;          //dezactivam referinta variabila de tensiune

     PORTA = 0b00001111;         // bitii 0 si 1 si 2 si 3 ai portului A sunt intrari analogice.
     TRISA = 0b00001111;        // bitii 0, 1, 2, 3, ai portului A sunt intrari, bitii 2,3,5,6,7 sunt iesiri digitale
     TRISB = 0;         // designate PORTB pins as output
     PORTB = 0;          // set PORTB to 0
     TRISE = 0;
     PORTE = 0;
 TRISD = 1;
 PORTD = 0b11111111;
 Tensiune=0;           // Tensiune de pornire presetata la zero volti
 TensiuneSunt=0;
 LimitaCurent=102;      //TensSuntMax=102;          // Limita de curent initiala 500mA
 RE0_bit=0;
 RE1_bit=1;                //
     Lcd_Init();
     ADC_Init();
     Lcd_Cmd(_LCD_CURSOR_OFF);
     Lcd_Cmd(_LCD_CLEAR);
     Lcd_Out(1,1,"DigiSource EL-01");
     Lcd_Out(2,5,"ELFORUM");
     Delay_ms(2000);
     Lcd_Cmd(_LCD_CLEAR);
     Lcd_Out(1,1,"V:");
     Delay_ms(1);
     Lcd_Out(2,1,"A:");
     Delay_ms(1);
     Lcd_Out(1,9,"T:");
     
  while(1)
   {
    SPI1_Init();                  //SPI

    Chip_Select_Direction = 0;   // Set CS# pin as Output

      if (!RD0_bit)                   // if button on RD0 pressed
       {
         Delay_ms(30);
         TensADC = 0;
         TensiuneSUNT = ADC_Read(1);                                 //Esantion de CURENT, ADC channel 1
         if ((Tensiune<=TensiuneMax)&&(TensiuneSUNT<=LimitaCurent)) Tensiune = Tensiune + 10;  //increment 0.01V*multiplicarea analogica *12
        }
      if (!RD1_bit)               // button on RD1 pressed
        {
          Delay_ms(30);
         if (Tensiune > 0.01) Tensiune = Tensiune - 10;  // decrement 0.01V
        }

      if (!RD2_bit)               // button on RD2 pressed
        {
         Delay_ms(30);
         Tensiune=437;         // Tensiune +5V
        }

       if (!RD3_bit)               // button on RD3 pressed
        {
          Delay_ms(30);
          Tensiune=1010;          // Tensiune +12V
        }

        if (!RD4_bit)               // button on RD4 pressed
         {
           Delay_ms(30);
           Tensiune=0;          // Tensiune 0.000V
         }

       if (!RD5_bit)                   // if button on RD5 pressed increment 100mA
        {
         Delay_ms(30);
          if (LimitaCurent <=CurentMax) LimitaCurent = LimitaCurent + 10;  // increment 100mA
         //RE0_bit=0;
         //RE1_bit=1;
        }
       if (!RD6_bit)               // button on RD6 pressed  decrement 100mA
        {
          Delay_ms(30);
          if (LimitaCurent > 1) LimitaCurent = LimitaCurent - 10;  // decrement 100mA
          //RE1_bit=0;
          //RE0_bit=1;
        }

     // comutarea PRIZELOR TRANSFORMATORUI.  diferenta 2.040 - 2.000 creaza un histerezis de 500mV la iesire pentru comutare
      if (Tensiune >= 2040)   RA5_bit=1;   // Aprinde LED daca Tensiune mai mare de 25V si un releu comuta pe priza de 60V
      if (Tensiune <=2000)    RA5_bit=0;   // Stinge LED daca Tensiunea mai mica de 25V si releul revine pe pozitia de 35V

     //LimitaCurent=1023 ar fi 4,990A
      TensiuneSUNT = ADC_Read(1);                                 //Esantion de CURENT, ADC channel 1
      if (TensiuneSUNT > LimitaCurent)  Tensiune=Tensiune - 0.01 ; //Scade tensiunea daca curentul depaseste limita
       numar_Bit=Tensiune;     //numar_Bit=4095 maxim, converteste Volti in numarul de trepte de 1mV
       convert_DAC(numar_Bit);
       Chip_Select = 0;              //transmite tensiunea prin SPI la DAC si apoi la iesire
         SPI1_Write(LSB);
         SPI1_Write(MSB);
       Chip_Select = 1;

     //Calcularea curentului prin sarcina si afisarea pe display
            A = (long)TensiuneSUNT*5000;         // Converteste rezultat in milivolti
            A = A/1023;                      // 0...1023 => 0...5000mV
            ch = A/1000;                     // Extrage zeci 10.0
            Lcd_Chr(2,3,20);
            Lcd_Chr_CP(48+ch);              // Afisare rezultat in format ASCII linia 2, coloana 3
            ch = (A/100) % 10;               // Extrage unitati 01.0
            Lcd_Chr_CP('.');                 // Afiseaza caracter '.'
            Lcd_Chr_CP(48+ch);               // Afiseaza rezultat in format ASCII
            ch = (A/10) % 10;                // Extrage sutimi 00.1
            Lcd_Chr_CP(48+ch);               // Afiseaza rezultat in format ASCII

            Lcd_Out(2,11,"(");
            A1 = (long)LimitaCurent*5000;         // Converteste rezultat in milivolti
            A1 = A1/1023;                      // 0...1023 => 0...5000mV
            ch = A1/1000;                     // Extrage zeci 10.0
            //Lcd_Chr(2,11,20);
            Lcd_Chr_CP(48+ch);              // Afisare rezultat in format ASCII linia 2, coloana 11
            ch = (A1/100) % 10;               // Extrage unitati 01.0
            Lcd_Chr_CP('.');                 // Afiseaza caracter '.'
            Lcd_Chr_CP(48+ch);               // Afiseaza rezultat in format ASCII
            ch = (A1/10) % 10;                // Extrage sutimi 00.1
            Lcd_Chr_CP(48+ch);               // Afiseaza rezultat in format ASCII
            Lcd_Out(2,16,")");                // Afiseaza caracter ')'

    
    
            //Calcularea tensiunii de iesire si afisarea pe display
            TensADC = ADC_Read(0);               //Esantion de TENSIUNE, read analog value from ADC module channel 0
            V = (long)TensADC*5000;         // Converteste rezultat in milivolti
            V = V/1023;                      // 0...1023 => 0...5000mV
            ch = V/1000;                     // Extrage zeci 10.0
            if (ch==0) Lcd_Chr(1,3,20+ch);
            else Lcd_Chr(1,3,48+ch);        // Rezultat cu zero sters la ordinul zecilor format ASCII linia 1, coloana 3
            ch = (V/100) % 10;               // Extrage unitati 01.0
            Lcd_Chr_CP(48+ch);               // Afiseaza rezultat in format ASCII format ASCII linia 1, coloana 3
            Lcd_Chr_CP('.');                 // Afiseaza caracter '.'
            ch = (V/10) % 10;                // Extrage zecimi 00.1
            Lcd_Chr_CP(48+ch);               // Afiseaza rezultat in format ASCII
            ch = (V) % 10;                   // Extrage sutimi 00.01
            Lcd_Chr_CP(48+ch);               // Afiseaza rezultat in format ASCII

            //Calculul temperaturii si afisare
            Temperatura = ADC_Read(3);
            T = (long)Temperatura*50000 ;         // Converteste rezultat in milivolti
            T = T/1023;                      // 0...1023 => 0...5000mV
            ch = T/10000;                     // Extrage zeci 100.0
            if (ch==0) Lcd_Chr(1,11,20+ch);
            else Lcd_Chr(1,11,48+ch);               // Afisare rezultat in format ASCII linia 1, coloana 11
            ch = (T/1000) % 10;               // Extrage unitati 10.0
            Lcd_Chr_CP(48+ch);               // Afiseaza rezultat in format ASCII
            ch = (T/100) % 10;                // Extrage sutimi 01.0
            Lcd_Chr_CP(48+ch);               // Afiseaza rezultat in format ASCII
            Lcd_Chr_CP('.');
            ch = (T) % 10;                   // Extrage sutimi 00.01
            Lcd_Chr_CP(48+ch);
            Delay_ms(10);
            
            
        // detectie SUPRACURENT
        if (TensiuneSUNT > CurentMax) {
        RE2_bit=1;                     // Aprinde LED daca curentul este 5A, eventual cuplezi/decuplezi un releu/SSR/mosfet
                                       // prin contactele caruia trece '+'-ul sursei
       Lcd_Cmd(_LCD_CLEAR);                       // Sterge ecran
        Lcd_Out(1,1,"SUPRACURENT!");       // Afisare mesaj avertisment,
        Lcd_Out(2,1,"ACTIVATI RESET");     // "protectie supracurent"
        break;                            // iesi din ciclul for fara sa mai executi liniile urmatoare
      }
          //Detectie temperatura
        if (Temperatura >= 110) {       //   ~ 55 centigrade
         RE0_bit=1;                     // porneste ventilator
         //RA3_bit=1;                   // ventilator ON
        }
        else if (Temperatura <= 95) RE0_bit = 0;   // ventilator OFF cu histerezis  ~ 10 centigrade

       //Detectie supratemperatura
        if (Temperatura >= 200) {         //  ~ 100 centigrade
        RE1_bit=1;                     // Aprinde LED daca temperatura este ~ 100 centigrade, eventual cuplezi/decuplezi un releu/SSR/mosfet
                                       // prin contactele caruia trece '+'-ul sursei
        Lcd_Cmd(_LCD_CLEAR);                       // Sterge ecran
        Lcd_Out(1,1,"SUPRATEMPERATURA");       // Afisare mesaj avertisment,
        Lcd_Out(2,1,"ACTIVATI RESET");     // "protectie supratemperatura"
        break;                            // iesi din ciclul for fara sa mai executi liniile urmatoare
      }
   }
 }

Am atasat codul...

S-a facut ceva "curatenie" prin el...sters ce nu mai era nevoie,explicat cam ce face fiecare linie atit cat m-am priceput.

Da, se poate merge si pe o varianta de "lux"cu un afisaj 4x20 in loc de 2x16 sau una mai simpla cu tensiuni si curent dorit de fiecare.

Oricum astept pareri si oricine poate aduce imbunatatiri care pot fi testate si adaugate.

 

P.S.

"Deoarece ati trecut codul in MPLAB"...

Nu il folosesc(MPLAB) .

Editat de aetius
Link spre comentariu

In arhiva New Folder.rar, ati pus un fisier Sursa_PIC16F877_MCP4921.cof specific MPLAB, a aparut ca si cum ar face parte din proiect?

PS. Am introdus codul din postarea anterioara se compileaza si merge perfect.

 

@gsabac

Editat de gsabac
Link spre comentariu
  • 2 săptămâni mai târziu...

@aetius a realizat cu succes primele experimentari pe breadboard cu PIC-ul, afisajul si convertorii DAC din versiunea 1.04 si daca doreste, poate ne pune si noua o poza.

Schema versiunii 1.04, cu modificarile necesare pentru o functionare mai buna si sigura in practica, descoperite de autorul topicului, revizia 1.

  Click pentru marire.

1541757491_Sursa_PIC16F877A_MCP4921_Proteus1.04revizia1.thumb.png.922dc02eb2852585d0ad888678961360.png

 

Reamintesc ca versiunea 1.04 are control digital de tensiune si control analogic rapid pentru reglajul, pe modul de lucru, generator de curent. Deasemenea are controlul temperaturii cu ventilator comandat.

Modificarile sunt:

- alimentarea circuitului MCP1541 la 5V in loc de 12V;

- alimentarea circuitului OP07 intre pinii 4 si 7, cu tensiune negativa de -5V in loc de 0V pe pinul 4.

 

Pe simulari, experimentarile au evoluat in felul urmator:

- 2.02 cu control digital al tensiunii si curentului si protectie rapida, sugerata de @informer, cu doua circuite DAC;

- 3.03 modificarea conectarii senzorului de curent in serie cu sursa de alimentare, nu cu sarcina;

        Click pentru marire.

      92947960_Sursa_PIC16F877A_MCP4921_Proteus3_03.thumb.png.e7fe4fe179d6db1bdf4b8d9361bc6f5e.png

 

- 4.02 introducerea comenzilor pentru setarea tensiunii si curentului de la o claviatura.

     1812848078_Sursa_PIC16F877A_MCP4921_Proteus4.02cuClaviatura.thumb.png.8ed8a7459c106b1c579522eed127025f.png

Am scos protectia si controlul temperaturii deoarece PIC-ul a ajuns la limita si compilatorul indica eroarea "stack overflow" si la cateva rinduri de cod in plus.

Deci este necesar un "ciocan" mai mare cu de la 16K la 128K • Linear Program Memory, de ex. PIC18F45K22, dar si o claviatura construita din butoane ergonomice.:92

 

@gsabac

Editat de gsabac
Link spre comentariu

Zis si facut, rapid pe bradboard si functional, ati alergat de la idee la produsul experimental cu succes.

Circuitele au iesit bine si remarc ca aveti tehnologie pentru trasee de circa 0,2mm, utila si pentru densitati mari de componente.

 

Versiunea 3.03, la care am postat schema, este functionala pe simulatoare si are comenzi in plus, buton de ZERO la iesire si buton de REVENIRE.

Deasemenea controlul tensiunii si curentului este digital iar protectia si limitarea de curent analogica.

Tensiune 0-25V si curent 0-2A si se pot folosi radiatori cu 10-12 aripioare, neventilati, montati vertical la spatele sursei, cu dimensiuni de circa 200*100*50mm.

Proiectele complete sunt in atasament, cu Proteus 8.7-SP3 sau mai sus si mikroC cred ca oricare versiune.

 

@gsabac

Sursa_PIC16F877_MCP4921-Versiunea 3.03.rar

Link spre comentariu
La 02.10.2019 la 14:35, gsabac a spus:

Actual, conversia curent-tensiune este continuta in sursa, caderea de tensiune pe suntul de precizie de 10 mohmi este amplificata de 100 de ori si rezulta la 5A exact 5V, care sunt aplicati ADC-ului pentru masurare si comparare digitala pentru limitarea de curent.

 

In varianta dvs. aceasta tensiune ar trebui comparata analogic cu iesirea unui DAC suplimentar, ce reprezinta valoarea curentului limita si care este setat numeric prin uC.

Rezultatul compararii analogice se foloseste pentru reglajul de curent sau protectie, ideea este buna, ingenioasa si imi place foarte mult.

 

PS. Nu cred ca sunt realizari amatoricesti care sa obtina surse cu performante finale mai bune decat  cele realizate cu minunatul 723 in unele aplicatii

      si ma refer la precizie, stabilitatea in timp si chiar la zgomotul pe iesire.

Asa ca va rog, daca doriti, sa postati aici schema sau link-ul cu pricina.

 

@gsabac

 

PS. Prin 1988 programam in Fortran77 pe PDP11, imi amintesc aproximativ secventa de compilare, F77<nume program>FTSOCS/LB. Ulterior a aparut Microsoft Fortran90 pentru PS-DOS si Microsoft Fortran Power Station pentru Windows. Ultimul o minune de program, cu intreruperi interactive cu afisarea de valori de variabile la evidentierea cu mause-ul. Desi Microsoft a renuntat, Fortran-ul modernizat se foloseste si astazi cu performante matematice de exceptie si grafice dintre cele mai bune, IBM.

  "The Fortran programming language remains quite popular in a number of scientific and engineering communities
 and continues to serve a mission-critical role in many NASA projects.28 apr. 2015"

 

 

 

 

Sursa facuta de mine se incadreaza bine in categoria celor ce nu exista. E vorba de sursa din topicul asta unde am si ceva masuratori

Aici este varianta folosita de mine la care am facut ceva masuratori.

 

Ca idee ce ar mai trebui verificat:

  • Comportamentul dinamic cu load step minim - o sursa de calitate trebuie sa aiba un comportament dinamic cit mai aproape de perfectiune. Stabilitatea tensiunii si curentului in regim static se poate imbunatati prin integrare dar sursa devine "varza" la un moment dat. O sursa de calitate impaca ambele cerinte (viteza de raspuns si stabilitate/precizie tensiune-curent).
  • Regimul tranzitoriu in momentul aparitiei unui scurtcircuit la iesire. In topicul de mai sus am dat citeva explicatii dece este important. 
  • De verificat si eventual corectata functionarea tranzistorului (tranzistorilor) de putere ca NICIODATA si in nici o conditie sa nu iasa din SOA. Altfel va pica mai repede sau mai taiziu cu consecintele negative pt sarcina.

Urmaresc topicul demult si-mi place directia in care evolueaza. 

 

Am mai pus de citeva ori si mai pun si acum link la schema(-le) unei surse de precizie - schema de folosit ca inspiratie DAR cu atentie pt ca eu am gasit cel putin o greseala intentionata strecurata acolo. Chiar mai multe surse si se pot gasi unele greseli intentionat trecurate numai comparind schemele fara a cauta sa le intelegeti.

Schema sursa 1.

Schema sursa 2.

Mai multe la gramada 1.

 

 

 

 

Editat de sesebe
Link spre comentariu

@sesebe, documentatia de firma a fost dintodeauna sursa mea de inspiratie si unde am putut am demontat aparatele sa mai "ciupesc" si ceva detalii constructive.

Evident niciodata nu m-am putut apropia de performantele lor si pot sa afirm ca am realizat ca profesionist doar niste caricaturi functionale, cu diversele componente pe care le-am am avut la dispozitie, dar imbinate armonios.

De cativa ani am citit topicul amintit, dar acesta  Aici este varianta folosita de mine nu functioneaza, probabil ca este foarte elaborat si precis.

 

Desigur, am facut de mai multe ori testele indicate de dvs. in decursul timpului si pe simulator am reaalizat si cateva teste la sursa digitala.

Am vizualizat cu osciloscopul frontul de crestere si am masurat supracresterea (5%), dar si frontul de descrestere care m-a nemultumit prin lentoarea sa, totul cu diverse sarcini sau in scurtcircuit, dar faza finala a masuratorilor se poate face doar pe un model experimental. Asa cum este constrita sursa, partea digitala seteaza doar niste tensiuni fixe, deci partea cu procesele tranzitorii cu modificarea dinamica a sarcinii este data doar de partea analogica, care este aproape clasica.

 

Prin informarea lui @UDAR din 28 sept.  si  studiul prospectelor si  am gasit tabele de curenti "negativi" utilizate in diverse surse profesionale de la 30% din curentul maxim pana la 130%, care in final realizeaza o descrestere doar dinamica a tensiunii pana la valoarea nou setata. Sa vedem cum poate fi implementata la sursa digitala, banuiesc ca este ceva asemanator circuitului amplificator simetric de putere.

 

Pentru mine, modelul ideal in aceasta faza, este in poza, simplu si cu comenzi care se pot realiza, eventual as adauga surse fixe de +/-5V si +/-12V flotante.

  Click pentru marire.

   1411960968_tripleprogramabilepowersourceSiglent.thumb.jpg.f859fb9bd75a25de31c45188958b9e31.jpg

 

PS. Am transpus proiectul si codul si este functional, pentru PIC18F45K22, setat la 48MHz, care are 32K in loc de 8K. si acum sunt la faza de a adauga cat mai multe comenzi din cele prezente in sursa Siglent din poza. Cand voi fi multumit, de o varianta sigura si stabila il voi pune pe topic.

 

@gsabac

Editat de gsabac
Link spre comentariu

Este vorba de acelasi topic pagina 14. 

Ideea de baza este ca pt o sursa performanta partea de sursa propriu-zisa trebuie realizata analogic complet iar microprocesorul sau microcontrolerul sunt utilizate pt setarea referințelor si pt citirea valorilor.

Tensiunea si curentul de iesire sint citite, amplificate si compensate in amplificatoare diferentiale iar iesirea acestor amplificatoare diferentiale este apoi comparata cu referinta setata de microcontroler diferenta urmind a fi utilizata ca semnal de corectie a iesirii.

Sumarea celor doua bucle de reglaj este realizata la intrarea in elementul de reglaj serie. Tot acolo este aplicata si suprimarea unui eventual puls de tensiune la aplicarea alimentarii. Sumarea este facuta cu diode.

Exista un preregulator ce incarca in pulsuri doua condesatoare "gigant" de 12000uf, si o comutare a secundarului din traf pt daua game de tensiune de intrare. Preregulatorul este comandat in functie de caderea de tensiune pe tranzistorul regulator serie.

Tranzistorul regulator serie are un SOA foarte bun.

Exista si un tranzistor ce accelereaza frontul negativ al tensiunii de iesire pt imbunatatirea raspunsului tranzitoriu.

 

In cazul sursei din topic partea de sursa analogica este realizata foarte simplist comparativ cu referintele puse de mine. Pt o sursa "normala"este ok si asa dar eu ma astept ca aceasta sursa sa fie una de inalta performanta.

 

In cazul sursei la care i-am facut masuratori in pagina 14 din topicul amintit, zgomotul de la iesire este de numai ~9mV masurat in banda se 20Mhz, iar over/under shootul la comutarea sarcinii intre 0.1A si 3A este de numai ~20mV (adica 0.07% in cazul masuratorii respective cu ~30V pe iesire).

Schema masurata este realizata cu un student si nu pot sa o postez fara ai cere acordul dar ca ideie este destul de simplu de realizat. Foloseste TL074, o referinta de tensiune realizata cu LM317+TL431, are ventilator controlat dupa temperatura si aducere la 0 a iasirii in caz de temperatura radiatorului depaseste 80°C.

Editat de sesebe
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