www.elektronik.si
Motnje telefona na Adafruit MAX31855

www.elektronik.si -> Arduino sekcija

Avtor: ElGrigonKraj: okolica Lenarta PrispevekObjavljeno: Čet Maj 09, 2019 9:37 pm    Naslov sporočila:  Motnje telefona na Adafruit MAX31855
----------------------------------------------------------------------------
Pozdrav,

Imam en čuden primer. Z Arduinotom merim temperaturo in krmilim grelec. Vse deluje OK dokler se ne približam z android telefonom. Zadeva se še poslabša, če aktiviram prenos podatkov (kak video).
Motnje vplivajo na odčitek temperature, ne vem ali vpliva na adafruit modul direkt ali se v arduinotu kaj zgodi.
Tudi če izklopim delovanje programa in je v standby mi naključno (1×min ali nekaj krat na minuto) proži PWM izhod na mosfet.

Mobitel ga moti že na razdalji 1m ampak ne tako očitno kot na recimo 20cm.

Se je kdo že s tem srečal?


Nazadnje urejal/a ElGrigon Pet Maj 10, 2019 9:34 pm; skupaj popravljeno 1 krat

Avtor: igo PrispevekObjavljeno: Pet Maj 10, 2019 12:07 am    Naslov sporočila:  
----------------------------------------------------------------------------
To imaš MAX31855 modul od Adafruit?
Njihov modul je neverjetno občutljiv na vse sorte RF motenj, saj pri dvostranski tiskanini nima nobene GND ploskve, ampak le tanke povezavice.
Osnovni problem je pa v butastem čipu, ki nenehno preklaplja sondo, da zaznava morebitno prekinjeno povezavo ali kratek stik med (+) in (-) žico sonde ter oklopom njenega kabla, namesto, da bi se posvetil svojemu osnovnemu namenu - merjenju temperature - morebitni okvari pa zaznaval le vsakih 10 ali več sekund. Zaradi izmeničnih razmer na sponkah sonde takorekoč ni dovoljena uporaba kondenzatorjev in dušilk za stabilizacijo izmerjene temperature.

Temperature gredo precej po svoje in meni jih ni uspelo stabilizirati drugače kot programsko.
Pa še to ne s povprečenjem vseh meritev, ampak se po prvih 250 izvedenih meritvah dodatno ignorirajo vse temperature, ki odstopajo za več kot 1°C gor ali dol od povprečja zadnjih 8 veljavnih meritev. V mojem primeru se temperatura nekaj 10 kilogramov železja ne more opazno spremeniti v 16 sekundah.

Glede ozemljitev in oklopljenih kablov imam module zaprte v kovinski dozi (Faradayeva kletka), zelo filtrirano napajanje, a se motnje nekako prebijejo noter.

Avtor: ElGrigonKraj: okolica Lenarta PrispevekObjavljeno: Pet Maj 10, 2019 7:26 am    Naslov sporočila:  
----------------------------------------------------------------------------
Točno tega imam ja. Če je to tako, je samo še za v smeti

Avtor: ElGrigonKraj: okolica Lenarta PrispevekObjavljeno: Pet Maj 10, 2019 9:32 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Ja. Sem poskusil sedaj oklopiti termočlen do bunkice in povezal na GND, pravtako namestil kondenzatorje na vsa napajanja, povezal GND na ozemljitev.
Če položim telefon zraven in zaženem kak video na youtube, prične meriti čudne vrednosti.
Kolikor berem po adafruit forumu imajo vsi podobne težave in nobeden ni prišel do dna.

Kaj še obstaja kak drug modul s termočlenom za adruino, ki dela zanesljivo?

Avtor: ElGrigonKraj: okolica Lenarta PrispevekObjavljeno: Pet Maj 10, 2019 10:22 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Nekaj se kaže. Dodal sem kondenzatorje kot priporočajo po datasheetu in ovil sem cel modul v alu folijo. Veliko bolje, anomalije le redke. Bo potrebno tega maxa v pločevino obleči, da bo mir.

Avtor: pajo PrispevekObjavljeno: Pet Maj 10, 2019 11:43 pm    Naslov sporočila:  
----------------------------------------------------------------------------
ElGrigon je napisal/a:

Kaj še obstaja kak drug modul s termočlenom za adruino, ki dela zanesljivo?


Nabavil sem MAX6675. Priključil enkrat testno na ESP32 in nisem opazil ničesar čudnega.
Je pa res, da je bil samo na mizi v delavnici in s termočlenom na zelo kratki povezavi (mogoče 0,5m).
V primeru, če te zanima in da rabiš nujno, daj na ZS.

Avtor: ElGrigonKraj: okolica Lenarta PrispevekObjavljeno: Sob Maj 11, 2019 12:03 am    Naslov sporočila:  
----------------------------------------------------------------------------
To je še starejša verzija, tudi težave kolikor sem bral.

Gledam pa MAX31856, ki ima malo več dodatkov za odpravo motenj. Kljub temu piše, da v "extremnih" pogojih bi moral cel modul kjer je čip obleči v kletko in uporabiti opletene žice termočlena.

Avtor: pajo PrispevekObjavljeno: Sob Maj 11, 2019 12:11 am    Naslov sporočila:  
----------------------------------------------------------------------------
Kako dolge imaš povezave od modula do kontrolerja?

Moram moj modul postaviti v "onesnaženo" okolje, da vidim, kako in kaj.

Avtor: ElGrigonKraj: okolica Lenarta PrispevekObjavljeno: Sob Maj 11, 2019 12:40 am    Naslov sporočila:  
----------------------------------------------------------------------------
Zaenkrat še z vodniki od arduinota, ampak te povezave ne delajo težav. Očitno je občutljiv sam modul, ker sedaj so motnje skoraj izginile. Oplaščeni vodniki termočlena niso kaj pripomogli. Največja razlika je bila, ko sem modul ovil z Al folijo. Povezave cca.10cm do arduinota so odprte.

Avtor: blay44 PrispevekObjavljeno: Sob Maj 11, 2019 12:17 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Sicer nimam izkušenj s tem čipom, vendar bi jaz vseeno dodal cca 2k upore v komunikacijske linije in znižal frekvenco prenosa.
Na hitro sem pogledal, da čip zmore do 5Mhz max. čas pretvorbe pa ene 200ms.

Avtor: ElGrigonKraj: okolica Lenarta PrispevekObjavljeno: Sob Maj 11, 2019 2:10 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Kaj bi spremenil z nižanjem frekvence? To misliš samplanje, komando iz mikrokontrolerja?

Lahko malo pojasniš prosim.

Avtor: blay44 PrispevekObjavljeno: Sob Maj 11, 2019 3:16 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Urni takt ckl in s tem hitrost branja/sprejemanja.
V beziku z config ukazom(clkDiv/ali speed pri soft. spi,).
V arduinu pa z spiSetting in SPI_CLOCK_DIVx
Bolj zanesljiv prenos dosežeš. Plus, zaključni upori proti plusu.
Seveda, če je problem v motnjah induciranih v kablih ali hitrost obeh naprav.

Avtor: blay44 PrispevekObjavljeno: Ned Maj 12, 2019 3:03 pm    Naslov sporočila:  
----------------------------------------------------------------------------
In?

Zdajle na deževni dan sem prebral tudi datasheet. Piše notri, da moraš na T+ in T- sponke senzorja dodati 10n kondenzator za filtrijanje.
Par uV je pa občutljivost. Torej se termopar zlahka prelevi v anteno.
Torej dober filter na vhodu.

Avtor: ElGrigonKraj: okolica Lenarta PrispevekObjavljeno: Ned Maj 12, 2019 3:53 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Ja, te kondenzatorje sem vse vključil (termočlen, napajanje IC). Pripravljam breadboard, da bodo povezave čim krajše.

Avtor: ElGrigonKraj: okolica Lenarta PrispevekObjavljeno: Pon Maj 13, 2019 7:36 am    Naslov sporočila:  
----------------------------------------------------------------------------
No, zmontirano na breadboardu s čim krajšimi povezavami. Spremenil sem tudi clock_division iz "4" na "8".
Pojma nimam kaj bi še poskusil razen, da dam modul v pleh.

Programsko sem poskusil shranjevati vsak odčitek v array in nato predložiti v PID povpreček. Ni uspeha, ker motnje ustvarijo očitno odstopanje in se pozna tudi s to metodo plus tega mi PID zaostaja oz. tista kalkulacija zavzame preveč ciklov.Bi moral zmanjšati array ampak kot pravim, da to ne pomaga.

Motnja ne sme biti prisotna.

Avtor: igo 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: pajo 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: igo 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: igo 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: igo 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: igo 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 1 od 1

Powered by phpBB © 2001,2002 phpBB Group