MPAINO Series는 주문할 때 I/O 모듈에 아날로그 입력 X모듈을 추가할 수 있습니다.
DC 0~5V, DC 0~10V, DC 0(4)~20mA, NTC서미스터 온도센서 입력을 채널별로 딥스위치로 선택하여 사용할 수 있습니다.
아날로그 입력 모듈과 PT100Ω 온도센서 입력 모듈의 채널 총합이 20채널을 초과할 수 없습니다.
DC 0~5V, DC 0~10V, DC 0~20mA는 analogRead(), analogReadAvg(), IanalogRead() 함수를 사용합니다.
DC 4~20mA는 analogRead2(), analogRead2Avg(), IanalogRead2() 함수를 사용합니다.
| 항목 | 내용 |
|---|---|
| 제품 구분 | MPAINO 아날로그 입력 옵션 모듈 |
| 옵션 코드 | X, X2, X3, X4, X5 |
| 모듈당 입력 | 4채널 — CH0, CH1, CH2, CH3 |
| 입력 방식 | DC 0~5V / 1~5V / 0~10V / 0~20mA / 4~20mA / NTC 온도센서 |
| 방식 선택 | 채널별 DIP 스위치 설정 |
| A/D 변환 IC | ADS1118 |
| 유효 분해능 | 15bit — 전압·전류 정격 입력 범위의 원시값 0~32767 |
| NTC 센서 규격 | 25°C에서 10kΩ, B값(β) 3950K |
| NTC 반환 단위 | ntcRead(): 온도 × 10 정수 / ntcReadf(): °C 실수 |
| NTC 표시 분해능 | 0.1°C — 측정 정확도 보증값과는 다릅니다. |
| 구성 상한 | X모듈 최대 5개, 총 20점. X와 F를 함께 구성하는 경우에도 입력 합계 최대 20점 |
| 사용 환경 | MPAINO용 ILOGICS 보드 패키지의 내장 명령어 사용 |
분해능과 정확도는 다릅니다. 15bit는 값을 구분하는 단계 수를 뜻합니다. 실제 측정 오차는 센서, 신호원, 배선, 잡음 등의 영향을 받습니다. 이 페이지의 환산식은 정격 범위에 대한 계산식이며, 교정 성적이나 절연·과전압 보호 등급을 의미하지 않습니다.
| 옵션 | X모듈 수 | 아날로그 입력 수 | 프로그램에서 사용하는 번호 ※ |
|---|---|---|---|
| X | 1개 | 4점 | 0~3 |
| X2 | 2개 | 8점 | 0~7 |
| X3 | 3개 | 12점 | 0~11 |
| X4 | 4개 | 16점 | 0~15 |
| X5 | 5개 | 20점 | 0~19 |
※ 표의 채널 번호는 아날로그 입력 옵션을 X모듈만으로 구성한 경우입니다. F(PT100 입력)와 혼합한 제품은 출고 구성의 모듈 순서와 채널표를 확인하십시오.
아래 그림은 네 가지 입력 모드에 맞춰 CH0~CH3를 동일하게 설정한 예입니다. 왼쪽이 ON, 오른쪽이 OFF이며, 노란색은 ON 위치를 나타냅니다. 실제로는 사용할 채널의 딥스위치만 해당 입력 모드에 맞게 조절합니다.
각 채널에는 10V, 20mA, NTC, GND 설정이 있습니다. 입력 방식에 해당하는 조합을 선택하고 GND 스위치는 항상 ON으로 유지하십시오. GND는 출고 시 ON 상태입니다.
| 연결할 신호 | 10V | 20mA | NTC | GND | 읽은 값의 해석 |
|---|---|---|---|---|---|
| DC 0~5V | OFF | OFF | OFF | ON | 원시값 0~32767 → 0~5V |
| DC 1~5V | OFF | OFF | OFF | ON | 0~5V 방식으로 읽고 1V 오프셋을 프로그램에서 처리 |
| DC 0~10V | ON | OFF | OFF | ON | 원시값 0~32767 → 0~10V |
| DC 0~20mA | OFF | ON | OFF | ON | 원시값 0~32767 → 0~20mA |
| DC 4~20mA | OFF | ON | OFF | ON | analogRead2()로 4mA 오프셋 처리 가능 |
| NTC 10kΩ / β3950 | OFF | OFF | ON | ON | ntcRead() 또는 ntcReadf()로 온도 읽기 |
설정할 때 지켜야 할 사항
10V, 20mA, NTC를 임의로 동시에 ON하지 마십시오. 위 표의 조합을 사용하십시오.
프로그램은 DIP 스위치의 위치를 자동으로 알아내지 않습니다. analogReadInit()도 입력 방식을 바꾸는 명령어가 아닙니다. 하드웨어 설정과 프로그램의 환산 범위가 일치해야 합니다.
채널별 스위치로 입력 방식을 선택하므로 CH0은 0~10V, CH1은 4~20mA, CH2는 NTC처럼 설정할 수 있습니다. 프로그램에서도 각 채널에 맞는 읽기 명령어와 환산식을 사용하십시오. NTC 채널에 전압·전류 신호를 인가하지 마십시오.
| 모듈에 표시된 채널 | 입력 단자 | 첫 번째 X모듈의 프로그램 번호 |
|---|---|---|
| CH0 | CH0 + / CH0 − | 0 |
| CH1 | CH1 + / CH1 − | 1 |
| CH2 | CH2 + / CH2 − | 2 |
| CH3 | CH3 + / CH3 − | 3 |
같은 채널의 +와 −를 한 쌍으로 사용하십시오. 아래 그림은 연결 관계를 설명하는 개념도이며 제품 외형이나 단자의 실제 위치·간격을 나타내는 도면이 아닙니다. 실제 제품의 채널명과 극성을 우선 확인하십시오.
+에 연결합니다.−에 연결합니다.예를 들어 측정 범위가 0~30000 L/min이고 출력이 0~10V인 유량계는, CH0을 0~10V로 설정한 뒤 0~32767 원시값을 0~30000 L/min으로 환산합니다. 아래 실행 예제에서 같은 조건을 사용합니다.
해당 채널의 20mA와 GND를 ON으로 설정합니다. 전류 신호는 센서 제조사의 결선도에 따라 같은 채널의 +/−를 통해 전류가 흐르도록 연결해야 합니다.
2선식 루프 전원형 센서와 3·4선식 센서는 결선이 같지 않습니다. 센서의 전원 방식, 전류 출력의 극성, 출력 리턴을 먼저 확인하십시오. 신호원 사양을 모르는 상태에서 전압 입력 예제와 똑같이 연결하거나 채널 +/−에 전원 전압을 직접 인가하지 마십시오. 결선도가 없으면 센서 모델명과 자료를 확인한 후 연결하십시오.
0~20mA와 4~20mA는 하드웨어 스위치 설정이 같습니다. 차이는 프로그램에서 4mA를 측정 범위의 시작값으로 처리하는지 여부입니다. analogRead2()가 센서에 전류를 공급하거나 DIP 설정을 바꾸는 것은 아닙니다.
NTC와 GND를 ON으로 설정합니다.ntcReadf(ch)로 °C 값을 읽거나, ntcRead(ch)로 온도 × 10 정수를 읽습니다.PT100, 열전대, 전압 출력형 온도 트랜스미터는 이 NTC 설정의 대상이 아닙니다. 전압·전류 출력형 온도 트랜스미터는 출력 신호에 맞는 전압·전류 모드로 읽고 센서의 온도 범위로 환산하십시오.
각 X모듈의 전면에는 CH0~CH3가 반복해서 표시됩니다. 프로그램에서는 모듈마다 번호가 이어집니다.
| X모듈 순서 ※ | 전면 CH0 | 전면 CH1 | 전면 CH2 | 전면 CH3 |
|---|---|---|---|---|
| 첫 번째 | 0 | 1 | 2 | 3 |
| 두 번째 | 4 | 5 | 6 | 7 |
| 세 번째 | 8 | 9 | 10 | 11 |
| 네 번째 | 12 | 13 | 14 | 15 |
| 다섯 번째 | 16 | 17 | 18 | 19 |
※ X모듈만으로 구성한 경우의 논리 채널표입니다. 모듈 순서는 출고 구성 기준으로 확인하십시오.
예를 들어 X2 제품에서 두 번째 X모듈의 CH1을 읽으려면 analogRead(5)를 사용합니다. MPAINO에서는 모듈 논리 번호를 사용하며, 이 페이지의 0을 Arduino의 A0로 바꾸어 입력하지 마십시오. 디지털 입력 0번과 아날로그 입력 0번도 서로 다른 기능의 번호입니다.
최대 번호가 19라고 해서 모든 제품에 20채널이 설치되어 있는 것은 아닙니다. 실제 장착된 채널만 읽으십시오. 잘못된 번호나 미장착 채널의 반환값을 정상적인 센서값으로 사용해서는 안 됩니다.
Analog Input Module 메뉴가 있는 보드 패키지는 출고 구성에 맞는 X / X2 / X3 / X4 / X5를 선택합니다. 다른 옵션도 실제 구성과 일치시킵니다.
아래 예제는 각각 독립적인 Arduino 스케치입니다. 한 번에 하나의 예제만 사용하십시오. 현재 MPAINO 내장 명령어를 기준으로 하며, 별도 ILIB.h를 포함하거나 IADC 객체를 직접 만들 필요가 없습니다. 명령어가 선언되지 않았다는 오류가 나면 선택한 보드와 설치한 ILOGICS 보드 패키지를 확인하십시오.
첫 번째 X모듈의 CH0에 연결한 전압 또는 전류 신호를 읽습니다. 입력 방식은 DIP 스위치로 먼저 설정해야 합니다.
const uint8_t inputChannel = 0; void setup() { Serial.begin(115200); analogReadInit(IANALOG_SPS_64); } void loop() { const int raw = analogRead(inputChannel); Serial.print(F("CH0 raw = ")); Serial.println(raw); delay(200); }
| 설정된 입력 범위 | 시작 입력 | 중간 입력 | 끝 입력 |
|---|---|---|---|
| 0~5V | 0V → 약 0 | 2.5V → 약 16384 | 5V → 약 32767 |
| 0~10V | 0V → 약 0 | 5V → 약 16384 | 10V → 약 32767 |
| 0~20mA | 0mA → 약 0 | 10mA → 약 16384 | 20mA → 약 32767 |
| 4~20mA를 원시값으로 읽을 때 | 4mA → 약 6553 | 12mA → 약 19660 | 20mA → 약 32767 |
표는 이상적인 환산 기준이며 허용 오차 판정표가 아닙니다. 4mA에서 원시값이 0이 아닌 것은 정상입니다. 4mA를 0으로 맞추려면 예제 3을 참고하십시오. NTC는 이 선형 환산표가 아니라 전용 온도 명령어를 사용합니다.
조건: 첫 번째 X모듈 CH0, 10V=ON / 20mA=OFF / NTC=OFF / GND=ON, 센서 출력 0~10V, 측정 범위 0~30000 L/min입니다. 다른 센서라면 fullScaleFlow를 센서의 실제 범위에 맞추십시오.
const uint8_t inputChannel = 0; const float fullScaleFlow = 30000.0F; void setup() { Serial.begin(115200); analogReadInit(IANALOG_SPS_64); } void loop() { const int raw = analogRead(inputChannel); const float voltage = raw * (10.0F / 32767.0F); const float flow = raw * (fullScaleFlow / 32767.0F); Serial.print(F("Voltage = ")); Serial.print(voltage, 3); Serial.print(F(" V, Flow = ")); Serial.print(flow, 1); Serial.println(F(" L/min")); delay(200); }
5V 입력 시 계산상 약 15000 L/min입니다. 소수점 표시 자릿수를 늘려도 센서나 모듈의 정확도가 높아지는 것은 아닙니다.
| 목적 | 원시값 raw를 이용한 계산 |
|---|---|
| 0~5V 전압 | raw * (5.0F / 32767.0F) |
| 0~10V 전압 | raw * (10.0F / 32767.0F) |
| 0~20mA 전류 | raw * (20.0F / 32767.0F) |
| 0부터 시작하는 센서 측정량 | raw * (센서최대값 / 32767.0F) |
| 1~5V 센서의 범위 비율 | 먼저 voltage = raw * (5.0F / 32767.0F), 다음 ratio = (voltage - 1.0F) / 4.0F |
1~5V 센서의 물리량은 최소값 + ratio * (최대값 - 최소값)으로 환산합니다. ratio가 0 미만 또는 1 초과이면 범위를 벗어난 상태이므로 센서 사양에 따라 별도 처리하십시오. 무조건 0~1로 잘라 표시하면 이상 상태가 숨겨질 수 있습니다. analogRead2()는 4~20mA용이므로 1~5V 신호에 사용하지 마십시오.
계산 중 16bit 정수 오버플로를 피하도록 예제처럼 실수 상수를 사용하십시오. 예를 들어 raw * 30000을 먼저 정수로 계산한 뒤 나누는 방식은 피해야 합니다.
조건: 첫 번째 X모듈 CH0, 10V=OFF / 20mA=ON / NTC=OFF / GND=ON, 센서 출력 4~20mA, 측정 범위 0~10bar입니다. 센서의 실제 압력 범위가 다르면 fullScalePressure를 바꾸십시오.
analogRead2()는 4mA 오프셋을 처리하여 측정 범위를 0~32767로 환산합니다. 오류값 65535를 저장할 수 있도록 uint16_t로 받으십시오. AVR의 일반 int로 받지 마십시오.
const uint8_t inputChannel = 0; const float fullScalePressure = 10.0F; void setup() { Serial.begin(115200); analogReadInit(IANALOG_SPS_64); } void loop() { const uint16_t value = analogRead2(inputChannel); if (value == ANALOG_READ2_ERROR) { Serial.println(F("INPUT ERROR: check sensor, supply and wiring")); // 이 분기에서 측정값을 제어용 정상값으로 사용하지 마십시오. } else { const float pressure = value * (fullScalePressure / 32767.0F); Serial.print(F("Pressure = ")); Serial.print(pressure, 2); Serial.println(F(" bar")); } delay(200); }
현재 MPAINO 내장 명령어는 아래 기준으로 처리합니다. 이는 소프트웨어 판정 기준이며 센서의 진단 규격을 대신하지 않습니다.
| analogRead 기준 원시값 | analogRead2 결과 | 의미 |
|---|---|---|
| 5898 미만 | ANALOG_READ2_ERROR = 65535 | 약 3.6mA 미만에 해당하는 저입력 오류 |
| 5898~6554 | 0 | 4mA 부근 이하의 허용 구간을 시작값으로 처리 |
| 6554 초과~32767 | 0~32767로 환산 | 4~20mA 측정 범위의 비율 |
따라서 4mA보다 조금 작다고 항상 오류가 발생하는 것은 아닙니다. 오류가 나면 단선뿐 아니라 센서 전원, 극성, 모드 설정, 채널 번호도 확인하십시오. 정상 범위의 반환값만으로 배선 정상이나 과전류 없음이 보증되지는 않습니다. 안전 제어에는 설비에 맞는 별도 진단과 안전 대책이 필요합니다.
평균 명령어 analogRead2Avg()는 오류를 −1로 반환하므로 int32_t로 받고 ANALOG_READ2_AVG_ERROR와 비교합니다. 일반 읽기의 오류값 65535와 혼동하지 마십시오.
조건: 첫 번째 X모듈 CH0에 NTC 10kΩ(25°C), β3950 센서 연결, 10V=OFF / 20mA=OFF / NTC=ON / GND=ON입니다.
const uint8_t temperatureChannel = 0; void setup() { Serial.begin(115200); analogReadInit(IANALOG_SPS_64); } void loop() { const float temperature = ntcReadf(temperatureChannel); Serial.print(F("Temperature = ")); Serial.print(temperature, 1); Serial.println(F(" C")); delay(500); }
정수로 다루려면 int temperature10 = ntcRead(0);을 사용하십시오. 반환값 253은 25.3°C, -55는 −5.5°C입니다. ntcReadf()는 같은 결과를 °C 실수로 바꾸므로 더 높은 측정 분해능을 제공하는 별도 방식은 아닙니다.
현재 온도 환산표는 −40.0~120.0°C에서 값을 제한합니다. 이는 연결 센서와 완제품의 사용 온도 보증 범위가 아닙니다. 단선·단락에 대한 전용 오류코드를 반환하지 않으므로 끝값이 반복되면 실제 온도라고 단정하지 말고 센서와 배선을 확인하십시오. 잘못된 채널 번호의 0 반환도 정상 0°C와 구분할 수 없으므로 실제 장착 채널을 정확히 지정해야 합니다.
analogReadAvg(0, 8)은 CH0에서 새 값을 한 번 읽고, 최근 최대 8회 값을 평균합니다. 한 번 호출해서 8회를 연속 측정하는 명령어가 아닙니다. 반복 호출하면서 평균 이력이 쌓이며, 시작할 때는 실제로 모인 개수만 평균합니다.
void setup() { Serial.begin(115200); analogReadInit(IANALOG_SPS_64); } void loop() { const int32_t average = analogReadAvg(0, 8); Serial.println(average); delay(100); }
평균 개수는 최대 20입니다. 0은 평균하지 않은 새 값을 반환하고 20 초과는 20으로 제한됩니다. 평균을 늘리면 표시가 부드러워질 수 있지만 변화에 대한 응답도 느려집니다. 예제는 호출 간격이 약 100ms 이상이므로 충분히 쌓인 8개 값은 약 0.8초에 걸친 측정을 포함합니다. 먼저 배선과 신호원을 확인하고 필요한 만큼만 평균하십시오.
4~20mA는 analogRead2Avg()를 사용하고 오류 −1을 먼저 확인하십시오. 평균 필터는 이상 배선을 정상으로 만드는 기능이 아니며 메모리 확보에 실패하면 새 원시값으로 대체될 수 있습니다.
| 설정 상수 | 요청하는 읽기 목표 SPS |
|---|---|
IANALOG_SPS_8 / IANALOG_SPS_16 / IANALOG_SPS_32 | 8 / 16 / 32 |
IANALOG_SPS_64 | 64 — 초기 사용 예제의 기준 |
IANALOG_SPS_128 / IANALOG_SPS_250 / IANALOG_SPS_475 | 128 / 250 / 475 |
analogReadInit()을 생략한 기본 목표는 64 SPS입니다. 설정은 MPAINO 아날로그 입력 모듈들에 공통 적용됩니다. SPS는 초당 샘플 수를 뜻하며 모든 채널이 동시에 그 속도로 갱신된다는 의미는 아닙니다.
내부에서는 이전 채널의 변환값이 섞이지 않도록 한 번 읽을 때 두 번 변환합니다. 실제 속도에는 변환 대기, SPI 통신, 채널 수, 시리얼 출력, delay() 등이 영향을 줍니다. 특히 475 설정은 실제 475회/초를 보증하지 않습니다. 내부 최대 860 SPS에서 두 번 변환하므로 변환 시간만 고려해도 약 430회/초 이하이며 다른 처리 시간은 추가됩니다.
여러 채널을 순서대로 읽는 전체 갱신 시간은 각 읽기 시간을 합한 값입니다. 빠른 설정을 사용하기 전에 필요한 응답 시간과 값의 흔들림을 실제 입력 조건에서 확인하십시오.
| 증상 | 먼저 확인할 사항 |
|---|---|
| 값이 0 또는 매우 작음 | 센서 전원, 신호 유무, +/− 극성, 같은 채널 쌍인지, DIP 모드, 실제 장착 채널인지 확인 |
| 값이 최대 근처에서 고정됨 | 센서 출력 범위와 5V/10V 설정 일치 여부 확인. 포화된 값을 정상 최대 측정량으로 단정하지 않기 |
| 4mA인데 원시값이 약 6553임 | 정상적인 0~20mA 기준 원시값. 4mA 오프셋 처리가 필요하면 analogRead2() 사용 |
| 4~20mA 측정에서 65535가 나옴 | 저입력 오류 여부 확인. 압력·유량 환산 전에 오류 분기 처리 |
| 평균 명령어에서 −1이 나옴 | analogRead2Avg()의 오류값인지 확인. 정상 원시값과 혼합하여 평균하지 않기 |
| 두 번째 모듈 값이 예상과 다름 | 전면 CH0~CH3와 프로그램 4~7 구분. 출고 모듈 순서 확인 |
| 값이 계속 흔들림 | 센서 전원과 신호 리턴, 단자 체결, 주변 잡음원 확인 후 SPS와 이동 평균 조정 |
| NTC 온도가 크게 다름 | 10kΩ@25°C / β3950 규격, NTC 스위치와 GND 스위치, 채널 번호 확인 |
| NTC가 −40.0°C 또는 120.0°C 부근에 고정됨 | 환산표 끝값일 수 있으므로 센서 단선·단락과 연결 상태 확인. 끝값만으로 고장 종류를 판정하지 않기 |
| 명령어 컴파일 오류 | 실제 MPAINO 보드 선택과 ILOGICS 보드 패키지 설치 상태 확인. 구형 ILIB 예제와 내장 명령어를 무분별하게 섞지 않기 |
입력 범위를 넘는 신호를 연결하지 마십시오. 신호의 전원 방식, 공통 전위, 절연 필요 여부가 불명확하면 연결 전에 센서 자료와 설비 구성을 확인하십시오. 이 페이지의 예제는 측정값 확인용이며 설비의 안전 인터록을 구현하지 않습니다.
| 목적 | 상세 설명 |
|---|---|
| 원시값 읽기 / 속도 설정 | analogRead · analogReadInit |
| 이동 평균 | analogReadAvg · analogReadAvgf |
| 4~20mA 읽기 / 평균 | analogRead2 · analogRead2Avg · analogRead2Avgf |
| 4~20mA 물리량 환산 | IanalogRead2 · IanalogRead2f |
| NTC 온도 읽기 | ntcRead · ntcReadf |
| 제품 구성 / 배선 기본 | MPAINO Series · 배선 안내 |