사용자 도구

사이트 도구


products:mpino_8a4t_s

문서의 이전 판입니다!


MPINO-8A4T-S

MPINO-8A4T-S는 디지털 입력 8점과 SINK 트랜지스터 출력 4점을 갖춘 일체형 산업용 아두이노입니다. 전압·전류 아날로그 입력, NTC 온도센서 입력, PWM, 고속 입력과 RS-232 통신 기능을 한 장의 PCB에 구성했습니다.

Arduino IDE(Arduino C/C++) 또는 MPINO STUDIO 2(Arduino C/C++ & 래더로직)로 프로그램할 수 있습니다.

MPINO-8A4T-S 커넥터 안내

제품 사양서

구분 개수 접점명 사양
전원 - 전원전압 DC 12~24V (DC 24V 사용 시 0.5A 이상)
디지털 입력 8점
(무접점·절연)
P0~P7 동작 입력 전압: DC 0~40V
HIGH 인식 전압: DC 5V 이상
8점/1COM
NPN·PNP 입력 지원
트랜지스터 출력 4점
(무접점·절연)
P32~P35 출력 방식: SINK 출력
출력 동작: ON 시 V-와 연결
최대 출력 허용 전류: 1A/1점
부하 전압: DC 0~100V
V+·V- 단자에 부하 전원 연결
아날로그 입력 2점
(비절연)
A0, A1 입력 전압: DC 0~5V
분해능: 10bit (0~1023)
입력저항: 100MΩ (±1%)
아날로그 입력 2점
(비절연)
A2, A3 입력 전류: 0~20mA 또는 4~20mA
분해능: 0~20mA는 10bit (0~1023), 4~20mA는 0~818
입력저항: 250Ω (±1%)
아날로그 입력 2점
(비절연)
A4, A5 입력 전압: DC 0~10V
분해능: 10bit (0~1023)
입력저항: 200kΩ (±1%)
온도센서 입력 2점
(비절연)
NTEMP
A6, A7
입력 온도: -40~120℃
센서: NTC 3950K, 10kΩ(25℃)
분해능: 0.1℃ (0~40℃ 기준)
인터럽트
고속카운터·엔코더
4점
(비절연)
D24(CLK), D25(DIO)
D18(SCL), D19(SDA)
입력 전압: DC 0~5V
HIGH 인식 전압: DC 3V 이상
입력 주파수: 최대 50kHz
D24·D25: 4.7kΩ 풀업 내장
D18·D19: 4.7kΩ 풀업 내장
펄스 출력 3점
(비절연)
PWM
D21, D22, D23
출력 전압: LOW(DC 0V), HIGH(DC 5V)
최대 출력 전류: 30mA
통신 채널 1채널
(비절연)
I²C I²C 마스터·슬레이브 지원
인터럽트 포트로 사용 가능 (4.7kΩ 풀업)
RS-232 Serial1 사용
Modbus RTU Master & Slave 내장 명령어 지원
LS산전 Cnet 내장 명령어 지원
메모리 - Flash 128KB
SRAM 4KB
EEPROM 4KB

디지털 입력

단자 Arduino 핀 입력 구성 단자대 및 결선 예시
P0~P3 D0~D3 디지털 입력 4점, COM0 공유 MPINO-8A4T-S 디지털 입력 단자대와 NPN·PNP 결선
P4~P7 D4~D7 디지털 입력 4점, COM1 공유

디지털 입력은 포토커플러로 절연되어 있으며 DC 5~24V의 NPN 또는 PNP 입력을 연결할 수 있습니다. 입력 방식은 COM 결선 방향으로 선택합니다.

예제 프로그램 · 디지털 입력

Arduino IDE에서 보드를 MPINO-8A4R(T)-S로 선택합니다. 아래 코드는 각각 별도 스케치로 실행합니다.

기본 예제

P0~P7 입력 상태 읽기

IdigitalRead(pin, 5)로 입력을 5회 연속 판독하고 200ms마다 P0~P7 상태를 시리얼 모니터에 표시합니다. 5회 값이 모두 같으면 상태를 갱신하고, 섞여 있으면 이전 상태를 유지합니다. NPN·PNP에 맞는 COM0·COM1 결선은 위 그림을 따릅니다.

// MPINO-8A4T-S: P0~P7 입력 상태를 시리얼 모니터에 표시합니다.
void setup() {
  Serial.begin(115200);
}
 
void loop() {
  for (uint8_t pin = 0; pin < 8; pin++) {
    Serial.print('P');
    Serial.print(pin);
    Serial.print('=');
    Serial.print(IdigitalRead(pin, 5));  // 5회 판독이 일치하면 상태 갱신
    Serial.print(' ');
  }
  Serial.println();
  delay(200);
}

관련 내장함수 · 기본 함수

함수 이름을 누르면 설명과 독립 실행 예제가 펼쳐집니다.

함수 예제 · IdigitalRead()

ILOGICS 내장 함수: IdigitalRead(pin, samples)는 입력 핀을 지정 횟수만큼 연속 판독하여 bool 값을 반환합니다. 이 예제는 P0을 5회 읽으며, 모두 HIGH 또는 모두 LOW이면 상태를 갱신하고 섞여 있으면 이전 상태를 유지합니다. 판독 사이에 시간 지연을 넣는 방식은 아닙니다.

void setup() {
  Serial.begin(115200);
}
 
void loop() {
  const bool inputOn = IdigitalRead(0, 5);
  Serial.println(inputOn ? F("P0 ON") : F("P0 OFF"));
  delay(200);
}

트랜지스터 출력

단자 Arduino 핀 출력 방식 최대 정격 단자대 및 결선 예시
P32 D32 SINK 출력 DC 100V, 1A/1점 MPINO-8A4T-S 트랜지스터 출력 단자대와 SINK 결선
P33 D33 SINK 출력 DC 100V, 1A/1점
P34 D34 SINK 출력 DC 100V, 1A/1점
P35 D35 SINK 출력 DC 100V, 1A/1점

트랜지스터 출력은 ON될 때 출력 단자가 V-와 연결되는 SINK 방식입니다. V+와 V- 단자에는 제어할 부하의 외부 DC 전원을 연결합니다.

예제 프로그램 · 트랜지스터 출력

Arduino IDE에서 보드를 MPINO-8A4R(T)-S로 선택합니다. 아래 코드는 각각 별도 스케치로 실행합니다.

기본 예제

P0~P3 입력으로 P32~P35 출력 제어

IdigitalRead(channel, 5)로 읽은 입력을 P0→P32, P1→P33, P2→P34, P3→P35로 대응시킵니다. 5회 연속 판독이 일치하면 상태를 갱신합니다. HIGH일 때 출력이 V-와 연결됩니다. 부하의 다른 쪽은 V+에 연결하고, 부하 전원은 출력을 OFF한 상태에서 공급합니다.

// MPINO-8A4T-S: P0~P3 입력으로 P32~P35 SINK 출력을 제어합니다.
void setup() {
  for (uint8_t channel = 0; channel < 4; channel++) {
    digitalWrite(32 + channel, LOW);  // 출력을 OFF로 시작
  }
}
 
void loop() {
  for (uint8_t channel = 0; channel < 4; channel++) {
    digitalWrite(32 + channel, IdigitalRead(channel, 5));
  }
}

관련 내장함수 · 기본 함수

함수 이름을 누르면 설명과 독립 실행 예제가 펼쳐집니다.

함수 예제 · digitalWrite()

Arduino 기본 함수: digitalWrite(pin, value)는 지정 출력 핀에 HIGH 또는 LOW를 쓰며 반환값이 없습니다. MPINO-8A4T-S의 P32~P35는 HIGH일 때 부하의 출력 단자를 V-에 연결합니다. 예제는 P0 입력으로 P32를 제어합니다. 부하의 다른 쪽은 V+에 연결하며, 부하 전원은 출력이 OFF인 상태에서 공급합니다.

void setup() {
  digitalWrite(32, LOW);
}
 
void loop() {
  const bool inputOn = IdigitalRead(0, 5);
  digitalWrite(32, inputOn ? HIGH : LOW);
  delay(10);
}

아날로그 입력ㆍ온도센서 입력

채널 입력 종류 입력 범위 커넥터 핀 배열
A0, A1 전압 입력 DC 0~5V MPINO-8A4T-S 아날로그·온도 입력 커넥터 핀 배열
A2, A3 전류 입력 0~20mA 또는 4~20mA
A4, A5 전압 입력 DC 0~10V
A6, A7 NTC 온도센서 입력 NTC 10kΩ, 3950K

예제 프로그램 · 아날로그 입력ㆍ온도센서 입력

Arduino IDE에서 보드를 MPINO-8A4R(T)-S로 선택합니다. 아래 코드는 각각 별도 스케치로 실행합니다.

기본 예제

전압·전류와 NTC 온도 읽기

IanalogReadf()로 A0·A1은 V(0~5V), A2·A3은 mA(0~20mA), A4·A5는 V(0~10V)를 표시하고, ntcReadf()로 A6·A7의 섭씨 온도를 읽습니다. 4~20mA 입력도 실제 전류값을 읽으므로 환산 범위는 0~20mA를 사용합니다. NTC 10kΩ(25℃), B=3950K를 A6 또는 A7과 GND 사이에 연결합니다. ntcReadf()는 범위 밖 값을 -40~120℃의 끝값으로 제한하므로 센서 단선·단락을 별도로 판정하지 않습니다. 정밀 측정에는 외부 DC 전원을 사용합니다.

void setup() {
  Serial.begin(115200);
}
 
void loop() {
  const uint8_t pins[] = {A0, A1, A2, A3, A4, A5, A6, A7};
  for (uint8_t channel = 0; channel < 8; channel++) {
    Serial.print('A');
    Serial.print(channel);
    Serial.print(F(": "));
    if (channel < 2) {
      Serial.print(IanalogReadf(pins[channel], 0.0f, 5.0f), 3);
      Serial.println(F(" V"));
    } else if (channel < 4) {
      Serial.print(IanalogReadf(pins[channel], 0.0f, 20.0f), 3);
      Serial.println(F(" mA"));
    } else if (channel < 6) {
      Serial.print(IanalogReadf(pins[channel], 0.0f, 10.0f), 3);
      Serial.println(F(" V"));
    } else {
      Serial.print(ntcReadf(pins[channel]), 1);
      Serial.println(F(" C"));
    }
  }
  Serial.println();
  delay(1000);
}

관련 내장함수 · 기본 함수

함수 이름을 누르면 설명과 독립 실행 예제가 펼쳐집니다.

함수 예제 · IanalogReadf()

ILOGICS 내장 함수: IanalogReadf(ch, min, max)는 ADC 입력을 min~max 범위의 float 값으로 환산합니다. 이 제품의 A0·A1은 0~5V, A2·A3은 0~20mA, A4·A5는 0~10V에 해당합니다. 4~20mA 센서도 실제 전류를 읽을 때는 0~20으로 환산합니다. 예제는 A0 전압과 A2 전류를 표시합니다.

void setup() {
  Serial.begin(115200);
}
 
void loop() {
  const float voltage = IanalogReadf(A0, 0.0f, 5.0f);
  const float current = IanalogReadf(A2, 0.0f, 20.0f);
  Serial.print(F("A0: "));
  Serial.print(voltage, 2);
  Serial.print(F(" V, A2: "));
  Serial.print(current, 2);
  Serial.println(F(" mA"));
  delay(500);
}

함수 예제 · ntcReadf()

ILOGICS 내장 함수: ntcReadf(ch)는 NTC 입력의 섭씨 온도를 float 값으로 반환합니다. NTC 10kΩ(25℃), B=3950K 센서를 A6 또는 A7과 GND 사이에 연결합니다. 예제는 A6을 읽습니다. 범위 밖 값은 -40~120℃의 끝값으로 제한되므로 센서 단선·단락을 별도로 판정하지 않습니다.

void setup() {
  Serial.begin(115200);
}
 
void loop() {
  const float temperature = ntcReadf(A6);
  Serial.print(F("NTC0: "));
  Serial.print(temperature, 1);
  Serial.println(F(" C"));
  delay(500);
}

PWM·고속 입력

기능 Arduino 핀 점수 커넥터 핀 배열
PWM 출력 D21, D22, D23 3점 MPINO-8A4T-S PWM 출력 커넥터 핀 배열
고속 입력·인터럽트 D18, D19, D24, D25 4점
엔코더 입력 D24, D25 2점

D18과 D19는 I²C의 SCL·SDA 기능을 공유합니다. I²C 통신을 사용하는 동안에는 해당 핀을 고속 입력으로 동시에 사용할 수 없습니다.

예제 프로그램 · PWM·고속 입력

Arduino IDE에서 보드를 MPINO-8A4R(T)-S로 선택합니다. 아래 코드는 각각 별도 스케치로 실행합니다.

기본 예제

PWM 3채널 출력

FDPWM(핀, 주파수Hz, 듀티%)으로 PWM0·PWM1·PWM2에 1kHz, 약 25%·50%·75% 듀티를 출력합니다. 세 출력은 Timer3를 공유하므로 주파수를 동일하게 지정합니다. DC 5V 신호 입력 기기의 GND와 보드 GND를 연결합니다.

// MPINO-8A4T-S: PWM0(D21), PWM1(D22), PWM2(D23)
void setup() {
  FDPWM(21, 1000, 25.0f);  // PWM0: 1kHz, 25% 듀티
  FDPWM(22, 1000, 50.0f);  // PWM1: 1kHz, 50% 듀티
  FDPWM(23, 1000, 75.0f);  // PWM2: 1kHz, 75% 듀티
}
 
void loop() {
}

CLK 펄스 카운트

CLK(D24)의 상승 에지를 누적합니다. 신호는 DC 0~5V이며 신호원의 GND를 보드 GND에 연결합니다. 다른 입력을 쓰려면 CLK를 DIO, SCL 또는 SDA로 바꿀 수 있습니다. SCL·SDA를 입력으로 쓰는 동안 Wire 통신은 사용하지 않습니다. 이 예제는 소프트웨어 인터럽트 방식이므로 제품의 최대 입력 주파수에서 무손실 계수를 보장하는 성능 예제가 아닙니다.

#include <util/atomic.h>
 
volatile uint32_t pulseCount = 0;
 
void countPulse() {
  pulseCount++;
}
 
void setup() {
  Serial.begin(115200);
  // CLK = D24, 내장 풀업 사용
  attachInterrupt(digitalPinToInterrupt(CLK), countPulse, RISING);
}
 
void loop() {
  uint32_t snapshot;
  ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
    snapshot = pulseCount;
  }
  Serial.print(F("CLK pulses: "));
  Serial.println(snapshot);
  delay(500);
}

CLK·DIO 엔코더 방향 판별

A상은 CLK(D24), B상은 DIO(D25)에 연결하며 1배 카운트합니다. 신호는 DC 0~5V이고 GND를 공통으로 연결합니다. 표시 방향이 반대라면 A·B 결선 또는 증감 방향을 바꿉니다. 32비트 값은 인터럽트를 잠시 막고 읽어 깨진 값이 출력되지 않도록 합니다.

#include <util/atomic.h>
#include <stdint.h>
 
volatile int32_t position = 0;
 
void readEncoder() {
  // A상 상승 시 B상에 따라 방향 판별 (1배 카운트)
  if (digitalRead(DIO) == HIGH) {
    if (position < INT32_MAX) position++;
  } else {
    if (position > INT32_MIN) position--;
  }
}
 
void setup() {
  Serial.begin(115200);
  // 엔코더 A상 → CLK(D24), B상 → DIO(D25)
  attachInterrupt(digitalPinToInterrupt(CLK), readEncoder, RISING);
}
 
void loop() {
  int32_t snapshot;
  ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
    snapshot = position;
  }
  Serial.print(F("Encoder: "));
  Serial.println(snapshot);
  delay(500);
}

관련 내장함수 · 기본 함수

함수 이름을 누르면 설명과 독립 실행 예제가 펼쳐집니다.

함수 예제 · FDPWM()

ILOGICS 내장 함수: FDPWM(pin, frequencyHz, dutyPercent)는 PWM 주파수(Hz)와 듀티(%)를 설정하며 반환값이 없습니다. PWM0·PWM1·PWM2는 각각 D21·D22·D23입니다. 세 출력이 Timer3를 공유하므로 함께 사용할 때는 같은 주파수를 지정합니다. 예제는 PWM0에 1kHz, 50% 듀티를 출력합니다.

void setup() {
  FDPWM(21, 1000, 50.0f);
}
 
void loop() {
}

함수 예제 · attachInterrupt()

Arduino 기본 함수: attachInterrupt(digitalPinToInterrupt(pin), ISR, mode)는 입력 변화에 실행할 함수를 등록하며 반환값이 없습니다. 예제는 CLK(D24)의 상승 에지(RISING)를 누적하고 32비트 카운트를 원자적으로 읽습니다. 입력은 DC 0~5V이며 GND를 공통으로 연결합니다. 소프트웨어 인터럽트 예제로, 제품 최대 입력 주파수에서 무손실 계수를 보장하는 예제는 아닙니다.

#include <util/atomic.h>
 
volatile uint32_t pulseCount = 0;
 
void onPulse() {
  pulseCount++;
}
 
void setup() {
  Serial.begin(115200);
  attachInterrupt(digitalPinToInterrupt(CLK), onPulse, RISING);
}
 
void loop() {
  uint32_t count;
  ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
    count = pulseCount;
  }
  Serial.println(count);
  delay(500);
}

통신과 다운로드

기능 Arduino 핀 사용 객체 상대 기기 결선
USB 다운로드·모니터링 D16(RX0), D17(TX0) Serial MPINO-8A4T-S 통신 커넥터와 상대 기기 결선
RS-232 D28(RX1), D29(TX1) Serial1
I²C D18(SCL), D19(SDA) Wire

예제 프로그램 · 통신과 다운로드

Arduino IDE에서 보드를 MPINO-8A4R(T)-S로 선택합니다. 아래 코드는 각각 별도 스케치로 실행합니다.

기본 예제

시리얼 모니터 ↔ RS-232 문자 전송

시리얼 모니터에 입력한 문자를 Serial1로 보내고, 상대 기기의 수신 문자를 모니터에 표시합니다. RS-232 상대 기기는 9600 bps, 8-N-1로 설정하고 TX↔RX 및 GND를 연결합니다. 간단한 문자 확인용이며 Modbus·Cnet 프로토콜 예제는 아닙니다. USB 쪽에서 상대 기기가 처리할 수 있는 속도보다 빠르게 연속 전송하면 수신 버퍼가 넘칠 수 있습니다.

// MP 다운로드 케이블의 Serial 모니터 ↔ RS-232 Serial1
void setup() {
  Serial.begin(115200);
  Serial1.begin(9600);  // 상대 기기도 9600 bps, 8-N-1 설정
}
 
void loop() {
  if (Serial.available() && Serial1.availableForWrite()) {
    Serial1.write(Serial.read());
  }
  if (Serial1.available() && Serial.availableForWrite()) {
    Serial.write(Serial1.read());
  }
}

I²C 장치 주소 확인

GND·SDA·SCL을 연결한 장치의 7비트 주소를 3초마다 검색합니다. 5V 단자는 5V를 지원하는 장치의 전원에만 연결합니다. I²C 사용 중에는 D18·D19에 고속 입력 인터럽트를 함께 설정하지 않습니다.

#include <Wire.h>
 
void setup() {
  Serial.begin(115200);
  Wire.begin();
  Wire.setClock(100000);
}
 
void loop() {
  uint8_t found = 0;
  for (uint8_t address = 0x08; address <= 0x77; address++) {
    Wire.beginTransmission(address);
    const uint8_t result = Wire.endTransmission();
    if (result == 0) {
      Serial.print(F("I2C: 0x"));
      if (address < 16) Serial.print('0');
      Serial.println(address, HEX);
      found++;
    }
  }
  Serial.print(F("Devices: "));
  Serial.println(found);
  delay(3000);
}

관련 내장함수 · 기본 함수

함수 이름을 누르면 설명과 독립 실행 예제가 펼쳐집니다.

함수 예제 · Serial.begin() · available() · read() · write()

Arduino 기본 Serial 함수: begin(baud)는 통신 속도를 설정합니다. available()은 수신 대기 바이트 수, read()는 수신한 한 바이트(없으면 -1), write(data)는 전송 버퍼에 기록한 바이트 수를 반환합니다. availableForWrite()로 전송 버퍼 여유를 확인합니다. Serial은 다운로드 케이블의 시리얼 모니터(115200 bps), Serial1은 RS-232(9600 bps, 8-N-1)에 사용합니다. TX↔RX와 GND를 연결합니다. 아래는 문자 중계 예제이며 지속적인 대량 전송에서는 수신 버퍼가 넘칠 수 있습니다.

void setup() {
  Serial.begin(115200);
  Serial1.begin(9600);
}
 
void loop() {
  if (Serial.available() && Serial1.availableForWrite()) {
    Serial1.write(Serial.read());
  }
  if (Serial1.available() && Serial.availableForWrite()) {
    Serial.write(Serial1.read());
  }
}

함수 예제 · Wire.beginTransmission() · endTransmission()

Arduino 기본 Wire 라이브러리: Wire.begin()으로 I²C를 시작합니다. beginTransmission(address)는 7비트 주소의 장치로 전송을 준비하고, endTransmission()은 전송을 실행한 뒤 결과를 반환합니다(0이면 성공). 아래는 0x08~0x77 주소의 응답을 확인합니다. GND·SDA·SCL을 연결하고 5V 전원은 5V 지원 장치에만 사용합니다. I²C 사용 중에는 D18·D19의 고속 입력 인터럽트를 함께 사용하지 않습니다.

#include <Wire.h>
 
void setup() {
  Serial.begin(115200);
  Wire.begin();
  Wire.setClock(100000);
}
 
void loop() {
  for (uint8_t address = 0x08; address <= 0x77; address++) {
    Wire.beginTransmission(address);
    const uint8_t result = Wire.endTransmission();
    if (result == 0) {
      Serial.print(F("I2C: 0x"));
      if (address < 16) Serial.print('0');
      Serial.println(address, HEX);
    }
  }
  delay(3000);
}

← MPINO Series 비교표로 돌아가기

products/mpino_8a4t_s.1788765595.txt.gz · 마지막으로 수정됨: 저자 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki