사용자 도구

사이트 도구


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);
}

트랜지스터 출력

단자 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));
  }
}

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

채널 입력 종류 입력 범위 커넥터 핀 배열
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);
}

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);
}

통신과 다운로드

기능 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);
}

← MPINO Series 비교표로 돌아가기

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

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki