컴퓨터 계측 및 실습 디지털 입력 영남대학교 기계공학부
디지털 입력이란? (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 Cstring OnPhotoStart m_photo int m_digit OnDigitalStart OnDigitalEnd
기본함수 (입력 읽기) COMI_DI_GetOne (HANDLE hDevice, int ch) 지정된 디지털 입력 채널의 상태를 읽음. => hDevice : 디바이스 핸들 => ch : 입력 채널 번호 => Return : 지정된 채널의 상태 0 : Off 1 : On
실험 1 광전 스위치 실 험 목 적 이 실험은 D/I의 실제 응용 예로서, 광전 스위치의 상태를 PC로 읽어 들이는 실험입니다.
회 로 도 COMI-SD104의 터미널보드의 DI0단자에 연결 COMI-SD104의 터미널보드의 GND단자에 연결
프로그램 설명 void CComPractDlg::OnPhotoStart() { SetTimer(0 , 100 , NULL); } void CComPractDlg::OnPhotoEnd() KillTimer(0); void CComPractDlg::OnTimer(UINT…) { int i; i=COMI_DI_GetOne(m_hDevice, 0); if(i) m_photo=“On”; else m_photo=“Off”; UpdateData(FALSE); Cdialog::OnTimer(nIDEvent); }
실험 2 디지털 스위치 실 험 목 적 이 실험은 D/I의 실제 응용 예로서, 디지털 스위치의 상태를 PC로 읽어 들이는 실험입니다.
회 로 도 COMI-SD104의 터미널보드의 DI0 ~ DI3 단자에 연결 COMI-SD104의 터미널보드의 GND단자에 연결
프로그램 설명 void CComPractDlg::OnDigitalStart() { SetTimer(0 , 100 , NULL); } void CComPractDlg::OnDigitalEnd() KillTimer(0); void CComPractDlg::OnTimer(UINT…) { int i[4]; for(int j=0;j<4;j++) i[j]= COMI_DI_GetOne(m_hDevice, j); m_digit=pow(2,3)*i[3]+pow(2,2)*i[2]+2*i[1]+i[0]; UpdateData(FALSE); Cdialog::OnTimer(nIDEvent); }