djvas Postat Ianuarie 11, 2016 Partajează Postat Ianuarie 11, 2016 (editat) Daca tensiunea masurata este ok atunci referinta este buna. Schema folosita are niste neajunsuri ... lm358 (IC3A) NU ESTE potrivit pentru acesta aplicatie ( probabil de aici si masuratoarea eronata din proteus) ar trebui folosit un chopper opamp sau auto zero opamp . Rezistentele R14 si R13 stabilesc amplificarea lui Ic3a. Acestea ar trebui sa aiba o valoarea cat mai precisa ( sortate sau puse direct cu toleranta mica). Shuntul .. ce toleranta are ? Am intrebat de multimetru pentru ca eroare de 20 mA poate fi si de la el ( dar mai putin probabil ). Singura varianta de calibrare fara batai de cap trebuie facuta soft. Si din pacate la aceasta schema fiecare replica trebuie calibrata individual. Editat Ianuarie 11, 2016 de djvas Link spre comentariu
adrian82 Postat Ianuarie 14, 2016 Partajează Postat Ianuarie 14, 2016 Pentru sunt de 0.1 am pus valoare 0.1 in program iar pentru tensiunea maxima 21,2V am pus 0.102 si rezistente 11k si 1k5 spre masa iar valoarea constanta pentru curent si tensiune a ramas 2.59 ! Probat in proteus si practic functioneaza perfect , am eliminat amplificatorul operational fiindca nu misca nimic , e pus degeaba in montaj ! Poate daca se aleg alte valori la divizor va functiona si cu amplificatorul operational ! Link spre comentariu
The_Reaper Postat Februarie 1, 2016 Partajează Postat Februarie 1, 2016 Salutare, postez si eu aici pentru a nu mai deschide un nou topic. Cautand pe internet , am gasit urmatoarea schema de voltampermetru, ce parere aveti merita incercata?? Link spre comentariu
adrian82 Postat Februarie 4, 2016 Partajează Postat Februarie 4, 2016 e ok o stiu pentru surse duble ! ai fi putut pune si situl pentru restu care nu stiu .... Link spre comentariu
The_Reaper Postat Februarie 4, 2016 Partajează Postat Februarie 4, 2016 (editat) Am atasat mai jos o arhiva, cu tot proiectul plus un pcb facut de mine dar netestat inca. Tot Proiectul a fost descarcat de AICI Voltmetru ampermetru dublu cu atmega 8.rar Editat Februarie 4, 2016 de The_Reaper Link spre comentariu
peace Postat Octombrie 16, 2016 Partajează Postat Octombrie 16, 2016 Am atasat mai jos o arhiva, cu tot proiectul plus un pcb facut de mine dar netestat inca. Tot Proiectul a fost descarcat de AICI <script data-pagespeed-no-defer type="text/javascript">(function(){var g=this;function h(b,d){var a=b.split("."),c=g;a[0]in c||!c.execScript||c.execScript("var "+a[0]);for(var e;a.length&&(e=a.shift());)a.length||void 0===d?c[e]?c=c[e]:c=c[e]={}:c[e]=d};function l(b){var d=b.length;if(0=d.offsetWidth&&0>=d.offsetHeight)a=!1;else{c=d.getBoundingClientRect();var f=document.body;a=c.top+("pageYOffset"in window?window.pageYOffset:(document.documentElement||f.parentNode||f).scrollTop);c=c.left+("pageXOffset"in window?window.pageXOffset:(document.documentElement||f.parentNode||f).scrollLeft);f=a.toString()+","+c;b.b.hasOwnProperty(f)?a=!1:(b.b[f]=!0,a=a<=b.g.height&&c<=b.g.width)}a&&(b.a.push(e),b.c[e]=!0)}p.prototype.checkImageForCriticality=function(b){b.getBoundingClientRect&&q(this,b)};h("pagespeed.CriticalImages.checkImageForCriticality",function(b){n.checkImageForCriticality(b)});h("pagespeed.CriticalImages.checkCriticalImages",function(){r(n)});function r(b){b.b={};for(var d=["IMG","INPUT"],a=[],c=0;c=a.length+e.length&&(a+=e)}b.i&&(e="&rd="+encodeURIComponent(JSON.stringify(t())),131072>=a.length+e.length&&(a+=e),d=!0);u=a;if(d){c=b.h;b=b.j;var f;if(window.XMLHttpRequest)f=new XMLHttpRequest;else if(window.ActiveXObject)try{f=new ActiveXObject("Msxml2.XMLHTTP")}catch(k){try{f=new ActiveXObject("Microsoft.XMLHTTP")}catch(v){}}f&&(f.open("POST",c+(-1==c.indexOf("?")?"?":"&")+"url="+encodeURIComponent(b)),f.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),f.send(a))}}}function t(){var b={},d=document.getElementsByTagName("IMG");if(0==d.length)return{};var a=d[0];if(!("naturalWidth"in a&&"naturalHeight"in a))return{};for(var c=0;a=d[c];++c){var e=a.getAttribute("data-pagespeed-url-hash");e&&(!(e in b)&&0=b[e].o&&a.height>=b[e].m)&&(b[e]={rw:a.width,rh:a.height,ow:a.naturalWidth,oh:a.naturalHeight})}return b}var u="";h("pagespeed.CriticalImages.getBeaconData",function(){return u});h("pagespeed.CriticalImages.Run",function(b,d,a,c,e,f){var k=new p(b,d,a,e,f);n=k;c&&m(function(){window.setTimeout(function(){r(k)},0)})});})();pagespeed.CriticalImages.Run('/ngx_pagespeed_beacon','http://www.elforum.info/index.php?app=forums&module=ajax§ion=topics&do=quote&t=81827&p=1319632&md5check=f18e0224ff561575f1ad2195d396ebe5&isRte=1,xDD6_yBh4z,true,false,NG18-AE7vhk');</script>&&0){for(var> Ai cumva si codul sursa la aceasta schema? Link spre comentariu
peace Postat Decembrie 20, 2016 Partajează Postat Decembrie 20, 2016 La Multi Ani la toata lumea si An Nou Fericit tuturor!!!In sfarsit dupa o lunga pauza am reusit sa ma reapuc de proiect si sa avansez.Intre timp am reusit sa termin si alimentatorul propriu-zis care a functionat din prima, si deasemenea am reusit sa rezolv si partea cu ventilatorul (pwm-ul). In linii mari functioneaza si partea de soft, mai ramane de facut ajustarea la temperatura care deocamdata nu stiu, e doar aproape de realitate, neavand sonda la multimetru..... nu cred ca ceea ce afiseaza pe display este real. Insa ceea ce ma bucura este ca ventilatorul porneste treptat in functie de cat de tare se incalzeste radiatorul. :)Acesta este primul meu program scris in BASCOM.Codul este urmatorul: $regfile = "m8def.dat"$crystal = 1000000$hwstack = 40$swstack = 16$framesize = 32'--------------------------------------------------------------Configurare LCD-----------------------------------------------------Config Lcdpin = Pin , Db4 = Portd.6 , Db5 = Portd.5 , Db6 = Portb.7 , Db7 = Portb.6 , E = Portd.7 , Rs = Portb.0Dim A As ByteConfig Lcd = 16x2'--------------------------------------------------------------Configurare PWM-----------------------------------------------------Config Timer1 = Pwm , Prescale = 8 , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up'-------------------------------------------------------------Mesaj de intampinare-------------------------------------------------ClsLocate 1 , 3Lcd "Power Supply"LowerlineLocate 2 , 2Lcd "0-27V / 0-15A"Wait 1ClsCursor Off Noblink'---------------------------------------------------------------Definire Constante-------------------------------------------------Dim Volt As WordDim Curent As WordDim Th As WordDim Tensiune As SingleDim Intensitate As SingleDim Putere As SingleDim Suma As SingleDim I As ByteDim Temperatura As SingleDim Th1 As SingleDim Fan As SingleDim Viteza As ByteConst Divizor_u = 0.08415Const Const_volt = 2.59 / 1024Const Const_curent = 2.59 / 1024Const Divizor_i = 0.14814814Const Const_temp = 1 'Provizoriu pana fac calculele'---------------------------------------------------------------Configurare ADC----------------------------------------------------Config Adc = Single , Prescaler = Auto , Reference = Internal_2.56Start Adc'---------------------------------------------------------------Bucla infinita-----------------------------------------------------Do '----------------------------------------------------------------Calcul Tensiune--------------------------------------------------- Suma = 0 For I = 1 To 50 Volt = Getadc(0) Suma = Suma + Volt Next Tensiune = Suma / 50 Tensiune = Volt * Const_volt Tensiune = Tensiune / Divizor_u Locate 1 , 2 Lcd Fusing(tensiune , "##.#&") ; "V " '-----------------------------------------------------------------Calcul Curent---------------------------------------------------- Suma = 0 For I = 1 To 50 Curent = Getadc(1) Suma = Suma + Curent Next Intensitate = Suma / 50 Intensitate = Curent * Const_curent Intensitate = Intensitate / Divizor_i Locate 2 , 2 Lcd Fusing(intensitate , "##.#&") ; "A" '-----------------------------------------------------------------Calcul Putere------------------------------------------------ Putere = Tensiune * Intensitate Locate 1 , 11 Lcd Fusing(putere , "##.&") ; " W " '---------------------------------------------------------------Calcul Temperatura-------------------------------------------- Suma = 0 For I = 1 To 50 Th = Getadc(2) Suma = Suma + Th Next Temperatura = Suma / 50 Temperatura = Th / 19.5 Locate 2 , 10 Lcd Fusing(temperatura , "##.&") ; Chr(178) ; "C" '------------------------------------------------------------------Viteza Cooler------------------------------------------------ Select Case Temperatura Case 27 To 29 : Pwm1a = 40 Case 29 To 32 : Pwm1a = 80 Case 32 To 35 : Pwm1a = 120 Case 35 To 40 : Pwm1a = 180 Case Is >= 40 : Pwm1a = 255 Case Else : Pwm1a = 0 End Select Pwm1b = Pwm1aWaitms 500LoopEndEventualele greseli/optimizari pe care le observati va rog sa mi le spuneti.Am sa postez si cateva poze cu "hardughia", insa mai am putin de lucru la partea mecanica.Ceea ce as mai vrea sa fac la soft este ca la temperatura sa imi afiseze doar partea intreaga, fara virgula, ma puteti ajuta cu vreo informatie utila? Din ce calcul reiese "Divizor_u" si "Divizor_I" Link spre comentariu
adrian82 Postat Decembrie 23, 2016 Partajează Postat Decembrie 23, 2016 Precizia ! Nu ma incanta aceste scheme cu atmega nu sunt precise la masurat tot mai bun este cel cu ICL7107 mai ales pentru surse de alimentare ! Link spre comentariu
Depanatoru Postat Decembrie 27, 2016 Partajează Postat Decembrie 27, 2016 (editat) Crezi tu ... care pari a fi la nivelul de copiat scheme . Sa zici ca un operational e pus degeaba fara sa stii cauza , nu te califica sa-ti dai cu parerea Oricum legat de LM358 fara alimentare negativa nu poate ajunge cu iesirea spre masa ca sa fie util cand lucreaza cu tensiune mica de intrare (curenti mici prin shunt)... cum avea la inceputul topicului dar s-a simplificat pe parcurs . Nu este "rail to rail" . Editat Decembrie 27, 2016 de Depanatoru Link spre comentariu
peace Postat Ianuarie 11, 2017 Partajează Postat Ianuarie 11, 2017 Pe tensiune am reusit sa o fac foarte precisa afisarea. Pe curent in schimb nu reusesc sa o fac sa imi afiseze corect. Cred ca gresesc undeva la calcule, pana la 1A nu imi indica deloc corect, dupa 1A indica cat de cat corect cu o abatere +/- 20mA Am scris urmatorul cod, poate isi da cineva seama unde gresesc $regfile = "m8def.dat" $crystal = 1000000 $hwstack = 40 $swstack = 16 $framesize = 32 '--------------------------------------------------------------Configurare LCD----------------------------------------------------- Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2 '---------------------------------------------------------------Definire Constante------------------------------------------------- Config Portb.0 = Output Config Portb.5 = Output Config Portb.4 = Output Dim Volt As Word Dim Curent As Word Dim Tensiune As Single Dim Intensitate As Single Dim Putere As Single Dim Putere_int As Word Dim Suma As Single Dim I As Byte Dim Temperatura As Single Dim Temperatura_int As Word Const Divizor_u = 0.08415 Const Const_volt = 2.59 / 1024 Const Const_curent = 2.59 / 1024 Const Divizor_i = 0.05 '---------------------------------------------------------------Configurare ADC---------------------------------------------------- Config Adc = Single , Prescaler = Auto , Reference = Internal_2.56 Start Adc Do '----------------------------------------------------------------Calcul Tensiune--------------------------------------------------- Suma = 0 For I = 1 To 50 Volt = Getadc(0) Suma = Suma + Volt Next Tensiune = Suma / 50 Tensiune = Volt * Const_volt Tensiune = Tensiune / Divizor_u If Tensiune <= 10.0 Then Locate 1 , 1 Lcd Fusing(tensiune , "##.#&") ; " V" Else Locate 1 , 1 Lcd Fusing(tensiune , "##.#") ; " V" End If '-----------------------------------------------------------------Calcul Curent---------------------------------------------------- Suma = 0 For I = 1 To 20 Curent = Getadc(1) Suma = Suma + Curent Next Intensitate = Suma / 20 Intensitate = Curent * Const_curent Intensitate = Intensitate / Divizor_i If Intensitate <= 10.0 Then Locate 2 , 1 Lcd Fusing(intensitate , "##.#&") ; " A" Else Locate 2 , 1 Lcd Fusing(intensitate , "##.#") ; " A" End If '-----------------------------------------------------------------Calcul Putere------------------------------------------------ Putere = Tensiune * Intensitate If Putere < 99 Then Locate 1 , 10 Lcd Fusing(putere , "##.#&") ; " W " Else Putere_int = Int(putere) Locate 1 , 10 Lcd Fusing(putere , "###.#") ; " W " End If Waitms 500 Loop End Link spre comentariu
Depanatoru Postat Ianuarie 11, 2017 Partajează Postat Ianuarie 11, 2017 (editat) Are vreun semireglabil de ajustare la curent ? Ce schema ai folosit ? Fara trebuie sa tatonezi cu rabdare constanta de divizare , pentru ca in primul rand shuntul nu se poate masura cu precizia cu care masori o rezistenta mare de gen 10K . Editat Ianuarie 11, 2017 de Depanatoru Link spre comentariu
peace Postat Ianuarie 11, 2017 Partajează Postat Ianuarie 11, 2017 (editat) Am incercat diferite valori pentru divizor, in simulerea din Proteus arata destul de bine, insa fizic la curenti mici imi afiseaza din 0,05 in 0,05.Nu reusesc sa il fac sa imi masoare cu o precizie de 0.01, cu alte cuvinte sa imi afiseze exact ca aparatul de masura. Nu are semireglabil, intrarea de curent este conectata la pinul ADC printr-o rezistenta de 10k.Vreau intai sa vad ca imi afiseaza corect si sa inteleg exact cum lucreaza ADC-ul, iar dupa asta voi pune si un AO cu amplificare si reglaj. Editat Ianuarie 11, 2017 de peace Link spre comentariu
Depanatoru Postat Ianuarie 11, 2017 Partajează Postat Ianuarie 11, 2017 (editat) Posibil sa nu aiba destula rezolutie pe 10 biti , depinde cat e curentul maxim , se imparte la 1024 si vezi cat e "pasul" cel mai mic pe care il poate masura . In principiu cu 10A maxim trebuie sa vezi cu rezolutie de 10mA , 0,01A . Trebuie sa verifici din calcul daca cu 10A prin shunt , ajunge tensiunea la 2,56V la intrarea ADC , capul de scala . Altfel trebuie modificata constanta de divizare corespunzator . Oricum vezi ca acolo in program unde scrie 2,59 , aia e referinta masurata fizic pe un anumit microcontroler , il masori precis pe al tau si modifici . Editat Ianuarie 11, 2017 de Depanatoru Link spre comentariu
peace Postat Ianuarie 11, 2017 Partajează Postat Ianuarie 11, 2017 (editat) La 10A tensiunea pe ADC este de 0,5V. Am schimbat valoarea de 2,56 cu 0,5 si imi indica cu mult mai putin. Asa am facut calculul si pt tensiune cu divizorul rezistiv si acolo imi arata corect, adica la 30v am pe ADC 2,59 Editat Ianuarie 11, 2017 de peace Link spre comentariu
Depanatoru Postat Ianuarie 11, 2017 Partajează Postat Ianuarie 11, 2017 (editat) Nu prea inteleg cum ai facut , referinta nu se schimba ca sa-ti dea rezultatul ... numai constantele de divizare Intai se stabilesc limitele maxime , sa zicem 35V si 10A , care inseamna o anumita tensiune pe shunt sa zicem 0,1V . La masurat tensiune e simplu , gasesti constanta de divizare care sa-ti reduca tensiunea 2,56/35 La curent trebuie sa se amplifice de operational tensiunea de la 0,1V pana la 2,56V , aici nu e o constanta de divizare propriuzisa ( ca si cum ai masura tensiune de maxim 2,56V fara divizare) , numai calculul sa afiseze real curentul . Posibil ca aici te-ai incurcat , nu e asa intuitiv ca la masurat tensiune . Editat Ianuarie 11, 2017 de Depanatoru 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