컴퓨터 계측 및 실습 디지털 입력 영남대학교 기계공학부
디지털 입력이란? (1) 전등이 켜져 있는 경우 전등이 꺼져 있는 경우 전압 상태 Digit 전등이 켜져 있는 경우 5V High(H) 1 전등이 꺼져 있는 경우 0V Low(L) 이 상태로 컴퓨터는 전등의 점등 상태를 알 수있다.
디지털 입력이란? (2) 컴퓨터에서는 여러 개의 입력을 동시에 받아들여서 여러가지의 장치 혹은 센서 등의 상태를 파악할 수 있다. 경우에 따라서는 bit의 H, L 를 연속적으로 읽어서펄스의 수와 속도를 파악할 수도 있다. 예를 들면 모터의 속도를 이와 같이 측정한다.
기본 D/I 연결 방법 D/I D I/O Terminal block connector DR8330 DR1010 BASE+4 Get_DI 라는 함수에서 알아서 각 bit의 주소를 계산하므로 신경 쓸 필요는 없다. DR1010
근접센서 (디지털 출력을 내는 소자) 원리 종류 고주파형 교류형 정전용량형 교과서 pp.262 참조
근접센서 선정시 유의점
광전 스위치 (디지털 출력을 내는 소자) 원리 종류 (검출형태에 따른 분류) 고온금속 투과형 직접반사형 거울반사형 복사량 검출형
광전 스위치 (2) 종류 (광원의 종류에 따른 분류) 1. 백열전구형 (가시광) : 저가격 종류 (광원의 종류에 따른 분류) 1. 백열전구형 (가시광) : 저가격 2. LED형 (가시광, 근적외광) : 초소형, 소정력 가강 이상적인 광원 3. 형광등형 (가시광) : 이미지 센서 4. 자외광 : 이물질 검출 5. 가스 레이저형 (가시광) : 바코드 리더 6. 반도체 레이저형(근적외광) : 강력한 투과력, 철장설비등 종류 (광원의 변조에 따른 분류) 1. 전기적 펄스 변조형 2. 기계적 회전 변조형 3. 다중 스캐닝형
디지털 스위치 (디지털 출력을 내는 소자) +, - 단자를 한 번 누를 때마다 내부에서 원리 +, - 단자를 한 번 누를 때마다 내부에서 카운트하여 BCD (Binary-Coded Decimal) 코드로 내보내는 소자 + - Vcc GND 2 1 3
로터리 엔코더 (디지털 출력을 내는 소자) 원리 회전하면서 일정 각도마다 하나의 펄스를 내보내는 장치 (단위: pulse/rev)
로터리 엔코더의 응용
Digital Input 구동 프로그램 OnPhotoEnd OnEncoderOn Cstring OnPhotoStart m_photo OnPhotoStart OnEncoderOff int m_digit int m_encoder OnDigitalStart OnDigitalEnd
기본함수 (초기화) InitDevice ( Baseaddress , cardType) Baseaddress : address를 선정. cardType : SINGLE / DIFFER 선정. DR_InitDevice (second_IRQ , second_DMA) DR_8330을 사용하기 위한 초기화 일반적으로 DR_InitDevice ( -1 , -1)을 사용
기본함수 (입력 읽기) int GET_DI ( int ch) DR_1010 int DR_GetDI ( int ch) DR_8330 지정된 디지털 입력 채널의 상태를 읽음. => ch : 입력 채널 번호 => Return : 지정된 채널의 상태 0 : Off 1 : On
실험 1 광전 스위치 실 험 목 적 이 실험은 D/I의 실제 응용 예로서, 광전 스위치의 상태를 PC로 읽어 들이는 실험입니다.
회 로 도
프로그램 설명(DR_1010) void CComPractDlg::OnPhotoStart() { InitDevice ( 0x220 , DIFFER) ; SetTimer(0 , 100 , NULL); } void CComPractDlg::OnPhotoEnd() KillTimer(0); (DR8330 의 경우) DR_InitDevice (-1 ,-1) ; void CComPractDlg::OnTimer(UINT…) { int i; i=GET_DI(0); if(i) m_photo=“On”; else m_photo=“Off”; UpdateData(FALSE); Cdialog::OnTimer(nIDEvent); } i=DR_GetDI(0);
실험 2 디지털 스위치 실 험 목 적 이 실험은 D/I의 실제 응용 예로서, 디지털 스위치의 상태를 PC로 읽어 들이는 실험입니다.
회 로 도
프로그램 설명(DR_1010) void CComPractDlg::OnDigitalStart() { InitDevice ( 0x220 , DIFFER) ; SetTimer(0 , 100 , NULL); } void CComPractDlg::OnDigitalEnd() KillTimer(0); DR_InitDevice (-1 ,-1) ; void CComPractDlg::OnTimer(UINT…) { int i[4]; for(int j=0;j<4;j++) i[j]=GET_DI(j); m_digit=pow(2,3)*i[3]+ pow(2,2)*i[2]+2*i[1]+i[0]; UpdateData(FALSE); Cdialog::OnTimer(nIDEvent); } i[j]=DR_GetDI(j);
실험 3 (엔 코 더) 실 험 목 적 이 실험은 D/I의 실제 응용 예로서, Encoder 출력 펄스를 PC로 입력(D/I)받아서 펄스의 수를 세는 실험입니다.
회 로 도
프로그램 설명(DR_1010) void CComPractDlg::OnEncoderOn() { InitDevice ( 0x220 , DIFFER) ; SetTimer(0 , 100 , NULL); } void CComPractDlg::OnEncoderOff() KillTimer(0); void CComPractDlg ::OnTimer(UINT…) { int x; x=GET_DI(0); if(!x) while(!GET_DI(0)); if(GET_DI(1)) m_encoder --; else m_encoder++; } UpdateData(FALSE); Cdialog::OnTimer(nIDEvent); DR_GetDI(0); DR_InitDevice (-1 ,-1) ; DR_GetDI(1);