Sari la conținut
ELFORUM - Forumul electronistilor

Sursa digitala cu atmega8 (programabila/bluetooth/0..35V 10A max)


radhoo

Postări Recomandate

LM358 îndeplinește condiția de mod comun la masă dar are maxim 32V . Sugestii personale ( nu le-am folosit dar sunt pe lista pentru prima comandă la TME tot pentru o sursă) ar fi TLE2022 sau LT1013 ( cel de la TI , cel de la LT e cam scump ).

Link spre comentariu

Da , dar tensiunea de alimentare este total insuficientă. Se doresc 35V la ieșire . În schema sugerată e nevoie de OpAmp de 40V cel puțin , de aceea am sugerat cele două. Altfel,  ar mai fi .

LT1014 este varianta quad a lui LT1013 , ar fi o variantă excelentă dacă ar avea nevoie de mai mult de două OpAmp.

Editat de UDAR
Link spre comentariu

pentru citirea curentului de ce nu se foloseste un  ic dedicat? ceva gen MAx4377? are si buffer  intern si amplificare  fixa......daca ai prieteni prin   Bucuresti  te pot ajuta eu cu 3-4 bucati cu amplificarea 100.

Link spre comentariu

Hai sa vedem prima data timpul de reactie a sursei cu DAC-ul propus, si putem optimiza componentele dupa. Daca timpul de reactie e nesatisfacator, tot efortul e  pe degeaba. 

 

Am continuat azi cu codul si testele. Am scris codul pentru ADC-ul pe PC4 responsabil pentru citirea tensiunii de iesire prin divizorul R14/R13 de 10K respectiv 100K. De asemenea codul pentru citirea tensiunii pe rezistentele de putere, masurate cu ADC prin PC5 fara nici un dizivor rezistiv.

 

Am masurat tensiunea dupa blocul redresor pe condensatorii de filtraj. Cu priza mediana am 16.1V si pe itnreg secundarul 33.8V. 

 

Codul pentru PWM nu e gata, asa ca pinul pe unde ar trebui generat PWM-ul l-am folosit initiat doar ca si iesire digitala, high si low. 

 

In schema am folosit 4 rezistente de 2.2Ohm / 5W legate in paralel, pentru o valoare totala de 0.55Ohm si 20W. Tensiunea masurata pe acestea ne furnizeaza informatii despre curentul care le parcurge, prin legea lui Ohm: float current = volResistors / 0.55;

 

Cele 4 butoane care le-am pus pentru V+ V- I+ I- le-am asignat acum pentru diverse teste. Starea lor am afisat-o pe ecran dar LCD-ul desi nou are cateva zone corupte. Astfel un buton comanda releul care initial leaga circuitul la priza mediana, apasarea pe buton comuta pe tensiunea maxima (intreg secundarul).

Un alt buton pune high / low pinul pe unde se va genera PWM-ul si comanda astfel pe 0 sau maxim operationalul si prin el tranzistorii de putere.

 

Dioda zener de 7.5V se incalzea prea puternic si am inlocuit sursa de 5V formata cu dioda zener + 7805 cu un modul cu LM2596 la care i-am pus in loc de potentiometru o rezistenta fixa de 1K pentru 5V iesire.

 

Pe ecran se poate vedea:

T: temperatura pe radiatior (cu senzor DS18B20)

V: voltajul la iesire

VR: voltajul pe rezistentele de putere (0.55Ohm / 20W)

I: intensitatea prin rezistentele de iesire si deci curentul debitat de sursa

B:XXXX cele 4 butoane, dar la ultima cifra LCD-ul are defect

 

Primele doua poze arata valoarea la iesire cu: (1) releul oprit si pinul de PWM setat pe HIGH (voltaj maxim) . (2) releul pornit si pinul de PWM setat pe HIGH (voltaj maxim)

 

Mica neconcordanta intre multimetru si voltajul de pe LCD e din cauza divizorului rezistiv si/sau a tensiunii de referinta (5V). Voi introduce in cod valorile exacte.

 

Cum a indicat colegul UDAR, nu putem atinge valoarea maxima de tensiune 14.56V vs 16.1V respectiv 26.26V vs 33.8V

 

A treia poza arata cum cu o rezistenta de 100Ohm pe iesire, curentul e masurat destul de corect. ADC-urile folosite sunt pe 10biti.

post-177864-0-06672200-1429274810_thumb.jpg

post-177864-0-69168100-1429274810_thumb.jpg

post-177864-0-04899000-1429275178_thumb.jpg

Editat de radhoo
Link spre comentariu

Am continuat munca la sursa si am implementat codul pentru PWM. L-am facut astfel incat frecventa si factorul de umplere sa se poata regla. Un test rapid arata ca conceptul functioneaza si tensiunea se poate regla. Si mai bine de atat, factorul de umplere l-am facut sa se regleze in procente la mie. Testele au aratat ca 3 procente la mie echivaleaza cu 0.1V . Destul de bine ca rezolutie.

 

Am pus osciloscopul sa vad nivelul de zgomot. O sonda pe filtrul RC care consuma PWM-ul (CH1-galben) si cealalta sonda la iesirea din amplificatorul operational, pe baza tranzistorilor de putere (CH2-albastru). Arata cam asa:

post-177864-0-42320900-1429285119_thumb.jpg

 

Nu e mult, dar totusi e prezent. Se pune problema ce frecventa ar fi potrivita pentru semnalul PWM, astfel incat sa se micsoreze zgomotul? Condensatorul din filtrul RC are doar 100nF, deci raspunsul e o frecventa cat mai mare. Am facut mai multe teste, cum ziceam codul imi permite sa aleg ce frecventa vreau schimband doar o variabila. 1kHz, 10kHz, 100kHz, 150kHz, 500kHz, 1MHz ba chiar si 4Mhz unde rezultatele nu au mai fost consistente (uC are cristal de 16Mhz). Am ales sa merg inainte cu 100kHz. Iata comparatia intre 1KHz , 10kHz si 100kHz. Primele doua oscilograme au diviziunile identice, dar a treia le are setat diferit (se observa in partea de jos):

post-177864-0-53461400-1429285953_thumb.jpg

 

Valoarea voltajului la iesire citita cu ADC si afisata pe LCD fluctua destul de mult inainte sa ridic frecventa. La 100kHz e destul de ok, fluctuatiile sunt de aproximativ 0.05V la intervale greu de prezis intr-o formula.

 

Ce ramane de facut acum e sa modific codul  sa permita setarea unui voltaj si algoritmul sa modifice factorul de umplere astfel incat voltajul sa fie atins. Si mai e partea cu limitarea curentului si timpul de raspuns la scurtcircuit, unde am unele emotii dupa cum s-a discutat in partea de inceput.

 

 

Link spre comentariu

Ok pentru un raspuns rapid al montajului, am zis ca voi face conversiile ADC necesare masuratorilor de curent (protectie scurtcircuit si limitare) si voltaj - ca si intreruperi, deci nu in bucla principala unde ar fi puternic intarziate.

 

Problema e ca ADC-ul poate face o singura masuratoare la un moment dat (valorile se culeg din registrii ADCL / ADCH). Solutia a fost sa setez prescalerul ADC pe 128, avem deci o frecventa mare 16Mhz (crystalul de quartz) / 128 = 125kHz, si sa fac masuratorile curent / voltaj alternativ. 

 

Iata codul care l-am scris:

 

1) initializare:

float vref = 5.0;#define MODE_MEASURE_CURRENT 0#define MODE_MEASURE_VOLTAGE 1volatile bool adc_mode = MODE_MEASURE_CURRENT;volatile float current = 0, voltage = 0; 
// setup ADC to measure as interrupt: go for current firstadc_mode = MODE_MEASURE_CURRENT;ADMUX = PC5;ADCSRA = (1<<ADEN) | (1<<ADIE) | (1<<ADIF) | (1<<ADSC) |	(1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0); // set prescaler to 128 (16M/128=125kHz, above 200KHz 10bit results are not reliable)sei(); 

2) intrerupere:

// Interrupt service routine for the ADC completion// we measure the current (PC5) and the voltage (PC4) alternativelyISR(ADC_vect){  uint16_t analogVal = ADCL | (ADCH << 8);  if (adc_mode == MODE_MEASURE_CURRENT) {	  current = (analogVal / 1024.0 * vref) / 0.55;	  // alternate mode	  adc_mode = MODE_MEASURE_VOLTAGE;	  ADMUX = PC4; // next time we will do ADC on PC4, to get the voltage  } else if (adc_mode == MODE_MEASURE_VOLTAGE) {	  float R14 = 10, //10k			R13 = 100; //100K	  voltage = analogVal / 1024.0 * (R13 + R14) / R14 * vref;	  // alternate mode	  adc_mode = MODE_MEASURE_CURRENT;	  ADMUX = PC5; // next time we will do ADC on PC5, to get the current  }  // Not needed because free-running mode is enabled, so the convertion will restart by itself  // start another ADC convertion  //aux_ADCReadIntr(PC5);  // ADCSRA |= 1<<ADSC;  ADCSRA = (1<<ADEN) | (1<<ADIE) | (1<<ADIF) /* | (1<<ADFR) */ | (1<<ADSC) |  				(1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0); // set prescaler to 128 (16M/128=125kHz, above 200KHz 10bit results are not reliable) }

Merge brici pana aici. R13 si R14 sunt cele doua rezistente din schema. Valorile lor de 10K/ 100K .  In cateva minute poate reusesc sa termin ce mai am si fac un test de scurtcircuit. Rationamentul e urmatorul:

In intreruperea ADC, in partea cu if (adc_mode == MODE_MEASURE_CURRENT) { daca curentul masurat e prea mare, sa reduc valoarea pe DAC pentru a limita voltajul de iesire. Cat de repede se va intampla asta, ramane sa vedem.

Link spre comentariu

Salut Radu

Foarte  tare  munca ta pana aici, am cateva completari:

1. pentru  frecventa pwm necesara pentru DAC este un document de la microchip care   prezinta o formula pentru a calcula corect acest  filtru, nu  mai tin minte exact dar mie la 10khz mi-a mers perfect cu 1k si 4.7uF, dar  ramane sa vezi tu.

2. suntul tau de 0.55 ohm in total la un curent de 1A are cadere de circa 0.55V.  deci la  2 A ai circa un 1V cadere, de ce nu folosesti un sunt mai mic? sau nu te afecteaza aceasta  cadere? zic asta pentru  ca eu am o problema cu pierderile de    tensiune pe  elementele active/pasive.. le fac sa fie  cat mai economice :rade:

Link spre comentariu

Salut Vlad, mersi de sugestii! O sa caut documentul sa vad formula. Oricum ma gandeam ca pentru stabilitate mai buna, ar fi necesare mai multe blocuri RC. Poate pentru o revizie viitoare.

 

Cu suntul de 0.55Ohmi nici nu mi-am dat seama dar ai mare dreptate. La 10A max vor fi 5.5V , o  risipa grozava. Am sa folosesc alte valori, probabil un total de 0.1Ohmi ar fi mai rezonabil. Asta imi lasa 0.1V / A, rezonabil pentur controlul curentului. 

 

Si sa vin cu o veste buna. Timpul de reactie e ultra rapid :ewryt45w . Am setat sursa pe 25V (pentru ca am terminat si controlul tensiunii din butoane) si efectiv am dat cu firele de iesire in scurt, ba am si tinut bornele atinse si protectia isi face treaba ca la carte (bine la primele teste am folosit rezistente de valori mici si tensiune mica cat sa ma asigur ca e totul ok). Am de facut controlul curentului acum , impletit cu controlul scurtcircuitului, care vor avea prioritate peste controlul voltajului. Curentul va fi controlat direct din intreruperea ADC, iar voltajul din bucla principala. Iata un film demo:

 

Am sa pun si poze sa se vada exact timpul de reactie pe osciloscop. Sunetul care se aude e de la releul de pe placa, care imi cupleaza intreg secundarul pentru 24V si nu doar priza mediana care e folosita pentru sub 12V. Dupa scurtcircuit, tensiunea sare direct la 24V si releul recupleaza. Sunt curios cati dintre voi ati avea nevoie de treaba cu releu  / priza mediana sau doar complica lcururile ?

Daca nu era protectia... la sursa asta de 250W cu condensatorii electrolitici incarcati la maxim, s-ar fi prajit totul la prima atingere cu un sunet puternic.

 

Proiectul in acest punct e un succes. Ramane "fine-tuningul" pentru alegerea unui OpAmp cat mai potrivit si a unui sunt mai mic. 

 

edit: vad ca e asta postul meu nr. 666 6 6 6. tre  sa am grija sa nu ma electrocutez tocmai acum .

 post-177864-0-92508700-1429377585_thumb.png

Editat de radhoo
Link spre comentariu

Salut, super, dar pana nu testezi si reactia inca nu sunt convins suta la suta, protectia si mie imi mergea, daca cum eu nu sunt programator si aveam  codul facut din topor e posibil sa nu il fi optimizat eu bine. Oricum felicitari si bafta! (in ambele proiecte)

Link spre comentariu

Salut,

 

Am sa incep prin a va multumi tuturor celor care ati participat la discutie, pentru ca m-ati ajutat sa aduc proiectul asta la final. Am scris despre asta si aici: http://www.pocketmagic.net/digital-bench-power-supply/#notes

Si pe viitor probabil ca o sa incep si alte proiecte prin discutii in aceasta comunitate de specialisti, pentru ca prin efortul comun se obtin rezultate mult mai bune.

 

Sursa e in sfarsit terminata si functionala. Am terminat codul si am strans si ultimul surub. Am urmat sugestia lui Vlad Mihai si am redus suntul de iesire, cu 3 rezistente de 0.56 in paralel pentru 0.18Ohmi si 15W. Apoi in urma discustiilor cu UDAR, am testat cate op-amp-uri am avut in cutia cu piese, si rezultatele au fost interesante:

post-177864-0-50999500-1430146951_thumb.png

Cu TL082, obtin 26V maximum si un curent de 5A max.

Cu LM384, impins la limita voltajului sau, am masurat 31.5V maxim si un curent de aproape 4A max.

Am mai testat TL062 si LF357 dar rezultatele au fost proaste, in sensul ca desi functionau, se comportau oarecum ciudat cu alimentare ne-bipolara.

 

Valoarea lui R20 nu influenteaza iesirea. Am facut teste si cu R18/R19 pentru factorul de amplificare al operationalului, dar nu am obtinut diferente semnificative.

 

Iata un film in care am trecut in revista caracteristicile sursei, se vrea a fi un demo in care se vede:

- protectia la scurtcircuit

- limitarea de curent

- regularizarea de tensiune

- alarma la scurt

- ventilator care porneste automat la atingerea primului prag de temperatura

- limitarea iesirii in caz de supraincalzire peste al doilea prag de temperatura

- display si interactiune cu utilizatorul

 

Optional am lasat pe placa traseele pentru un modul bluetooth HC-05. Am folosit 100% memoria Atmega8-ului, deci pentru adaugarea bluetooth-ului va trebui facut upgrade la Atmega168.

 

 

 

 

PDF pentru PCB: digital_supply_v100.pdf

 

Cod hex pentru ATmega8: sursa_digitala_radhoo.zip

 

Setari fusebits: avrdude -p atmega8 -c usbasp -U lfuse:w:0xde:m -U hfuse:w:0xdf:m  (pentru crystal cuart de 16MHz)

 

Codul sursa, poze si alte detalii de constructie pe blog (sunt mari): http://www.pocketmagic.net/digital-bench-power-supply/#opensource

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