학습목표    1

학습주제    1

예습내용    1

실습방법    1

        1

중요함수    1

펄스발생기 만들기

학습목표

6024E 보드에서 펄스를 만들어 활용한다.

학습주제

6024E 보드에서 펄스 만들어 오실로스코프로 측정한다.

예습내용

1.       6024E 보드에서 펄스 만들기-NI사의 예습 예제1 프로그램을 분석해 온다.

2. 다음 함수를 NiDaq Help 보고 조사 하시오.

GPCTR_Control, NIDAQErrorHandler, GPCTR_Set_Application,

    GPCTR_Change_Parameter, Select_Signal, NIDAQWaitForKey

 

실습방법

   

1. 펄스 만들기

다음 프로그램은 예습예제1 요약한 프로그램이다.

내부클럭 100kHz High(ulHIGHcount)=50 Low(ulLOWcount)=50 사용 함으로 주기는 100/(50+50) kHz, Duty=50 된다.

예제1

Example program: STCgenerateSquareWave.cpp

 

Description:

   사각펄스 주기:1kHz square wave (digital pulse train) using general

   내부 100kHz counter 0 사용

 

변수 

   ulGpctrNum, ulGpctrOutput, ulLOWcount, ulHIGHcount

 

다음 함수를 NI-DAQ Help에서 찾아 본다.

   GPCTR_Control, NIDAQErrorHandler, GPCTR_Set_Application,

   GPCTR_Change_Parameter, Select_Signal, NIDAQWaitForKey

 

연결

   펄스 출력:GPCTR0-OUT(2)  접지:DGND

#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 ulGpctrOutput = ND_GPCTR0_OUTPUT;

    u32 ulLOWcount = 50;

    u32 ulHIGHcount = 50;

    i16 iIgnoreWarning = 0;

 

    iStatus = GPCTR_Control(iDevice, ulGpctrNum, ND_RESET);

    iStatus = GPCTR_Set_Application(iDevice, ulGpctrNum, ND_PULSE_TRAIN_GNR);

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

    iStatus = GPCTR_Change_Parameter(iDevice, ulGpctrNum, ND_COUNT_1, ulLOWcount);

    iStatus = GPCTR_Change_Parameter(iDevice, ulGpctrNum, ND_COUNT_2, ulHIGHcount);

    /* To output a counter pulse, you must call Select_Signal. */

    iStatus = Select_Signal(iDevice, ulGpctrOutput, ulGpctrOutput, ND_LOW_TO_HIGH);

    iStatus = GPCTR_Control(iDevice, ulGpctrNum, ND_PROGRAM);

    printf(" 펄스를 발생하기 시작했습니다. 마치려면 아무키나 치십시오.\n");

    iRetVal = NIDAQWaitForKey(0.0);

    /* Reset GPCTR. */

    iStatus = GPCTR_Control(iDevice, ulGpctrNum, ND_RESET);

    printf(" 펄스발생을 마칩니다.\n");

              return 0;

}

응용 과제

100Hz, Duty=60 펄스를 만드시오

처음

2. 비주얼 펄스 만들기

다음은 다이어로그 박스에서 주기와 듀티를 변형 시킬 있는 프로그램을 만든다.

변수의 범위를 위와 같이 하면 100kHz/(5+5)=10kHz 100,000Hz/(5000+5000)=10Hz사이가 된다.

듀티는 1에서 99까지 변하게 한다.

 

1.       프로젝트명을 “Pulse” 하고 3주차의 프로젝트 만들기 1~6 만든다.

2.       아래에서 [Knob Control] 2 만든다.

 

3. 왼쪽 노브에서 마우스 오른쪽을 누르고 [Properties] 선택한다.

Caption “Hz” 한다.

처음

[Nmeric]에서 “Minimum”, “Maximum”,”Log” 그림과 같이 설정한다.

Hz 노브 스케일은 Log 사용한다.

Values Discrete 한다.

 

 

4. 오른쪽 노브에서 마우스 오른쪽을 누르고 [Properties] 선택한다.

Caption “Duty” 하고 그림과 같이 설정한다.

 

처음

5. 2개의 Knob Variable 정의 한다.

[View] ®[ClassWizard] ®[Add Variable] 선택하여 2 노브의 Member Variable 아래와 같이 만든다. [참조]

 

5. PulseDlg.h nidaqex.h 포함한다. [보기]

6. 펄스를 만드는데 필요한 인수를 정의 한다. [보기]

7. 노브의 값에 따라 펄스를 만드는 함수를 만든다.

   ClassView에서 아래 그림과 같이 CpulseDlg 마우스 오른쪽 버튼을 눌러 [Add Member Function…] 선택한다.

처음

그림과 같이 GeneratePulse() 함수를 만든다.

PulseDlg.cpp 만들어진 함수에 예제1 펄스를 만드는 함수를 작성한다. [보기]

8. 위와 같은 방법으로 노브의 값이 변할 때마다 필요한 인수를 구하는 함수를 만든다.

PulseDlg.cpp 만들어진 함수에 인수를 구하는 함수를 작성한다. [보기]

9. 다이어로그 박스의 노브를 더블 크릭하면 노브값이 변할 때마다 실행되는 함수가 만들어진다.

 OnPointerValueChangedCwknob1, OnPointerValueChangedCwknob2 함수에 펄스를 만드는데 필요한 변수를 넣고 펄스를 발생 시킨다. [보기]

10. 다이어로그 박스가 생성 실행되는 OnInitDialog() 함수에 초기값을 넣고 펄스를 발생 시킨다. [보기]

11. 프로그램을 실행하여 노브가 변함에 따라 펄스가 변하는지 오실로스코프로 확인 한다.

처음

   

1.       다이어로그 박스 화면을 각자의 개성에 따라 만들어 보시오.

중요함수