www.elektronik.si
Motnje telefona na Adafruit MAX31855
Pojdi na stran Prejšnja  1, 2  :||:
www.elektronik.si -> Arduino sekcija

Avtor: igoKraj: Krško PrispevekObjavljeno: Pon Maj 13, 2019 9:31 am    Naslov sporočila:  
----------------------------------------------------------------------------
Povprečenje vsega ne deluje. Glede na možne hitrosti temperaturnih sprememb v tvojem sistemu zanemari vse odčitke, ki od povprečja veljavnih odčitkov odstopajo za več kot recimo 1°C . Šele potem jih shrani v array, povpreči in povprečje primerjaj z novimi odčitki.
Da dobiš prvi osnutek povprečja po zagonu (ko je povprečje arraya 0), lahko prvi array napolniš direktno, drugega z večjim dovoljenim odstopanjem, tretjega z manjšim ... in potem prideš do 1°C.
To narediš z indeksom, ki gre prvič od 0 do 63, nato pa gre na 54 in kroži med 54 ter 63, za arrayindeks pa maskiraš spodnje 3 bite (od 0 do 7). To je za povprečje 8 vrednosti. Pri 16 pač kroži od 48 do 63.

Jaz merim temperature v zelo brutalnem industrijskem okolju. V nekem trenutku sem prišel na idejo, da bi se na LCD izpisovali posamezni biti odčitkov in povprečja, preden se odčitek pretvori v desetiške vrednosti. Se lažje vidi koliko bitov se spreminja kakor pri cifrah pri desetiškem prikazu. Ko vidiš s čim imaš opravka, narediš največ, kar lahko in spremeniš prikaz nazaj v desetiškega.

Avtor: pajoKraj: Že od kje PrispevekObjavljeno: Pon Maj 13, 2019 10:18 am    Naslov sporočila:  
----------------------------------------------------------------------------
Pred časom sem gledal tega AD594/595 , vendar sem zaradi cene idejo opustil.
Sicer me vem, če bi izbira drugega tipa pomagala rešiti težavo.
Kakšno temperaturno območje želiš meriti in s kakšno natančnostjo?

Avtor: igoKraj: Krško PrispevekObjavljeno: Pon Maj 13, 2019 11:45 am    Naslov sporočila:  
----------------------------------------------------------------------------
Prej sem morda nejasno napisal ...

... To narediš z indeksom, ki gre prvič od 0 do 63, nato pa gre na 54 in kroži med 54 ter 63, za arrayindeks pa maskiraš z AND 0x07 zgornje bite stran in uporabiš samo spodnje 3 bite (od 0 do 7). ...
Koda:

Ob zagonu v Setup naj bo Omejitev = 255; ali zelo veliko.


void Povprecenje()
{
byte arrayindeks;
int Razlika;

  if(indeks > 53)
  {
    if(Omejitev > 1) Omejitev--; //Pocasi jo pripelje do 1
    Razlika = Odcitano - Povprecje;
    Razlika = abs(Razlika);
    if(Razlika > Omejitev) return; // leti ven
  }
  // Meritev je veljavna
 
  indeks++; // poveca ga veljaven odcitek
  if(indeks > 63) indeks = 54;
  arrayindeks = indeks & 0x07; // samo spodnji 3 biti
  Odcitek[arrayindeks] = Odcitano;
  for(i=0; i<8; i++)
  {
    Povprecje = Povprecje + Odcitek[i];
  }
  Povprecje = Povprecje / 8;
} // void Povprecenje()

Ne vem, kako pogosto odčitavaš temperaturo. Na začetku malo traja, da pride Omejitev do 1, potem pa ignorira vse Razlike večje od Omejitve.

Omejitev mora biti na začetku nekaj večja od največje možne izmerjene temperature, sicer bo problem pri vročem ponovnem zagonu, ko bo Povprecje=0, odčitki pa že okrog delovne temperature.

Avtor: ElGrigonKraj: okolica Lenarta PrispevekObjavljeno: Pon Maj 13, 2019 12:41 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Odčitavam v zanki brez zakasnitev razen ciklov, ki se izvedejo medtem. Bi moral izmeriti čas, ker ne vem koliko ciklov še leti skozi knjižnice.

Ja, PID mora reagirati v nekaj 100 ms, kar je sedaj zadovoljivo. To računanje s povprečji bi ga verjetno precej omejil oz. bi letel čez setpoint.

Avtor: igoKraj: Krško PrispevekObjavljeno: Pon Maj 13, 2019 1:47 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Jaz si to lahko privoščim, ker imam ene 200 kg železja in so spremembe dovolj počasne, da ne potrebujem D člena, saj zadostujeta samo P in I.

Motnje imajo vpliv predvsem na D, ker je v trenutku velika razlika v eno stran, takoj za njo pa v drugo stran ali enaka 0.
Saj lahko povprečiš tudi samo 4 ali 2 vrednosti, a ne imej prevelikega D vpliva, da ga ne bo zabijalo.

Zgornji podprogram Povprecenje() se enkrat izvede v dobri milisekundi ali dveh. Bo pa trajalo nekaj časa, da bo Omejitev postala 1. Lahko jo tudi hitreje zmanjšuješ (recimo za 5 naenkrat):
if(Omejitev > 1) Omejitev--;
if(Omejitev > 20) Omejitev = Omejitev - 4;


Če imaš lcd, prikazuj čas cikla glavne loop() zanke.
Koda:

void Setup
{
...
miliZdaj = millis(); // unsigned long spremenljivka
} // void Setup()

void loop()
{
  miliStar = miliZdaj; // unsigned long spremenljivka
  miliZdaj = millis(); // trenutna vrednost
  Prikazi_na_lcd (milizdaj - milistar) // razlika = trajanje loop()
...
} // void loop()

Avtor: ElGrigonKraj: okolica Lenarta PrispevekObjavljeno: Pon Maj 13, 2019 10:08 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Danes sem zaprl cel modul v kovinsko ohišje, ozemljil, povezal še oplet termočlena, nič bolje...Za povrh sem dal preko vsega še kovinsko škatlo. Odklopil sem še grelec, da ni PWM signala po vodnikih.

Ali je oplet sploh v tem primeru učinkoviti?
Oplet je sicer od kabla, bi moral biti zelo tesen? Vodnikov se sicer ne vidi, toliko pokrije ampak ni pa stisnjen, ker sem ga navlekel na vodnike in nato zaključil pred bunkico s tulko in pri priključkih s termoskrčko od koder je speljan tudi vodnik za GND.

Kupljen opleten termočlen pa ne bo veljal za ta čip.

Avtor: igoKraj: Krško PrispevekObjavljeno: Pon Maj 13, 2019 11:12 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Jaz imam prave industrijske K termočlene z original kovinsko cevko na koncu in ustreznim kovinskim pletenim opletom od www.prelovsek.si .
Pri naročilu sem poudaril, da morajo biti galvansko ločeni in se potem bunkica cevke ne dotika direktno, ampak je vmes cevka iz steklene tkanine.
Izmerjena temperatura je ista, le odzivnost na hitre spremembe je malce manjša, ker se mora bunkica segreti skozi tkanino. A pri meni niso možne hitre spremembe, ampak največ 5 °C na minuto za gor in za dol, meritev je pa vsaki 2 sekundi.
Oklep sond je do 5 cm pred sponkami modulov. Za prehode skozi kovinsko dozo sem pa kar 7-krat polkrožno popilil dozo in pokrov in sonde na tesno stisnil vmes, vsako skozi svojo zarezo.

Naredil sem eno tiskanino, na katero paše 8 modulov (1 za rezervo), s 74HC595 izbiram ChipSelect, ... cela komunikacija v obe smeri je dvignjena na 24 V in gre potem še dodatne 3 metre do tiskanine, na kateri je nataknjen Arduino, tam pa je spet poskrbljeno za pretvorbo iz 24 V na 5 V oziroma obratno. Ampak komunikacija je precej robustna in Arduino prejme tisto, kar so moduli poslali.

Je pa res, da nisem nikoli preveril posameznih bitov odčitka tudi z galvansko neizolirano sondo. Bit za NapakoKratkegaStika bi preprosto ignoriral, če bi le bili ostali biti v redu. Tudi oplet bi povezal na GND modula, da ne bi prišlo do kakšnih razlik potencialov, ... a ne vem, kaj bi se dejansko zgodilo.


Do kolikšne temperature greješ?
V skrajnem primeru preveri tudi kak
https://www.analog.com/en/products/ad8495.html#product-overview
ali kak podoben namenski čip za termočlene ter en 16-biten ADC s SPI ali I2C izhodom. Namenski čip in ADC sta v vseh sodobnih industrijskih termoregulatorjih in ne potrebujejo galvansko ločene sonde.
Ali pa kupi najcenejši kitajski termoregulator, ki ima tudi možnost serijske komunikacije za nastavljanje parametrov in Setpointa ter branja izmerjene temperature.

Avtor: Peter123Kraj: Lj. PrispevekObjavljeno: Tor Maj 14, 2019 7:33 am    Naslov sporočila:  
----------------------------------------------------------------------------
@ElGrigon
Če boš naložil slike ti lahko bolje pomagamo.

Avtor: ElGrigonKraj: okolica Lenarta PrispevekObjavljeno: Tor Maj 14, 2019 7:56 am    Naslov sporočila:  
----------------------------------------------------------------------------
Razmišljam, če bi še poskusil z max31856.

Avtor: ElGrigonKraj: okolica Lenarta PrispevekObjavljeno: Tor Maj 14, 2019 2:01 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Samo to še me zanima. Ali je možno, da je software spi bolj izpostavljen motnjam kot hardware spi?
Uporabljam namreč software spi.

Avtor: igoKraj: Krško PrispevekObjavljeno: Tor Maj 14, 2019 2:46 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Vir SPI ni pomemben. Jaz sem sam napisal podprogram za SPI z dovolj dolgimi zakasnitvami, da je na sprejemni strani zanesljivo prebrano natanko tisto, kar je na oddajni strani poslano. Rezultat je enak ne glede na dolžino zakasnitev (imam nastavljivo 0 do 10ms pred vsakim digital... R ali W znotraj for zanke).

SPI je čisto enostaven. Kar v zanki se spreminja stanja pinov z digitalWrite in se jih bere z digitalRead. Lepo napolniš 32-bitno spremenljivko in potem s shiftanjem in maskiranjem iz nje pridobiš potrebne bite.

Avtor: ElGrigonKraj: okolica Lenarta PrispevekObjavljeno: Sre Maj 22, 2019 6:38 am    Naslov sporočila:  
----------------------------------------------------------------------------
Zamenjal modul z MAX31856 in zadeva dela. Telefon ga niti malo ne moti, tudi brez opleta na kablih.

Moti me edino le dolgi čas pretvorbe. V osnovi imajo v knjižnici neki delay (MEME fix?) 250ms pri vsakem odčitku + 169ms pretvorbe.
Glede na dolžino kode v programu sem ta delay terminiral.

Stran 2 od 2

Powered by phpBB © 2001,2002 phpBB Group