ÇнÀ¸ñÇ¥    1

ÇнÀÁÖÁ¦    1

¿¹½À³»¿ë    1

½Ç½À¹æ¹ý    1

°ú    Á¦    1

Áß¿äÇÔ¼ö    1

¿£ÄÚ´õ(Encoder) ÀÔ·Â

ÇнÀ¸ñÇ¥

¿£ÄÚ´õÀÇ ¿ø¸®¸¦ ÀÌÇØÇϰí ȸÀüüÀÇ È¸Àü¼ö¿Í À§Ä¡¸¦ ÃøÁ¤Çϴµ¥ Ȱ¿ëÇÑ´Ù.

ÇнÀÁÖÁ¦

»ç¿ëµÈ ¿£ÄÚ´õ´Â 1ȸÀü¿¡ 5¹øÀÇ ÆÞ½º°¡ ¹ß»ýÇÑ´Ù. À̸¦ ´ÙÀ̾î·Î±× ¹Ú½º¿¡ Ä«¿îÆ® µÈ ÆÞ½º¸¦ Ç¥½ÃÇϰí À̸¦ ȸÀü¼ö·Î º¯È¯ÇÑ °ªÀ» Ç¥½ÃÇÑ´Ù. [RESET]۸¦ ´©¸£¸é 0ºÎÅÍ »õ·Î Ä«¿îÆ®¸¦ ½ÃÀÛÇÑ´Ù.

               ±×¸²1 ¿£ÄÚ´õ ´ÙÀ̾î·Î±× ¹Ú½º

1.       ¿£ÄÚ´õ Á¤È¸ÀüÀ» Ä«¿îÆ®ÇÏ´Â ÇÁ·Î±×·¥À» ¸¸µç´Ù.

2.       ¿£ÄÚ´õ Á¤È¸Àü°ú ¿ªÈ¸ÀüÀ» Ä«¿îÆ®ÇÏ´Â ÇÁ·Î±×·¥À» ¸¸µç´Ù.

¿¹½À³»¿ë

¿£ÄÚ´õ°¡ Á¤È¸Àü¿¡¼­´Â A»óÀÌ  Low¿¡¼­ High·Î µÉ ¶§ B»óÀº Low·Î ³ªÅ¸³ª°í ¿ªÈ¸Àü¿¡¼­´Â High·Î ³ªÅ¸³­´Ù.

1.        ¿£ÄÚ´õÀÇ ¿ø¸®¿Í ±â¼ú [º¸±â]

2.        ¿£ÄÚ´õÀÇ È°¿ë [º¸±â]

3.        ½Ç½À¿¡¼­´Â ¢ß¿ÀÅä´Ð½ºÀÇ ENB-5-2-1 ¸¦ »ç¿ëÇÑ´Ù. [¸Å´º¾ó]

¿£ÄÚ´õ¸¦ »óǰȭÇÑ »çÀÌÆ®¸¦ Á¶»çÇÑ´Ù. [°úÁ¦Á¦Ãâ]

½Ç½À¹æ¹ý

¸ñ    Â÷

1. ȸ·Î¸¦ ¿¬°áÇÑ´Ù.

±×¸²°ú °°ÀÌ È¸·Î¸¦ ¿¬°á ÇÑ´Ù. ¿£ÄÚ´õÀÇ Àü¿ø°ú Á¢Áö´Â º¸µåÀÇ °ÍÀ» »ç¿ëÇÑ´Ù.

±×¸²2.  ¿£ÄÚ´õ ȸ·Î ¿¬°á

2. MAX ÇÁ·Î±×·¥¿¡¼­ Æ÷Åä¼¾¼­ µ¿ÀÛ È®ÀÎ

¾Æ·¡ ±×¸²°ú °°ÀÌ ÃÊ±â ¼ÂÆÃÀ» ÇÑ ÈÄ¿¡ [Start] ¹öưÀ» ´©¸£¸é ¿£ÄÚ´õÀÇ È¸Àü¿¡ µû¶ó [Counter Value]¿¡ °ªÀÌ Ç¥ÇöµÇ´Â °ÍÀ» º¼ ¼ö°¡ ÀÖ´Ù.

±×¸²3. MAX Ä«¿îÅÍ Å×½ºÆ®

3. ¼¾¼­ ÀÔ·Â ÇÁ·Î±×·¥À» ¸¸µç´Ù.

  ´ÙÀ½ ÇÁ·Î±×·¥Àº Ni-daq Example ÇÁ·Î±×·¥ ¡°STCeventCount.c¡±À» Visual C++¿¡¼­ ½ÇÇàÇÑ °ÍÀÌ´Ù. ÇÁ·Î±×·¥Àº 1ÃÊ °£°ÝÀ¸·Î 10¹øÀ» Ä«¿îÆ® ÇÑ °ªÀ» µµ½º È­¸éÀ¸·Î Ãâ·ÂÇÏ°Ô µÈ´Ù.

#include "stdafx.h"

#include "nidaqex.h"             // ´ÙÀ½ Çì´õ ÆÄÀÏÀ» Ãß°¡ ÇÑ´Ù.

 

int main(int argc, char* argv[])

{

              i16 iStatus = 0;

    i16 iRetVal = 0;

    i16 iDevice = 1;

    u32 ulGpctrNum = ND_COUNTER_0;

    u32 ulCount = 0;

    u32 ulTCReached = ND_NO;

    u32 iLoopCount = 10;

    i16 iIgnoreWarning = 0;

    i16 iYieldON = 1;

 

    iStatus = GPCTR_Control(iDevice, ulGpctrNum, ND_RESET);

    iRetVal = NIDAQErrorHandler(iStatus, "GPCTR_Control/RESET", iIgnoreWarning);

    iStatus = GPCTR_Set_Application(iDevice, ulGpctrNum, ND_SIMPLE_EVENT_CNT);

    iRetVal = NIDAQErrorHandler(iStatus, "GPCTR_Set_Application", iIgnoreWarning);

    iStatus = GPCTR_Change_Parameter(iDevice, ulGpctrNum, ND_SOURCE, ND_DEFAULT_PFI_LINE);

    iRetVal = NIDAQErrorHandler(iStatus, "GPCTR_Change_Parameter/SOURCE", iIgnoreWarning);

 

    /* Load initial count. »õ·Î Ä«¿îÆ® °ªÀ» Àд´Ù.*/

    iStatus = GPCTR_Change_Parameter(iDevice, ulGpctrNum, ND_INITIAL_COUNT, ulCount);

    iRetVal = NIDAQErrorHandler(iStatus, "GPCTR_Change_Parameter/INITCOUNT", iIgnoreWarning);

    printf(" Apply your digital pulse train to the SOURCE of your counter.\n");

    iStatus = GPCTR_Control(iDevice, ulGpctrNum, ND_PROGRAM);

    iRetVal = NIDAQErrorHandler(iStatus, "GPCTR_Control/PROGRAM", iIgnoreWarning);

 

    /* Loop 10 times. */

 

    do {

        iStatus = GPCTR_Watch(iDevice, ulGpctrNum, ND_COUNT, &ulCount);

        iRetVal = NIDAQErrorHandler(iStatus, "GPCTR_Watch/COUNT", iIgnoreWarning); //ÇöÀç Ä«¿îÆ® °ª ÀÐÀ½

        printf(" The current count is %lu\n", ulCount);

        --iLoopCount;

        iStatus = GPCTR_Watch(iDevice, ulGpctrNum, ND_TC_REACHED, &ulTCReached);

        if (ulTCReached == ND_YES) {

            printf(" Counter reached terminal count! - The count may be incorrect.\n");

        }

        iRetVal = NIDAQDelay(1.0);   // 1Ãʰ£ Áö¿¬ ½ÃŲ´Ù.

                             iRetVal = NIDAQYield(iYieldON);

    } while ((iLoopCount > 0) && (iStatus == 0));

    iRetVal = NIDAQErrorHandler(iStatus, "GPCTR_Watch", iIgnoreWarning);

    /* CLEANUP - Don't check for errors on purpose. */

    /* Reset GPCTR. */

    iStatus = GPCTR_Control(iDevice, ulGpctrNum, ND_RESET);

    printf(" Done with event counting!\n");

              return 0;

}

 

4. ºñÁÖ¾ó ÇÁ·Î±×·¥À» ¸¸µç´Ù.

(1)     ¡°Encoder1¡± À̸§À¸·Î ÇÁ·ÎÁ§Æ®¸¦ »õ·Î ¸¸µç´Ù.

(2)     ±×¸²1°ú °°ÀÌ [NumEdit Control]·Î µÎ°³ÀÇ Ç¥½ÃâÀ» ¸¸µé°í, [Button]À¸·Î 1°³ÀÇ ¡°RESET¡± ½ÇÇà ¹öưÀ» ¸¸µç´Ù.

(3)     ¡°Encoder1Dlg.h¡±¿¡ ¡°nidaqex.h¡±¸¦ Æ÷ÇÔÇÑ´Ù. [º¸±â]

(4)     ¡°Encoder1Dlg.h¡± ¿¡ ÇÊ¿äÇÑ VariableÀ» ¼±¾ð ÇÑ´Ù. [º¸±â]

(5)     [ClassWizard ->Member Variables]¿¡¼­ Ç¥½ÃâÀÇ ¸â¹ö VriableÀ» ¡°m_count¡±¿Í ¡°m_rev¡±·Î ¼±¾ð ÇÑ´Ù.

(6)     [ClassVi¡¦]¿¡¼­ ¡°Cencoder1Dlg¡± Ŭ·¡½º¿¡ ¸¶¿ì½º ¿À¸¥ÂÊ Å°¸¦ ´­·¯ ¡°SetCount()¡± ÇÔ¼ö¸¦ ¸¸µç´Ù.

(7)    

(8)     ¡°SetCount()¡± ÇÔ¼ö¿¡ ŸÀ̸Ӹ¦ ÃʱâÈ­ ÇÏ´Â ÇÁ·Î±×·¥À» ÇÑ´Ù. [º¸±â]

(9)     ¡°OnInitDialog()¡± ŸÀÌ¸Ó¿Í µðÁöÅÐÆ÷Æ®¸¦ ÃʱâÈ­ ÇÑ´Ù. [º¸±â]

(10) [ClassWizard ->Message Maps]¿¡¼­ ¾Æ·¡ ±×¸²°ú °°ÀÌ Å¸ÀÌ¸Ó ÇÔ¼ö¸¦ ¼³Á¤ÇÑ´Ù.

(11) ¡°OnTimer()¡± ÇÔ¼ö¿¡ Ä«¿îÆ® ÇÑ °ªÀ» Àоî È­¸é¿¡ Ç¥½ÃÇÑ´Ù. ÇÁ·Î±×·¥¿¡¼­ ¡°ulCount¡±¿¡ ÇöÀç Ä«¿îÆ® °ªÀÌ Á¤È¸Àü&¿ªÈ¸Àü¿¡ °ü°è ¾øÀÌ °è¼Ó Ç¥½ÃµÈ´Ù. ±×·¯¹Ç·Î ÀÌÀü¿¡ Ä«¿ì´À°ª(ulCountPrev)°ú ÇöÀç Ä«¿îÆ®(ulCount)ÀÇ Â÷¸¦ ¡°DIO0¡±°¡ low ¶Ç´Â high¿¡ µû¶ó ´õÇϰųª »«´Ù. [º¸±â]

(12) ´ÙÀ̾î·Î±× ¹Ú½ºÀÇ [RESET]ÀÌ ´­¸®¸é ½ÇÇàµÇ´Â ÇÔ¼ö¸¦ ¸¸µç´Ù. [º¸±â]

 

[ÁÖÀÇ] Ä«¿îÅÍÀÇ A»ó ÆÞ½º°¡ low¿¡¼­ high·Î µÉ ¶§ ¸¶´Ù Ä«¿îÆ® µÇ°í ÀÌ ¶§ B»óÀÌ low ÀÎÁö high ÀÎÁö¸¦ ¾Ë¾Æ¾ß Á¤È¸Àü ¿ªÈ¸ÀüÀ» °¨ÁöÇÏ¿© Àüü ȸÀü¼ö¸¦ ¾Ë ¼ö°¡ ÀÖ´Ù. ±×·¯¹Ç·Î ȸÀü ¼Óµµ°¡ ºü¸¥ °ÍÀ» Ä«¿îÆ® ÇÒ ¶§´Â À§ÀÇ ÇÁ·Î±×·¥ÀÌ ¾à°£ÀÇ ¿ÀÂ÷¸¦ ÀÏÀ¸Å³ ¼ö°¡ ÀÖ´Ù. ÀÌ ¶§´Â Ä«¿îÅ͸¦ À§ÇÑ Àü¿ë ¸¶ÀÌÅ©·ÎÇÁ·Î¼¼¼­¿¡¼­ A»óÀÌ low->high ÀÏ ¶§ ÀÎÅÍ·´Æ®¸¦ °É¾î B»óÀÇ »óŸ¦ Àоî ȸÀü¼ö¸¦ RS232 Åë½ÅÀ» ÀÌ¿ëÇØ PC·Î º¸³»¸é ÇØ°á ÇÒ ¼ö ÀÖ´Ù.

óÀ½

°ú    Á¦

 

Áß¿äÇÔ¼ö