Conexión de múltiples esclavos SPI a un M-Duino PLC

Cómo conectar y programar un M-Duino PLC maestro que se comunica con dos PLCs esclavos SPI
15 de junio de 2026 por
Conexión de múltiples esclavos SPI a un M-Duino PLC
Boot & Work Corp. S.L, Bernat Brunet Pedra

SPI (Serial Peripheral Interface) es un protocolo de comunicación serie síncrono utilizado habitualmente para conectar un dispositivo maestro a uno o varios periféricos. Comparado con I2C, SPI es más rápido y sencillo: en lugar de usar direcciones de dispositivo, utiliza un cable dedicado de Chip Select (CS) por esclavo para seleccionar con qué dispositivo comunicarse. Este artículo muestra cómo conectar un M-Duino PLC maestro a dos M-Duino PLC esclavos mediante SPI y controlar sus salidas digitales desde el maestro.

Qué necesitas

  • Tres M-Duino PLC (uno maestro, dos esclavos)
  • Fuente de alimentación

Cableado del bus SPI

Los tres PLCs comparten MISO (50 SO), MOSI (51 SI) y SCK (52 SCK) en el mismo bus. Cada esclavo tiene su propio pin de Chip Select dedicado conectado al maestro:

Diagrama de cableado SPI maestro y dos esclavos M-Duino PLC

En este ejemplo, el maestro usa el Pin 2 como CS_1 (para el esclavo 1) y el Pin 3 como CS_2 (para el esclavo 2). Consulta la guía del usuario de tu M-Duino para conocer todos los pines CS disponibles en tu modelo.

Sketch del maestro

El maestro alterna entre activar el esclavo 1 y el esclavo 2 cada segundo enviando un byte (1 = HIGH, 0 = LOW) al esclavo seleccionado mediante su pin de Chip Select.

#include <SPI.h>

#define CS_1 2
#define CS_2 3

void setup() {
  pinMode(CS_1, OUTPUT);
  pinMode(CS_2, OUTPUT);
  SPI.begin();
}

void send_order(uint8_t CS, uint8_t action) {
  digitalWrite(CS, LOW);
  SPI.transfer(0);
  SPI.transfer(action);
  digitalWrite(CS, HIGH);
}

void loop() {
  send_order(CS_1, 1);
  send_order(CS_2, 0);
  delay(1000);

  send_order(CS_1, 0);
  send_order(CS_2, 1);
  delay(1000);
}

La función send_order() baja el pin CS seleccionado a LOW, transfiere un byte ficticio seguido del byte de acción y luego libera CS a HIGH. Enviar 1 pone la salida del esclavo en HIGH; enviar 0 la pone en LOW.

Sketch del esclavo

Ambos esclavos ejecutan el mismo código. El esclavo escucha los datos SPI entrantes mediante una rutina de servicio de interrupción (ISR) y escribe el byte recibido directamente en la salida Q0_0.

#include <SPI.h>

#define CS 2

void setup() {
  pinMode(CS, INPUT_PULLUP);
  SPCR |= _BV(SPE);      // Habilita SPI en modo esclavo
  SPI.attachInterrupt(); // Habilita la interrupción SPI
}

ISR(SPI_STC_vect) {
  digitalWrite(Q0_0, SPDR); // Escribe el byte recibido en la salida
}

SPCR |= _BV(SPE) activa el bit SPI Enable del registro de control SPI, configurando el dispositivo como esclavo. SPI.attachInterrupt() habilita la interrupción de transferencia SPI completa. Cada vez que el maestro envía un byte, la ISR se dispara y escribe SPDR (el registro de datos SPI) en Q0_0.

Enviar datos de vuelta al maestro

Si un esclavo necesita devolver datos al maestro, modifica SPDR dentro de la ISR antes de que se complete la transferencia:

ISR(SPI_STC_vect) {
  if (SPDR == 1) {
    SPDR = 10;
  } else {
    SPDR = 20;
  }
}

Buscar en nuestro blog

Conexión de múltiples esclavos SPI a un M-Duino PLC
Boot & Work Corp. S.L, Bernat Brunet Pedra 15 de junio de 2026
Compartir esta publicación

¿Estás buscando tu Controlador Lógico Programable ideal?

Echa un vistazo a esta comparativa de producto de varios controladores industriales basados en Arduino.

Comparamos entradas, salidas, comunicaciones y otras especificaciones con las de los equipos de otras marcas destacadas.

Comparativa de PLCs