사용자 도구

사이트 도구


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 입력 상태 읽기

시리얼 모니터를 115200 bps로 열면 입력 상태를 확인할 수 있습니다.

// MPINO-8A4T-S: P0~P7 입력 상태를 시리얼 모니터에 표시합니다.
void setup() {
  Serial.begin(115200);
  for (uint8_t pin = 0; pin < 8; pin++) pinMode(pin, INPUT);
}
 
void loop() {
  for (uint8_t pin = 0; pin < 8; pin++) {
    Serial.print('P');
    Serial.print(pin);
    Serial.print('=');
    Serial.print(digitalRead(pin));
    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 제어

P0~P3 입력이 ON되면 대응하는 P32~P35 출력이 ON됩니다. 표의 결선도처럼 외부 부하 전원을 연결합니다.

// MPINO-8A4T-S: P0~P3 입력으로 P32~P35 SINK 출력을 제어합니다.
void setup() {
  for (uint8_t channel = 0; channel < 4; channel++) {
    pinMode(channel, INPUT);
    digitalWrite(32 + channel, LOW);  // 출력 래치를 먼저 OFF로 설정
    pinMode(32 + channel, OUTPUT);
  }
}
 
void loop() {
  for (uint8_t channel = 0; channel < 4; channel++) {
    digitalWrite(32 + channel, digitalRead(channel));
  }
}

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

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

아날로그 입력을 사용할 때는 setup()에서 analogReference(EXTERNAL)을 설정합니다.

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

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

전압·전류·NTC 온도 읽기

A0~A5는 입력 범위에 맞춰 전압·전류로 환산하고, A6·A7은 NTC 10kΩ(B=3950)의 온도를 표시합니다. 시리얼 모니터는 115200 bps입니다.

#include <math.h>
 
// 보드 내장 10kΩ 풀업 + NTC 10kΩ(25°C), B=3950K
float ntcCelsius(int raw) {
  if (raw <= 0 || raw >= 1023) return NAN;
  const float resistance = 10000.0f * raw / (1023.0f - raw);
  const float kelvin = 1.0f / (log(resistance / 10000.0f) / 3950.0f
                             + 1.0f / 298.15f);
  return kelvin - 273.15f;
}
 
void setup() {
  analogReference(EXTERNAL);
  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++) {
    const int raw = analogRead(pins[channel]);
    Serial.print('A');
    Serial.print(channel);
    Serial.print(F(": "));
    if (channel < 2) {
      Serial.print(raw * (5.0f / 1023.0f), 3);
      Serial.println(F(" V"));
    } else if (channel < 4) {
      Serial.print(raw * (20.0f / 1023.0f), 3);
      Serial.println(F(" mA"));
    } else if (channel < 6) {
      Serial.print(raw * (10.0f / 1023.0f), 3);
      Serial.println(F(" V"));
    } else {
      const float temperature = ntcCelsius(raw);
      if (isnan(temperature) || temperature < -40 || temperature > 120) {
        Serial.println(F("CHECK SENSOR / RANGE"));
      } else {
        Serial.print(temperature, 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점 출력

PWM0~PWM2에 약 25%·50%·75% 듀티를 출력합니다.

// MPINO-8A4T-S: PWM0(D21), PWM1(D22), PWM2(D23)
void setup() {
  pinMode(21, OUTPUT);
  pinMode(22, OUTPUT);
  pinMode(23, OUTPUT);
  analogWrite(21, 64);   // 약 25% 듀티
  analogWrite(22, 128);  // 약 50% 듀티
  analogWrite(23, 191);  // 약 75% 듀티
}
 
void loop() {
}

CLK 펄스 카운트

CLK(D24)의 상승 에지를 인터럽트로 셉니다. 이 소프트웨어 예제는 입력 사양의 최대 50kHz 처리를 보장하는 예제가 아닙니다.

#include <util/atomic.h>
 
volatile uint32_t pulseCount = 0;
 
void countPulse() {
  pulseCount++;
}
 
void setup() {
  Serial.begin(115200);
  pinMode(CLK, INPUT);  // 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)에 연결합니다. A상 상승 에지만 세는 1배 카운트 예제입니다.

#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);
  pinMode(CLK, INPUT);  // 엔코더 A상 → CLK(D24)
  pinMode(DIO, INPUT);  // 엔코더 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로 선택합니다. 아래 코드는 각각 별도 스케치로 실행합니다.

USB 시리얼 ↔ RS-232

MP 다운로드 케이블로 업로드한 뒤 시리얼 모니터를 115200 bps로 엽니다. RS-232 상대 기기는 9600 bps, 8-N-1로 설정합니다. 입력 문자를 양방향으로 전달합니다.

// 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 연결 기기 주소 확인

Wire를 사용해 연결된 기기의 7비트 주소를 찾습니다. 시리얼 모니터는 115200 bps이며, D18·D19는 이 예제에서 I²C 전용으로 사용합니다.

#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.1788762547.txt.gz · 마지막으로 수정됨: 저자 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki