Jump to content


Photo

Volt-Ampermetru + FAN cu Atmega8


  • Please log in to reply
69 replies to this topic

#31 OFFLINE   djvas

djvas

    Membru

  • Membri
  • PipPip
  • 638 posts
  • Locatie:Bucuresti

Posted 11 January 2016 - 07:39 PM

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. 


Edited by djvas, 11 January 2016 - 07:43 PM.


Cu_reclama

Cu_reclama
  • Membri

#32 OFFLINE   djasu82

djasu82

    Membru

  • Membri
  • PipPip
  • 146 posts

Posted 14 January 2016 - 09:24 AM

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 !



#33 OFFLINE   The_Reaper

The_Reaper

    Consumator de curent

  • Membri
  • PipPip
  • 289 posts
  • Locatie:Buzau

Posted 01 February 2016 - 07:00 PM

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??

Attached Files



#34 OFFLINE   djasu82

djasu82

    Membru

  • Membri
  • PipPip
  • 146 posts

Posted 04 February 2016 - 01:38 PM

e ok o stiu pentru surse duble ! ai fi putut pune si situl pentru restu care nu stiu ....



#35 OFFLINE   The_Reaper

The_Reaper

    Consumator de curent

  • Membri
  • PipPip
  • 289 posts
  • Locatie:Buzau

Posted 04 February 2016 - 06:23 PM

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

 

 

sdasfd.jpg

Attached Files


Edited by The_Reaper, 04 February 2016 - 06:24 PM.


#36 OFFLINE   peace

peace

    EDTRO

  • Membri
  • PipPip
  • 255 posts
  • Locatie:Iasi

Posted 16 October 2016 - 09:36 AM

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.ro/index.php?s=9393e48f54aaff4bc5b6c2a7eaef7766&app=forums&module=ajax┬žion=topics&do=quote&t=81827&p=1319632&md5check=f18e0224ff561575f1ad2195d396ebe5&isRte=1,xDD6_yBh4z,true,false,NG18-AE7vhk');</script>sdasfd.jpg&&0){for(var>

Ai cumva si codul sursa la aceasta schema?



#37 OFFLINE   peace

peace

    EDTRO

  • Membri
  • PipPip
  • 255 posts
  • Locatie:Iasi

Posted 20 December 2016 - 04:13 PM

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.0

Dim A As Byte
Config Lcd = 16x2

'--------------------------------------------------------------Configurare PWM-----------------------------------------------------

Config Timer1 = Pwm , Prescale = 8 , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up

'-------------------------------------------------------------Mesaj de intampinare-------------------------------------------------
Cls
Locate 1 , 3
Lcd "Power Supply"
Lowerline
Locate 2 , 2
Lcd "0-27V / 0-15A"
Wait 1

Cls
Cursor Off Noblink

'---------------------------------------------------------------Definire Constante-------------------------------------------------
Dim Volt As Word
Dim Curent As Word
Dim Th As Word
Dim Tensiune As Single
Dim Intensitate As Single
Dim Putere As Single
Dim Suma As Single
Dim I As Byte
Dim Temperatura As Single
Dim Th1 As Single
Dim Fan As Single
Dim Viteza As Byte
Const Divizor_u = 0.08415
Const Const_volt = 2.59 / 1024
Const Const_curent = 2.59 / 1024
Const Divizor_i = 0.14814814
Const Const_temp = 1                                        'Provizoriu pana fac calculele

'---------------------------------------------------------------Configurare ADC----------------------------------------------------

Config Adc = Single , Prescaler = Auto , Reference = Internal_2.56

Start 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 = Pwm1a


Waitms 500
Loop
End
Eventualele 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"



#38 OFFLINE   djasu82

djasu82

    Membru

  • Membri
  • PipPip
  • 146 posts

Posted 24 December 2016 - 01:00 AM

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 !



#39 OFFLINE   Depanatoru

Depanatoru

    Membru evoluat

  • Membri
  • PipPipPipPipPip
  • 2,983 posts
  • Locatie:Tirgu-Mures

Posted 27 December 2016 - 11:38 PM

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" .


Edited by Depanatoru, 27 December 2016 - 11:50 PM.


#40 OFFLINE   peace

peace

    EDTRO

  • Membri
  • PipPip
  • 255 posts
  • Locatie:Iasi

Posted 11 January 2017 - 11:03 AM

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


#41 OFFLINE   Depanatoru

Depanatoru

    Membru evoluat

  • Membri
  • PipPipPipPipPip
  • 2,983 posts
  • Locatie:Tirgu-Mures

Posted 11 January 2017 - 11:19 AM

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 .


Edited by Depanatoru, 11 January 2017 - 11:26 AM.


#42 OFFLINE   peace

peace

    EDTRO

  • Membri
  • PipPip
  • 255 posts
  • Locatie:Iasi

Posted 11 January 2017 - 11:26 AM

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.

Edited by peace, 11 January 2017 - 11:31 AM.


#43 OFFLINE   Depanatoru

Depanatoru

    Membru evoluat

  • Membri
  • PipPipPipPipPip
  • 2,983 posts
  • Locatie:Tirgu-Mures

Posted 11 January 2017 - 11:31 AM

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 .


Edited by Depanatoru, 11 January 2017 - 11:47 AM.


#44 OFFLINE   peace

peace

    EDTRO

  • Membri
  • PipPip
  • 255 posts
  • Locatie:Iasi

Posted 11 January 2017 - 11:46 AM

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

Edited by peace, 11 January 2017 - 11:49 AM.


Cu_reclama

Cu_reclama
  • Membri

#45 OFFLINE   Depanatoru

Depanatoru

    Membru evoluat

  • Membri
  • PipPipPipPipPip
  • 2,983 posts
  • Locatie:Tirgu-Mures

Posted 11 January 2017 - 12:09 PM

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 .


Edited by Depanatoru, 11 January 2017 - 12:27 PM.





0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users