Sari la conținut
ELFORUM - Forumul electronistilor

Modificare voltmetru


theborg

Postări Recomandate

amandoua valori sunt identice, la o valoare de 1.12v am o presiune de 1.87 bar (desi manometrul analogic imi arata cam 1.55 dar aici ma gandesc ca nu este precis senzorul avand in vedere ca in gol imi scoate in loc de 0.50v are cam 0.55-0.57v)

Link spre comentariu
  • Răspunsuri 58
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • theborg

    17

  • djvas

    8

  • MifTy

    8

  • UDAR

    3

Top autori în acest subiect

Imagini postate

Aw_Genetix, îmi explici şi mie de ce foloseşti tensiunea de alimentare a mcu pe post de referinţă de tensiune?eu asta înţeleg din codul tău:

 

U = RawADC * (4.98 / 1023.0); // 5.0 poate fi 4.98 e tensiunea sursei uC

Link spre comentariu

pai care sa o foloseasca ? pe cea de 1V1 interna ? are undeva max 4.5, deci care referinta ar fi cea mai buna MifTy.

daca ai tu o idee mai buna, poti sa spui din prima fara sa ma intrebi de ce. eu asa m-am gandit..

 

daca vrea ceva mai fidel poate sa-si faca o alta referinta, dar cred ca nu vrea.

eu personal n-as face o sursa de referinta(ex.LM285BXZ) in cazul asta..

daca are acolo o sursa liniara, e suficienta..zic eu. oricum senzorul ala nu e abracadabra.

daca vrea altfel trebuie sa declare acolo EXTERNAL in loc de DEFAULT, si pe pinul AREF sa aplice tensiunea de referinta dorita.

Dar cum este acum, uC isi ia referinta de pe sursa.

 

dar insist, daca ai alta idee poti spune, cu siguranta ai..si probabil una buna.

Editat de Vizitator
Link spre comentariu

... io văzusem că, în general, în schemele de genul ăsta, unde sunt necesare referinţe de tensiune, se cam evită folosirea tensiunii de alimentare ca referinţă, iar dacă discutăm despre ceva alimentat de la baterie, şi avem ceva pretenţii, nici nu se ia în considerare soluţia.

 

aş zice că până şi un tl431 ar fi mai stabil ca tensiunea de alimentare, nu-i absolută nevoie de referinţe cu precizie de jumătăţi de procent... dar dacă crezi că nu afectează precizia măsurării, ok... însă mai sus zicea că ar vrea să măsoare cu precizie de 0.05 bar, şi dacă nu se poate, măcar 0.1 bar :)

Link spre comentariu

Avand in vedere si senzorul (procurat din China) nu cred si nu vreau sa am nu stiu ce pretentii in ceea ce priveste precizia. Pur si simplu in plaja de 1-2.5 bari sa-mi arate cat de cat apropiata valoarea de manometrul analogic care la randul lui este unul comun de pe piata. Ceea ce doresc, de fapt, este sa inlocuiesc manometrul analogic de la un cazan pe lemne cu acesta digital, avand in vedere ca si termometrul si termostatul analogic care comanda pompa de recirculare l-am inlocuit cu unul digital (aici am avut noroc ca l-am luat de-a gata). Ca si sursa de alimentare va fi un simplu alimentator de 9v, asta daca nu-mi sugerati altceva.

Testele le fac cu senzorul montat in instalatia de apa curenta provenita de la un hidrofor (deci ghidajul la teste este manometrul hidroforului).

 

post-194063-0-61552200-1450072324_thumb.jpg

Editat de theborg
Link spre comentariu

Nu stiu daca s-a mai spus in topic, parerea mea este ca poti face ce vrei tu prin simpla apasare a butonului "rel" de pe orice voltmetru care are functia asta. Cred ca ar merge si cu o pocnitoare ca asta care in intervalul 0-4 v iti arata 3 zecimale in coada, adica precizie pentru tine. Te complici prea tare cu modificari, cu microcontrolere si tot felul de chestii destepte. Succes!

Link spre comentariu

m-am razgandit, nu merge cum am zis eu, doar compensezi inceputul ca sa iti arate 0. daca mai amplifici putin semnalul primit de la traductor a.i. sa ai la final 1 volt/ unitatea de presiune in care masoara, apoi cu calibrare din rel si poate te apropii.

Editat de Vizitator
Link spre comentariu

Daca se renunta la microcontroler, ar merge si o schema de tipul atasat, fara amplificare. Cu un potentiometru se regleaza offset-ul de 0,5V si cu altul - capatul de scala de 1,2V.

Editat de Ticu
Link spre comentariu

Avand in vedere si senzorul (procurat din China) nu cred si nu vreau sa am nu stiu ce pretentii in ceea ce priveste precizia. Pur si simplu in plaja de 1-2.5 bari sa-mi arate cat de cat apropiata valoarea de manometrul analogic care la randul lui este unul comun de pe piata. Ceea ce doresc, de fapt, este sa inlocuiesc manometrul analogic de la un cazan pe lemne cu acesta digital, avand in vedere ca si termometrul si termostatul analogic care comanda pompa de recirculare l-am inlocuit cu unul digital (aici am avut noroc ca l-am luat de-a gata). Ca si sursa de alimentare va fi un simplu alimentator de 9v, asta daca nu-mi sugerati altceva.

Testele le fac cu senzorul montat in instalatia de apa curenta provenita de la un hidrofor (deci ghidajul la teste este manometrul hidroforului).

 

dacă aveai o plajă mai largă de valori de măsurat, nu conta, dar tu ai de măsurat între 0 şi 5 volţi, fă calculul la eroarea afişabilă.dacă era vorba de 0-100 nu spuneam nimic: la 100 de volţi 0.5 volţi în plus sau minus nu contează, dar între 0 şi 5 volţi...

Link spre comentariu

Incearca su cu acest program:

#include <LiquidCrystal.h>LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //library initialization//---Definitie variabileuint16_t Vadc = 0;float Ux=0.0;float Poff=0.5;float Px = 0.0;float Preal = 0.0;uint16_t Vcc = 5.000;const int pinADC = A1;// intrarea analogica este A1void setup() {  // put your setup code here, to run once:  lcd.begin(16, 2);  lcd.setCursor (1, 0);  lcd.print ("Your text"); //aici introduci textul dorit  Vadc = analogRead (pinADC);  if ((Vadc < 100) || (Vadc > 990)) {    lcd.clear();    lcd.setCursor (1, 0);    lcd.print ("Eroare senzor!");   while (1) {  }  }}void loop() {  // put your main code here, to run repeatedly:  Vadc= analogRead (pinADC);  Ux=(Vadc * (Vcc/1024.0))+0.5; Px  = (Ux-0.5)/3.333; //Preal = fmap(Ux,0.5,4.5,0.00,1.20);  Preal=Px-0.15; //exprimat in bar si cu compensarea erorii     lcd.setCursor (0, 0);    lcd.print ("Presiune = ");    lcd.setCursor (11, 0);    lcd.print (Preal);    }float fmap(double x, double in_min, double in_max, double out_min, double out_max){  return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;}
Link spre comentariu

Pentru ca aseara nu am avut prea mult timp, postez acum noul software, cu mentiunea ca la depasirea valorilor limita min=0.5V, respectiv max.4.5V, pe ecranul LCD apare un mesaj de eroare care persista cat timp limitele (oricare dintre ele) sunt depasite. Nu am prevazut si posibilitatea de actionare a unui releu care sa intrerupa alimentarea boilerului.

La punerea in functiune, programul verifica daca senzorul functioneaza, in caz contrar afiseaza un mesaj de eroare

Afisarea se face in bari (1MPa = 10bar)

Am atasat si schema de principiu. Este de dorit ca amplificatorul operational sa fie de tipul rail-to-rail atat pe intrare, cat si pe iesire, altfel alimentarea Ao trebuie sa fie mai mare (cum este in schema, de exemplu).

#include <LiquidCrystal.h>LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //library initialization//---Definitie variabileuint16_t Vadc = 0;float Ux = 0.0;float Px = 0.0;float Preal = 0.0;uint16_t Vcc = 5.000;const int pinADC = A1;// intrarea analogica este A1void error(void);void setup() {  // put your setup code here, to run once:  lcd.begin(16, 2);  lcd.setCursor (1, 0);  lcd.print ("Your text"); //aici introduci textul dorit  Vadc = analogRead (pinADC);  if ((Vadc < 100) || (Vadc > 990)) {    lcd.clear();    lcd.setCursor (1, 0);    lcd.print ("Eroare !");    while (1) {    }  }}void loop() {  // put your main code here, to run repeatedly:  Vadc = analogRead (pinADC);  Ux = (Vadc * (Vcc / 1024.0));  if ((Ux > 0.49) && (Ux < 4.55)) {    Px  = (Ux - 0.5) / 3.333;//Panta dreptei ce descrie variatia valorilor senzorului                             // este Ux= 3.333*Px+0.5, in ipoteza ca foaia de catalog nu minte    Preal = Px * 10.0; //exprimat in bar 1MPa = 10 bar    lcd.setCursor (0, 0);    lcd.print ("Presiune = ");    lcd.setCursor (11, 0);    lcd.print (Preal);//    lcd.setCursor(0, 1); varianta de verificare a tensiunii masurate//    lcd.print(Ux);  } else {    error();  }}void error() {  while (1) {    lcd.setCursor (0, 1);    lcd.print ("Eroare senzor!");    Vadc = analogRead (pinADC);    Ux = (Vadc * (Vcc / 1024.0));     if ((Ux > 0.49) && (Ux < 4.55)) {       lcd.clear();       break;     }  }}

Doc7.doc

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