Jm 12.6 gcm^2 = 12.6E-7 kgm^2 rotor tehetetlenségi nyomatéka
8. A PCI 1784 számláló használata -- Motion control/Exercise 3 menüpont alatt található control/Exercise 3 menüpont alatt található
laboratóriumi mérési gyakorlat
A számlálót az enkóderből jövő jel beolvasására használjuk, amit aztán numerikusan megjelenítünk. A számláló értékét a TimerHandler függvény olvassa be, ami a valós óra minden jelére végrehajtódik.
8.1. A PCI 1784-es kártya inicializálása a DRV_DeviceOpen függvénnyel
Függvény hívása: status = DRV_DeviceOpen(DeviceNum, DriverHandle)
Rendeltetése: megszerzi az eszköz működtetéséhez szükséges paramétereket a regiszter ill. konfigurációs fájlból, és lefoglalja a memóriát a gyors hivatkozáshoz. Ezt a függvényt minden más függvény előtt meg kell hívni.
5.2. táblázat - Paraméterek
Név Irány Típus Tartomány Leírás
DeviceNum Input határozatlan hosszú alapértelmezett eszköz száma
DriverHandle Output long pointer alapértelmezett pointer a az
eszközhöz való konfigurációs
adatokhoz Eredmény:
1. SUCCESS, ha sikeres;
2. MemoryAllocateFailed, ha a memória allokáció hibás;
3. ConfigDataLost, ha a konfigurációs adat elveszett,
4. CreateFileFailed, ha egy alacsonyabb szintű drivert nem lehet megnyitni.
Megjegyzések:
1. Minden további függvény a DriverHandle által beszerzett konfigurációs adatok alapján hajtja végre az I/O műveleteket.
mérési gyakorlatok leírása)
2. Az I/O műveletek után a felhasználónak meg kell hívni a DRV_DeviceClose, hogy szabaddá tegye a DRV_DeviceOpen által allokált memóriát.
8.2. A számláló értékek visszaállítása a PCI 1784-es kártyán a DRV_CounterReset függvénnyel
Függvény meghívása: status = DRV_CounterReset(DriverHandle, counter) Rendeltetése: Kikapcsolja az adott számláló műveletet.
5.3. táblázat - Paraméterek
Név Irány Típus Tartomány Leírás
DriverHandle Input long alapértelmezett DRV_DeviceOpen
rendeli el
counter Input long alapértelmezett számláló csatorna
Eredmény:
1. SUCCESS, ha sikeres;
2. InvalidDriverHandle, ha DriverHandle = NULL;
3. BoardIDNotSupported, ha a függvényt nem támogatja az eszköz;
4. InvalidChannel, ha a port száma az értelmezési tartományon kívül van.
8.3. A számlálás elindítása a PCI-1784 a kártyán a DRV_CounterEventStart függvénnyel
Függvény meghívása: status = DRV_CounterEventStart(DriverHandle, lpCounterEventStart) Rendeltetése: Konfigurálja a kiválasztott számlálót a feladatra és elindítja azt.
5.4. táblázat - Paraméterek
Név Irány Típus Tartomány Leírás
DriverHandle Input long alapértelmezett DRV_DeviceOpen
rendeli el LpCounterEventStart Input/Output long pointer a
PT_CounterEventStart-hoz
alapértelmezett a tárolási címe counter-nek és GateMode-nak Eredmény:
1. SUCCESS, ha sikeres;
2. InvalidDriverHandle, ha DriverHandle = NULL;
3. BoardIDNotSupported, ha a függvény nem támogatott az eszközön, 4. InvalidChannel, ha a port száma tartományon kívül esik.
Műveletek:
mérési gyakorlatok leírása)
1. A programozás módszere a lapon található számláló/időzítő chiptől függ. Két fajta chipet szoktak használni az A/D kártyákon: Intel 8254 és AMD Am9513A. Az Am9513A-nél, a 0-9 es csatornák felmenő él számlálóként is tudnak működni. Csatlakoztassa a külsőjel generátorát a használni kívánt bemenő órajel csatornára. Ha a hardveres ”kapuzás”, amelyben a számlálót egy külső eszköz indíthatja egy másik bemenetről, előírt, válasszon egy kapuzás típust és használjon külső eszközt a számláló bemenetének triggereléséhez.
2. Mindkét előbb említett időzítő/számláló chip 16 bites, de a függvény 32 biteset támogat, vagy 232-ig számol.
Leellenőrzi, hogy a számláló nem csordult-e túl, és átszámolja 32 bitre.
3. Intel 8254 hardware 2 ciklusidőt igényel a számláló beállításainak visszaállításához, tehát a számláló programnak 2 külsőjelet (ciklusidőt) meg kell várnia, hogy pontos számláló értéket olvasson be. A
”DRV_CounterEventStart” első meghívásakor, az Intel 8254 hardware alapértékeket használ a számláló beállításainak inicializálásához. Ez az inicializálás két külsőjelig (ciklusideig) tart. Ha a
”DRV_CounterEventRead” az inicializálás befejezése előtt hívódik meg, a program helytelen értéket kap.
Tehát 2 külsőjelet (ciklusidőt) kell késleltetni a programban, mielőtt meghívjuk a
”DRV_CounterEventRead”-et, hogy a visszakapott érték pontos legyen. A késleltetés ideje függ a külső jelek közti időtől.
8.4. A számláló értékeinek olvasása PCI-1784 kártyán a DRV_CounterEventRead függvénnyel
Függvény meghívása: status = DRV_CounterEventRead(DriverHandle, lpCounterEventRead)
Rendeltetése:Kiolvassa a jelenlegi számláló összeget anélkül, hogy a számlálást megzavarná és visszaadja a számláló és túlcsordulás feltételeit.
5.5. táblázat - Paraméterek:
Név Irány Típus Tartomány Leírás
DriverHandle Input long alapértelmezett aDRV_DeviceOpen
rendeli el lpCounterEventRead Input/Output long pointer a
PT_CounterEventRead-hez
alapértelmezett a tárolási cím counter, overflow-hoz és
count-hoz Eredmény:
1. SUCCESS, ha sikeres;
2. InvalidDriverHandle, ha DriverHandle = NULL;
3. BoardIDNotSupported, ha a függvényt az eszköz nem támogatja;
4. InvalidChannel, ha a port száma tartományon kívülre esik.
8.5. Mintaprogram számlálási műveletekre a PCI-1784 kártyán
Megjegyzés:
A paraméterek nevei a bemutatott példában eltérnek a mérésben valójában használt nevektől. Nem szabad egyszerűen kivágni és beilleszteni a részeket a példából.
/*
*****************************************************************************
* Program : COUNTER.CPP * * Description : Demo program for counter function * * Boards Supp. : *
mérési gyakorlatok leírása)
* APIs used : DRV_DeviceOpen,DRV_DeviceClose, DRV_GetErrorMessage, * * DRV_CounterReset, DRV_CounterEventStart, DRV_CounterEventRead * * Revision : 1.00 *
PT_CounterEventRead tCounterEventRead;
//Step 1: Display hardware and software settings for running this example printf("Before running this example, please\n");
printf("use the device installation utility to add the device.\n");
//Step 2: Input parameters
printf("\nPlease input parameters:");
printf("\nDevice Number (check the device installation utility): ");
scanf("%d", &lDevNum);
printf("\nInput Channel: ");
scanf("\n%d", &wChannel);
//Step 3: Open device
dwErrCde = DRV_DeviceOpen(lDevNum, &lDriverHandle);
if (dwErrCde != SUCCESS)
// Step 5: Start counting operation by DRV_CounterEventStart tCounterEventStart.counter = wChannel;
dwErrCde = DRV_CounterEventStart(lDriverHandle, &tCounterEventStart);
if (dwErrCde != SUCCESS)
// Step 6: Read counter values by DRV_CounterEventRead in while loop // and display counter value, exit when pressing any key tCounterEventRead.counter = wChannel;
tCounterEventRead.overflow = &wOverflow;
tCounterEventRead.count = &dwReading;
while( !kbhit() )
mérési gyakorlatok leírása) {
dwErrCde = DRV_CounterEventRead(lDriverHandle, &tCounterEventRead);
if (dwErrCde != SUCCESS)
dwErrCde = DRV_DeviceClose(&lDriverHandle);
getch();
DRV_GetErrorMessage(dwErrCde, szErrMsg);
printf("\nError(%d): %s\n", dwErrCde & 0xffff, szErrMsg);
}//ErrorHandler
void ErrorStop(long *pDrvHandle, DWORD dwErrCde) {
//Error message
ErrorHandler(dwErrCde);
printf("Program terminated!\n");
//Close device
DRV_DeviceClose(pDrvHandle);
printf("Press any key to exit....");
getch();
exit(1);
}//ErrorStop
5 . 10 mérési feladat a PCI 1784-es kártya használata
A feladat a számláló értékének beolvasása a PCI 1784-es kártya 3-as csatornájáról.
Szükséges lépések:
• Kártya inicializálása.
• Számláló értékek visszaállítása.
mérési gyakorlatok leírása)
• A számláló művelet elindítása.
• A számláló érték beolvasása a művelet elején.
• A számláló értékének minden egyes órajelre való beolvasása.