Adatgyűjtőkártya Infraszenzorral

A Fizipedia wikiből



Tartalomjegyzék


Bevezetés

E gyakorlat célja adatgyűjtő kártyán keresztül egy IR adóvevőhöz és egy léptetőmotorhoz csatlakozni, és a kettő működését összehangolni, szabályozni, egy megfelelő felhasználói felület létrehozásával.

Ahogyan az Adatgyűjtő kártya programozása mérésleírásban is szerepelt, a gyakorlat során a National Instruments cég által, kifejezetten oktatási célra gyártott NI myDAQ típusú mérőkártyát programozunk. A mérőkártya USB porton keresztül vezérelhető, funkcióit Visual C# környezetben a NI DAQmx driver segítségével érhetjük el, ez ingyenesen letölthető a következő linken: DAQmx. A kártya működését az NI Measurement & Automation Explorer (MAX) program segítségével ellenőrizhetjük.


IR fotoszenzitiv.png
1. ábra. A mérési összeállítás vázlata. A léptetőmotor forgó mozgásnak átalakítását egy lineáris pozícionáló egység végzi, ez mozgatja az IR szenzort. Az átalakító igen kis mozgatásra képes, 350 \setbox0\hbox{$\mu$}% \message{//depth:\the\dp0//}% \box0%m-t tesz meg körbefordulásonként.

IR adóvevő

A szenzor adatlap szerint 4-30 cm-es távolságon belül képes detektálni reflektív felületeket. Az IR adóvevő egy IR LED és egy fotoszenzitív dióda segítségével saját visszavert jeléből egy feszültségjelet generál, ami távolságfüggő. Figyelem, a távolságfüggés nem lineáris a teljes mérési tartományban! A környezeti tényezők (hőmérséklet, zajforrások) elvileg nem befolyásolják nagy mértékben a detektálás pontosságát. A készülék adatlapja elérhető itt.

IR szenzor.png
1. ábra. Az IR távolságmérő szenzor. A lábkiosztás 1 - Vout, 2 - GND, 3 - Vcc (+5V).

Léptetőmotor

A TRINAMIC - PD3-013-42 léptetőmotor az alumínium konzolra rögzített négypólusú mikrofoncsatlakozón keresztül vezérelhető. A négy pólusból háromra digitális jeleket küldünk a mérőkártyáról. Az egyik pólussal a motor ki és bekapcsolható (ENABLED), a másik pólussal a motor forgásiránya állítható (DIRECTION), a harmadik pólusra pedig egy rövid pulzust küldve a motor egy lépést tesz. A negyedik pólusra a digitális jelek földje (DGND) kerül. A mellékelt kábellel csatlakoztathatjuk a motort a mérőkártyához. A kábel színkiosztása: ENABLED - Kék, DIRECTION - Zöld, STEP - Narancs, DGND - Barna. A léptetőmotor nagyon kis elmozdulásokra képes. Sajnos a myDAQ kártyával nem tudunk hardveres szinten négyszögjelet generálni, ezért a pulzusokat egyenként kell kiadnunk a motornak szoftverből, ami korlátolni fogja annak az elérhető sebességét. A léptetőmotor tápellátását egy 24V-os adapter biztosítja, ezt ne felejtsük el csatlakoztatni az alumíniumkonzolhoz!

A kártya kezelése

Ha USB-n keresztül csatlakoztatjuk a készüléket, a kék LED-nek világítania kell. Ezután az eszközt a NI Measurement & Automation Explorerben (MAX) tesztelhetjük. Az eszköz a baloldali listában megjelenik My System / Devices and Interfaces / NI-DAQmx Devices / NI myDAQ:"myDAQ1" menüpontnál. A C# program írásakor a kártya idézőjelek közt található nevével hivatkozhatunk rá, ez valószínűleg myDAQ1" lesz. Jobb klikket adva a kártyára, elérhető egy tesztelőfelület melyen módosítani lehet a különféle analóg és digitális ki- és bemeneteken, ezzel tesztelhetjük egy hozzá csatolt készülék egyszerű működését, válaszát.

Ahhoz, hogy működhessen a kártya kezelése C# programból, a projekt referenciákhoz hozzá kell adni a NationalInstruments.DAQmx és NationalInstruments.Common csomagokat. Ezenkívül a forráskódban ahol a függvényeket használni akarjuk, ne felejtsük el a using NationalInstruments.DAQmx parancsot.

A gyakorlat során analóg és digitális jelekkel is dolgozunk a kártyáról. A csatornák használatát Task típusú objektumokkal valósítjuk meg. Ezeket deklarálni és inicializálni kell. Az analóg bemenetet egy AnalogSingleChannelReader objektummal kezeljük, a digitális kimeneteket pedig DigitalSingleChannelWriter-el. Az analog input tasket használjuk az IR szenzor jelének beolvasására (voltokban), ehhez meg kell adni a mérési határokat is. A mérés felbontása ezektől a határoktól függ, és a myDAQ \setbox0\hbox{$\pm10\,$}% \message{//depth:\the\dp0//}% \box0%V-os méréstartományra képes analóg módban, viszont az IR szenzorhoz alkalmazhatunk \setbox0\hbox{$0\,$}% \message{//depth:\the\dp0//}% \box0%V-\setbox0\hbox{$5\,$}% \message{//depth:\the\dp0//}% \box0%V tartományt.

A digitális kimenetekhez hozzunk létre Taskokat, majd a DigitalSingleChannelWriter objektumnak hívjuk meg a WriteSingleSampleSingleLine(true, value) függvényét, value helyett a kivánt logikai változót (true, false) helyettesítve. Egyik kimenettel a léptetőmotor irányát adjuk meg, a másikra pedig egy rövid impulzust téve a motort léptethetjük egy lépéssel. Ne felejtsük el, hogy ha helyesen szeretnénk egy Task-ot befejezni, akkor meg kell hívni a Dispose() függvényét. A leírtak megvalósításához komoly segítséget ad a példaprogram.

Feladatok

  1. Teszteljük a mérőkártya működését Measurement & Automation Explorerben! Változtassuk a reflektív felület távolságát a szenzortól és ellenőrizzük, hogy a beolvasott jelen észlelhető a változás.
  2. Ellenőrizzük a C# felületen is a működést, próbáljuk mozgatni a léptetőmotort egy adott irányba.
  3. Készítsünk egy olyan mérőprogramot, mely felveszi az IR szenzor távolság-karakterisztikáját. Ábrázoljuk az analóg jelválaszt arbitrális távolságban (motor lépések száma) egy ismert kezdőponthoz képest. Használjunk Timert a léptetésre és Dolgozzunk a karakterisztika monoton tartományában (d>4 cm)!
  4. Kalibráljuk a karakterisztikát valós távolságban! Mérjük le a szenzor-reflektor távolságot két szélső értékben, és ismerve a köztes lépések számát megkaphatjuk a karakterisztikus függvényt valós távolságban (pl cm-ben). Egy Labelben vagy Textboxban ábrázoljuk a jelenlegi távolságot a reflektorhoz képest, folyamatosan. A karakterisztika legyen folyamatosan látható grafikonon, és azon is ábrázoljuk egy jellel a jelenlegi helyzetét a szenzornak.
  5. Készítsünk egy Go-to funkciót a felhasználói felületre. Ha a karakterisztika már rögzítve volt, a felhasználó Textboxba megadja a kívánt pozíciót (pl cm-ben), és léptessük a motort a kívánt helyzetbe, majd álljunk meg ott, és jelezzük a felhasználónak (pl. Message boxban). Mivel a motort csak diszkrét lépésben mozgatjuk, úgy álljunk meg vele, hogy a mért jel a karakterisztikán az adott pozíciónál való értékhez legközelebb legyen.
  6. Készítsünk egy funkciót, mely a felhasználó általi indításakor rögzíti a jelenlegi pozíciót, és megpróbálja léptetőmotorból azt megtartani folyamatosan. Mozgassuk a mikrométerorsóval a reflektort, és ellenőrizzük a funkció működését. A karakterisztikát felhasználva egy grafikonon ábrázoljuk folyamatosan az eltérést az eredeti pozícióhoz képest az idő függvényében, amíg a funkció be van kapcsolva. A funkció ugyancsak felhasználó által legyen ki-bekapcsolható.

A mérésről készített jegyzőkönyv tartalmazzon egy használati utasítást az elkészült felülethez. Ismertessük a megvalósított funkciókat, a grafikus felület kezelését, valamint részletesen térjünk ki az olyan megoldásokra, amelyek nem a fentiekben meghatározott felépítést követik. A jegyzőkönyvhöz csatoljuk a mérőprogram forráskódját, valamint a jegyzőkönyv tartalmazza a felvett, kalibrált karakterisztikáját az IR szenzornak, valamint a követő funkció követési képességét (kitérés-idő grafikonok). Diszkusszióban tárgyaljuk a követő funkció teljesítményét, valamint azt, hogy hogyan lehetne javítani vagy gyorsítani rajta.