Fórum témák
» Több friss téma |
Üdv !
Segítségeteket szeretném kérni a következő problémára: Adott egy NI1000 Tk5000 hőérzékelő. Ellenállása 0 °C-on 1000 Ohm, a karakterisztikája nem lineáris. Az adatlapon megadnak hozzá egy polynom egyenletet, de az sajnos nem jó, mert ott a hőmérsékletből adja vissza az ellenállás értéket, nekem meg fordítva kellene. Ellenállást tudok mérni és ebből kellene kiszámolni a mért hőmérsékletet. A derive programmal már csináltam egy inverz egyenletet, ami jól is működik, de sajnos akkora számokkal dolgozik amelyekkel lehetetlenség lenne mikrokontrollerben számításokat végezni. A táblaként való letárolás sem lenne jó, mert -50 és +200°C tartományban 0.01 fokos pontossággal már tetemes méretű adathalmazt kellene letárolni és minden mérésnél végignyálazni. Itt az egyenlet, ami hőmérsékletből számít ellenállást: A = 4.427 * (10 ^ -3) " Tíz a mínusz harmadikon" B = 5.172 * (10 ^ -6) C = 5.585 * (10 ^ -9) D = 0 R0= 1000 "0 °C -on 1000 ohm az ellenállásunk" R=R0 * (1 + A * T + B * (T ^ 2) + C * (T ^ 3) + D * (T ^ 4)) Találtam NI1000-ből olyan verziót ahol megadják az ellenállás-hőmérséklet egyenletet is, de az nem Tk5000, tehát más a karakterisztikája. Segítségeteket előre is köszönöm.
De szép téma lesz ez. Kíváncsi vagyok a megoldásra.
Ha D = 0 van értelme foglalkozni a Idézet: -vel?„D * (T ^ 4)” G,
Nincs, de így volt megadva, nem akartam az eredetitől eltérni.
Én az ilyen szintű matekot nem vágom.
Én se... :S csak a józan paraszti logikám kínzom hátha kisül belőle valami.
Nécsak, ha a d-s tagot elhagyjuk kapunk egy harmadfokú egyenletet. Ezzen szted nem lehet kezdeni valamit? wiki
Hi!
Irj rá közelitést intervallumfelezgetéssel. Kiszámolod 75C-ra, ha több az R akkor a felsö intervallum közepét veszed, ha kevesebb akkor az alsóét. Ha mondjuk több akkor kiszámolod (75+200)/2 C-re az R-t és igy tovább. 16 lépés után megvan az eredményed.(log 2 25000 + 1 a kerekités miatt)
Nem értem hol van ebben a polynom ? (mondom ilyen szinten már nem tudok többet mint egy óvodás).
Azért kell a polynom, mert nekem pontos értékek kellenek, a húrozás, közelítés csak akkor volna pontos, ha a görbe lineáris lenne.
Itt egy adatlap aminek a 2. lapján ott a rémegyszerű megoldás, de sajna a karakterisztika ennél más, ez nem jó a Tk5000-eshez.
Nem tudom, hogy az A,B,C miből keletkezik, gondolom az egyiknél a hőmérséklet táblának bizonyos pontjai, a másiknál az ellenállás táblának egyes pontjai, attól függően, hogy mit akar kiszámolni az ember.
Szerintem gege azt akarta mondani, hogy nem kiszámolod a harmadfokú képlet x jeit ami neked a T lesz,
hanem egyszer kiszámolsz egy R értéket 20 fokra 100ra 200ra. Van egy R1 ed amit mérsz. ha R1 nagyom mint R20 de kissebb mint R100 akkor számolsz Rx et 50 fokon. Rx et hasonlítod R1 el ha nagyobb R1 akkor melegebb mint 50 fok. számolsz 75 ön. ha kisebb 60 on. Ezt megcsinálod 16 szor és eléred a letárolható legpontosabb értéket amit csak abban a számformátumban letárolni le lehet. Egyszerűbb mint opni a megoldóval. és szerintem gyorsabb is. nem? G, U.I. inkább olyan kapcsolás kéne neked mint ami az adatlap végén van. Megannyi sok számítást spórolnál meg vele.
Hát az a kapcsolás az minden csak nem mérés.
Értem, de akkor is jobban örülnék a polinomnak, hátha valaki tudja a megoldást. Letárolni akár le tudnám °C fogonként is, és akkor már csak a tizedeseket kellene közelíteni nem? A kapcsolásommal semmi baj nincs 4 vezetékes ratiometrikus 16 bites dualslope konverterrel, az iparban a leggyakoribb mérési mód, és nemigen lehet ettől jobbat csinálni házilag, gyakorlatilag zavarérzéketlen és a vezeték hosszból adódó ellenállást sem méri bele a körbe, ráadásul mondjuk 16 csatornára már elég olcsó is. Az a kapcsolás ami a rajz végén van 30m-es vezetéken összeszedné az összes zajt és a mért érték nem is látszana belőle. Azt a kapcsolást senkinek nem ajánlom, csak ha mondjuk pár cm-re van a szenzor a méréstől.
Amit irtam az a polinom-egyenletet oldja meg, a 16 lépénsnél 0,005C-nál kisebb hibával.
Leirom az algoritmust: bemenet : R0 : a mért érték T0 = 75 // kezdő tipp a hőmérsékletre T1 = -50 T2 = 200 r(t) - a polinomot kiszámoló függvény t C-ra megdja az R-t ciklus 16-szor { R = r(T0) if ( R > R0 ) T1 = T0 ; T0 = (T0 + T2)/2 else T2 = T0 ; T0 = (T0 + T1) /2 } a kimenet : T0 a hömérséklet 0,005C-nál kisebb hibával. A számok persze végig elöjeles lebegöpontosak.
Üdv.
Idézet: „ 4 vezetékes ratiometrikus 16 bites dualslope konverterrel ” Milyen A/D típust használsz ? Imi.
Ja értem már !
Én is hasonlóval próbálkoztam, csak falusi módszerrel. A hőmérsékletet addig pörgettem, amíg meg nem egyezett, a mért ellenállással. Ez amit írtál valóban sokkal jobb. Leprogramozom a devcpp-ben és megnézem, hogy muzsikál, utána már csak átkopyzom az mplabba és kész. Ezekszerint nem láttam a fától az erdőt? jym: a konverter: MAX132. Vagy ha elég 12bit+ pol akkor jó a 7109-es is, nekem az is jól működik, csak baromi nagydarab és smd-ben már nem kapható.
Tuti jó ez így?
Igaz csak VB-ben progiztam le, mert ott már megírtam a polinomot ellenállásra, de ezzel a módszerrel -49.9999 és 199.999 köszött ugrik egyet. (az értéket egy csúszkával adom be neki.)
Üdv.
Idézet: „ MAX132 ” Ok, nekem is kell majd hasonló. Egyébként, ha nem boldogulsz a számítással, akkor a következőt javaslom: - használj táblázatos módszert, írj egy rövid C-s progit, ami kiszámolja neked az R/T párokat a kívánt tartományra, a kívánt felbontásban, tehát mondjuk -50...+200C-ra 0.01 bontásban =>100*250 = 25.000 pár - azt írod nincs elég RAM: ez valószínű így is van, de akkor tárold FLASH-ben vagy külső EEPROM-ban (I2C vagy SPI) a táblázatot, ha mindkettőt 16 biten tárolod, akkor 25.000*4byte = 100.000 byte + progi, így 128k FLASH kellhet, vagy 1 MBit EEPROM - úgy tudsz lebegőpontos számot egyszerűen 16 bites egészben tárolni, hogy *10 vagy *100, tehát pl a 199,99 Celsius 19999 érték lesz A külső EEPROM-os megoldás azért is jó, mert mivan akkor, ha nem tudsz pont ugyanolyan karakterisztikájú Ni1000-et szerezni mondjuk 1 hónap múlva ? Akkor foglalatba rakod az EEPROM-ot, otthon beleprogramozod az új táblázatot az új karakterisztikának megfelelően, aztán kimész, beleteszed, és kész Imi.
Igazad van, a if ( R > R0 )-ben forditva kell tenni a hasonlitást, helyesen if ( R < R0 ). Remélem több hiba nincs benne.
OK ! Köszönöm, így már tökéletes, tiéd a pont !
jym: Nagyon igaz amit mondtál, csak sajnos a panel már kész van, és csak egy eepromot használok, a TCP-nek, meg egyéb millió paraméternek a szenzorokról. Elvileg elférne benne, de mi van ha megsérül egy ilyen nagy adatmennyiség? Jobb szeretek számolni. De legközelebb nem spórolok az eeprommal. ![]() Az érzékelő már megvan mind. Ha meg változik a karakterisztika, akkor távoli elérésben átállítom a polinom ABCD értékeit az új szenzorra és már megy is tovább. Ja egyébként max132 - t tudsz rendelni mintába, 3-3 darabot, pl. én dipesből és smd-ből is kértem és 2 hét alatt elküldték. Nem mindegy az ára miatt. ![]() |
Bejelentkezés
Hirdetés |