www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

linearizacija senzorja v 10 točkah

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Elektronika
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
damo
Član
Član



Pridružen-a: Čet 31 Jul 2003 13:45
Prispevkov: 2008
Aktiv.: 8.45
Kraj: Krško

PrispevekObjavljeno: Čet Dec 25, 2014 8:47 pm    Naslov sporočila:  linearizacija senzorja v 10 točkah Odgovori s citatom

Rad bi poboljšal karakteristiko senzorja, zato bi naredil tabelo z 11 kalibracijskimi točkami in interpolacijo. Sicer mi je princip jasen, bi pa bilo dobrodošlo drugo mnenje, mogoče kaj preveč kompliciram ali pa narobe razmišljam...

Torej, senzor mi daje digitalen 15 bitni podatek za območje 0-100%.

Imel bi polje true_val[10], katero vsebuje teoretične vrednosti za točke 0-100% vhodne veličine.

Vsakem senzorju bi dodal polej sensor_val[10], ki vsebuje izhodne vrednosti pri simulaciji vhodne veličine 0-100% v korakih po 10%.

Pravo vrednost bi izračunal tako, da bi najprej ugotovil, v kateri segment (po 10%) spada trenutna merilna točka, nato pa bi interpoliral glede na dejanske vrednosti pri spodnji in zgornji meji tega segmenta. Pri tem privzamem, da je napaka v posameznem segmentu (po 10% območja) linearna.

teoretična digitalna izhodna vrednost pri 0%: 3277, pri 100% 29491
read_val - trenutni digitalni rezultat iz senzorja
comp_val - kompenzirana digitalna vrednost

Koda:

typedef struct
{
  uint8_t I2C_address;          // specifies sensor I2C address
   uint16_t range_mbars;         // specifies sensor range in milibars   
   uint16_t read_val;                  // last read value
   uint16_t read_val_comp;            // last read value compensated error
   uint16_t units;                        // calculated measured value in milibars
  uint16_t true_val[11];            // teorethical value for every 10% of input span
   uint16_t sensor_val[11];         // calibration table for every 10% of input span

} Type_Def_Pressure_Sensor;


Type_Def_Pressure_Sensor pressure_sensor[3];



Koda:
 
void calculate_all_pressures (void)
{
   unsigned char a,b;
  unsigned int true_span, sensor_span;
   
      for (a=0;a<3;a++)
         {
            // first, compensate error by interpolating in 10 points
   
            b=0;      // find 10% segment
            while (pressure_sensor[a].read_val < pressure_sensor[a].true_val[b]) b++;
            
            // then calculate compensated value
            
          // teoreticen obseg segmenta
            true_span = pressure_sensor[a].true_val[b+1]-pressure_sensor[a].true_val[b];
            // sprememba izhoda senzorja v danem segmentu
            sensor_span = pressure_sensor[a].sensor_val[b+1]-pressure_sensor[a].sensor_val[b];


            pressure_sensor[a].read_val_comp = pressure_sensor[a].read_val_comp + pressure_sensor[a].true_val[b];

            pressure_sensor[a].read_val_comp = (true_span*((pressure_sensor[a].read_val-pressure_sensor[a].sensor_val[b])/sensor_span));
 

            // calculate engineering units, first to milibars

            pressure_sensor[a].units = (pressure_sensor[a].range_mbars * pressure_sensor[a].read_val_comp) / (pressure_sensor[a].true_val[10]-pressure_sensor[a].true_val[0]);

         }

}



Je kaka očitna napaka v mojem razmišljanju?

lp

EDIT: čistopis kode

_________________
Dobrga štromarja samo slab šnops strese!


Nazadnje urejal/a damo Čet Dec 25, 2014 11:28 pm; skupaj popravljeno 1 krat
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
psevdonim
Član
Član



Pridružen-a: Čet 21 Sep 2006 21:42
Prispevkov: 3411
Aktiv.: 14.91
Kraj: slo

PrispevekObjavljeno: Čet Dec 25, 2014 9:42 pm    Naslov sporočila:   Odgovori s citatom

Citiram:
Torej, senzor mi daje digitalen 15 bitni podatek za območje 0-100%
saj ne da bi vedel odgovor, a me vseeno zanima, kakšen senzor je to, ki že sam od sebe da ven digitalni podatek
_________________
___
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
damo
Član
Član



Pridružen-a: Čet 31 Jul 2003 13:45
Prispevkov: 2008
Aktiv.: 8.45
Kraj: Krško

PrispevekObjavljeno: Čet Dec 25, 2014 9:48 pm    Naslov sporočila:   Odgovori s citatom

Ni skrivnost Smile, konkretno se (zaenkrat) gre za tlačni senzor HPSD4000. Rad ga umeril v 10 točkah in s tem izboljšal točnost meritve.
_________________
Dobrga štromarja samo slab šnops strese!
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
psevdonim
Član
Član



Pridružen-a: Čet 21 Sep 2006 21:42
Prispevkov: 3411
Aktiv.: 14.91
Kraj: slo

PrispevekObjavljeno: Čet Dec 25, 2014 11:05 pm    Naslov sporočila:   Odgovori s citatom

zgleda, da ima digitalni in analogni izhod. Jaz bi narisal čim bolj natančno/podrobno vhodno-izhodno karakteristiko (vhodni tlak proti izhodni napetosti) in potem to dal nekemu matematiku da zadevo matematično opiše. Tako se je naredilo za lambda sondo, ki ima odziv po Nernstovi formuli, a ta vsebuje eksponente in logaritme, ki pa se jih v krmilnik ni dalo vpisati, potem pa je to matematik predelal v množenje in deljenje.
_________________
___
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
damo
Član
Član



Pridružen-a: Čet 31 Jul 2003 13:45
Prispevkov: 2008
Aktiv.: 8.45
Kraj: Krško

PrispevekObjavljeno: Čet Dec 25, 2014 11:19 pm    Naslov sporočila:   Odgovori s citatom

Ja, samo vsak senzor ima svojo karakteristiko. In za vsako, ko bi senzor kalibriral, bi moral iskati novo enačbo in jo programirat.

V praksi se to naredi (videno na večih profi zadevah), da lineariziraš senzor v 10 točkah, kar poskušam jaz zdaj sprogramirat. Senzorju zadajaš vhodno veličino (v tem primeru tlak) ter potrjuješ, izmerjene točke se pa zapišejo v eeprom.

_________________
Dobrga štromarja samo slab šnops strese!
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
Musty
Član
Član



Pridružen-a: Sob 28 Apr 2007 8:54
Prispevkov: 1575
Aktiv.: 7.11
Kraj: Rače

PrispevekObjavljeno: Pet Dec 26, 2014 1:12 am    Naslov sporočila:   Odgovori s citatom

Lahko še izračun nekoliko zakompliciraš tako, da za vsako meritev poračunaš na toliko % se nahaja od celotne skale in potem izračunaš kalibracijsko vrednost iz 10% točke nad in pod meritvijo, seveda v razmerju.

Tole lahko še nekoliko izboljša natančnost saj se kalibracijske konstante spreminjajo zvezno.

Pristop se mi zdi povsem primeren, narediš še avtomatiko za kalibracijo in je.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Sigi
Član
Član



Pridružen-a: Čet 31 Jul 2014 11:42
Prispevkov: 207
Aktiv.: 1.56
Kraj: Kamnik

PrispevekObjavljeno: Pet Dec 26, 2014 7:14 pm    Naslov sporočila:   Odgovori s citatom

Tudi meni se zdi OK, sam tako tabelo uporabljam za preračun rezultata analogne meritve senzorja tipa KTY v stopinje celzija.

lp
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
.
Član
Član



Pridružen-a: Pon 23 Avg 2004 16:16
Prispevkov: 16777190
Aktiv.: 70622.16

PrispevekObjavljeno: Sob Dec 27, 2014 11:54 am    Naslov sporočila:   Odgovori s citatom

Brisana vsebina odstranjenega uporabnika.

Nazadnje urejal/a . Pet Feb 27, 2015 9:46 am; skupaj popravljeno 1 krat
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
aly
Član
Član



Pridružen-a: Tor 28 Sep 2004 14:51
Prispevkov: 9407
Aktiv.: 39.60
Kraj: Kranj - struževo

PrispevekObjavljeno: Sob Dec 27, 2014 5:26 pm    Naslov sporočila:   Odgovori s citatom

Jaz tudi delam odsekovno linearno korekcijo. Podoben princip kot tvoj.
Tabela je sestavljena iz N+1 parov X in Y (vrednost in korekcija). Ti imaš v tabeli vhodne in izhodne vrednosti, jaz pa samo vhodne in vrednost napake. S tem privarčujem nekaj prostora pri dolgih tabelah, saj je vhod 32-bit, korekcija pa samo 8 bitov.

_________________
I'm going to stand outside, so if anyone asks, I'm outstanding Smile
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran MSN Messenger - naslov
igo
Član
Član



Pridružen-a: Sre 11 Okt 2006 19:11
Prispevkov: 3641
Aktiv.: 15.96

PrispevekObjavljeno: Sob Dec 27, 2014 7:26 pm    Naslov sporočila:   Odgovori s citatom

Hitre odločitve za osnovno določanje smeri in velikosti odziva je možno sprejemati tudi na podlagi 8-bitnega vhoda (zgornjih 8 bitov), tabele 10 točnih vrednosti (kalibracija) in tabele 9 8-bitnih vrednosti napake na sredini odsekov (izračunaš jih v Excel-u).

Ko bi imel MCU čas, bi pa izračunal točne vrednosti iz vseh vhodnih bitov in se ustrezno odzval.

Jaz bi krivuljo opisal s polinomom, ki gre skozi 10 znanih točk.

Precej dober približek krivulji je tudi krožnica, ki gre skozi 3 sosednje kalibrirane točke.
1,2,3;2,3,4;3,4,5;4,5,6;5,6,7;6,7,8;7,8,9;8,9,10
Rabiš tabelo sinusov, tabelo polmerov krožnic in tabelo središč krožnic (obe izračuna jih Excel).

Seveda moraš Excelu "dopovedati", kako naj iz 10 vnešenih vrednosti izračuna vse ostale tabele, a izračun je na ravni linearnih funkcij, premic y=ax+b skozi znane točke(x,y), razpolovišč daljic, ... S parimi vmesnimi izračuni po korakih dobiš vse potrebno.

V skrajnem primeru bi že na računalniku iz 10 točnih izračunal 256 vrednosti za pretvorbo v linearno funkcijo in jih vnesel v tabelo v MCU.

_________________
Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
plesec
Član
Član



Pridružen-a: Sre 16 Sep 2009 20:21
Prispevkov: 135
Aktiv.: 0.70
Kraj: Medvode

PrispevekObjavljeno: Sob Dec 27, 2014 7:43 pm    Naslov sporočila:   Odgovori s citatom

Polinomi višjih redov (kar 10 sigurno je) so lahko zelo zelo nepredvidljivi. Matematično gledano je vse ok, v praksi pa se zaradi zaokroževanja pridela hude napake.

Problem je ker so prispevki posameznih potenc lahko ali pozitivni ali negativni. In pri veliki potenci so posamezni členi zelo veliki - Zelo podvrženi napaki zaokroževanja.
Sem imel nokoč v excelu tak problem. Naredim graf. V njem zrišem polinom skozi točke. Napišem v graf še enačbo polinoma. Potem konstante iz te enačbe uporabim. Pri tem sem vzel recimo konstante samo na 5 mest natančno Smile. Huda napaka ....


Tako da ja odsekoma linearno je kar vredu. Pa še to je vprašanje če je vredno truda. Histereze, dolgotrajnega lezenja se tako ne izloči.
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
.
Član
Član



Pridružen-a: Pon 23 Avg 2004 16:16
Prispevkov: 16777190
Aktiv.: 70622.16

PrispevekObjavljeno: Sob Dec 27, 2014 8:02 pm    Naslov sporočila:   Odgovori s citatom

Brisana vsebina odstranjenega uporabnika.


Algoritmi za umerjanje in odpravo napak inteligentnih senzorjev.pdf
 Opis:

Download
 Ime datoteke:  Algoritmi za umerjanje in odpravo napak inteligentnih senzorjev.pdf
 Velikost datoteke:  200.72 KB
 Downloadano:  12 krat



Nazadnje urejal/a . Pet Feb 27, 2015 9:47 am; skupaj popravljeno 1 krat
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
damo
Član
Član



Pridružen-a: Čet 31 Jul 2003 13:45
Prispevkov: 2008
Aktiv.: 8.45
Kraj: Krško

PrispevekObjavljeno: Sob Dec 27, 2014 9:36 pm    Naslov sporočila:   Odgovori s citatom

MarE69 je napisal/a:
S HPSD4000 boš brez težav dosegel kakšnih 0,2% brez dodatnih komplikacij, če bo le v nekem pohlevnem temperaturnem okolju.


To mi zadostuje. Datasheet pravi 1%, kar bi pa rad malo izboljšal. Sicer še nisem preverjal senzorjev (te dni jih oživljam, potem bom pa to odnesel na šiht na tlačni standard). Delovna temperatura bo recimo +15 - +30 C.

Kode se pa tudi nebi branil, če maš kje kak kos. Sicer že berem tlak, ampak ti si to sigurno bolje spesnil, kot jaz, pa se lahko še kaj naučim spotoma Smile

_________________
Dobrga štromarja samo slab šnops strese!
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Elektronika Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 9 dni


Powered by phpBB © 2001, 2005 phpBB Group