Témakör:
Építsünk 8 bites hőkamerát
Megjelent: 2020. augusztus 11.
Olcsó, kis felbontású hőkamera
8 bites MCU-val
Ha egy valósidejű kamera megvalósítása a feladat, általában csak csúcskategóriás, 32 bites, gyors processzorral merünk nekivágni a megoldásának – már csak a képfeldolgozás végrehajtása miatt is. Enyhébb specifikáció esetén, az adottságok maximális kihasználásával azonban még egy „filléres” nyolcbites is elegendő lehet – amint azt a Microchip esetleírásából is láthatjuk.
Arizonában, ahol élek, egyre több nyugtalanító hírt hallunk az autópályákon rossz irányba hajtó autóvezetőkről.
A zavart idegállapotban levő vagy más okból döntésképtelen autóvezetők néha a kötelező haladási iránnyal ellentétesen hajtanak fel az autópályákra, veszélyeztetve ezzel más autósok életét. Az ilyen rossz irányú sávhasználat eseteinek csökkentéséért dolgozó Arizonai Közlekedési Hatóság (Arizona Department of Transportation) egy olyan termikus képalkotáson alapuló rendszert fejleszt és tesztel, amely képes érzékelni a rossz irányban közlekedő járműveket, figyelmezteti a veszélyhelyzetre a többi jármű vezetőjét és a közlekedésrendészeti hatóságot. A hőkamerákat az autópálya-felhajtóknál és az autópálya mentén telepítik, és ha a rendszer rossz irányban közlekedő járművet észlel, a hőkamerák folyamatosan követik az útját, és elküldik annak pozícióját a közlekedésrendészeti szerveknek, valamint villanófényekkel és az út feletti fényújságokkal hívják fel a többi járművezető figyelmét a veszélyhelyzetre.
A termografikus kamera (más néven infravörös, IR vagy hőkamera) alkalmas arra, hogy az infravörös tartománybeli képeket az általunk is látható fényspektrumba transzformálva jelenítse meg. A hőkamerákat eredetileg katonai felhasználásra fejlesztették, és a koreai háborúban használták először. Jelenleg a katonai felhasználáson kívül kereskedelmi, ipari és személyes használata is elterjedt.
Ezeknek a kameráknak a megvalósításához gyakran a legkorszerűbb, 16 vagy 32 bites mikrovezérlőket (MCU-kat), vagy ezek kombinációit alkalmazzák. Mivel én a Microchip Technology 8 bites alkalmazástechnikai csoportjánál dolgozom, érdekelt a kérdés, hogy vajon lehetséges-e egy olcsó, kis felbontású hőkamerát felépíteni 8 bites mikrovezérlő felhasználásával.
Az elektromágneses sugárzás
Ahhoz, hogy egy hőkamera működését megérthessük, értenünk kell a leképezésre felhasznált elektromágneses, infravörös sugárzás mibenlétét.
Bármilyen anyag bocsát ki magából elektromágneses sugárzást, amennyiben a hőmérséklete magasabb az abszolút nulla foknál (0 K vagy -273,15 °C). Ez a termikus sugárzás néven ismert jelenség annak a következménye, hogy az anyagok termikus energiája elektromágneses sugárzássá alakul, amely akár az infravörös, akár a látható fény spektrumában is megjelenhet.
A látható fény az elektromágneses sugárzásnak az a részspektruma, amely az emberi szemmel is érzékelhető. Tipikusan ide soroljuk a 400…700 nm hullámhossztartományba eső elektromágneses hullámokat. Az infravörös sugárzás ellenben láthatatlan az emberi szem számára, és a 700 nm-től 1 mm-ig terjedő hullámhossztartományú elektromágneses sugárzást soroljuk ide.
Azoknak a tárgyaknak a termikus sugárzása, amelyek termodinamikai egyensúlyban vannak a környezetükkel, feketetest-sugárzásnak tekinthető. A szobahőmérséklethez (25 °C) közeli hőmérséklettartományú testek termikus sugárzása az infravörös spektrumba esik.
A fekete test egy idealizált fizikai objektum, amely elnyel minden ráeső elektromágneses sugárzást, pontosabban minden olyan sugárzást, amellyel kölcsönhatásba kerül. A természetben persze nem fordulnak elő ideális fekete testnek tekinthető objektumok.
A fogalmat még a legjobban a – csillagászatban és a kozmológiában ma sokat emlegetett – fekete lyukak közelítik meg, amelyek minden rájuk eső sugárzást elnyelnek, de nem feltétlenül vannak termodinamikai egyensúlyban a környezetükkel.
Ha egy fekete test termikus egyensúlyban van (állandó a hőmérséklete), az ún. feketetest-sugárzást bocsát ki magából Planck sugárzási törvénye szerint, amely az elektromágneses sugárzás energiaeloszlását egy adott hőmérsékletű fekete test által kibocsátott sugárzás frekvenciaspektruma segítségével írja le. Más szavakkal, egy fekete testnek tekinthető, állandó hőmérsékletű tárgy olyan sugárzást bocsát ki, amely a frekvencia függvényében jellegzetes amplitúdóeloszlást mutat, amely egyedül a tárgy hőmérsékletétől függ, anyagösszetételétől vagy alakjától teljesen független.
A valóságos objektumok – mivel tökéletes fekete testként viselkedő valós fizikai testek nem léteznek – az elméleti fekete test sugárzásának egy bizonyos töredékét sugározzák ki. Ezt a töredéket nevezzük az objektum emisszióképességének, és annak jellemzésére használjuk, milyen hatékonysággal bocsát ki a test hőmérsékleti sugárzást. Egy ideális fekete test felületének emisszióképessége 1, ami azt jelenti, hogy minden elektromágneses sugárzást – ami a fekete test felületével kölcsönhatásba kerül – a fekete test elnyel. A másik véglethez közelít a fényezett ezüstfelület, amelynek emisszióképessége mindössze 0,02, amely azt jelenti, hogy majdnem az egész elektromágneses sugárzás – ami a test felületét éri – szóródik vagy visszaverődik, és csak nagyon kis része (kb. 2%-a) nyelődik el. Mint említettük, infravörös sugárzásnak nevezzük az olyan elektromágneses sugárzást, amelynek hullámhossza 700 nm és 1 mm közé esik. Ez a hullámhossztartomány láthatatlan az emberi szem számára, de hősugárzásként mégis képesek vagyunk észlelni.
Például a nap által kisugárzott energiának nagyjából a felét az infravörös sugárzás teszi ki, amelyet ugyan a szemünkkel nem érzékelhetünk, de hőérzetet okoz, ha napfény éri a testünket.
A hőkamera alkatrészei
Az általunk tervezett hőkamera a következő három fő hardveralkatrész köré épül:
-
Panasonic Grid-EYE® infravörös érzékelő
-
Varitronix COG-C144MVGI-08 grafikus megjelenítő LCD modul
-
PIC18F27K42 8 bites mikrovezérlő
Az infravörös jel detektálását a Grid-EYE® szenzor végzi. Ez egy 8 × 8 képpontból (pixelből, összesen tehát 64 db-ból) álló, négyzetesen elrendezett infravörös érzékelőtömb, amelynek érzékelőit mikro-elektromechanikai (Micro-Electro-Mechanical System – MEMS) technológiával valósították meg. Az érzékelőtömb elemi érzékelőit hőelemek alkotják. Minden ilyen hőelem két különböző vékony vezetősávot tartalmaz, amelyeket eltérő termofeszültség jellemez. A két vezeték az egyik végén elektromosan csatlakozik egymáshoz: ezt nevezzük a hőelem melegpontjának. A vezetékek másik vége (termikus értelemben) egy hőelvonó hűtőfelülethez csatlakozik, ez a hidegpont. A melegpont termikusan egy nagyon vékony, az infravörös sugárzást jól elnyelő membránnal érintkezik, amely közös mind a 64 hőelemre nézve. Ha hőmérsékletkülönbség keletkezik egy-egy hőelem meleg- és hidegpontja között, egy kismértékű elektromotoros erő (Electromotive Force – EMF, lényegében elektromos feszültség) keletkezik a két különböző fém hidegpontja között, amely ezáltal mérhető, és hőmérsékletkülönbséggé számítható át. Ezt a jelenséget szokás Seebeck-hatásnak nevezni.
1. ábra A Grid-EYE® érzékelő egyszerűsített tömbvázlata a főbb belső részegységek feltüntetésével
Az érzékelő I2C-buszon kommunikál a rendszervezérlővel, legfeljebb 400 kbit/s adatsebességgel. Az érzékelőbe integrálva található még egy analóg jelerősítő, egy analóg/digitális átalakító (ADC), és egy termisztor (1. ábra).
A szenzor működése azzal kezdődik, hogy elnyeli a nagyjából 60 fokos látószögben érkező termikus infravörös sugárzást. A leképezést egy integrált, szilícium-alapanyagú lencse végzi, amely egyben optikai szűrőként is viselkedik: csak az 5 és 13 μm hullámhossztartományú, távoli infravörös sugárzást engedi át.
A lencsén átjutó infravörös energia a hőelemtömb 64 elemi érzékelőjén nyelődik el. Minden ilyen érzékelőelem az általa elnyelt infravörös energiát az intenzitással arányos analóg feszültségjellé alakítja át. Ezek a jelek tipikusan a néhány mV-os nagyságrendbe esnek, amely túl kicsi ahhoz, hogy az energia kis változásait is mérni lehessen. Ezért minden érzékelőelemhez egy jelerősítő csatlakozik, amely révén az érzékelt jelet nagyobb felbontással lehet mérni. Az erősített jel egy analóg/digitális átalakítóra jut, amelynek referenciafeszültsége a beépített termisztor által mért hidegponti hőmérséklettel arányos. Az ADC a jelet 12-bites (11 bit + 1 előjelbit) tartományú digitális adattá konvertálja. Mind a 64 képponthoz saját külön hőmérséklet-regiszter tartozik, amely az adott képpont hőmérsékletével arányos digitális értéket tárolja. Ezeket a hőmérséklet-regisztereket tudja végül a mikrovezérlő kiolvasni az I2C-buszon keresztül.
Az LCD-modul színes szupercsavart nematikus (Color Super-Twist Nematic – CSTN) LCD technológiájú, amelynek képpontjai passzív mátrixcímzéssel érhetők el. A CSTN LCD-ben egy pixelt sor- és oszlopjelekkel lehet közvetlenül megcímezni, és a pixel be- vagy kikapcsolt állapotát kapcsoló vagy kondenzátor nélkül kell fenntartani. Minden látható pixel három fizikailag elkülönített alpixelre van felosztva, amelyek pixelenként vörös, kék és zöld színszűrővel vannak ellátva a színes megjelenítés érdekében. A megjelenítő háttérvilágítását fehér ledes megvilágítórendszer adja, amelynek fénye minden alpixelen áthalad. Az egyes alpixeleken áthaladó fény intenzitását a megjelenítő LCD-vezérlője határozza meg, amely révén pixelenként közel 65 ezer egyedi szín jeleníthető meg. A meghajtást egy Samsung S6B3306 LCD meghajtó áramkör vezérli, amely a megjelenítőmodulba van integrálva. A meghajtóáramkör egyszerűsíti a mikrovezérlő és a megjelenítő illesztését, amelynek köszönhetően kevesebb csatlakozóvezetékre van szükség.
Az LCD-megjelenítő 65 ezer színű megjelenítésre van konfigurálva.
Ebben az üzemmódban a 16 bites pixelvezérlő kódszó bitjei a szabványos RGB565 színmegjelenítési formátumnak megfelelően vannak felosztva. Az RGB565 formátumban a 16 bites pixelinformáció 5 bitje (<15:11> bittartomány) adja a vörös színinformációt, a zöld 6 bitjét a <10:5>, a kék 5 bitjét pedig a <4:0> bittartomány határozza meg (2. ábra). Az RGB565 formátum azért használ eggyel több bitet a zöld szín megjelenítésére, mert az emberi látás érzékenyebb a látható spektrum zöld tartományában.
2. ábra A 16 bites pixelinformáció felosztása az RGB565 színformátum-szabvány szerint
A PIC18F27K42 mikrovezérlő arra szolgál, hogy beolvassa a hőmérsékletadatokat a szenzorból, elvégezze a képfeldolgozást és továbbítsa a színes képinformációt az LCD-megjelenítőbe. A kamerához a mikrovezérlő alábbi perifériáit használtuk fel:
-
Timer1
-
Direct Memory Access (DMA)
-
I2C
-
SPI
A Timer1 egy 16 bites előreszámláló, amelyet a hőkamera-alkalmazásban egy 15 másodperces késleltetés létrehozására használunk.
Amikor a kamerát hosszabb idő után bekapcsoljuk, és a Grid-EYE® érzékelőt az alkalmazás követelményeinek megfelelően konfiguráljuk, 15 s késleltetésre van szükség ahhoz, hogy a rendszer termikusan stabilizálódjon. Ahelyett, hogy egy szoftveresen generált „delay” (késleltetés) funkciót használnánk, amely a kívánt időtartamra felfüggeszti a program végrehajtását, a Timer1 hardver időzítőt használjuk ugyanerre a célra. Mivel a Timer1 a háttérben, a programfutástól függetlenül működik, a programkód végrehajtása folytatódik, lehetővé téve, hogy a processzormag a késleltetés tartama alatt más szoftverfunkciókat hajthasson végre ahelyett, hogy 15 másodpercen át egy szoftverrel generált előreszámlálással legyen elfoglalva.
A közvetlen memória-hozzáférést vezérlő DMA-modul teszi lehetővé, hogy a PIC mikrovezérlő különböző memóriatartományai között a CPU közbeavatkozása nélkül történhessen adatátvitel.
A DMA kiküszöböli azt az igényt, hogy a CPU-nak programmegszakításokat kelljen lekezelnie a programozott adatátvitel végrehajtásához, és ezzel lehetőséget ad a CPU-nak, hogy az adatátvitel közben zavartalanul hajthasson végre más feladatokat.
A kameraalkalmazásban a DMA szerepe a képfájl továbbítása a programmemóriából az LCD-be a Grid-EYE® érzékelő stabilizálódásához szükséges 15 másodperces késleltetés közben. Az I2C modul szinkron soros kommunikációt tesz lehetővé a mikrovezérlő és más I2C-kompatibilis rendszerelemek között. Az I2C-modult használjuk a Grid-EYE® szenzor konfigurálása során, valamint a hőmérsékletadatok kiolvasására, 100 kHz-es buszfrekvenciával.
A szenzor pixeladatainak továbbítása a pixelregiszterek blokkos kiolvasásával történik. Minden pixelregiszter egy 12 bites hőmérsékletadatot tartalmaz két bájtra bontva, és ez a 64 pixel adatainak teljes kiolvasásakor egy 128 bájtos blokkolvasást igényel. Szerencsére a pixeladatok szekvenciálisan címezhetők, ami azt jelenti, hogy az I2C-buszon mindössze egyetlen memóriacímet, a célterület kezdőcímét kell átküldeni egyetlen regisztercím kíséretében, és az I2C önállóan, egyetlen tranzakció keretében hajtja végre a teljes 128 bájtnyi adat blokkos kiolvasását. Miután a soron következő pixelregiszter tartalma továbbítódott, a szenzor automatikusan továbblépve a következő regisztercímre mutat, ennek köszönhetően nem kell új kommunikációs csomagot indítani minden egyes alkalommal a következő pixelregiszter kiolvasásához.
A PIC18F27K42 mikrovezérlő SPI-buszkommunikációs modulja segítségével történik az LCD konfigurálása és a képinformáció átírása. Az SPI-modul „csak adásra” (transmit only) van beállítva 8 MHz-es buszórajellel (SCK). A „csak adásra” konfigurált üzemmódban egyirányú átvitel valósul meg az adó (master) és a vevő (slave) eszköz között anélkül, hogy a masternek olvasnia kellene a saját SDI-bemenetére érkező jeleket. Minden teljes kép 17 434 db 16 bites szóból álló adatkeretben továbbítódik, ami azt jelenti, hogy az SPI-buszon keretenként (képkockánként) 34 868 db 8 bites bájtot kell átvinni. Amint az könnyen belátható, még ha minden egyes bájtátvitelnél csupán egyetlen utasításciklusnyi időt takarítunk is meg, az 34 868 utasításciklusnyi idővel rövidíti meg minden képkocka átviteléhez szükséges időt, ami azt jelenti, hogy az SPI-n át sokkal gyorsabban történik meg a képtartalom átírása az LCD-be. Ez segít abban, hogy a kép megjelenítése kevesebb késletetéssel kövesse a leképezett látványt.
Amikor a PIC mikrovezérlő már beolvasta az egy képkockához tartozó összes hőmérsékletadatot, egy képfeldolgozási műveletet kell végrehajtania annak a képnek a létrehozásához, ami aztán az LCD-be továbbítódik a megjelenítés érdekében. A képfeldolgozó szoftver állítja elő a 64 pixeles felbontású szenzoradatokból a kijelzési képet leíró adatokat. Ha ezt a 64 pixeles adatmennyiséget közvetlenül jelenítenénk meg az 1,44 hüvelyk (kb. 37 mm) képátlójú LCD-n, a kép túl kicsi lenne ahhoz, hogy jól láthassuk. Emiatt – ahhoz, hogy a képet jól láthassuk – azt a teljes LCD-re ki kell terjesztenünk.
Lineáris interpolációnak nevezzük azt az eljárást, amely segítségével két ismert pontot összekötő egyenes mentén megkeresünk egy harmadikat, amely a két ismert pont elhelyezkedésére jellemző. Más szavakkal a lineáris interpoláció azt az információt hasznosítja, amellyel ki lehet egészíteni a kép kiterjesztéséhez szükséges, hiányzó információt. Ebben a kamerában a bilineáris interpolációnak nevezett módszert használjuk. Eszerint a szoftver veszi négy szomszédos pixel adatát, mindegyikhez társít egy skálatényezőt, átlagolja a négy skálázott pixel értékét, és ez adja az újonnan létrehozott, interpolált pixel értékét. A skálatényező attól függ, milyen távol van az újonnan generált pixel az eredetitől: minél nagyobb ez a távolság, annál kisebb a skálatényező (3. ábra).
3. ábra Példa egy 8 × 8-as adattömb 32 × 32-es tömbbé való kiterjesztésére
A lineáris interpoláció tehát ismert értékek alapján ad becslést egy ismeretlen képpont értékére, de nem garantálja, hogy ez az érték pontos lesz. Más szavakkal, ha például a két ismert képpont közötti ismeretlen érték egy objektum élét tartalmazza, az éles határvonal helyett az interpoláció egy kevésbé jól definiált, „életlen” határvonalat jelenít meg.
Ha szeretné maga is megépíteni ezt a kamerát, keresse fel az AN2773 jelű Microchip alkalmazástechnikai útmutatót (http://www.microchip.com/wwwAppNotes/AppNotes.aspx?appnote=en607467), amelyben részletesebb leírást talál a kamera alkatrészeiről és azok működéséről. A szoftver teljes forráskódja pedig megtalálható a Microchip weblapján az „MPLAB® Xpress Code Examples” menüpont alatt.
Szerző: Chris Best – Microchip Technology, Inc.
www.microchip.com
még több Microchip