본 예제는 IEC-Series에서 지원되는 옵션 제품 중 Smart I/O-Series의 ADC를 이용하여 각종 센서들을 연동하기 위해서 만든 예제 프로그램(C#, VB.NET)입니다.
SmartX Framework와 관련된 컴포넌트의 자세한 사용법은 SmartX Framework Reference Guide (Programming Guide)의 SmartADC편을 참조하시기 바랍니다.
Smart I/O-Series의 하드웨어적인 설명 및 사용법은 Smart I/O-Series제품매뉴얼을 참조하시기 바랍니다
본 자료는
1. SmartADC 기본 설명
2. SmartADC 관련 메서드
3. ADC Block과 센서 결선 안내
3-2. Smart I/O-2 또는 Smart I/O-3에 ADC Block 장착
4. 예제 프로그램 동작 설명
5. 프로그램 전체 소스
순서로 설명합니다.
1. SmartADC 기본 설명
IEC-Series 제품 내부에 4~6채널의 12Bit ADC(Analog to Digital Converter)가 내장되어 있습니다.
IEC-Series별 지원채널 및 성능(분해능)IEC667 - Series | IEC1000 - Series | |
---|---|---|
채널과 분해능 | 4Ch / 12Bit(4096) | 4Ch(Lite), 6Ch(비Lite) / 12Bit(4096) |
ADC Data를 반복적으로 읽어올 때 Touch의 간섭
SmartADC의 ReadData, ReadDataDetailFiltering 메소드를 사용하여 Analog입력 신호를 읽어올 때는 제품의 Touch를 입력하게 되면 ADC값의 손실이 발생할 수 있기 때문에 Read처리되는 동안에는 터치가 Disable 됩니다.
반복주기에서 터치 가능영역의 크기와 터치의 상관관계
ReadData, ReadDAtaDetailFiltering의 반복주기가 커지면 터치감도가 좋아지고 작아지면 터치감도는 나빠집니다.
Read의 중요도와 인터페이스 상호작용의 중요도에 따라서 사용에 맞게 반복주기를 설정하시기 바랍니다.
ADC(SmartADC)입력의 처리형태
ReadData() | ReadDataDetailFiltering() |
---|---|
A/D 데이터 값을 읽어오는 기능을 합니다. |
필터링 하는 데이터의 개수와 상위, 하위%의 데이터를 사용자가 임의대로 조절 가능합니다. 보정이 된 A/D값을 얻을 수 있지만 응답성이 떨어집니다. |
A/D값을 자주 읽는 경우 터치의 간섭이 생길 수 있습니다. 간섭이 발생하여 ADC 컨버팅이 일어나는 시간 동안 터치가 동작하지 않으므로 ReadData는 적절한 함수 호출 인터벌의 조정이 필요하며 ReadDataDetailFiltering 은 적절한 함수 호출 인터벌의 조정과 함수 인자 값(iRawdataCnt 와 iAvailableCnt)을 적절하게 사용할 필요가 있습니다. 예를 들어 iRawdataCnt 이 너무 큰 경우 Data를 다 읽기 전까지는 함수의 결과값을 리턴하지 못하는 문제가 있으므로 적절하게 조절하여 사용 바랍니다. |
2. SmartADC 관련 메서드
A/D 변환된 결과 값을 반환합니다. (데이터 범위는 0 ~ 4096) public int ReadData(int ch) |
---|
(인자) int ch : 아날로그 입력채널 (반환값) int : AD로 센싱한 데이터 결과 값 |
ADC를 통하여 외부의 Analog 신호를 읽는 경우 노이즈 등으로 데이터가 흔들리는 것을 소프트웨어적으로 Filtering하는 기능입니다. public int ReadDataDetailFiltering(int iCh, int iRawdataCnt, int iAvailableCnt); |
---|
(인자) int iCh : 아날로그 입력채널 (인자) int iRawdataCnt : 원본 데이터 개수 (인자) int iAvailableCnt : 실제 사용 데이터 개수 (반환값) int : AD로 센싱한 데이터를 Filtering한 결과 값 |
3.ADC Block과 센서 결선 안내 3-1. 테스트 적합 센서 안내 및 ADC-Block과 센서 결선
3-2. Smart I/O-2 또는 Smart I/O-3에 ADC Block 장착
4. 예제 프로그램 동작 설명
① Start 버튼은 클릭 시 SmartTimer를 시작하고 SmartTimer의 Tick이벤트에서는 ADC0부터 ADC3채널의 데이터를 읽는 코드가 Tick 이벤트를 실행할 때마다 호출됩니다.
해당 채널에서 아날로그 데이터가 입력되는 경우 5, 6의 Value에 각각 표시되고 7에 해당 채널 별로 실시간 차트를 그립니다.
② FILTER ON. CheckBox를 체크하면 iRawDataCnt, iAvailableCnt를 설정할 수 있는 영역이 활성화되고 설정한 범위를 기준으로 AD 데이터를 Filtering합니다.
(ReadDataDetailFiltering 메서드 사용)
③ 거리센서 채널의 ADC 입력상태(ON/OFF)를 설정(토글 스위치) OFF 상태 일 때 ADC의 입력상태는 비활성화되고 ON상태일 때 ADC의 입력상태는 활성화됩니다.
④ 압력센서 채널의 ADC 입력상태(ON/OFF)를 설정(토글 스위치). ③번 내용 참고
⑤ ADC0(거리센서)에 입력되는 아날로그 데이터가 Value에 표시되며 공식을 사용하여 거리로 환산하여 거리 부분에 표시합니다.
ADC0의 분해 능을 0~4095라고 하고 거리센서 Value값이 1064 일 때 거리는 20cm, Value 값이 491 일 때 거리는 50cm가 실제 측정됩니다.
20cm~50cm구간(ADC의 거리구간)에서의 ADC 범위값은 1064 – 491 = 573이 됩니다.
즉, 573(ADC구간) : 30cm(구간사이의 거리) = 1064-VAL(센서 측정값) : X(구하려는 거리 값) 이라는 공식이 성립되고 구하려는 X(거리) = (((1064-VAL) x 30) / 573 ) + 20cm(출발점)으로 표시됩니다.
⑥ ADC1(압력센서)에 입력되는 아날로그 데이터가 Value에 표시되며 공식을 사용하여 압력으로 환산하여 압력 부분에 표시합니다.
Type | Part Number | 압력범위(PSI) | mmHg | 입력전압(Input Voltage) | 출력전압(Output) |
---|---|---|---|---|---|
Gage | 33A-030G-2210 | 0~30 | 0~1551.4 | DC5V | 0.5V~4.5V |
Type | Gage |
---|---|
Part Number | 33A-030G-2210 |
압력범위(PSI) | 0~30 |
mmHg | 0~1551.4 |
입력전압 (Input Voltage) |
DC5V |
출력전압 (Output) |
0.5V~4.5V |
압력센서의 센서 측정 값(출력 전압)을 통해 압력을 계산하는 방법은 Pressure Applied = ((Output Voltage - 0.5) * Pressure Range) / (Vin x 80%)이며 센서 출력 전압이 2.5V일 때 압력의 값을 구해보면 ((2.5V – 0.5) x 30PSI) / (5V x 80%) 로 15PSI(압력범위)가 산출되고 15PSI x 3.33….을 하면 압력은 대략 50%(전체100%기준)가 나옵니다.
⑦ 해당 채널을 통해 입력된 디지털 값은 SmartDraw1.Chart.PutData()를 사용하여 실시간 차트로 그려줍니다. X축은 시간, Y축은 ADC값을 표시합니다. 시간이 흐르면 차트가 X축을 따라 이동합니다.