dragutzu_marius Postat Noiembrie 14, 2013 Partajează Postat Noiembrie 14, 2013 Salutare. M-am apucat sa imi construiesc o sursa de tensiune 0-30V / 0-10A pe care vreau sa o dotez cu un Volt-Ampermetru cu Atmega 8 care sa afiseze tensiunea si curentul pe un LCD 2x16. Pe langa afisarea tensiunii si curentului m-am gandit sa conectez si un ventilator si un NTC. Pentru comanda ventilatorului m-am gandit sa citesc valoarea NTC-ului, iar spre ventilator sa generez impulsuri PWM la o anumita frecventa, din factorul de umplere sa stabilesc turatia ventilatorului care o aproximez prin teste.Pentru inceput am conceput schema din atasament.JP1 - este conectorul prin care voi citi tensiunea, respectiv curentul. Pinul 1 - Citirea de tensiune Pinul 2 - Citirea de curent ( cu shunt pe bara negativa -> la ADC ajunge tensiune negativa fata de GND ) Pinul 3 - GNDJP2 - Se conecteaza NTC 10KJP3 - Se conecteaza un ventilatorJP4 - Conector pentru programare.Ce parere aveti despre schema si ce imbunatatiri i-as putea aduce? Daca credeti ca partea hardware este bine conceputa, m-as apuca de PCB si pe urma voi continua cu intrebarile legate de parte de program. Link spre comentariu
dodo007 Postat Noiembrie 15, 2013 Partajează Postat Noiembrie 15, 2013 Salut, Am construit si eu o sursa asemanatoare cu cea conceputa de tine (dar la 3A), si functioneaza foarte bine. Este cea modificata , cablajul conceput de Geomar, de la pagina: viewtopic.php?f=14&t=22142&hilit=sursa+de+tensiune+digitala+atmega8&start=1605 Ca volt-ampermetru am utilizat montajul de mai jos, care functioneaza multumitor: viewtopic.php?f=14&t=97842 Acelasi montaj de volt ampermetru l-am utilizat si la o sursa de 30V si 10A obtinuta din sursa ATX modificata. Am utilizat atmega TQFP pentru un cablaj cit mai mic si la marimea afisajului. Precizia nu este nemaipomenita, dar pentru mine este suficienta. Bafta. Link spre comentariu
dragutzu_marius Postat Noiembrie 15, 2013 Autor Partajează Postat Noiembrie 15, 2013 Apropo, poate exprimarea mea nu a fost cea mai clara in primul post, insa partea de stabilizator este cea de pe site-ul http://www.electronics-lab.com/projects/power/001/ , doar partea de VA-metru este "conceputa" de mine. Link spre comentariu
Depanatoru Postat Noiembrie 15, 2013 Partajează Postat Noiembrie 15, 2013 ADC-ul nu poate masura tensiuni negative ... nu stiu cum te-ai gandit dar masa ADC-ului se conecteaza pe partea suntului ce duce la minusul condensatorului de filtraj iar intrarea de curent la borna de iesire minus a sursei . Asta e varianta simpla folosita in majoritatea schemelor de pe net cu dezavantajul ca pe tensiune ADC-ul va masura tensiunea reala de iesire - tensiunea pe sunt si trebuie corectii in soft pentru precizie tinand cont ca tensiunea pe sunt ajunge la circa 1V ( sensibilitatea ADC-ului ) pentru curentul maxim ... O solutie simpla , eleganta si mai precisa presupune inversarea conexiunii de mai sus si folosirea unui AO ca inversor pentru curent , care eventual sa si amplifice , ca sa nu trebuiasca sunt de putere mare care pierde din precizie atunci cand se incalzeste Link spre comentariu
dragutzu_marius Postat Noiembrie 16, 2013 Autor Partajează Postat Noiembrie 16, 2013 Am modificat schema si am adaugat un AO pe care l-am folosit pe post de inversor, si amplificare 4,7 (am pus valori uzuale), iar corectia o sa o fac din soft. M-am gandit ca la 20A(ceea ce nu va fi cazu) => 1V cadere de tensiune pe SHUNT (0.05ohm/18W), o sa am la iesirea AO-ului 4,7V.Pareri ? Link spre comentariu
Depanatoru Postat Noiembrie 16, 2013 Partajează Postat Noiembrie 16, 2013 Foloseste referinta interna de 1V pentru ADC , mult mai stabila decat tensiunea de alimentareChiar pe intrarile ADC-ului ti-ar trebui niste condensatori 10nF - 100nF care taie zgomotul si alte perturbatii care ar putea sa faca sa fie instabila indicatiaSuntul stabileste si curentul maxim de protectie la scurt pentru sursa , 20A inseamna 600W disipati pe tranzistori ... trebuie facut exact de cat ai nevoieOricum iti recomand sa faci intai sursa si sa o testezi , dupa aia sa faci partea de masura Link spre comentariu
dodo007 Postat Noiembrie 17, 2013 Partajează Postat Noiembrie 17, 2013 Departe de mine de a fi lipsit de respect pentru efortul Dv. Imi cer scuze daca am fost inteles gresit. Insa mentionarea sursei de inspiratie este utila si necesara din multe puncte de vedere. Printre altele, in discutiile din topicele mentionate de mine, se mentioneaza pe linga modificari in marirea preciziei de masura a curentului, mentionate de colegul Depanatoru si ideea de a marii precizia la masurarea tensiunii, prin impartirea intervalului de masura in doua 0-10 si 10-30V, trecerea de pe un divizor pe altul (doua intrari ADC), fiind facuta din soft (nu cred ca va complica prea mult introducerea unei bucle in plus in program si nici faptul ca folositi doua divizoare). A se vedea si : http://www.elfly.pl/multimetr/multimetr_en_DIP.htm http://dfi57.blogspot.ro/2011/11/voltam ... ta-cu.html Spor la treaba. Link spre comentariu
mars01 Postat Noiembrie 17, 2013 Partajează Postat Noiembrie 17, 2013 In datasheet scrie ca impedanta maxima pe intrarea ADC a unui atmega8 este de cca 10Ko pt a avea un timp de achizitie corect. Cu cat impedanta de intrare este mai mica cu atat ADC-ul face conversiile mai rapid (se incarca cond-ul mai repede), dezavantajul este ca este consumat mai mult curent si acest lucru poate avea un impact pentru aplicatiile alimentate din baterii. Ceea ce nu este cazul aici. Eu as reduce putin rezistenta de 10Ko pe care ai pus-o intre opamp si intrarea adc (pin24 parca).Nu zic ca nu merge si asa, dar ca sa fii de partea sigura a gardului ... Link spre comentariu
Depanatoru Postat Noiembrie 17, 2013 Partajează Postat Noiembrie 17, 2013 La tensiune continua nu conteaza prea mult impedanta sursei cum e descris in datasheet , pentru ca tensiunea variaza foarte lent ( numai cand umbli la reglaj ) si nu trebuie sa fie rapid ADC-ul , cand faci achizitii in alternativ sau impulsuri conteaza . Link spre comentariu
mars01 Postat Noiembrie 17, 2013 Partajează Postat Noiembrie 17, 2013 Asa este, am mentionat aceste informatii doar pt. ca am vazut rezistenta dimensionata exact la limita de sus. Am considerat ca este o informatie utila. Link spre comentariu
dragutzu_marius Postat Noiembrie 18, 2013 Autor Partajează Postat Noiembrie 18, 2013 Deja am facut cablajul pentru varianta de mai sus, cu un singur divizor pentru masurarea tensiunii, iar daca la final nu sunt multumit de masuratori, atunci voi reface dupa cum ati sugerat mai sus. Oricum putin exercitiu in plus nu strica.Referitor la valoarea de 10kohm dintre AO si uC , voi vedea cum se comporta dupa ce va functiona, daca va fi prea lent, am sa pun o valoare mai mica, probabil ca voi scadea valorile si in divizorul pentru tensiune ca sa mai cresc curentul daca e cazul. Am atasat si cateva poze cu cablajul, intr-un singur loc nu mi-a iesit chiar bine, la pinii 6 si 7 a mai trebuit sa corectez.Pentru partea de alimentator propriu-zis mai am de asteptat dupa componente. Link spre comentariu
dragutzu_marius Postat Noiembrie 27, 2013 Autor Partajează Postat Noiembrie 27, 2013 Salutare. Deocamdata am terminat partea de afisare , pentru alimentatorul propriu-zis inca nu am primit componentele, asa ca deocamdata ma joc cu volt-amper-metru, insa am nevoie de ajutor pentru scrierea codului. Codul este scris in BASCOM, si nu reusesc sa afisez valoarea corecta pe LCD. Va rog sa ma ajutati unde am gresit. Deasemenea sa imi spuneti si cum intervine in calcul valoarea de referinta ? Pe pinul AREF am masurat 2,58V. Singura mentiune pe care o am este faptul ca valorile din divizor le-am modificat de la 22k -> 10k, si 3.3k -> 1.5k (fata de schema initiala). De valorile noi am tinut cont si in cod. Codul arata cam asa: $regfile = "m8def.dat"$crystal = 1000000$hwstack = 40$swstack = 16$framesize = 32Config Lcdpin = Pin , Db4 = Portd.6 , Db5 = Portd.5 , Db6 = Portb.7 , Db7 = Portb.6 , E = Portd.7 , Rs = Portb.0Dim A As ByteConfig Lcd = 16x2ClsLocate 1 , 3Lcd "Power Supply"LowerlineLocate 2 , 2Lcd "0-30V / 0-10A"Wait 1ClsCursor Off NoblinkDim Volt As WordDim Curent As WordDim Th As WordDim Tensiune As SingleDim Voltt As SingleConst Divizor_u = 0.12891986Const Const_volt = 3.8675958188 / 1024Const Const_th = 1Config Adc = Single , Prescaler = Auto , Reference = InternalStart AdcDoVolt = Getadc(0)Curent = Getadc(1)th = Getadc(2)Wait 1Tensiune = Volt * Const_voltTensiune = Tensiune / Divizor_uLocate 1 , 1Lcd "U="Locate 1 , 3Lcd Fusing(tensiune , "##.##") ; "V"Voltt = Volt * Const_thLocate 2 , 2Lcd Fusing(voltt , "##.#")LoopEnd Si acum informatiile suplimentare: Tensiunea la intrarea in divizor este de 7,47V Tensiunea la intrarea in ADC(0) este 0.96V => din calcule divizorul este OK. Pe LCD imi afiseaza 11.19V (aceasta valoare nu ramane stabila...oscileaza) Iar pe al doilea rand imi afiseaza valoarea returnata de ADC, si anume 382 (la fel si aceasta valoare oscileaza....~375-385) Mentionez ca acesta urmeaza sa fie primul meu program scris in BASCOM, asa ca va rog... rabdare... Link spre comentariu
binox Postat Noiembrie 28, 2013 Partajează Postat Noiembrie 28, 2013 Nu ma pricep la bascom dar in principiu ar trebui sa faci cam asa:- sa setezi tensiunea de referinta a adc-ului , pt care ai mai multe optiuni: referinta interna, tensiunea de alimentare de pe AVCC sau o alta tensiune externa aplicata pe AREF- ca sa calculezi tensiunea de intrare pe ADC poti aplica regula de 3 simpla: 1024........Vref ADC.........Vin => Vin= (ADC*Vref)/1024-ca sa afisezi tensiunea pe care ai aplicat-o divizorului, tensiunea care te intereseaza defapt mai inmultesti Vin cu cat ai tu divizorul-ca sa nu-ti fluctueze rapid valorile pe ecran poti afisa media ultimelor x citiri, sau pur si simplu poti reduce rata de refresh a ecranului pt ca cifrele care se schimba rapid pe ecran sunt obositoare si enervante-ca sa obtii rezultate cat mai exacte trebuie sa te asiguri ca Vref introdus in calcul este corect, daca folosesti referinta interna ar fi bine sa o masori pt ca nu e intotdeauna fix cat zice producatorul, iar masurarea trebuie facuta cu un voltmetru cu impedanta mare de intrare; la fel si in cazul in care folosesti pe post de referinta tensiunea de alimentare; acelasi lucru e valabil si pt divizorul rezistiv, mai ales daca nu folosesti rezistente de precizie-nu uita sa folosesti condensatori de 100nf pe pinii de alimentare, pe AVCC si pe AREF, cat mai aproape de mc Link spre comentariu
dragutzu_marius Postat Noiembrie 28, 2013 Autor Partajează Postat Noiembrie 28, 2013 Multumesc pentru raspuns. Acum functioneaza corect, si am si inteles exact cum se calculeaza. Codul este urmatorul pentru citirea de tensiune. $regfile = "m8def.dat"$crystal = 1000000$hwstack = 40$swstack = 16$framesize = 32Config Lcdpin = Pin , Db4 = Portd.6 , Db5 = Portd.5 , Db6 = Portb.7 , Db7 = Portb.6 , E = Portd.7 , Rs = Portb.0Dim A As ByteConfig Lcd = 16x2ClsLocate 1 , 3Lcd "Power Supply"LowerlineLocate 2 , 2Lcd "0-30V / 0-10A"Wait 1ClsCursor Off NoblinkDim Volt As WordDim Curent As WordDim Th As WordDim Tensiune As SingleDim Voltt As SingleConst Divizor_u = 0.12891986Const Const_volt = 2.59 / 1024Config Adc = Single , Prescaler = Auto , Reference = Internal_2.56Start AdcDoVolt = Getadc(0)Curent = Getadc(1)Th = Getadc(2)Waitms 500Tensiune = Volt * Const_voltTensiune = Tensiune / Divizor_uLocate 1 , 1Lcd "U="Locate 1 , 3Lcd Fusing(tensiune , "##.##") ; "V"LoopEnd Mai trebuie sa redimensionez divizorul pentru ca in situatia de fata nu pot masura mai mult de 20.07V. Cum pot face sa afisez media ultimelor 10 citiri de exemplu? Refresh-ul ma gandesc ca trebuie scazut atunci la 100ms... Link spre comentariu
Depanatoru Postat Noiembrie 29, 2013 Partajează Postat Noiembrie 29, 2013 DoSuma = 0For I = 1 To 10 Volt = Getadc(0)Suma = Suma + VoltNextTensiune = Suma / 10Tensiune = Volt * Const_voltTensiune = Tensiune / Divizor_u...Lcd Fusing(tensiune , "##.##") ; "V"...Suma = 0 For I = 1 To 10Curent = Getadc(1)Suma = Suma + Curent...Cam asa se poate face , deci cate o bucla For care se executa de 10 ori pentru fiecare marime masurata , Suma poate fi o variabila comuna pentru toate marimile masurate din economie , daca o resetezi la zero cand treci de la una la alta 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